Changeset 2817 for code/branches/gui/src/core/GameState.cc
- Timestamp:
- Mar 21, 2009, 10:17:59 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
code/branches/gui/src/core/GameState.cc
r2815 r2817 30 30 @file 31 31 @brief 32 Implementation of GameState Baseclass.32 Implementation of GameState class. 33 33 */ 34 34 … … 43 43 Constructor only initialises variables and sets the name permanently. 44 44 */ 45 GameState Base::GameStateBase(const std::string& name)45 GameState::GameState(const std::string& name) 46 46 : name_(name) 47 //, parent_(0)47 , parent_(0) 48 48 , activeChild_(0) 49 49 //, bPausegetParent()(false) … … 57 57 Destructor only checks that we don't delete an active state. 58 58 */ 59 GameState Base::~GameStateBase()59 GameState::~GameState() 60 60 { 61 61 OrxAssert(this->operation_.active == false, "Deleting an active GameState is a very bad idea.."); … … 69 69 The state to be added. 70 70 */ 71 void GameState Base::addChild(GameStateBase* state)71 void GameState::addChild(GameState* state) 72 72 { 73 73 if (!state) 74 74 return; 75 75 // check if the state/tree to be added has states in it that already exist in this tree. 76 for (std::map<std::string, GameState Base*>::const_iterator it = state->allChildren_.begin();76 for (std::map<std::string, GameState*>::const_iterator it = state->allChildren_.begin(); 77 77 it != state->allChildren_.end(); ++it) 78 78 { … … 96 96 97 97 // merge the child's children into this tree 98 for (std::map<std::string, GameState Base*>::const_iterator it = state->allChildren_.begin();98 for (std::map<std::string, GameState*>::const_iterator it = state->allChildren_.begin(); 99 99 it != state->allChildren_.end(); ++it) 100 100 this->grandchildAdded(state, it->second); … … 113 113 GameState by instance pointer 114 114 */ 115 void GameState Base::removeChild(GameStateBase* state)116 { 117 std::map<GameState Base*, GameStateBase*>::iterator it = this->grandchildrenToChildren_.find(state);115 void GameState::removeChild(GameState* state) 116 { 117 std::map<GameState*, GameState*>::iterator it = this->grandchildrenToChildren_.find(state); 118 118 if (it != this->grandchildrenToChildren_.end()) 119 119 { … … 127 127 else 128 128 { 129 for (std::map<GameState Base*, GameStateBase*>::const_iterator it = state->grandchildrenToChildren_.begin();129 for (std::map<GameState*, GameState*>::const_iterator it = state->grandchildrenToChildren_.begin(); 130 130 it != state->grandchildrenToChildren_.end(); ++it) 131 131 this->grandchildRemoved(it->first); … … 150 150 */ 151 151 152 void GameState Base::removeChild(const std::string& name)153 { 154 GameState Base* state = getState(name);152 void GameState::removeChild(const std::string& name) 153 { 154 GameState* state = getState(name); 155 155 if (state) 156 156 { … … 173 173 The child that has been added. 174 174 */ 175 inline void GameState Base::grandchildAdded(GameStateBase* child, GameStateBase* grandchild)175 inline void GameState::grandchildAdded(GameState* child, GameState* grandchild) 176 176 { 177 177 // fill the two maps correctly. 178 178 this->allChildren_[grandchild->getName()] = grandchild; 179 179 this->grandchildrenToChildren_[grandchild] = child; 180 if (this->getParent AsBase())181 this->getParent AsBase()->grandchildAdded(this, grandchild);180 if (this->getParent()) 181 this->getParent()->grandchildAdded(this, grandchild); 182 182 } 183 183 … … 191 191 The child that has been removed. 192 192 */ 193 inline void GameState Base::grandchildRemoved(GameStateBase* grandchild)193 inline void GameState::grandchildRemoved(GameState* grandchild) 194 194 { 195 195 // adjust the two maps correctly. 196 196 this->allChildren_.erase(grandchild->getName()); 197 197 this->grandchildrenToChildren_.erase(grandchild); 198 if (this->getParent AsBase())199 this->getParent AsBase()->grandchildRemoved(grandchild);198 if (this->getParent()) 199 this->getParent()->grandchildRemoved(grandchild); 200 200 } 201 201 … … 206 206 Remember that the every node has a map with all its child nodes. 207 207 */ 208 GameState Base* GameStateBase::getState(const std::string& name)209 { 210 if (this->getParent AsBase())211 return this->getParent AsBase()->getState(name);208 GameState* GameState::getState(const std::string& name) 209 { 210 if (this->getParent()) 211 return this->getParent()->getState(name); 212 212 else 213 213 { … … 216 216 return this; 217 217 // Search in the map. If there is no entry, we can be sure the state doesn't exist. 218 std::map<std::string, GameState Base*>::const_iterator it = this->allChildren_.find(name);218 std::map<std::string, GameState*>::const_iterator it = this->allChildren_.find(name); 219 219 return (it!= this->allChildren_.end() ? it->second : 0); 220 220 } … … 225 225 Returns the root node of the tree. 226 226 */ 227 GameState Base* GameStateBase::getRoot()228 { 229 if (this->getParent AsBase())230 return this->getParent AsBase()->getRoot();227 GameState* GameState::getRoot() 228 { 229 if (this->getParent()) 230 return this->getParent()->getRoot(); 231 231 else 232 232 return this; … … 240 240 have active children itself. Many states can be active at once. 241 241 */ 242 GameState Base* GameStateBase::getCurrentState()242 GameState* GameState::getCurrentState() 243 243 { 244 244 if (this->operation_.active) … … 251 251 else 252 252 { 253 if (this->getParent AsBase())254 return this->getParent AsBase()->getCurrentState();253 if (this->getParent()) 254 return this->getParent()->getCurrentState(); 255 255 else 256 256 return 0; … … 262 262 Determines whether 'state' is in this subtree, including this node. 263 263 */ 264 bool GameState Base::isInSubtree(GameStateBase* state) const264 bool GameState::isInSubtree(GameState* state) const 265 265 { 266 266 return (grandchildrenToChildren_.find(state) != grandchildrenToChildren_.end() … … 275 275 The state to be entered, has to exist in the tree. 276 276 */ 277 void GameState Base::requestState(const std::string& name)277 void GameState::requestState(const std::string& name) 278 278 { 279 279 assert(getRoot()); … … 286 286 the method can assume certain things to be granted (like 'this' is always active). 287 287 */ 288 void GameState Base::makeTransition(GameStateBase* source, GameStateBase* destination)289 { 290 if (source == this->getParent AsBase())288 void GameState::makeTransition(GameState* source, GameState* destination) 289 { 290 if (source == this->getParent()) 291 291 { 292 292 // call is from the parent … … 308 308 309 309 // Check for 'destination' in the children map first 310 std::map<GameState Base*, GameStateBase*>::const_iterator it310 std::map<GameState*, GameState*>::const_iterator it 311 311 = this->grandchildrenToChildren_.find(destination); 312 312 if (it != this->grandchildrenToChildren_.end()) … … 319 319 { 320 320 // parent. We can be sure of this. 321 assert(this->getParent AsBase() != 0);321 assert(this->getParent() != 0); 322 322 323 323 this->deactivate(); 324 this->getParent AsBase()->makeTransition(this, destination);324 this->getParent()->makeTransition(this, destination); 325 325 } 326 326 } … … 330 330 Activates the state. Only sets bActive_ to true and notifies the parent. 331 331 */ 332 void GameState Base::activate()332 void GameState::activate() 333 333 { 334 334 this->operation_.active = true; … … 341 341 Activates the state. Only sets bActive_ to false and notifies the parent. 342 342 */ 343 void GameState Base::deactivate()343 void GameState::deactivate() 344 344 { 345 345 this->operation_.leaving = true; … … 358 358 This method is not virtual! You cannot override it therefore. 359 359 */ 360 void GameState Base::tick(const Clock& time)360 void GameState::tick(const Clock& time) 361 361 { 362 362 this->operation_.running = true;
Note: See TracChangeset
for help on using the changeset viewer.