namespace BP
{
	namespace Weapon
	{
		const float FLARE_CHARGE_TIME = 7.0f;
		const int FLARE_TEXTURE_COUNT = 6;
		
		float flareChargeTime;
		
		class Flare : ScriptWeapon
		{
			int flareTextureIndex = -1;
			int lastTextureIndex = -2;
			//------------------------------------------------------------------------------------------------------------------------
			Flare(kWeapon @actor)
			{
				id = kWpn_Flare;
				super(actor);
			}
			//------------------------------------------------------------------------------------------------------------------------
			void OnSerialize(kDict& out dict)
			{
				SERIALIZE(flareChargeTime);
			}
			//------------------------------------------------------------------------------------------------------------------------
			void OnDeserialize(kDict& in dict)
			{
				DESERIALIZE_FLOAT(flareChargeTime);
			}
			//------------------------------------------------------------------------------------------------------------------------
			void OnBeginFire() override
			{
				ScriptWeapon::OnBeginFire();
				flareChargeTime = FLARE_CHARGE_TIME;
				self.PlaySound("sounds/shaders/BP/Flare Shot.ksnd");
			}
			//------------------------------------------------------------------------------------------------------------------------
			void OnGameTick() override
			{
				ScriptWeapon::OnGameTick();
				
				flareChargeTime = MAX(flareChargeTime - GAME_DELTA_TIME, 0.0f);
				flareTextureIndex =  int(FLARE_TEXTURE_COUNT * (flareChargeTime / FLARE_CHARGE_TIME)) - 1;
				if (lastTextureIndex != flareTextureIndex)
				{
					lastTextureIndex = flareTextureIndex;
					self.RenderMeshComponent().AltTexture() = flareTextureIndex;
				}
			}
			//------------------------------------------------------------------------------------------------------------------------
			void OnFiredParticleFromAnim(kParticle@ pFlare) override
			{
				ScriptWeapon::OnFiredParticleFromAnim(@pFlare);
				// spawn a controller for manipulating the missile
				kActor@ pController = ActorFactory.Spawn(kActor_Controller_Flare, pFlare.Origin(), 0.0f, 0.0f, 0.0f);
				pController.SetTarget(pFlare);
				pController.PlayLoopingSound(552); //flare fizzle loop
				// self.SetTarget(pController);
			}
			//------------------------------------------------------------------------------------------------------------------------
		};
	}
}
