Files
FlaxEngine/Source/Engine/Utilities/StateMachine.cpp
2021-01-02 14:28:49 +01:00

63 lines
1.1 KiB
C++

// Copyright (c) 2012-2021 Wojciech Figat. All rights reserved.
#include "StateMachine.h"
State::State(StateMachine* parent)
: _parent(parent)
{
_parent->_states.Add(this);
}
State::~State()
{
if (_parent)
_parent->_states.Remove(this);
}
bool State::IsActive() const
{
return _parent->_currentState == this;
}
StateMachine::StateMachine()
: _currentState(nullptr)
{
}
StateMachine::~StateMachine()
{
for (int32 i = 0; i < _states.Count(); i++)
{
_states[i]->_parent = nullptr;
}
}
void StateMachine::GoToState(State* state)
{
// Prevent from entering the same state
if (state == _currentState)
return;
// Check if cannot leave current state
if (_currentState && !_currentState->CanExit(state))
return;
// Check if cannot enter new state
if (state && !state->CanEnter())
return;
// Change state
switchState(state);
}
void StateMachine::switchState(State* nextState)
{
if (_currentState)
_currentState->exitState();
_currentState = nextState;
if (_currentState)
_currentState->enterState();
}