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

//Tag IDs
//1000: Start Warp
//1001: Chronoscepter
//1002: 

kActor@ chrono;
bool fovzoom;
float fovzoomTime;
//------------------------------------------------------------------------------------------------------------------------
// Start Map
//------------------------------------------------------------------------------------------------------------------------
$script 0
{
	StartMap();
	@chrono = World.GetActorByTID(1001);
	chrono.RenderModel().SetVisibility(1, false);
	chrono.Flags() &= ~uint(AF_NOMOVEMENT);
	chrono.ClipFlags() = (CF_DROPOFF|CF_CLIPEDGES|CF_IGNOREBLOCKERS|CF_NOCLIPACTORS|CF_NOCLIPSTATICS|CF_COLLIDEFLOORS|CF_COLLIDEHEIGHT);
	Game.CallDelayedMapScript(1, instigator, 0); //Update Map
	Game.CallDelayedMapScript(2, instigator, 0); //Start Cinematic
}
//------------------------------------------------------------------------------------------------------------------------
// Update Map
//------------------------------------------------------------------------------------------------------------------------
$script 1
{
	TickMap();
	$restart;
}
//------------------------------------------------------------------------------------------------------------------------
// Start Cinematic
//------------------------------------------------------------------------------------------------------------------------
$script 2
{
	Camera.SetLookAtActor(chrono);
	Camera.ClearFinalView();
	Camera.ClearViewTracks();
	Camera.fov = 80.0f;
	Camera.origin = kVec3(1945, -821, 2014);
	Camera.StartCinematic(CMF_NO_LETTERBOX | CMF_LOCK_PLAYER | CMF_UNLOCK_PLAYER_ON_FINISH | CMF_NO_INITIAL_FADEOUT);

    Player.Actor().Flags() &= ~AF_NODRAW;
    Player.Actor().AnimState().Set(anim_player_idle, 5.5f, ANF_LOOP|ANF_ROOTMOTION);
	Player.Actor().ModelVariation() = TV_NONE;
	delay(0.5f);
	CheckNotStarted();
	delay(0.5f);
	if (GetPlayerCharacter() == PLAYER_CHAR_ADON)
	{
		switch(Math::RandMax(2))
		{
		case 0:
			Game.PlaySound("sounds/shaders/adon_jump1.ksnd");
			break;
		case 1:
			Game.PlaySound("sounds/shaders/adon_jump2.ksnd");
			break;
		}	
	}
	else
	{
		Game.PlaySound("sounds/shaders/turok_jump.ksnd");
	}
	
	chrono.Velocity() = kVec3(-8.0f, 0.0f, 6.0f);
	chrono.BounceDamp() = 0.0f;
	chrono.Gravity() = 0.1f;
	Game.CallDelayedMapScript(3, instigator, 0); //Update Cinematic
	fovzoom = true;
	delay(4.0f);
	Game.PlaySound("sounds/shaders/explosion_3.ksnd");
	chrono.SpawnFx("fx/generic_217.kfx", kVec3(0.0f, 0.0f, 1500.0f)); //big chrono explosion
	delay(0.5f);
	chrono.SpawnFx("fx/generic_217.kfx", kVec3(0.0f, 0.0f, 1500.0f)); //big chrono explosion
	delay(0.5f);
	//Game.PlaySound("sounds/shaders/generic_157.ksnd");
	delay(3.0f);
	Game.HaltMapScript(3); //Update Cinematic
    Player.Actor().Flags() |= AF_NODRAW;
	Camera.StopCinematic();
	PlayLoop.StartWarp(Player.Actor().CastToActor(), 1000, 114);
}
//------------------------------------------------------------------------------------------------------------------------
// Update Cinematic
//------------------------------------------------------------------------------------------------------------------------
$script 3
{
	chrono.Yaw() += Math::Deg2Rad(2.0f);
	chrono.Pitch() += Math::Deg2Rad(2.0f);
	if (fovzoom)
	{
		fovzoomTime += GAME_DELTA_TIME;
		Camera.fov = Math::SmoothStepBP(80.0f, 50.0f, fovzoomTime / 4.5f);
	}
	$restart;
}
//------------------------------------------------------------------------------------------------------------------------
