#include "scripts/bpong/common.txt"
#include "scripts/Math.txt"

namespace BPong {
	class Scoreboard {
		array<kActor@> actors(7);
		kVec3 pos;
		kVec3 scale;
		uint lifes;
		float lifeSpacing = 40.0f;
		bool flipped = false;
		//------------------------------------------------------------------------------------------------------------------------
		Scoreboard(const bool flip) {
			pos = kVec3(0.0f, 0.0f, 0.0f);
			scale = kVec3(1.0f, 1.0f, 1.0f);
			flipped = flip;
			lifes = actors.length();
			for (uint i = 0; i < actors.length(); i++) {
				@actors[i] = ActorFactory.Spawn("Health_Ultra", 0, 0, 0, 0, 0);
			}
		}
		//------------------------------------------------------------------------------------------------------------------------
		~Scoreboard() {
			for (uint i = 0; i < actors.length(); i++) {
				actors[i].Remove();
			}
		}
		//------------------------------------------------------------------------------------------------------------------------
		void RemoveLife() {
			if (lifes > 0) {
				SetLifes(lifes - 1);
			}
		}
		//------------------------------------------------------------------------------------------------------------------------
		void SetLifes(uint newLifes) {
			lifes = newLifes;
			for (uint i = 0; i < actors.length(); i++) {
				if (i < lifes) {
					actors[i].Flags() &= ~AF_NODRAW;
				} else {
					actors[i].Flags() |= AF_NODRAW;
				}
			}
		}
		//------------------------------------------------------------------------------------------------------------------------
		void RestoreLifes() {
			SetLifes(actors.length());
		}
		//------------------------------------------------------------------------------------------------------------------------
		kVec3 GetPos(void) {
			return pos;
		}
		//------------------------------------------------------------------------------------------------------------------------
		void SetPos(kVec3 newPos) {
			pos = newPos;
			for (uint i = 0; i < actors.length(); i++) {
				actors[i].Origin().Set(pos.x + (i * (flipped ? -lifeSpacing : lifeSpacing)), pos.y, pos.z);
			}
		}
		//------------------------------------------------------------------------------------------------------------------------
		kVec3 GetScale(void) {
			return scale;
		}
		//------------------------------------------------------------------------------------------------------------------------
		void SetScale(kVec3 newScale) {
			scale = newScale;
			for (uint i = 0; i < actors.length(); i++) {
				actors[i].Scale() = scale;
			}
		}
		//------------------------------------------------------------------------------------------------------------------------
		void Update(void) {

		}
		//------------------------------------------------------------------------------------------------------------------------
	}
}
