summaryrefslogblamecommitdiffstats
path: root/game/code/ai/statemanager.cpp
blob: d31148ae008445c9037ba997318687bef39e6b76 (plain) (tree)










































































































                                                                                
//=============================================================================
// Copyright (C) 2002 Radical Entertainment Ltd.  All rights reserved.
//
// File:        statemanager.cpp
//
// Description: Implementation of class StateManager
//
// History:     6/12/2002 + Created -- NAME
//
//=============================================================================

//========================================
// System Includes
//========================================
// Foundation Tech
#include <raddebug.hpp>

//========================================
// Project Includes
//========================================
#include <ai/statemanager.h>
#include <ai/state.h>
#include <worldsim/character/character.h>
#include <ai/sequencer/actioncontroller.h>

namespace CharacterAi
{

//==============================================================================
StateManager::StateManager( Character* pCharacter )
:
mpCharacter(pCharacter),
mpCurrentState( new NoState(pCharacter) ),
mpNextState( NULL )
{
}

//==============================================================================
StateManager::~StateManager()
{
    delete mpCurrentState;
    delete mpNextState;
}

//==============================================================================
Character* StateManager::GetCharacter()
{
    return mpCharacter;
}
//==============================================================================
CharacterState StateManager::GetState( void ) const
{
	return mpCurrentState->GetStateID();
}

//==============================================================================
void StateManager::SetState( State* state)
{
    if(mpNextState)
    {
        delete mpNextState;
    }

    mpNextState = state;
}

//==============================================================================
void StateManager::ResetState( void )
{
    if(mpNextState)
    {
        delete mpNextState;
        mpNextState = NULL;
    }

    mpCurrentState->Exit( );
    mpCurrentState->Enter( );
}

//==============================================================================
void StateManager::Update( float timeins )
{    
    if(mpNextState)
    {
        mpCurrentState->Exit( );
	    delete mpCurrentState;
        mpCurrentState = mpNextState;
        mpNextState = NULL;
        mpCurrentState->Enter( );
    }

    mpCurrentState->Update( timeins );

    // sequence actions, if we can
    if ( !mpCharacter->GetActionController()->IsBusy())
    {
        mpCurrentState->SequenceAction();
    }
}

//==============================================================================
const State* StateManager::GetCurrentState( void ) const
{
	return mpCurrentState;
}

}; // namespace CharacterAi