#include "scripts/bp_common.txt"

const array<kStr> MerchantSounds = {"sounds/shaders/merchant01.ksnd",
								"sounds/shaders/merchant02.ksnd",
								"sounds/shaders/merchant03.ksnd",
								"sounds/shaders/merchant04.ksnd"};
								
//------------------------------------------------------------------------------------------------------------------------
// Start
//------------------------------------------------------------------------------------------------------------------------
$script 0 {
	Player.GiveWeapon(TW_WEAPON_BOW, 30); //Refill normal arrow ammo for free

	kActor @portalExit = ActorFactory.Spawn("ShopPointExit", -4739, -1711, 255, 0, 0); //Portal Exit

	SpawnActor("BP_ShopProgressArea", -4751, -2725, 153);
	
	//Top Left
	kActor @statue1 = ActorFactory.Spawn("BP_Statue1", -4330, -2309, 153, 0, 0);
	statue1.Yaw() = Math::Deg2Rad(-90);
	ActorFactory.Spawn("BP_ShopBuyAreaPistol", -4430, -2309, 155, 0, 0); //Buy Pistol/Ammo
	kActor @decoPistol = ActorFactory.Spawn(Player.HasWeapon(TW_WEAPON_PISTOL) ? "Ammo_Box_Bullets_Pickup" : "BP_Wpn_Pistol", -4430, -2309, 155, 0, 0);
	decoPistol.Flags() &= ~AF_CANBETOUCHED;
	decoPistol.Scale() = kVec3(0.35f, 0.35f, 0.35f);

	kActor @statue2 = ActorFactory.Spawn("BP_Statue1", -4330, -2509, 153, 0, 0);
	statue2.Yaw() = Math::Deg2Rad(-90);
	ActorFactory.Spawn("BP_ShopBuyAreaShotgun", -4430, -2509, 155, 0, 0); //Buy Shotgun/Ammo
	if (Player.HasWeapon(TW_WEAPON_SHOTGUN)) {
		kActor @decoShotgun = ActorFactory.Spawn("Ammo_Box_Shells_Pickup", -4430, -2509, 155, 0, 0);
		decoShotgun.Flags() &= ~AF_CANBETOUCHED;
		decoShotgun.Scale() = kVec3(0.35f, 0.35f, 0.35f);
		kActor @decoShotgunAlt = ActorFactory.Spawn("Ammo_ExpShells_Pickup", -4430, -2509, 155, 0, 0);
		decoShotgunAlt.Flags() &= ~AF_CANBETOUCHED;
		decoShotgunAlt.Scale() = kVec3(0.35f, 0.35f, 0.35f);
	} else {
		kActor @decoShotgun = ActorFactory.Spawn("BP_Wpn_Shotgun", -4430, -2509, 155, 0, 0);
		decoShotgun.Flags() &= ~AF_CANBETOUCHED;
		decoShotgun.Scale() = kVec3(0.35f, 0.35f, 0.35f);
	}	

	kActor @statue3 = ActorFactory.Spawn("BP_Statue1", -4330, -2709, 153, 0, 0);
	statue3.Yaw() = Math::Deg2Rad(-90);
	ActorFactory.Spawn("BP_ShopBuyAreaMinigun", -4430, -2709, 155, 0, 0); //Buy Minigun
	kActor @decoMinigun = ActorFactory.Spawn(Player.HasWeapon(TW_WEAPON_MINIGUN) ? "Ammo_MiniGunAmmo_Pickup" : "BP_Wpn_Minigun", -4430, -2709, 155, 0, 0);
	decoMinigun.Flags() &= ~AF_CANBETOUCHED;
	decoMinigun.Scale() = kVec3(0.35f, 0.35f, 0.35f);
	
	//Top Right
	kActor @statue4 = ActorFactory.Spawn("BP_Statue1", -5170, -2309, 153, 0, 0);
	statue4.Yaw() = Math::Deg2Rad(90);
	ActorFactory.Spawn("BP_ShopBuyAreaGrenade", -5070, -2309, 155, 0, 0); //Buy Grenade Launcher
	kActor @decoGrenade = ActorFactory.Spawn(Player.HasWeapon(TW_WEAPON_GRENADE) ? "Ammo_GrenadeBox_Pickup" : "BP_Wpn_GrenadeLauncher", -5070, -2309, 155, 0, 0);
	decoGrenade.Flags() &= ~AF_CANBETOUCHED;
	decoGrenade.Scale() = kVec3(0.35f, 0.35f, 0.35f);

	kActor @statue5 = ActorFactory.Spawn("BP_Statue1", -5170, -2509, 153, 0, 0);
	statue5.Yaw() = Math::Deg2Rad(90);
	ActorFactory.Spawn("BP_ShopBuyAreaLaser", -5070, -2509, 155, 0, 0); //Buy Laser Rifle
	kActor @decoLaser = ActorFactory.Spawn(Player.HasWeapon(TW_WEAPON_LASERRIFLE) ? "Ammo_LargeCell_Pickup" : "BP_Wpn_LaserRifle", -5070, -2509, 155, 0, 0);
	decoLaser.Flags() &= ~AF_CANBETOUCHED;
	decoLaser.Scale() = kVec3(0.35f, 0.35f, 0.35f);
	
	kActor @statue6 = ActorFactory.Spawn("BP_Statue1", -5170, -2709, 153, 0, 0);
	statue6.Yaw() = Math::Deg2Rad(90);
	ActorFactory.Spawn("BP_ShopBuyAreaRocket", -5070, -2709, 155, 0, 0); //Buy Rocket Launcher
	kActor @decoRocket = ActorFactory.Spawn(Player.HasWeapon(TW_WEAPON_MISSILE) ? "Ammo_Rockets_Pickup" : "BP_Wpn_RocketLauncher", -5070, -2709, 155, 0, 0);
	decoRocket.Flags() &= ~AF_CANBETOUCHED;
	decoRocket.Scale() = kVec3(0.35f, 0.35f, 0.35f);
			
	//Top Center
	ActorFactory.Spawn("BP_Statue2",  -4630, -2709, 153, 0, 0); //statue top left
	ActorFactory.Spawn("Emitter_BP_Fire_Tall2", -4630, -2663, 305, 0, 0);
	
	ActorFactory.Spawn("BP_Statue2", -4870, -2709, 153, 0, 0); //statue top right
	ActorFactory.Spawn("Emitter_BP_Fire_Tall2", -4870, -2663, 305, 0, 0);

	//Bottom Right
	kActor @statue7 = ActorFactory.Spawn("BP_Statue1", -5170, -2020, 0, 0, 0);
	statue7.Yaw() = Math::Deg2Rad(90);
	ActorFactory.Spawn("BP_ShopBuyAreaJump", -5070, -2020, 1, 0, 0); //Buy Jump Power
	kActor @decoJumpPower = ActorFactory.Spawn("Spiritual", -5070, -2020, 1, 0, 0);
	decoJumpPower.Flags() &= ~AF_CANBETOUCHED;
	decoJumpPower.Scale() = kVec3(0.35f, 0.35f, 0.35f);
	
	kActor @statue8 = ActorFactory.Spawn("BP_Statue1", -5170, -1720, 0, 0, 0);
	statue8.Yaw() = Math::Deg2Rad(90);
	ActorFactory.Spawn("BP_ShopBuyAreaBackpack", -5070, -1720, 1, 0, 0); //Buy Backpack
	kActor @decoBackpack = ActorFactory.Spawn("Backpack", -5070, -1720, 1, 0, 0);
	decoBackpack.Flags() &= ~AF_CANBETOUCHED;
	decoBackpack.Scale() = kVec3(0.35f, 0.35f, 0.35f);
	
	kActor @statue9 = ActorFactory.Spawn("BP_Statue1", -5170, -1420, 0, 0, 0);
	statue9.Yaw() = Math::Deg2Rad(90);
	ActorFactory.Spawn("BP_ShopBuyAreaLives", -5070, -1420, 1, 0, 0); //Buy Extra Life
	kActor @decoLife = ActorFactory.Spawn("LifeForce_100", -5070, -1420, 1, 0, 0);
	decoLife.Flags() &= ~AF_CANBETOUCHED;
	decoLife.Scale() = kVec3(0.35f, 0.35f, 0.35f);
	
	//Bottom Left
	kActor @statue10 = ActorFactory.Spawn("BP_Statue1", -4330, -2020, 0, 0, 0);
	statue10.Yaw() = Math::Deg2Rad(-90);
	ActorFactory.Spawn("BP_ShopBuyAreaFullHealth", -4430, -2020, 1, 0, 0); //Buy Full Health
	kActor @decoFullHealth = ActorFactory.Spawn("Health_Full", -4430, -2020, 1, 0, 0);
	decoFullHealth.Flags() &= ~AF_CANBETOUCHED;
	decoFullHealth.Scale() = kVec3(0.35f, 0.35f, 0.35f);
	
	kActor @statue11 = ActorFactory.Spawn("BP_Statue1", -4330, -1720, 0, 0, 0);
	statue11.Yaw() = Math::Deg2Rad(-90);
	ActorFactory.Spawn("BP_ShopBuyAreaUltraHealth", -4430, -1720, 1, 0, 0); //Buy Ultra Health
	kActor @decoUltraHealth = ActorFactory.Spawn("Health_Ultra", -4430, -1720, 1, 0, 0);
	decoUltraHealth.Flags() &= ~AF_CANBETOUCHED;
	decoUltraHealth.Scale() = kVec3(0.35f, 0.35f, 0.35f);
	
	kActor @statue12 = ActorFactory.Spawn("BP_Statue1", -4330, -1420, 0, 0, 0);
	statue12.Yaw() = Math::Deg2Rad(-90);
	ActorFactory.Spawn("BP_ShopBuyAreaArmor", -4430, -1420, 1, 0, 0); //Buy Armor
	kActor @decoArmor = ActorFactory.Spawn("TekArmor", -4430, -1420, 1, 0, 0);
	decoArmor.Flags() &= ~AF_CANBETOUCHED;
	decoArmor.Scale() = kVec3(0.35f, 0.35f, 0.35f);

	//Bottom Center
	kActor @statue13 = ActorFactory.Spawn("BP_Statue2",  -4630, -1330, 0, 0, 0); //statue top left
	statue13.Yaw() = Math::Deg2Rad(180);
	ActorFactory.Spawn("Emitter_BP_Fire_Tall2", -4630, -1376, 152, 0, 0);

	kActor @statue14 = ActorFactory.Spawn("BP_Statue2", -4870, -1330, 0, 0, 0); //statue top right
	statue14.Yaw() = Math::Deg2Rad(180);
	ActorFactory.Spawn("Emitter_BP_Fire_Tall2", -4870, -1376, 152, 0, 0);

	kActor @poster = ActorFactory.Spawn("BP_BolokPoster", -4751, -2795, 283, 0, 0); //Bolok Alien Hunter
	poster.Yaw() = Math::Deg2Rad(180.0f);
	poster.Roll() = Math::Deg2Rad(180.0f);
	
	if (HasPlayedShopIntro()) {
		PlayRandomSound(MerchantSounds);
		Game.CallDelayedMapScript(1, instigator, 0); //Update Game
	} else {
		Game.CallDelayedMapScript(2, instigator, 0);
	}
}
//------------------------------------------------------------------------------------------------------------------------
// Game Update
//------------------------------------------------------------------------------------------------------------------------
$script 1 {
	//ActorInWorldTestUpdate();
	
	UpdateGeneralGame();
	
	$restart;
}
//------------------------------------------------------------------------------------------------------------------------
// Intro Start
//------------------------------------------------------------------------------------------------------------------------
$script 2 {
	SetPlayedShopIntro(true);
	Game.CallDelayedMapScript(3, instigator, 0); //Update Intro
	
	Camera.StartCinematic(CMF_LOCK_PLAYER|CMF_UNLOCK_PLAYER_ON_FINISH|CMF_NO_LETTERBOX|CMF_NO_INITIAL_FADEOUT);
	Camera.SetLookAtActor(Player.Actor().CastToActor());
	Camera.fov = 74.0f;
	Camera.SetFinalView(0);
	
	Player.Actor().AnimState().Set(anim_player_idle, 8.0f, ANF_LOOP);
	Player.Actor().ModelVariation() = TV_BOW;
	Player.Actor().Flags() &= ~AF_NODRAW;
	
	//Camera.SetRotateEyeVector(kVec3(-(179*GAME_SCALE), (358*GAME_SCALE), (100*GAME_SCALE)));
    //-4743, -1266, 0f
	//-4743, -2597, 153
	
	//-4743, -2080, 0
	
    Camera.SetPositionTrack(1, kVec3(-4743, -1266, 1000), 
	kVec3(-4743, -1570, 600),
	kVec3(-4743, -1875, 400),
	kVec3(-4743, -2180, 300));
                                       
    Camera.AutoPlayPositionTrack(1, 6.0f, CMLT_LINEAR);
					
				
    Camera.SetRotationTrack(2,
                            Math::Deg2Rad(0.0f), // start angle
                            Math::Deg2Rad(135.0f), // dest angle
                            (10*GAME_SCALE), // start distance
                            (10*GAME_SCALE), // dest distance
                            (10*GAME_SCALE), // start height
                            (10*GAME_SCALE), // dest height
                            (6*GAME_SCALE), // start look at height
                            (6*GAME_SCALE)); // dest look at height
							
    Camera.AutoPlayRotationTrack(2, 12.0f, CMLT_LINEAR);
    
    Camera.AutoPlayBlendTrack(0, 1, 2, 12.0f, CMLT_LINEAR);
	
	Game.PrintLine("The Merchant", 0, 240);
	delay(9.5f);
	Game.HaltMapScript(3);
	Game.PlaySound(MerchantSounds[0]);
	delay(5.0f);
	
	Camera.StopCinematic();
	delay(0.25f);
	Player.Actor().Flags() |= AF_NODRAW;
		
	Game.CallDelayedMapScript(1, instigator, 0); //Update Game
}
//------------------------------------------------------------------------------------------------------------------------
// Intro Update
//------------------------------------------------------------------------------------------------------------------------
$script 3 {
	if (Camera.UserInterrupted()) {
		Game.HaltMapScript(2);
		Game.PlaySound(MerchantSounds[0]);
		Camera.StopCinematic();
		delay(0.25f);
		Player.Actor().Flags() |= AF_NODRAW;
		Game.CallDelayedMapScript(1, instigator, 0); //Update Game
        return;
    }
	$restart;
}
//------------------------------------------------------------------------------------------------------------------------
