48 lines
1.8 KiB
C++
48 lines
1.8 KiB
C++
/*
|
|
* Copyright (c) 2014, Oculus VR, Inc.
|
|
* All rights reserved.
|
|
*
|
|
* This source code is licensed under the BSD-style license found in the
|
|
* RakNet License.txt file in the licenses directory of this source tree. An additional grant
|
|
* of patent rights can be found in the RakNet Patents.txt file in the same directory.
|
|
*
|
|
*/
|
|
|
|
#ifndef __STATE_H
|
|
#define __STATE_H
|
|
|
|
class FSM;
|
|
|
|
// States are stored in the FSM class (Finite state machine)
|
|
// The FSM only has one active state at a time and stores the state history stack
|
|
// State data can be held in this class - however data which is used between states is best stored elsewhere.
|
|
class State
|
|
{
|
|
public:
|
|
State();
|
|
~State();
|
|
// OnEnter is called when this state will not be the current state
|
|
// loadResources true means this state is now in the history stack and was not there before
|
|
virtual void OnEnter(const FSM *caller, bool loadResources);
|
|
// OnLeave is called when this state is currently the current state and will no longer be the current state
|
|
// unloadResources true means this state is no longer in the history stack and we will probably not be entering it again via the back button
|
|
virtual void OnLeave(const FSM *caller, bool unloadResources);
|
|
// Called once for every time this state is added to the FSM history stack
|
|
virtual void FSMAddRef(const FSM *caller);
|
|
// Called once for every time this state is removed from the FSM history stack.
|
|
virtual void FSMRemoveRef(const FSM *caller);
|
|
// The number of times this state is in the FSM history stack.
|
|
unsigned FSMRefCount(void) const;
|
|
protected:
|
|
unsigned fsmRefCount;
|
|
};
|
|
|
|
// Same as State, but self-deletes when fsmRefCount==0
|
|
class ManagedState : public State
|
|
{
|
|
public:
|
|
virtual void FSMRemoveRef(const FSM *caller);
|
|
};
|
|
|
|
#endif
|