void Update()
    {
        if (!isFreeze)
        {
            return;
        }
        if (!m_TimelineManager.m_MoveTimeline.Locked)
        {
            if (Input.GetButtonDown("Horizontal"))
            {
                // Start recording horizontal movement
                m_StartActionTime = Time.time;
                float  direction   = GetMoveDirection();
                float  currentTime = Time.time;
                float  duration    = currentTime - m_StartActionTime;
                Action action      = new MoveAction(m_StartActionTime - m_PlayTime, duration, direction, 1);
                m_TimelineManager.RecordAction(action);
                Move(direction);
            }


            if (Input.GetButton("Horizontal"))
            {
                float direction   = GetMoveDirection();
                float currentTime = Time.time;
                float duration    = currentTime - m_StartActionTime;
                m_TimelineManager.m_MoveTimeline.UpdateDurationLastAction(duration);
                m_TimelineManager.m_MoveTimeline.UpdateDirectionLastAction(direction);
                Move(direction);
            }

            if (Input.GetButtonUp("Horizontal"))
            {
                float direction   = GetMoveDirection();
                float currentTime = Time.time;
                float duration    = currentTime - m_StartActionTime;
                m_TimelineManager.m_MoveTimeline.UpdateDurationLastAction(duration);
                Debug.Log("Add new action at " + m_StartActionTime + ". Move timeline: " + m_TimelineManager.m_MoveTimeline.Length());
            }
        }



        // Jump
        if (Input.GetButtonDown("Jump") && !m_TimelineManager.m_JumpTimeline.Locked)
        {
            float  time   = Time.time - m_PlayTime;
            Action action = new JumpAction(time);
            if (Jump())
            {
                m_TimelineManager.RecordAction(action);
            }
            Debug.Log("Jump timeline: " + m_TimelineManager.m_JumpTimeline.Length());
        }


        // Shoot
        if (Input.GetButtonDown("Fire1") && m_BulletRemaining > 0 && !m_TimelineManager.m_ShootTimeline.Locked)
        {
            float  time   = Time.time - m_PlayTime;
            Action action = new ShootAction(time);
            Fire();
            m_TimelineManager.RecordAction(action);
            Debug.Log("Shoot timeline: " + m_TimelineManager.m_ShootTimeline.Length());
        }
    }