namespace BP
{
	namespace Weapon
	{
		class PlasmaRifle : ScriptWeapon
		{   
			float m_fSpeed;
			float m_fFireTime;
			//------------------------------------------------------------------------------------------------------------------------
			PlasmaRifle(kWeapon @actor)
			{
				id = kWpn_PlasmaRifle;
				super(actor);
				m_fSpeed = 4.0f;
				m_fFireTime = 0.0f;
			}
			//------------------------------------------------------------------------------------------------------------------------
			void OnBeginFire(void) override
			{
				ScriptWeapon::OnBeginFire();
				m_fSpeed = 4.0f;
				m_fFireTime = 0.0f;
			}
			//------------------------------------------------------------------------------------------------------------------------
			void OnFire(void) override
			{
				ScriptWeapon::OnFire();
			}
			//------------------------------------------------------------------------------------------------------------------------
			void OnTick(void) override
			{
				ScriptWeapon::OnTick();
				
				if (self.AnimTrackComponent().PlayingID() == ANIM_WPN_ATK1)
				{
					if(self.AnimTrackComponent().TrackTime() >= 0.5f)
					{
						if(m_fSpeed <= 4.0f)
						{
							m_fSpeed = IsMultiplayer() ? 64.0f : 32.0f;
							m_fFireTime = 1.0f;
						}
						else
						{
							self.AnimTrackComponent().ChangeSpeed(m_fSpeed);
						
							m_fFireTime = Math::Max(m_fFireTime - (GAME_DELTA_TIME * 0.5f), 0.0f);
							float t = Math::HermiteBlend(0.0f, 0.0f, Math::SmoothStep(0.125, 0.4, 1.0f - m_fFireTime));
							m_fSpeed = (4.0f - m_fSpeed) * t + m_fSpeed;
						}
					}
				}
			}
			//------------------------------------------------------------------------------------------------------------------------
			void OnLower(void) override
			{
				ScriptWeapon::OnLower();
				m_fSpeed = 4.0f;
				m_fFireTime = 0.0f;
			}
			//------------------------------------------------------------------------------------------------------------------------
			void OnRaise(void) override
			{
				ScriptWeapon::OnRaise();
				m_fSpeed = 4.0f;
				m_fFireTime = 0.0f;
			}
			//------------------------------------------------------------------------------------------------------------------------
		};
	}
}
