#include "SnowObject.h" #include "StateTransition.h" #include "StateMachine.h" #include "State.h" using namespace NCL; using namespace CSC8503; SnowObject::SnowObject() { counter = 0.0f; stateMachine = new StateMachine(); player = nullptr; State* stateFreeze = new State([&](float dt)->void { this->StartFreezingObject(dt); } ); State* stateUnfreeze = new State([&](float dt)->void { this->StartUnfreezingObject(dt); } ); stateMachine->AddState(stateFreeze); stateMachine->AddState(stateUnfreeze); stateMachine->AddTransition(new StateTransition(stateUnfreeze, stateFreeze, [&]()->bool { return player->GetPhysicsObject()->GetSnow() == true; } )); stateMachine->AddTransition(new StateTransition(stateFreeze, stateUnfreeze, [&]()->bool { return player->GetPhysicsObject()->GetSnow() == false; } )); } SnowObject::~SnowObject() { delete stateMachine; } void SnowObject::Update(float dt) { stateMachine->Update(dt); } void SnowObject::StartFreezingObject(float dt) { player->SetSpeedMultiplier(0.3f); counter += dt; if (counter >= 1.0f) { if ((originalPlayerColour.y != 256 || player->GetRenderObject()->GetColour().y != 256) && (originalPlayerColour.z != 256 || player->GetRenderObject()->GetColour().z != 256)) { player->GetRenderObject()->SetColour( Vector4(0, player->GetRenderObject()->GetColour().y + 0.1, player->GetRenderObject()->GetColour().z + 0.1, 255)); counter = 0.0f; } } } void SnowObject::StartUnfreezingObject(float dt) { player->SetSpeedMultiplier(1.0f); //If Player Colour is correct - skip updating colour if (originalPlayerColour != player->GetRenderObject()->GetColour()) { counter += dt; if (counter > 10.0f) { player->GetRenderObject()->SetColour(Vector4(255, 255, 0, 1)); counter = 0.0f; } } }