mirror of
https://github.com/zeldaret/ss
synced 2026-05-23 15:01:38 -04:00
26af4db82d
* update from dtk-template and start work towards using clangd * include <a> -> "a" * Update build.yml * remove/add non-trivial class in union warning
68 lines
3.3 KiB
C++
68 lines
3.3 KiB
C++
#ifndef S_STATEMETHOD_H
|
|
#define S_STATEMETHOD_H
|
|
|
|
#include "s/s_StateInterfaces.hpp"
|
|
|
|
// Note: Ported from https://github.com/NSMBW-Community/NSMBW-Decomp/tree/master/include/dol/sLib
|
|
// See include/s/README.txt for changes made
|
|
|
|
/// @brief A class that handles state execution and transition.
|
|
/// @details [Presumably, sStateMethod_c actually means "methods for state interaction", or something like that].
|
|
/// @ingroup state
|
|
class sStateMethod_c : public sStateMethodIf_c {
|
|
public:
|
|
/**
|
|
* @brief Constructs a new sStateMethod_c instance.
|
|
*
|
|
* @param checker The state checker to use.
|
|
* @param factory The state factory to use.
|
|
* @param initialState The initial state ID of this instance.
|
|
*/
|
|
sStateMethod_c(sStateIDChkIf_c &checker, sStateFctIf_c &factory, const sStateIDIf_c &initialState);
|
|
virtual ~sStateMethod_c(); ///< Destroys the sStateMethod_c instance.
|
|
|
|
virtual void initializeStateMethod(); ///< @copydoc sStateMgrIf_c::initializeState
|
|
virtual void executeStateMethod(); ///< @copydoc sStateMgrIf_c::executeState
|
|
virtual void finalizeStateMethod(); ///< @copydoc sStateMgrIf_c::finalizeState
|
|
virtual void changeStateMethod(const sStateIDIf_c &newStateID); ///< @copydoc sStateMgrIf_c::changeState
|
|
virtual void refreshStateMethod() {
|
|
mRefreshStateMethod = true;
|
|
} ///< @copydoc sStateMgrIf_c::refreshState
|
|
virtual sStateIf_c *getState() const {
|
|
return mpState;
|
|
} ///< @copydoc sStateMgrIf_c::getState
|
|
virtual const sStateIDIf_c *getNewStateID() const {
|
|
return mpNewStateID;
|
|
} ///< @copydoc sStateMgrIf_c::getNewStateID
|
|
virtual const sStateIDIf_c *getStateID() const {
|
|
return mpStateID;
|
|
} ///< @copydoc sStateMgrIf_c::getStateID
|
|
virtual const sStateIDIf_c *getOldStateID() const {
|
|
return mpOldStateID;
|
|
} ///< @copydoc sStateMgrIf_c::getOldStateID
|
|
|
|
virtual int initializeStateLocalMethod() = 0; ///< Performs the actual state initialization.
|
|
virtual void executeStateLocalMethod() = 0; ///< Performs the actual state execution.
|
|
virtual void finalizeStateLocalMethod() = 0; ///< Performs the actual state termination.
|
|
virtual void changeStateLocalMethod(const sStateIDIf_c &newStateID) = 0; ///< Performs the actual state transition.
|
|
|
|
protected:
|
|
sStateIDChkIf_c &mpStateChk; ///< @unused The state checker to use.
|
|
sStateFctIf_c &mpStateFct; ///< The state factory which produces the state holder.
|
|
|
|
bool mInitFinalizeLock; ///< A lock to ensure ::initializeStateMethod and ::finalizeStateMethod are not called
|
|
///< recursively.
|
|
bool mExecutionLock; ///< A lock to ensure ::executeStateMethod is not called recursively.
|
|
bool mIsValid; ///< If the state holder contains a valid state ID.
|
|
bool mStateChanged; ///< If the current state has changed during execution.
|
|
bool mRefreshStateMethod; ///< True, if after a state transition, the state should be executed again.
|
|
|
|
const sStateIDIf_c *mpNewStateID; ///< The next state ID.
|
|
const sStateIDIf_c *mpOldStateID; ///< The previous state ID.
|
|
const sStateIDIf_c *mpStateID; ///< The current state ID.
|
|
|
|
sStateIf_c *mpState; ///< The current state holder.
|
|
};
|
|
|
|
#endif
|