Example #1
0
    // OnStateUpdate is called on each Update frame between OnStateEnter and OnStateExit callbacks
    override public void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
    {
        Vector2 dodoToMachine = occupation.position - dodoManager.transform.position;

        if (dodoToMachine.magnitude < 0.05f)
        {
            if (occupationFinishTime == 0)
            {
                dodoManager.transform.rotation = occupation.rotation;
                bool ableToInteract = luringMachine.StartInteraction(dodoManager);
                if (!ableToInteract)
                {
                    dodoManager.stateMachine.SetTrigger("delure");
                    return;
                }
                occupationFinishTime = Time.time + luringMachine.occupationTime;
            }
            else if (Time.time > occupationFinishTime)
            {
                if (luringMachine != null)
                {
                    luringMachine.FinishInteraction(dodoManager);
                    luringMachine = null;
                }
                dodoManager.stateMachine.SetTrigger("delure");
            }
        }
        else if (Time.time > lureTimeout)
        {
            dodoManager.stateMachine.SetTrigger("delure");
        }
        else
        {
            dodoManager.transform.Translate(dodoToMachine * Time.deltaTime * dodoManager.speed, Space.World);
            float angle = Mathf.Atan2(-dodoToMachine.y, -dodoToMachine.x) * Mathf.Rad2Deg;
            dodoManager.transform.rotation = Quaternion.AngleAxis(angle + 90, Vector3.forward);
        }
    }