#include "scripts/common.txt"
#include "scripts/BP_common.txt"
#include "scripts/BP_MapCommon.txt"

//Tag IDs
//1000: Start Warp / Player Reset Point
//1001: Bird
//1002: 
//1003: 

kActor@ bird;
kActor@ playerResetPoint;
uint16 mapInputButtons = 0;
float maxPitch = Math::Deg2Rad(89.0f); //89.0f or lower
float maxTurnSpeed = Math::Deg2Rad(7.5f);
float forwardSpeed = 4.0f;
float lastPlayerYaw;
kActor@ camLook;

//------------------------------------------------------------------------------------------------------------------------
// Start Map
//------------------------------------------------------------------------------------------------------------------------
$script 0
{
	StartMap();
	
	@playerResetPoint = World.GetActorByTID(1000);
	@bird = World.GetActorByTID(1001);
	@camLook = ActorFactory.Spawn("DummyActor", 0.0f, 0.0f, 0.0f, 0.0f, 0);
	
	Camera.StartCinematic(CMF_NO_LETTERBOX | CMF_NO_INITIAL_FADEOUT);
	
	Camera.SetLookAtActor(bird);
	Camera.ClearFinalView();
	Camera.ClearViewTracks();
	Camera.fov = 90.0f;

	//Reset Player Position
	Player.Actor().Origin() = playerResetPoint.Origin();
	Player.Actor().SetSector(playerResetPoint.SectorIndex());
	DisableWeapon();
	
	Game.CallDelayedMapScript(1, instigator, 0); //Update Map	
}
//------------------------------------------------------------------------------------------------------------------------
// Update Map
//------------------------------------------------------------------------------------------------------------------------
$script 1
{
	TickMap();
	
	kActor@ pActor = Player.Actor().CastToActor();
	
	//Reset Player Position
	Player.Actor().Origin() = playerResetPoint.Origin();
	
	//SetCamera Position behind the player
	Camera.origin = bird.Origin() - (ActorForward(bird) * 200.0f) + kVec3(0,0,50);

	//Set Bird Velocity Forward
	bird.Velocity() = (kVec3(0.0f, 1.0f, 0.0f) * bird.Rotation()) * forwardSpeed;
	
	//Slowly rotate bird towards player yaw/pitch
	float diffAngle = Math::Clampf(pActor.Yaw().Diff(lastPlayerYaw), -maxTurnSpeed, maxTurnSpeed);
	lastPlayerYaw = pActor.Yaw();
	bird.Yaw() = bird.Yaw().Interpolate(bird.Yaw() + diffAngle, 0.25f);
	float pPitch = Math::Clampf(pActor.Pitch(), -maxPitch, maxPitch);
	bird.Pitch() = bird.Pitch().Interpolate(pPitch, 0.03f);
	
	//set target to something
	bird.SetTarget(playerResetPoint);
	
	//Input Update
	mapInputButtons = InputUpdate(mapInputButtons);
	if (InputAttackDown())
	{
		//fire at target
		if (bird.GetTarget() !is null)
		{
			bird.SpawnProjectile("fx/hittest.kfx", kVec3(0, 0, 0), bird.GetTarget().Origin(), Math::Deg2Rad(45.0f));
		}
	}
	if (InputStrafeLeftPress())
	{
		//move bird to the right of the camera look target and rotate 90 degrees, make turning left faster
	}
	else if (InputStrafeRightPress())
	{
		//move bird to the left of the camera look target and rotate 90 degrees, make turning right faster
	}
	// if (InputForwardDown())
	// {
	// }
	// else if (InputBackwardDown())
	// {
	// }

	$restart;
}
//------------------------------------------------------------------------------------------------------------------------
