Combat with distant creatures

Iterate creatures in combat with players during map update, and also visit
their cells if greater than player visibility distance away.
This commit is contained in:
pete318 authored and r00ty committed 2015-09-23 22:03:27 +02:00
1 parent a3dbb0dd9c
commit 3c188ac10e
1 file changed
+20
+20
View File
@@ -678,6 +678,26 @@ void Map::Update(const uint32 t_diff)
player->Update(t_diff);
VisitNearbyCellsOf(player, grid_object_update, world_object_update);
// Handle updates for creatures in combat with player and are more than 60 yards away
if (player->IsInCombat())
{
std::vector<Creature*> updateList;
HostileReference* ref = player->getHostileRefManager().getFirst();
while (ref)
{
if (Unit* unit = ref->GetSource()->GetOwner())
if (unit->ToCreature() && unit->GetMapId() == player->GetMapId() && !unit->IsWithinDistInMap(player, GetVisibilityRange(), false))
updateList.push_back(unit->ToCreature());
ref = ref->next();
}
// Process deferred update list for player
for (Creature* c : updateList)
VisitNearbyCellsOf(c, grid_object_update, world_object_update);
}
}
// non-player active objects, increasing iterator in the loop in case of object removal