CSC8503_Advanced_Game_Technologies / CSC8503 / CSC8503Common / PushdownMachine.cpp
PushdownMachine.cpp
Raw
#include "PushdownMachine.h"
#include "PushdownState.h"

using namespace NCL::CSC8503;

bool PushdownMachine::Update(float dt) {
	if (activeState) {
		PushdownState* newState = nullptr;
		PushdownState::PushdownResult result = activeState->OnUpdate(dt, &newState);

		switch (result) {
			case PushdownState::Pop: {
				activeState->OnSleep();
				//delete activeState;
				stateStack.pop();
				if (stateStack.empty()) {
					return false;
					activeState = nullptr; 
					exit(0);
				}
				else {
					activeState = stateStack.top();
					activeState->OnAwake();
				}
			}break;
			case PushdownState::Push: {
				activeState->OnSleep();
				stateStack.push(newState);
				activeState = newState;
				activeState->OnAwake();
			}break;
		}
	}
	else {
		stateStack.push(initialState);
		activeState = initialState;
		activeState->OnAwake();
	}
	return true;
}