summaryrefslogtreecommitdiff
path: root/src/game-server/spawnarea.cpp
diff options
context:
space:
mode:
authorBjørn Lindeijer <bjorn@lindeijer.nl>2007-03-31 13:56:33 +0000
committerBjørn Lindeijer <bjorn@lindeijer.nl>2007-03-31 13:56:33 +0000
commitbdff5b4619b0163b14e12bd24266d2d6ed9a0760 (patch)
treed8f6c5d51e024f7a4a794ae200f9623eb06c8674 /src/game-server/spawnarea.cpp
parente0c185864c09cebd3a7a0118d20ca3a368cbdb6e (diff)
downloadmanaserv-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.cpp41
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;
}
}