diff options
Diffstat (limited to 'src/game/Map.cpp')
| -rw-r--r-- | src/game/Map.cpp | 32 |
1 files changed, 25 insertions, 7 deletions
diff --git a/src/game/Map.cpp b/src/game/Map.cpp index d40c341fd47..6bbefa8b0a0 100644 --- a/src/game/Map.cpp +++ b/src/game/Map.cpp @@ -269,6 +269,15 @@ void Map::AddToGrid(Creature* obj, NGridType *grid, Cell const& cell) obj->SetCurrentCell(cell); } +template<> +void Map::AddToGrid(DynamicObject* obj, NGridType *grid, Cell const& cell) +{ + if(obj->isActiveObject()) // only farsight + (*grid)(cell.CellX(), cell.CellY()).AddWorldObject<DynamicObject>(obj, obj->GetGUID()); + else + (*grid)(cell.CellX(), cell.CellY()).AddGridObject<DynamicObject>(obj, obj->GetGUID()); +} + template<class T> void Map::RemoveFromGrid(T* obj, NGridType *grid, Cell const& cell) { @@ -311,6 +320,15 @@ void Map::RemoveFromGrid(Creature* obj, NGridType *grid, Cell const& cell) } } +template<> +void Map::RemoveFromGrid(DynamicObject* obj, NGridType *grid, Cell const& cell) +{ + if(obj->isActiveObject()) // only farsight + (*grid)(cell.CellX(), cell.CellY()).RemoveWorldObject<DynamicObject>(obj, obj->GetGUID()); + else + (*grid)(cell.CellX(), cell.CellY()).RemoveGridObject<DynamicObject>(obj, obj->GetGUID()); +} + template<class T> void Map::SwitchGridContainers(T* obj, bool apply) { @@ -321,18 +339,18 @@ void Map::SwitchGridContainers(T* obj, bool apply) if(apply) { - assert(!grid.GetWorldObject(obj->GetGUID(), obj)); + if(!grid.RemoveGridObject<T>(obj, obj->GetGUID()) + || !grid.AddWorldObject<T>(obj, obj->GetGUID())) { - grid.RemoveGridObject<T>(obj, obj->GetGUID()); - grid.AddWorldObject<T>(obj, obj->GetGUID()); + assert(false); } } else { - assert(!grid.GetGridObject(obj->GetGUID(), obj)); + if(!grid.RemoveWorldObject<T>(obj, obj->GetGUID()) + || !grid.AddGridObject<T>(obj, obj->GetGUID())) { - grid.RemoveWorldObject<T>(obj, obj->GetGUID()); - grid.AddGridObject<T>(obj, obj->GetGUID()); + assert(false); } } } @@ -428,7 +446,7 @@ void Map::LoadGrid(float x, float y) { CellPair pair = Trinity::ComputeCellPair(x, y); Cell cell(pair); - EnsureGridLoaded(cell, NULL); + EnsureGridLoaded(cell); } bool Map::Add(Player *player) |
