// Update is called once per frame
 public override void UpdateLevel()
 {
     switch (m_structure) {
     case TutorialStructure.IDLE:
         if(startTutorial)
         {
             if(Mathf.Approximately(cannonFireScript.gameObject.transform.position.x, 0.0f))
             {
                 MoveToPosition();
                 m_structure =  TutorialStructure.MOVE_TO_FIRE_BUTTON;
                 fireTrigger.enabled = true;
                 cannonFireScript.stopDropper = true;
             }
         }
         break;
     case TutorialStructure.MOVE_TO_FIRE_BUTTON:
         if(lerp.animationEnded)
         {
             if(!restingCoroutine)
             {
                 StartCoroutine(StartRestingAnimation());
             }
         }
         break;
     case TutorialStructure.WAIT_FOR_PRESSING:
         break;
     default:
         break;
     }
 }
 //----------------------------------------------------------------------------------------------------
 // Update is called once per frame
 //----------------------------------------------------------------------------------------------------
 void Update()
 {
     switch (m_structure) {
         case TutorialStructure.IDLE:
             m_next_state = TutorialStructure.STIMULUS1_CORRECT;
             currPointingIndex = 0;
             currNextPointingIndex = 0;
             break;
         case TutorialStructure.STIMULUS1_CORRECT:
             SettingCurrentStep(TutorialStructure.STIMULUS2_WRONG,0,1);
             break;
         case TutorialStructure.STIMULUS2_WRONG:
             SettingCurrentStep(TutorialStructure.STIMULUS2_CORRECT,1,0);
             break;
         case TutorialStructure.STIMULUS2_CORRECT:
             SettingCurrentStep(TutorialStructure.STIMULUS3_CORRECT,0,3);
             break;
         case TutorialStructure.STIMULUS3_CORRECT:
             SettingCurrentStep(TutorialStructure.ENDING,3,0);
             break;
         case TutorialStructure.ENDING:
             break;
         default:
             break;
         }
 }
    private void SettingCurrentStep(TutorialStructure next, int curridx, int nextidx)
    {
        m_next_state = next;
        currPointingIndex = curridx;
        if(activateAnimation)
        {
            activateAnimation = false;
            lerp.StartAnimation();
        }
        else if(lerp.animationEnded)
        {
            if(!restingCoroutine)
            {
                StartCoroutine(StartRestingAnimation());
            }
        }

        if(acquiringInput)
        {
            currNextPointingIndex = nextidx;
            AcquirePlayerInput();
        }
    }
 private void ChangeState()
 {
     activateAnimation = true;
     acquiringInput = true;
     m_structure = m_next_state;
 }