www.gusucode.com > C++人工智能游戏开发的一些实例源代码源码程序 > C++人工智能游戏开发的一些实例源代码源码程序\code\06 General Architectures\05 Rabin\statemch.cpp
//Download by http://www.NewXing.com /* Copyright (C) Steve Rabin, 2001. * All rights reserved worldwide. * * This software is provided "as is" without express or implied * warranties. You may freely copy and compile this source into * applications you distribute provided that the copyright text * below is included in the resulting source code, for example: * "Portions Copyright (C) Steve Rabin, 2001" */ #include "statemch.h" StateMachine::StateMachine( void ) { m_currentState = 0; m_stateChange = false; m_nextState = false; } void StateMachine::Initialize( void ) { Process( EVENT_Enter ); } void StateMachine::Update( void ) { Process( EVENT_Update ); } void StateMachine::Process( StateMachineEvent event ) { States( event, m_currentState ); // Check for a state change int safetyCount = 10; while( m_stateChange && (--safetyCount >= 0) ) { assert( safetyCount > 0 && "StateMachine::Process - States are flip-flopping in an infinite loop." ); m_stateChange = false; // Let the last state clean-up States( EVENT_Exit, m_currentState ); // Set the new state m_currentState = m_nextState; // Let the new state initialize States( EVENT_Enter, m_currentState ); } } void StateMachine::SetState( unsigned int newState ) { m_stateChange = true; m_nextState = newState; }