namespace BP
{
	namespace Weapon
	{
		class Shotgun : ScriptWeapon
		{   
			float m_fYOffset;
			float m_fInitialYOffset;
			float m_fReturnTime;
			//------------------------------------------------------------------------------------------------------------------------
			Shotgun(kWeapon @actor)
			{
				id = kWpn_Shotgun;
				super(actor);
				
				m_fInitialYOffset = self.Origin().y;
				m_fYOffset = 0.0f;
				m_fReturnTime = 0.0f;
			}
			//------------------------------------------------------------------------------------------------------------------------
			void OnSerialize(kDict& out dict)
			{
				SERIALIZE(m_fYOffset);
				SERIALIZE(m_fInitialYOffset);
				SERIALIZE(m_fReturnTime);
			}
			//------------------------------------------------------------------------------------------------------------------------
			void OnDeserialize(kDict& in dict)
			{
				DESERIALIZE_FLOAT(m_fYOffset);
				DESERIALIZE_FLOAT(m_fInitialYOffset);
				DESERIALIZE_FLOAT(m_fReturnTime);
				
				self.Origin().y = m_fYOffset;
			}
			//------------------------------------------------------------------------------------------------------------------------
			void OnTick(void) override
			{
				ScriptWeapon::OnTick();
				self.Origin().y = m_fYOffset;
						
				if(m_fReturnTime <= 0.0f)
				{
					if(self.AnimTrackComponent().PlayingID() == ANIM_WPN_ATK1)
					{
						if(self.AnimTrackComponent().TrackTime() > 0.8f)
						{
							m_fReturnTime = 1.0f;
						} 
					}
					
					return;
				}
				
				m_fReturnTime = Math::Max(m_fReturnTime - (GAME_DELTA_TIME * 0.35f), 0.0f);
				
				float t = Math::HermiteBlend(0.0f, 0.0f, Math::SmoothStep(0.0, 0.5, 1.0f - m_fReturnTime));
				m_fYOffset = (m_fInitialYOffset - m_fYOffset) * t + m_fYOffset;
			}
			//------------------------------------------------------------------------------------------------------------------------
			void OnBeginFire(void) override
			{
				ScriptWeapon::OnBeginFire();
				m_fYOffset = 5*GAME_SCALE;
				m_fReturnTime = 0.0f;
			}
			//------------------------------------------------------------------------------------------------------------------------
			void OnLower(void) override
			{
				ScriptWeapon::OnLower();
				m_fReturnTime = 0.0f;
			}
			//------------------------------------------------------------------------------------------------------------------------
			void OnRaise(void) override
			{
				ScriptWeapon::OnRaise();
				m_fReturnTime = 0.0f;
			}
			//------------------------------------------------------------------------------------------------------------------------
		};
	}
}
