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 <target/TargetContainer.h> 00022 00023 TargetContainer::TargetContainer() 00024 { 00025 } 00026 00027 TargetContainer::~TargetContainer() 00028 { 00029 } 00030 00031 void TargetContainer::addTarget(Target *target) 00032 { 00033 DIALOG_ASSERT(target->isTarget()); 00034 internalAddTarget(target); 00035 } 00036 00037 void TargetContainer::internalAddTarget(Target *target) 00038 { 00039 std::map<unsigned int, Target *>::iterator findItor = 00040 targets_.find(target->getPlayerId()); 00041 if (findItor != targets_.end()) 00042 { 00043 Target *original = (*findItor).second; 00044 S3D::dialogExit("Scorched3D", 00045 S3D::formatStringBuffer("Duplicate target %u being added to container.\n" 00046 "Original :%s, this %s", 00047 target->getPlayerId(), 00048 original->getCStrName().c_str(), 00049 target->getCStrName().c_str())); 00050 } 00051 00052 targets_[target->getPlayerId()] = target; 00053 } 00054 00055 Target *TargetContainer::removeTarget(unsigned int playerId) 00056 { 00057 Target *target = internalRemoveTarget(playerId); 00058 DIALOG_ASSERT(target->isTarget()); 00059 return target; 00060 } 00061 00062 Target *TargetContainer::internalRemoveTarget(unsigned int playerId) 00063 { 00064 std::map<unsigned int, Target *>::iterator itor = 00065 targets_.find(playerId); 00066 if (itor != targets_.end()) 00067 { 00068 Target *current = (*itor).second; 00069 targets_.erase(itor); 00070 return current; 00071 } 00072 return 0; 00073 } 00074 00075 Target *TargetContainer::getTargetById(unsigned int id) 00076 { 00077 std::map<unsigned int, Target *>::iterator mainitor = 00078 targets_.find(id); 00079 if (mainitor != targets_.end()) 00080 { 00081 Target *target = (*mainitor).second; 00082 DIALOG_ASSERT(target->getPlayerId() == id); 00083 00084 return target; 00085 } 00086 return 0; 00087 }
1.5.3