AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
PoolGroup< T > Class Template Reference

#include "PoolMgr.h"

Public Member Functions

 PoolGroup ()
 
void SetPoolId (uint32 pool_id)
 
 ~PoolGroup ()
 
bool IsEmpty () const
 
void AddEntry (PoolObject &poolitem, uint32 maxentries)
 
bool CheckPool () const
 
void DespawnObject (ActivePoolData &spawns, ObjectGuid::LowType guid=0)
 
void Despawn1Object (ObjectGuid::LowType guid)
 
void SpawnObject (ActivePoolData &spawns, uint32 limit, uint32 triggerFrom)
 
void Spawn1Object (PoolObject *obj)
 
void ReSpawn1Object (PoolObject *obj)
 
void RemoveOneRelation (uint32 child_pool_id)
 
uint32 GetFirstEqualChancedObjectId ()
 
uint32 GetPoolId () const
 

Private Types

typedef std::vector< PoolObjectPoolObjectList
 

Private Attributes

uint32 poolId
 
PoolObjectList ExplicitlyChanced
 
PoolObjectList EqualChanced
 

Detailed Description

template<class T>
class PoolGroup< T >

Member Typedef Documentation

◆ PoolObjectList

template<class T >
typedef std::vector<PoolObject> PoolGroup< T >::PoolObjectList
private

Constructor & Destructor Documentation

◆ PoolGroup()

template<class T >
PoolGroup< T >::PoolGroup ( )
inlineexplicit
72: poolId(0) { }
uint32 poolId
Definition PoolMgr.h:93

◆ ~PoolGroup()

template<class T >
PoolGroup< T >::~PoolGroup ( )
inline
74{};

Member Function Documentation

◆ AddEntry()

template<class T >
void PoolGroup< T >::AddEntry ( PoolObject poolitem,
uint32  maxentries 
)
134{
135 if (poolitem.chance != 0 && maxentries == 1)
136 ExplicitlyChanced.push_back(poolitem);
137 else
138 EqualChanced.push_back(poolitem);
139}
PoolObjectList ExplicitlyChanced
Definition PoolMgr.h:94
PoolObjectList EqualChanced
Definition PoolMgr.h:95
float chance
Definition PoolMgr.h:34

References PoolObject::chance.

Referenced by PoolMgr::LoadFromDB().

◆ CheckPool()

template<class T >
bool PoolGroup< T >::CheckPool ( ) const
144{
145 if (EqualChanced.empty())
146 {
147 float chance = 0;
148 for (uint32 i = 0; i < ExplicitlyChanced.size(); ++i)
149 chance += ExplicitlyChanced[i].chance;
150 if (chance != 100 && chance != 0)
151 return false;
152 }
153 return true;
154}
std::uint32_t uint32
Definition Define.h:107

◆ Despawn1Object()

template<class T >
void PoolGroup< T >::Despawn1Object ( ObjectGuid::LowType  guid)

◆ DespawnObject()

template<class T >
void PoolGroup< T >::DespawnObject ( ActivePoolData spawns,
ObjectGuid::LowType  guid = 0 
)
161{
162 for (std::size_t i = 0; i < EqualChanced.size(); ++i)
163 {
164 // if spawned
165 if (spawns.IsActiveObject<T>(EqualChanced[i].guid))
166 {
167 if (!guid || EqualChanced[i].guid == guid)
168 {
170 spawns.RemoveObject<T>(EqualChanced[i].guid, poolId);
171 }
172 }
173 }
174
175 for (std::size_t i = 0; i < ExplicitlyChanced.size(); ++i)
176 {
177 // spawned
178 if (spawns.IsActiveObject<T>(ExplicitlyChanced[i].guid))
179 {
180 if (!guid || ExplicitlyChanced[i].guid == guid)
181 {
183 spawns.RemoveObject<T>(ExplicitlyChanced[i].guid, poolId);
184 }
185 }
186 }
187}
bool IsActiveObject(uint32 db_guid_or_pool_id) const
void RemoveObject(uint32 db_guid_or_pool_id, uint32 pool_id)
void Despawn1Object(ObjectGuid::LowType guid)

References ActivePoolData::IsActiveObject(), and ActivePoolData::RemoveObject().

◆ GetFirstEqualChancedObjectId()

template<class T >
uint32 PoolGroup< T >::GetFirstEqualChancedObjectId ( )
inline
86 {
87 if (EqualChanced.empty())
88 return 0;
89 return EqualChanced.front().guid;
90 }

