// Fill out your copyright notice in the Description page of Project Settings. #include "StateMachineSubsystem.h" void UStateMachineSubsystem::Initialize(FSubsystemCollectionBase& Collection) { Super::Initialize(Collection); CurrentState = EGameState::MainMenu; UE_LOG(LogTemp, Display, TEXT("Starting game state machine in MAINMENU state")) } bool UStateMachineSubsystem::ChangeState(const EGameState NewState) { // Exit from old state switch (CurrentState) { case EGameState::MainMenu: switch(NewState) { case EGameState::Battle: UE_LOG(LogTemp, Display, TEXT("Entering BATTLE state from MAINMENU")) break; default: UE_LOG(LogTemp, Error, TEXT("NewState is invalid from MAINMENU state: %hhd"), NewState) return false; } break; case EGameState::Battle: switch(NewState) { case EGameState::Battle: UE_LOG(LogTemp, Warning, TEXT("Entering BATTLE state from BATTLE. Should only be possible when debugging")) break; case EGameState::BattleMenu: UE_LOG(LogTemp, Display, TEXT("Entering BATTLEMENU state from BATTLE")) break; case EGameState::GameOver: UE_LOG(LogTemp, Display, TEXT("Entering GAMEOVER state from BATTLE")) break; case EGameState::Victory: UE_LOG(LogTemp, Display, TEXT("Entering VICTORY state from BATTLE")) break; default: UE_LOG(LogTemp, Error, TEXT("NewState is invalid from BATTLE state: %hhd"), NewState) return false; } break; case EGameState::BattleMenu: switch(NewState) { case EGameState::Battle: UE_LOG(LogTemp, Error, TEXT("Entering BATTLE state from BATTLEMENU")) break; default: UE_LOG(LogTemp, Error, TEXT("NewState is invalid from BATTLEMENU state: %hhd"), NewState) return false; } break; default: UE_LOG(LogTemp, Error, TEXT("Leaving unknown state, this is a problem")) return false; } CurrentState = NewState; StateChangedDelegate.Broadcast(NewState); return true; }