//TommyTurok
/*
==============================================================
Tommy
==============================================================
*/

final class Tommy : TurokWeapon
{   
    float m_fYOffset;
    float m_fInitialYOffset;
    float m_fReturnTime;
    
    Tommy(kWeapon @actor)
    {
        super(actor);
        
        m_fInitialYOffset = self.Origin().y;
        m_fYOffset = 0.0f;
        m_fReturnTime = 0.0f;
    }
    
    /*
    ==============================================================
    OnSerialize
    ==============================================================
    */
    
    void OnSerialize(kDict& out dict)
    {
        SERIALIZE(m_fYOffset);
        SERIALIZE(m_fInitialYOffset);
        SERIALIZE(m_fReturnTime);
    }
    
    /*
    ==============================================================
    OnDeserialize
    ==============================================================
    */
    
    void OnDeserialize(kDict& in dict)
    {
        DESERIALIZE_FLOAT(m_fYOffset);
        DESERIALIZE_FLOAT(m_fInitialYOffset);
        DESERIALIZE_FLOAT(m_fReturnTime);
        
        self.Origin().y = m_fYOffset;
    }
    
    /*
    ==============================================================
    OnTick
    ==============================================================
    */
    
    void OnTick(void)
    {
        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;
    }
    
    /*
    ==============================================================
    OnFire
    ==============================================================
    */
    
    void OnFire(void)
    {
        self.PlaySound("sounds/shaders/TOMMY.ksnd");
	self.AnimTrackComponent().ChangeSpeed(0.64f);

    }
    
    /*
    ==============================================================
    OnBeginFire
    ==============================================================
    */
    
    void OnBeginFire(void)
    {
        m_fYOffset = 5*GAME_SCALE;
        m_fReturnTime = 0.0f;
    }
    
    /*
    ==============================================================
    OnLower
    ==============================================================
    */
    
    void OnLower(void)
    {
        m_fReturnTime = 3.0f;
    }
    
    /*
    ==============================================================
    OnRaise
    ==============================================================
    */
    
    void OnRaise(void)
    {
        m_fReturnTime = 6.0f;
    }
}
