CSC8503_Advanced_Game_Technologies / CSC8503 / CSC8503Common / SnowObject.cpp
SnowObject.cpp
Raw
#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;
		}
	}

}