public void ExecuteState() { switch (_state) { case State.Neutral: var pos = _intaractableGoal.InteractPosition(_agent.transform.position); _interactGoalPosition = new Vector2(pos.x, pos.z); _agent.SetDestination(pos); _state = State.GoToIntactable; return; case State.GoToIntactable: if (_agent.HasReachedTarget()) { _agent.ResetPath(); if (_agent.enabled) { cam.StartAdjustPosition(_interactGameObject); } _agent.ResetPath(); if (_agent.updateRotation) { _agent.ResetPath(); var t = Vector2.Distance(_interactGoalPosition, new Vector2(_agent.transform.position.x, _agent.transform.position.z)); _state = t < .6 ? State.Interact : State.Done; } } return; case State.Interact: var puh = _agent.gameObject.GetComponent <PickupHandler>(); if (_interactGameObject.tag == Constants.Tags.Lever && _intaractableGoal.CanThisBeInteractedWith(puh.CurrentPickup)) { _agent.gameObject.GetComponent <Animator>().SetTrigger("PullLever"); } else if (_interactGameObject.tag == Constants.Tags.Brazier && _intaractableGoal.CanThisBeInteractedWith(puh.CurrentPickup)) { _agent.gameObject.GetComponent <Animator>().SetTrigger("LightFire"); } else if (_interactGameObject.tag == Constants.Tags.Keyhole) { if (_intaractableGoal.CanThisBeInteractedWith(puh.CurrentPickup)) { _agent.gameObject.GetComponent <Animator>().SetTrigger("OpenDoor"); } else { _agent.gameObject.GetComponent <Animator>().SetTrigger("DoorLocked"); } } else if (_interactGameObject.tag == Constants.Tags.Key || _interactGameObject.tag == Constants.Tags.Stick) { _agent.gameObject.GetComponent <Animator>().SetTrigger("PickUp"); } var returnItem = _intaractableGoal.Interact(puh.CurrentPickup); puh.PickUpItem(returnItem); _agent.ResetPath(); _waitUntill = Time.time + WaitingTime; _state = State.WaitSomeTime; return; case State.WaitSomeTime: _agent.ResetPath(); if (_waitUntill < Time.time) { _state = State.Done; } return; default: return; } }