From 8ebd7ef2c200009e6d22b2cfaa3dd0d849155db6 Mon Sep 17 00:00:00 2001 From: Thorbjørn Lindeijer Date: Sat, 17 Mar 2012 21:11:41 +0100 Subject: Changed SpawnArea and TriggerArea to components of Entity Well, first visible change is that everything just gets longer to read. Reviewed-by: Yohann Ferreira --- src/game-server/spawnarea.cpp | 120 ------------------------------------------ 1 file changed, 120 deletions(-) delete mode 100644 src/game-server/spawnarea.cpp (limited to 'src/game-server/spawnarea.cpp') diff --git a/src/game-server/spawnarea.cpp b/src/game-server/spawnarea.cpp deleted file mode 100644 index 73dca6b..0000000 --- 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 . - */ - -#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; -} -- cgit