diff options
author | Bjørn Lindeijer <bjorn@lindeijer.nl> | 2007-03-31 13:56:33 +0000 |
---|---|---|
committer | Bjørn Lindeijer <bjorn@lindeijer.nl> | 2007-03-31 13:56:33 +0000 |
commit | bdff5b4619b0163b14e12bd24266d2d6ed9a0760 (patch) | |
tree | d8f6c5d51e024f7a4a794ae200f9623eb06c8674 /src/game-server/spawnarea.cpp | |
parent | e0c185864c09cebd3a7a0118d20ca3a368cbdb6e (diff) | |
download | manaserv-bdff5b4619b0163b14e12bd24266d2d6ed9a0760.tar.gz manaserv-bdff5b4619b0163b14e12bd24266d2d6ed9a0760.tar.bz2 manaserv-bdff5b4619b0163b14e12bd24266d2d6ed9a0760.tar.xz manaserv-bdff5b4619b0163b14e12bd24266d2d6ed9a0760.zip |
Took into account spawn rate.
Diffstat (limited to 'src/game-server/spawnarea.cpp')
-rw-r--r-- | src/game-server/spawnarea.cpp | 41 |
1 files changed, 26 insertions, 15 deletions
diff --git a/src/game-server/spawnarea.cpp b/src/game-server/spawnarea.cpp index 9d7a4eb2..bded9cc0 100644 --- a/src/game-server/spawnarea.cpp +++ b/src/game-server/spawnarea.cpp @@ -29,7 +29,6 @@ #include "utils/logger.h" /* - * TODO: Take into account spawn rate. * TODO: Allow specifying being type and use it. */ @@ -39,7 +38,8 @@ SpawnArea::SpawnArea(int mapId, const Rectangle &zone): mMaxBeings(10), mBeingType(1), mSpawnRate(10), - mNumBeings(0) + mNumBeings(0), + mNextSpawn(0) { setMapId(mapId); } @@ -47,23 +47,34 @@ SpawnArea::SpawnArea(int mapId, const Rectangle &zone): void SpawnArea::update() { - while (mNumBeings < mMaxBeings) + if (mNextSpawn > 0) { - Being *being = new Monster(); - being->addDeathListener(this); + mNextSpawn--; - // some bogus stats for testing - being->setSpeed(150); - being->setSize(8); - being->setAttribute(BASE_ATTR_VITALITY, 10); - being->fillHitpoints(); + if (mNextSpawn == 0) + { + Being *being = new Monster(); + being->addDeathListener(this); - being->setMapId(1); - being->setPosition(Point(mZone.x + rand() % mZone.w, - mZone.y + rand() % mZone.h)); - gameState->insert(being); + // some bogus stats for testing + being->setSpeed(150); + being->setSize(8); + being->setAttribute(BASE_ATTR_VITALITY, 10); + being->fillHitpoints(); - mNumBeings++; + being->setMapId(1); + being->setPosition(Point(mZone.x + rand() % mZone.w, + mZone.y + rand() % mZone.h)); + gameState->insert(being); + + mNumBeings++; + } + } + + if (mNextSpawn == 0 && mNumBeings < mMaxBeings && mSpawnRate > 0) + { + // Predictable respawn intervals (can be randomized later) + mNextSpawn = (10 * 60) / mSpawnRate; } } |