mirror of
https://github.com/vcmi/vcmi.git
synced 2025-06-15 00:05:02 +02:00
Remove pointer to objects from TerrainTile
This commit is contained in:
@ -143,15 +143,10 @@ bool TerrainTile::isClear(const TerrainTile * from) const
|
||||
return entrableTerrain(from) && !blocked();
|
||||
}
|
||||
|
||||
Obj TerrainTile::topVisitableId(bool excludeTop) const
|
||||
{
|
||||
return topVisitableObj(excludeTop) ? topVisitableObj(excludeTop)->ID : Obj(Obj::NO_OBJ);
|
||||
}
|
||||
|
||||
CGObjectInstance * TerrainTile::topVisitableObj(bool excludeTop) const
|
||||
ObjectInstanceID TerrainTile::topVisitableObj(bool excludeTop) const
|
||||
{
|
||||
if(visitableObjects.empty() || (excludeTop && visitableObjects.size() == 1))
|
||||
return nullptr;
|
||||
return {};
|
||||
|
||||
if(excludeTop)
|
||||
return visitableObjects[visitableObjects.size()-2];
|
||||
@ -202,10 +197,10 @@ void CMap::removeBlockVisTiles(CGObjectInstance * obj, bool total)
|
||||
{
|
||||
TerrainTile & curt = terrain[zVal][xVal][yVal];
|
||||
if(total || obj->visitableAt(int3(xVal, yVal, zVal)))
|
||||
curt.visitableObjects -= obj;
|
||||
curt.visitableObjects -= obj->id;
|
||||
|
||||
if(total || obj->blockingAt(int3(xVal, yVal, zVal)))
|
||||
curt.blockingObjects -= obj;
|
||||
curt.blockingObjects -= obj->id;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -224,10 +219,10 @@ void CMap::addBlockVisTiles(CGObjectInstance * obj)
|
||||
{
|
||||
TerrainTile & curt = terrain[zVal][xVal][yVal];
|
||||
if(obj->visitableAt(int3(xVal, yVal, zVal)))
|
||||
curt.visitableObjects.push_back(obj);
|
||||
curt.visitableObjects.push_back(obj->id);
|
||||
|
||||
if(obj->blockingAt(int3(xVal, yVal, zVal)))
|
||||
curt.blockingObjects.push_back(obj);
|
||||
curt.blockingObjects.push_back(obj->id);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -300,12 +295,12 @@ bool CMap::checkForVisitableDir(const int3 & src, const TerrainTile * pom, const
|
||||
{
|
||||
if (!pom->entrableTerrain()) //rock is never accessible
|
||||
return false;
|
||||
for(auto * obj : pom->visitableObjects) //checking destination tile
|
||||
for(const auto & objID : pom->visitableObjects) //checking destination tile
|
||||
{
|
||||
if(!vstd::contains(pom->blockingObjects, obj)) //this visitable object is not blocking, ignore
|
||||
if(!vstd::contains(pom->blockingObjects, objID)) //this visitable object is not blocking, ignore
|
||||
continue;
|
||||
|
||||
if (!obj->appearance->isVisitableFrom(src.x - dst.x, src.y - dst.y))
|
||||
if (!getObject(objID)->appearance->isVisitableFrom(src.x - dst.x, src.y - dst.y))
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
@ -320,9 +315,10 @@ int3 CMap::guardingCreaturePosition (int3 pos) const
|
||||
const TerrainTile &posTile = getTile(pos);
|
||||
if (posTile.visitable())
|
||||
{
|
||||
for (CGObjectInstance* obj : posTile.visitableObjects)
|
||||
for (const auto & objID : posTile.visitableObjects)
|
||||
{
|
||||
if (obj->ID == Obj::MONSTER)
|
||||
const auto * object = getObject(objID);
|
||||
if (object->ID == Obj::MONSTER)
|
||||
return pos;
|
||||
}
|
||||
}
|
||||
@ -340,12 +336,11 @@ int3 CMap::guardingCreaturePosition (int3 pos) const
|
||||
const auto & tile = getTile(pos);
|
||||
if (tile.visitable() && (tile.isWater() == water))
|
||||
{
|
||||
for (CGObjectInstance* obj : tile.visitableObjects)
|
||||
for (const auto & objID : tile.visitableObjects)
|
||||
{
|
||||
if (obj->ID == Obj::MONSTER && checkForVisitableDir(pos, &posTile, originalPos)) // Monster being able to attack investigated tile
|
||||
{
|
||||
const auto * object = getObject(objID);
|
||||
if (object->ID == Obj::MONSTER && checkForVisitableDir(pos, &posTile, originalPos)) // Monster being able to attack investigated tile
|
||||
return pos;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -361,8 +356,9 @@ int3 CMap::guardingCreaturePosition (int3 pos) const
|
||||
|
||||
const CGObjectInstance * CMap::getObjectiveObjectFrom(const int3 & pos, Obj type)
|
||||
{
|
||||
for (CGObjectInstance * object : getTile(pos).visitableObjects)
|
||||
for(const auto & objID : getTile(pos).visitableObjects)
|
||||
{
|
||||
const auto * object = getObject(objID);
|
||||
if (object->ID == type)
|
||||
return object;
|
||||
}
|
||||
|
Reference in New Issue
Block a user