diff options
author | Thorbjørn Lindeijer <thorbjorn@lindeijer.nl> | 2012-03-17 21:11:41 +0100 |
---|---|---|
committer | Thorbjørn Lindeijer <thorbjorn@lindeijer.nl> | 2013-03-25 20:32:36 +0100 |
commit | 8ebd7ef2c200009e6d22b2cfaa3dd0d849155db6 (patch) | |
tree | e77633d3d4e2c2538a1044589b5cc927cfa4e125 /src/game-server/spawnarea.cpp | |
parent | 626e4c98353f2111ae21123756396fc845447b57 (diff) | |
download | manaserv-8ebd7ef2c200009e6d22b2cfaa3dd0d849155db6.tar.gz manaserv-8ebd7ef2c200009e6d22b2cfaa3dd0d849155db6.tar.bz2 manaserv-8ebd7ef2c200009e6d22b2cfaa3dd0d849155db6.tar.xz manaserv-8ebd7ef2c200009e6d22b2cfaa3dd0d849155db6.zip |
Changed SpawnArea and TriggerArea to components of Entity
Well, first visible change is that everything just gets longer to read.
Reviewed-by: Yohann Ferreira
Diffstat (limited to 'src/game-server/spawnarea.cpp')
-rw-r--r-- | src/game-server/spawnarea.cpp | 120 |
1 files changed, 0 insertions, 120 deletions
diff --git a/src/game-server/spawnarea.cpp b/src/game-server/spawnarea.cpp deleted file mode 100644 index 73dca6b2..00000000 --- a/src/game-server/spawnarea.cpp +++ /dev/null @@ -1,120 +0,0 @@ -/* - * The Mana Server - * Copyright (C) 2006-2010 The Mana World Development Team - * - * This file is part of The Mana Server. - * - * The Mana Server is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * any later version. - * - * The Mana Server is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with The Mana Server. If not, see <http://www.gnu.org/licenses/>. - */ - -#include "game-server/spawnarea.h" - -#include "game-server/mapcomposite.h" -#include "game-server/monster.h" -#include "game-server/state.h" -#include "utils/logger.h" - -SpawnArea::SpawnArea(MapComposite *map, - MonsterClass *specy, - const Rectangle &zone, - int maxBeings, - int spawnRate): - Entity(OBJECT_OTHER, map), - mSpecy(specy), - mZone(zone), - mMaxBeings(maxBeings), - mSpawnRate(spawnRate), - mNumBeings(0), - mNextSpawn(0) -{ -} - -void SpawnArea::update() -{ - if (mNextSpawn > 0) - mNextSpawn--; - - if (mNextSpawn == 0 && mNumBeings < mMaxBeings && mSpawnRate > 0) - { - MapComposite *map = getMap(); - const Map *realMap = map->getMap(); - - // Reset the spawn area to the whole map in case of dimensionless zone - if (mZone.w == 0 || mZone.h == 0) - { - mZone.x = 0; - mZone.y = 0; - mZone.w = realMap->getWidth() * realMap->getTileWidth(); - mZone.h = realMap->getHeight() * realMap->getTileHeight(); - } - - // Find a free spawn location. Give up after 10 tries - int c = 10; - Point position; - const int x = mZone.x; - const int y = mZone.y; - const int width = mZone.w; - const int height = mZone.h; - - Being *being = new Monster(mSpecy); - - if (being->getModifiedAttribute(ATTR_MAX_HP) <= 0) - { - LOG_WARN("Refusing to spawn dead monster " << mSpecy->getId()); - delete being; - being = 0; - } - - if (being) - { - do - { - position = Point(x + rand() % width, y + rand() % height); - c--; - } - while (!realMap->getWalk(position.x / realMap->getTileWidth(), - position.y / realMap->getTileHeight(), - being->getWalkMask()) && c); - - if (c) - { - being->signal_removed.connect( - sigc::mem_fun(this, &SpawnArea::decrease)); - - being->setMap(map); - being->setPosition(position); - being->clearDestination(); - GameState::enqueueInsert(being); - - mNumBeings++; - } - else - { - LOG_WARN("Unable to find a free spawn location for monster " - << mSpecy->getId() << " on map " << map->getName() - << " (" << x << ',' << y << ',' - << width << ',' << height << ')'); - delete being; - } - } - - // Predictable respawn intervals (can be randomized later) - mNextSpawn = (10 * 60) / mSpawnRate; - } -} - -void SpawnArea::decrease(Entity *) -{ - --mNumBeings; -} |