1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-07-17 01:32:21 +02:00

* minor changes to code handling cartographer (next time please make more documentation of your code, especially interfaces and especially when it's not consistent with the rest of the engine (map level description in this case) )

This commit is contained in:
mateuszb
2009-08-20 10:30:00 +00:00
parent de886abc0e
commit 9c45f050ef
3 changed files with 24 additions and 23 deletions

View File

@ -4179,18 +4179,14 @@ void CCartographer::buyMap (const CGHeroInstance *h, ui32 accept) const
cb->giveResource (h->tempOwner, 6, -1000);
FoWChange fw;
fw.player = h->tempOwner;
int floor, surface = 0;
int surface = 0;
if (cb->getTile(pos)->tertype == 8) //water
surface = 2;
else
surface = 1;
if (pos.z == 0) //ground
floor = 1;
else
floor = 2;
//reveal apropriate tiles
cb->getAllTiles (fw.tiles, h->tempOwner, floor, surface);
cb->getAllTiles (fw.tiles, h->tempOwner, pos.z, surface);
cb->sendAndApply (&fw);
cb->setObjProperty (id, 10, h->tempOwner);
}

View File

@ -114,31 +114,36 @@ void IGameCallback::getTilesInRange( std::set<int3> &tiles, int3 pos, int radiou
}
}
void IGameCallback::getAllTiles (std::set<int3> &tiles, int player/*=-1*/, int floor, int surface )
void IGameCallback::getAllTiles (std::set<int3> &tiles, int player/*=-1*/, int level, int surface )
{
if(player >= PLAYER_LIMIT)
{
tlog1 << "Illegal call to getTilesInRange!\n";
return;
}
bool water = false, land = false;
if (surface == 0 || surface == 2)
water = true;
if (surface == 0 || surface == 1)
land = true;
std::set<int> floors;
if (floor==1 || floor == 0) // ground
floors.insert(0);
if (floor==2 || floor == 0) // undergroundground
floors.insert(1);
for (std::set<int>::iterator i = floors.begin(); i!= floors.end(); i++)
bool water = surface == 0 || surface == 2,
land = surface == 0 || surface == 1;
std::vector<int> floors;
if(level == -1)
{
for (int xd = 0; xd <= gs->map->width - 1; xd++)
for(int b=0; b<gs->map->twoLevel + 1; ++b) //if gs->map->twoLevel is false then false (0) + 1 is 1, if it's true (1) then we have 2
{
for (int yd = 0; yd <= gs->map->height - 1; yd++)
floors.push_back(b);
}
}
else
floors.push_back(level);
for (std::vector<int>::const_iterator i = floors.begin(); i!= floors.end(); i++)
{
for (int xd = 0; xd < gs->map->width; xd++)
{
for (int yd = 0; yd < gs->map->height; yd++)
{
if ((getTile (int3 (xd,yd,*i))->tertype == 8 && water == true)
|| (getTile (int3 (xd,yd,*i))->tertype != 8 && land == true))
if ( (getTile (int3 (xd,yd,*i))->tertype == 8 && water == true)
|| (getTile (int3 (xd,yd,*i))->tertype != 8 && land == true)
)
tiles.insert(int3(xd,yd,*i));
}
}

View File

@ -54,7 +54,7 @@ public:
virtual const PlayerSettings * getPlayerSettings(int color);
virtual int getHeroCount(int player, bool includeGarrisoned);
virtual void getTilesInRange(std::set<int3> &tiles, int3 pos, int radious, int player=-1, int mode=0); //mode 1 - only unrevealed tiles; mode 0 - all, mode -1 - only unrevealed
virtual void getAllTiles (std::set<int3> &tiles, int player=-1, int floor=0, int surface=0);
virtual void getAllTiles (std::set<int3> &tiles, int player=-1, int level=-1, int surface=0); //returns all tiles on given level (-1 - both levels, otherwise number of level); surface: 0 - land and water, 1 - only land, 2 - only water
virtual bool isAllowed(int type, int id); //type: 0 - spell; 1- artifact
virtual void getAllowedArts(std::vector<CArtifact*> &out, std::vector<CArtifact*> CArtHandler::*arts);
virtual void getAllowed(std::vector<CArtifact*> &out, int flags); //flags: bitfield uses EartClass