References PoolGroup< T >::EqualChanced.

◆ GetPoolId()

template<class T >
uint32 PoolGroup< T >::GetPoolId ( ) const
inline
91{ return poolId; }

References PoolGroup< T >::poolId.

◆ IsEmpty()

template<class T >
bool PoolGroup< T >::IsEmpty ( ) const
inline

◆ RemoveOneRelation()

template<class T >
void PoolGroup< T >::RemoveOneRelation ( uint32  child_pool_id)

◆ ReSpawn1Object()

template<class T >
void PoolGroup< T >::ReSpawn1Object ( PoolObject obj)

◆ SetPoolId()

template<class T >
void PoolGroup< T >::SetPoolId ( uint32  pool_id)
inline
73{ poolId = pool_id; }

References PoolGroup< T >::poolId.

Referenced by PoolMgr::LoadFromDB().

◆ Spawn1Object()

template<class T >
void PoolGroup< T >::Spawn1Object ( PoolObject obj)

◆ SpawnObject()

template<class T >
void PoolGroup< T >::SpawnObject ( ActivePoolData spawns,
uint32  limit,
uint32  triggerFrom 
)
307{
308 int count = limit - spawns.GetActiveObjectCount(poolId);
309
310 // If triggered from some object respawn this object is still marked as spawned
311 // and also counted into m_SpawnedPoolAmount so we need increase count to be
312 // spawned by 1
313 if (triggerFrom)
314 {
315 ++count;
316 }
317
318 if (count > 0)
319 {
320 PoolObjectList rolledObjects;
321 rolledObjects.reserve(count);
322
323 // roll objects to be spawned
324 if (!ExplicitlyChanced.empty())
325 {
326 float roll = (float)rand_chance();
327
328 for (PoolObject& obj : ExplicitlyChanced)
329 {
330 roll -= obj.chance;
331
332 // Triggering object is marked as spawned at this time and can be also rolled (respawn case)
333 // so this need explicit check for this case
334 if (roll < 0 && (obj.guid == triggerFrom || !spawns.IsActiveObject<T>(obj.guid)))
335 {
336 rolledObjects.push_back(obj);
337 break;
338 }
339 }
340 }
341
342 if (!EqualChanced.empty() && rolledObjects.empty())
343 {
344 std::copy_if(EqualChanced.begin(), EqualChanced.end(), std::back_inserter(rolledObjects), [triggerFrom, &spawns](PoolObject const& object)
345 {
346 return object.guid == triggerFrom || !spawns.IsActiveObject<T>(object.guid);
347 });
348
349 Acore::Containers::RandomResize(rolledObjects, count);
350 }
351
352 // try to spawn rolled objects
353 for (PoolObject& obj : rolledObjects)
354 {
355 if (obj.guid == triggerFrom)
356 {
357 ReSpawn1Object(&obj);
358 triggerFrom = 0;
359 }
360 else
361 {
362 spawns.ActivateObject<T>(obj.guid, poolId);
363 Spawn1Object(&obj);
364 }
365 }
366 }
367
368 // One spawn one despawn no count increase
369 if (triggerFrom)
370 {
371 DespawnObject(spawns, triggerFrom);
372 }
373}
double rand_chance()
Definition Random.cpp:83
uint32 GetActiveObjectCount(uint32 pool_id) const
Definition PoolMgr.cpp:30
void ActivateObject(uint32 db_guid_or_pool_id, uint32 pool_id)
void ReSpawn1Object(PoolObject *obj)
void DespawnObject(ActivePoolData &spawns, ObjectGuid::LowType guid=0)
Definition PoolMgr.cpp:160
void Spawn1Object(PoolObject *obj)
std::vector< PoolObject > PoolObjectList
Definition PoolMgr.h:70
void RandomResize(C &container, std::size_t requestedSize)
Definition Containers.h:79
Definition PoolMgr.h:32

References ActivePoolData::ActivateObject(), ActivePoolData::GetActiveObjectCount(), ActivePoolData::IsActiveObject(), rand_chance(), and Acore::Containers::RandomResize().

Member Data Documentation

◆ EqualChanced

template<class T >
PoolObjectList PoolGroup< T >::EqualChanced
private

◆ ExplicitlyChanced

template<class T >
PoolObjectList PoolGroup< T >::ExplicitlyChanced
private

Referenced by PoolGroup< T >::IsEmpty().

◆ poolId

template<class T >
uint32 PoolGroup< T >::poolId
private

The documentation for this class was generated from the following files: