00001 //////////////////////////////////////////////////////////////////////////////// 00002 // Scorched3D (c) 2000-2009 00003 // 00004 // This file is part of Scorched3D. 00005 // 00006 // Scorched3D is free software; you can redistribute it and/or modify 00007 // it under the terms of the GNU General Public License as published by 00008 // the Free Software Foundation; either version 2 of the License, or 00009 // (at your option) any later version. 00010 // 00011 // Scorched3D is distributed in the hope that it will be useful, 00012 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00014 // GNU General Public License for more details. 00015 // 00016 // You should have received a copy of the GNU General Public License 00017 // along with Scorched3D; if not, write to the Free Software 00018 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 00019 //////////////////////////////////////////////////////////////////////////////// 00020 00021 #include <actions/CheckResurrection.h> 00022 #include <actions/Resurrection.h> 00023 #include <engine/ActionController.h> 00024 #include <placement/PlacementTankPosition.h> 00025 #include <tank/TankContainer.h> 00026 #include <tank/TankState.h> 00027 00028 CheckResurrection::CheckResurrection() : 00029 ActionReferenced("CheckResurrection"), 00030 firstTime_(true) 00031 { 00032 } 00033 00034 CheckResurrection::~CheckResurrection() 00035 { 00036 } 00037 00038 void CheckResurrection::init() 00039 { 00040 } 00041 00042 void CheckResurrection::simulate(fixed frameTime, bool &remove) 00043 { 00044 if (firstTime_) 00045 { 00046 firstTime_ = false; 00047 00048 std::map<unsigned int, Tank *> &tanks = 00049 context_->getTankContainer().getPlayingTanks(); 00050 std::map<unsigned int, Tank *>::iterator itor; 00051 for (itor = tanks.begin(); 00052 itor != tanks.end(); 00053 itor++) 00054 { 00055 Tank *tank = (*itor).second; 00056 00057 // Check for any dead tanks that can be rezed 00058 if (!tank->getState().getSpectator() && 00059 tank->getState().getState() == TankState::sDead && 00060 (tank->getState().getLives() > 0 || 00061 tank->getState().getMaxLives() == 0)) 00062 { 00063 FixedVector tankPos = PlacementTankPosition::placeTank( 00064 tank->getPlayerId(), tank->getTeam(), 00065 *context_, 00066 context_->getActionController().getRandom()); 00067 00068 Resurrection *rez = new Resurrection( 00069 tank->getPlayerId(), tankPos); 00070 context_->getActionController().addAction(rez); 00071 } 00072 } 00073 } 00074 00075 remove = true; 00076 Action::simulate(frameTime, remove); 00077 }
1.5.3