mirror of
https://github.com/vcmi/vcmi.git
synced 2025-01-12 02:28:11 +02:00
Further refactoring: merged terrain and undergroundTerrain in Mapa.
This commit is contained in:
parent
08b6796545
commit
add34b26ed
@ -213,7 +213,7 @@ void CPathfinder::CalcH(Coordinate* node)
|
||||
y = CGI->mh->map->height-1;
|
||||
|
||||
//Get the movement cost.
|
||||
ret = Hero->getTileCost(CGI->mh->ttiles[x][y][node->z].tileInfo->tertype, CGI->mh->map->terrain[x][y].malle,CGI->mh->map->terrain[x][y].nuine);
|
||||
ret = Hero->getTileCost(CGI->mh->ttiles[x][y][node->z].tileInfo->tertype, CGI->mh->map->terrain[x][y][0].malle,CGI->mh->map->terrain[x][y][0].nuine);
|
||||
|
||||
node->h = ret;
|
||||
}
|
||||
|
48
map.cpp
48
map.cpp
@ -451,14 +451,12 @@ void Mapa::initFromBytes(unsigned char * bufor)
|
||||
areAnyPLayers = readChar(bufor,i); //invalid on some maps
|
||||
height = width = (readNormalNr(bufor,i)); i+=4; // wymiary mapy
|
||||
twoLevel = readChar(bufor,i); //czy sa lochy
|
||||
terrain = new TerrainTile*[width]; // allocate memory
|
||||
terrain = new TerrainTile**[width]; // allocate memory
|
||||
for (int ii=0;ii<width;ii++)
|
||||
terrain[ii] = new TerrainTile[height]; // allocate memory
|
||||
if (twoLevel)
|
||||
{
|
||||
undergroungTerrain = new TerrainTile*[width]; // allocate memory
|
||||
for (int ii=0;ii<width;ii++)
|
||||
undergroungTerrain[ii] = new TerrainTile[height]; // allocate memory
|
||||
terrain[ii] = new TerrainTile*[height]; // allocate memory
|
||||
for(int jj=0;jj<=height;jj++)
|
||||
terrain[ii][jj] = new TerrainTile[twoLevel+1];
|
||||
}
|
||||
int pom;
|
||||
name = readString(bufor,i);
|
||||
@ -919,15 +917,15 @@ void Mapa::initFromBytes(unsigned char * bufor)
|
||||
{
|
||||
for (int z=0; z<height; z++)
|
||||
{
|
||||
terrain[z][c].tertype = (EterrainType)(bufor[i++]);
|
||||
terrain[z][c].terview = bufor[i++];
|
||||
terrain[z][c].nuine = (Eriver)bufor[i++];
|
||||
terrain[z][c].rivDir = bufor[i++];
|
||||
terrain[z][c].malle = (Eroad)bufor[i++];
|
||||
terrain[z][c].roadDir = bufor[i++];
|
||||
terrain[z][c].siodmyTajemniczyBajt = bufor[i++];
|
||||
terrain[z][c].blocked = 0;
|
||||
terrain[z][c].visitable = 0;
|
||||
terrain[z][c][0].tertype = (EterrainType)(bufor[i++]);
|
||||
terrain[z][c][0].terview = bufor[i++];
|
||||
terrain[z][c][0].nuine = (Eriver)bufor[i++];
|
||||
terrain[z][c][0].rivDir = bufor[i++];
|
||||
terrain[z][c][0].malle = (Eroad)bufor[i++];
|
||||
terrain[z][c][0].roadDir = bufor[i++];
|
||||
terrain[z][c][0].siodmyTajemniczyBajt = bufor[i++];
|
||||
terrain[z][c][0].blocked = 0;
|
||||
terrain[z][c][0].visitable = 0;
|
||||
}
|
||||
}
|
||||
if (twoLevel) // read underground terrain
|
||||
@ -936,15 +934,15 @@ void Mapa::initFromBytes(unsigned char * bufor)
|
||||
{
|
||||
for (int z=0; z<height; z++)
|
||||
{
|
||||
undergroungTerrain[z][c].tertype = (EterrainType)(bufor[i++]);
|
||||
undergroungTerrain[z][c].terview = bufor[i++];
|
||||
undergroungTerrain[z][c].nuine = (Eriver)bufor[i++];
|
||||
undergroungTerrain[z][c].rivDir = bufor[i++];
|
||||
undergroungTerrain[z][c].malle = (Eroad)bufor[i++];
|
||||
undergroungTerrain[z][c].roadDir = bufor[i++];
|
||||
undergroungTerrain[z][c].siodmyTajemniczyBajt = bufor[i++];
|
||||
undergroungTerrain[z][c].blocked = 0;
|
||||
undergroungTerrain[z][c].visitable = 0;
|
||||
terrain[z][c][1].tertype = (EterrainType)(bufor[i++]);
|
||||
terrain[z][c][1].terview = bufor[i++];
|
||||
terrain[z][c][1].nuine = (Eriver)bufor[i++];
|
||||
terrain[z][c][1].rivDir = bufor[i++];
|
||||
terrain[z][c][1].malle = (Eroad)bufor[i++];
|
||||
terrain[z][c][1].roadDir = bufor[i++];
|
||||
terrain[z][c][1].siodmyTajemniczyBajt = bufor[i++];
|
||||
terrain[z][c][1].blocked = 0;
|
||||
terrain[z][c][1].visitable = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -2309,7 +2307,7 @@ borderguardend:
|
||||
int zVal = objects[f]->pos.z;
|
||||
if(xVal>=0 && xVal<width && yVal>=0 && yVal<height)
|
||||
{
|
||||
TerrainTile & curt = (zVal) ? (undergroungTerrain[xVal][yVal]) : (terrain[xVal][yVal]);
|
||||
TerrainTile & curt = terrain[xVal][yVal][zVal];
|
||||
if(((objects[f]->defInfo->visitMap[fy] >> (7 - fx)) & 1))
|
||||
{
|
||||
curt.visitableObjects.push_back(objects[f]);
|
||||
|
3
map.h
3
map.h
@ -462,8 +462,7 @@ struct DLL_EXPORT Mapa
|
||||
std::string name; //name of map
|
||||
std::string description; //and description
|
||||
int height, width;
|
||||
TerrainTile** terrain;
|
||||
TerrainTile** undergroungTerrain; // used only if there is underground level
|
||||
TerrainTile*** terrain;
|
||||
std::vector<Rumor> rumors;
|
||||
std::vector<DisposedHero> disposedHeroes;
|
||||
std::vector<CGHeroInstance*> predefinedHeroes;
|
||||
|
@ -229,7 +229,7 @@ void CMapHandler::roadsRiverTerrainInit()
|
||||
{
|
||||
TerrainTile2 &pom(ttiles[i][j][k]);
|
||||
pom.pos = int3(i, j, k);
|
||||
pom.tileInfo = &( k ? map->undergroungTerrain[i][j] : map->terrain[i][j] );
|
||||
pom.tileInfo = &(map->terrain[i][j][k]);
|
||||
if(pom.tileInfo->malle)
|
||||
{
|
||||
int cDir;
|
||||
@ -267,33 +267,16 @@ void CMapHandler::roadsRiverTerrainInit()
|
||||
{
|
||||
for(int k=0; k<=map->twoLevel; ++k)
|
||||
{
|
||||
TerrainTile** pomm = map->terrain;
|
||||
if(k==0)
|
||||
{
|
||||
pomm = map->terrain;
|
||||
}
|
||||
else
|
||||
{
|
||||
pomm = map->undergroungTerrain;
|
||||
}
|
||||
if(pomm[i][j].nuine)
|
||||
if(map->terrain[i][j][k].nuine)
|
||||
{
|
||||
int cDir;
|
||||
bool rotH, rotV;
|
||||
if(k==0)
|
||||
{
|
||||
ttiles[i][j][k].rivbitmap.push_back(staticRiverDefs[map->terrain[i][j].nuine-1]->ourImages[map->terrain[i][j].rivDir].bitmap);
|
||||
cDir = map->terrain[i][j].rivDir;
|
||||
rotH = (map->terrain[i][j].siodmyTajemniczyBajt >> 3) & 1;
|
||||
rotV = (map->terrain[i][j].siodmyTajemniczyBajt >> 2) & 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
ttiles[i][j][k].rivbitmap.push_back(staticRiverDefs[map->undergroungTerrain[i][j].nuine-1]->ourImages[map->undergroungTerrain[i][j].rivDir].bitmap);
|
||||
cDir = map->undergroungTerrain[i][j].rivDir;
|
||||
rotH = (map->undergroungTerrain[i][j].siodmyTajemniczyBajt >> 3) & 1;
|
||||
rotV = (map->undergroungTerrain[i][j].siodmyTajemniczyBajt >> 2) & 1;
|
||||
}
|
||||
|
||||
ttiles[i][j][k].rivbitmap.push_back(staticRiverDefs[map->terrain[i][j][k].nuine-1]->ourImages[map->terrain[i][j][k].rivDir].bitmap);
|
||||
cDir = map->terrain[i][j][k].rivDir;
|
||||
rotH = (map->terrain[i][j][k].siodmyTajemniczyBajt >> 3) & 1;
|
||||
rotV = (map->terrain[i][j][k].siodmyTajemniczyBajt >> 2) & 1;
|
||||
|
||||
if(rotH)
|
||||
{
|
||||
ttiles[i][j][k].rivbitmap[0] = CSDL_Ext::hFlip(ttiles[i][j][k].rivbitmap[0]);
|
||||
@ -372,9 +355,9 @@ void CMapHandler::borderAndTerrainBitmapInit()
|
||||
//TerrainTile zz = map->terrain[i-Woff][j-Hoff];
|
||||
std::string name;
|
||||
if (k>0)
|
||||
name = nameFromType(map->undergroungTerrain[i][j].tertype);
|
||||
name = nameFromType(map->terrain[i][j][1].tertype);
|
||||
else
|
||||
name = nameFromType(map->terrain[i][j].tertype);
|
||||
name = nameFromType(map->terrain[i][j][0].tertype);
|
||||
for (unsigned int m=0; m<defs.size(); m++)
|
||||
{
|
||||
try
|
||||
@ -385,15 +368,15 @@ void CMapHandler::borderAndTerrainBitmapInit()
|
||||
{
|
||||
int ktora;
|
||||
if (k==0)
|
||||
ktora = map->terrain[i][j].terview;
|
||||
ktora = map->terrain[i][j][0].terview;
|
||||
else
|
||||
ktora = map->undergroungTerrain[i][j].terview;
|
||||
ktora = map->terrain[i][j][1].terview;
|
||||
ttiles[i][j][k].terbitmap.push_back(defs[m]->ourImages[ktora].bitmap);
|
||||
int zz;
|
||||
if (k==0)
|
||||
zz = (map->terrain[i][j].siodmyTajemniczyBajt)%4;
|
||||
zz = (map->terrain[i][j][0].siodmyTajemniczyBajt)%4;
|
||||
else
|
||||
zz = (map->undergroungTerrain[i][j].siodmyTajemniczyBajt)%4;
|
||||
zz = (map->terrain[i][j][1].siodmyTajemniczyBajt)%4;
|
||||
switch (zz)
|
||||
{
|
||||
case 1:
|
||||
@ -1380,16 +1363,16 @@ void CMapHandler::loadDefs()
|
||||
{
|
||||
for (int j=0; j<map->width; j++)
|
||||
{
|
||||
if (loadedTypes.find(map->terrain[i][j].tertype)==loadedTypes.end())
|
||||
if (loadedTypes.find(map->terrain[i][j][0].tertype)==loadedTypes.end())
|
||||
{
|
||||
CDefHandler *sdh = CDefHandler::giveDef(nameFromType(map->terrain[i][j].tertype).c_str());
|
||||
loadedTypes.insert(map->terrain[i][j].tertype);
|
||||
CDefHandler *sdh = CDefHandler::giveDef(nameFromType(map->terrain[i][j][0].tertype).c_str());
|
||||
loadedTypes.insert(map->terrain[i][j][0].tertype);
|
||||
defs.push_back(sdh);
|
||||
}
|
||||
if (map->twoLevel && loadedTypes.find(map->undergroungTerrain[i][j].tertype)==loadedTypes.end())
|
||||
if (map->twoLevel && loadedTypes.find(map->terrain[i][j][1].tertype)==loadedTypes.end())
|
||||
{
|
||||
CDefHandler *sdh = CDefHandler::giveDef(nameFromType(map->undergroungTerrain[i][j].tertype).c_str());
|
||||
loadedTypes.insert(map->undergroungTerrain[i][j].tertype);
|
||||
CDefHandler *sdh = CDefHandler::giveDef(nameFromType(map->terrain[i][j][1].tertype).c_str());
|
||||
loadedTypes.insert(map->terrain[i][j][1].tertype);
|
||||
defs.push_back(sdh);
|
||||
}
|
||||
}
|
||||
|
@ -49,7 +49,7 @@ void CGameHandler::handleConnection(std::set<int> players, CConnection &c)
|
||||
si32 id;
|
||||
c >> id >> start >> end;
|
||||
int3 hmpos = end + int3(-1,0,0);
|
||||
TerrainTile t = (hmpos.z) ? (gs->map->undergroungTerrain[hmpos.x][hmpos.y]) : (gs->map->terrain[hmpos.x][hmpos.y]);
|
||||
TerrainTile t = gs->map->terrain[hmpos.x][hmpos.y][hmpos.z];
|
||||
CGHeroInstance *h = static_cast<CGHeroInstance *>(gs->map->objects[id]);
|
||||
int cost = (double)h->getTileCost(t.tertype,t.malle,t.nuine) * distance(start,end);
|
||||
|
||||
@ -103,7 +103,7 @@ void CGameHandler::handleConnection(std::set<int> players, CConnection &c)
|
||||
{
|
||||
tmh.result = 1;
|
||||
|
||||
BOOST_FOREACH(CGObjectInstance *obj, ((start.z) ? (gs->map->undergroungTerrain[start.x][start.y]) : (gs->map->terrain[start.x][start.y])).visitableObjects)
|
||||
BOOST_FOREACH(CGObjectInstance *obj, gs->map->terrain[start.x][start.y][start.z].visitableObjects)
|
||||
{
|
||||
//TODO: allow to handle this in script-languages
|
||||
if(obj->state) //hard-coded function
|
||||
|
Loading…
Reference in New Issue
Block a user