diff options
author | mgueydan <gueydan.mathieuÃ@gmail.com> | 2013-09-07 22:19:56 +0200 |
---|---|---|
committer | mgueydan <gueydan.mathieuÃ@gmail.com> | 2013-09-07 22:19:56 +0200 |
commit | d2eb58f27780a3c65fedd0d21d152ee8866ebb86 (patch) | |
tree | 05160377f78b97b4916956eebfd07f8a830a8916 /source/MobCensus.h | |
parent | Adding a getType in Monster that return an enum instead of an int or char (diff) | |
download | cuberite-d2eb58f27780a3c65fedd0d21d152ee8866ebb86.tar cuberite-d2eb58f27780a3c65fedd0d21d152ee8866ebb86.tar.gz cuberite-d2eb58f27780a3c65fedd0d21d152ee8866ebb86.tar.bz2 cuberite-d2eb58f27780a3c65fedd0d21d152ee8866ebb86.tar.lz cuberite-d2eb58f27780a3c65fedd0d21d152ee8866ebb86.tar.xz cuberite-d2eb58f27780a3c65fedd0d21d152ee8866ebb86.tar.zst cuberite-d2eb58f27780a3c65fedd0d21d152ee8866ebb86.zip |
Diffstat (limited to 'source/MobCensus.h')
-rw-r--r-- | source/MobCensus.h | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/source/MobCensus.h b/source/MobCensus.h new file mode 100644 index 000000000..32e608324 --- /dev/null +++ b/source/MobCensus.h @@ -0,0 +1,58 @@ + +#pragma once + +#include "MobProximityCounter.h" +#include "MobFamilyCollecter.h" + +class cChunk; +class cMonster; + +// This class is used to collect, for each Mob, what is the distance of the closest player +// it was first being designed in order to make mobs spawn / despawn / act +// as the behaviour and even life of mobs depends on the distance to closest player +// +// as side effect : it also collect the chuncks that are elligible for spawning +// as side effect 2 : it also know the caps for mobs number and can compare census to this numbers +class cMobCensus +{ +public : + cMobCensus(); + +protected : + cMobProximityCounter m_ProximityCounter; + cMobFamilyCollecter m_MobFamilyCollecter; + + typedef const std::map<cMonster::eFamily,int> tCapMultipliersMap; + static tCapMultipliersMap& m_CapMultipliers(); + + std::set<cChunk*> m_EligibleForSpawnChunks; + + // count the chunks that are elligible to spawn (for now, the loaded valide not null chuncks) + int getChunkNb(); + +public: + typedef const std::map<cMonster::eFamily,int> tMobSpawnRate; + static tMobSpawnRate& m_SpawnRate(); + + // return the nested proximity counter + cMobProximityCounter& getProximityCounter(); + +public : + // collect an elligible Chunk for Mob Spawning + // MG TODO : code the correct rule (not loaded chunck but short distant from players) + void CollectSpawnableChunck(cChunk& a_Chunk); + + // collect a mob - it's distance to player, it's family ... + void CollectMob(cMonster& a_Monster, cChunk& a_Chunk, double a_Distance); + + // return true if the family is caped (i.e. there is more mobs of this family than max) + bool isCaped(cMonster::eFamily a_MobFamily); + + // log the results of census + void logd(); + +protected : + static tCapMultipliersMap CapMultiplierInitializerBeforeCx11(); + static tCapMultipliersMap MobSpawnRateInitializerBeforeCx11(); +}; + |