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