1 /* 2 Copyright (C) 2007, 2010 - Bit-Blot 3 4 This file is part of Aquaria. 5 6 Aquaria is free software; you can redistribute it and/or 7 modify it under the terms of the GNU General Public License 8 as published by the Free Software Foundation; either version 2 9 of the License, or (at your option) any later version. 10 11 This program is distributed in the hope that it will be useful, 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 14 15 See the GNU General Public License for more details. 16 17 You should have received a copy of the GNU General Public License 18 along with this program; if not, write to the Free Software 19 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 20 */ 21 #ifndef _statemachine_ 22 #define _statemachine_ 23 24 #include "Base.h" 25 26 class StateMachine 27 { 28 public: 29 StateMachine (); ~StateMachine()30 virtual ~StateMachine() {} 31 32 void setState(int state, float time = -1, bool force = false); 33 void stopState(int state); 34 bool isState(int state); 35 int getState(); 36 int getPrevState(); getEnqueuedState()37 int getEnqueuedState() { return enqueuedState; } 38 float getStateTime(); 39 void setStateTime(float t); 40 float getStateCounter(); 41 enum 42 { 43 STATE_NONE = -1 44 }; 45 virtual bool canSetState(int state); 46 47 protected: 48 void perform(int state, float time = -1); 49 virtual void onEnterState(int state); 50 virtual void onExitState(int state); 51 52 int currentState, nextState, prevState, enqueuedState; 53 float stateTime, enqueuedTime, stateExtraDT; 54 55 void onUpdate (float dt); resetStateCounter()56 void resetStateCounter() 57 { stateCounter = 0; } 58 59 private: 60 float stateCounter; 61 62 }; 63 64 #endif 65 66