32 _spawns[phaseId].Objects.insert(
object);
37 for (
auto& [_, spawns] :
_spawns)
38 spawns.Objects.erase(
object);
46 for (
auto& [phaseId, spawns] :
_spawns)
47 if (!spawns.DurationRemaining && !phaseShift.
HasPhase(phaseId))
53 spawns->DurationRemaining.reset();
58 for (
auto& [_, spawns] :
_spawns)
66 if (itr->second.DurationRemaining)
68 itr->second.DurationRemaining = *itr->second.DurationRemaining -
Milliseconds(diff);
69 if (itr->second.DurationRemaining <= Milliseconds::zero())
83 return spawns->Grids.find(gridId) != spawns->Grids.cend();
91 group.
Grids.insert(gridId);
98 itr->second.Grids.erase(gridId);
99 if (itr->second.IsEmpty())
112 spawns.
Grids.clear();
129 if (!phaseRef.IsPersonal())
138 TC_LOG_DEBUG(
"maps",
"Loading personal phase objects (phase {}) in grid[{}, {}] for map {} instance {}",
141 loader.
Load(phaseRef.Id);
154 itr->second.SetGridUnloaded(grid.
GetGridId());
155 if (itr->second.IsEmpty())
168 _playerData[phaseOwner].RegisterTrackedObject(phaseId,
object);
174 playerTracker->UnregisterTrackedObject(
object);
180 playerTracker->OnOwnerPhasesChanged(phaseOwner);
189 playerTracker->MarkAllPhasesForDeletion();
196 itr->second.Update(map, diff);
197 if (itr->second.IsEmpty())
std::chrono::milliseconds Milliseconds
Milliseconds shorthand typedef.
#define TC_LOG_DEBUG(filterType__,...)
void AddObjectToRemoveList(WorldObject *obj)
Difficulty GetDifficultyID() const
uint32 GetInstanceId() const
uint32 GetGridId(void) const
uint32 GetLoadedGameObjects() const
static ObjectGuid GetGUID(Object const *o)
void Load(uint32 phaseId)
bool HasPhase(uint32 phaseId) const
PhaseContainer const & GetPhases() const
bool HasPersonalPhase() const
ObjectGuid GetPersonalGuid() const
PhaseShift & GetPhaseShift()
auto MapGetValuePtr(M &map, typename M::key_type const &key)
void Update(Map *map, uint32 diff)
std::unordered_map< ObjectGuid, PlayerPersonalPhasesTracker > _playerData
void MarkAllPhasesForDeletion(ObjectGuid const &phaseOwner)
void RegisterTrackedObject(uint32 phaseId, ObjectGuid const &phaseOwner, WorldObject *object)
void LoadGrid(PhaseShift const &phaseShift, NGridType &grid, Map *map, Cell const &cell)
void UnregisterTrackedObject(WorldObject *object)
void UnloadGrid(NGridType &grid)
void OnOwnerPhaseChanged(WorldObject const *phaseOwner, NGridType *grid, Map *map, Cell const &cell)
static constexpr Milliseconds DELETE_TIME_DEFAULT
std::unordered_set< WorldObject * > Objects
std::unordered_set< uint16 > Grids
void UnregisterTrackedObject(WorldObject *object)
void SetGridLoadedForPhase(uint32 gridId, uint32 phaseId)
void MarkAllPhasesForDeletion()
void RegisterTrackedObject(uint32 phaseId, WorldObject *object)
bool IsGridLoadedForPhase(uint32 gridId, uint32 phaseId) const
void Update(Map *map, uint32 diff)
void OnOwnerPhasesChanged(WorldObject const *owner)
void SetGridUnloaded(uint32 gridId)
std::unordered_map< uint32, PersonalPhaseSpawns > _spawns
void DespawnPhase(Map *map, PersonalPhaseSpawns &spawns)