void _handlePatrolState() { if (Vector2.Distance(transform.position, moveDest) < reachDist) { //Transition to idle idleDone = Time.time + Random.Range(1.5f, 3.0f); state = G_State.Idle; anim.SetFloat("move", 0); anim.SetTrigger("idle"); } }
void _handleIdleState() { if (Time.time > idleDone) { //Transition back to patrolling if (patrolSwitch) { moveDest = patrolLoc.position; } else { moveDest = startPos; } patrolSwitch = !patrolSwitch; state = G_State.Patrolling; } }
// Start is called before the first frame update void Start() { startPos = transform.position; state = G_State.Patrolling; newState = G_State.Null; m_Rigidbody2D = GetComponent <Rigidbody2D>(); anim = GetComponent <Animator>(); if (target != null) { state = G_State.Chasing; moveDest = target.transform.position; } else if (patrolLoc != null) { moveDest = patrolLoc.position; } }
// Update is called once per frame void Update() { switch (state) { case G_State.Patrolling: Move(); _handlePatrolState(); break; case G_State.Chasing: Move(); _handleChaseState(); break; case G_State.Idle: _handleIdleState(); break; } if (newState != G_State.Null && target == null) { state = newState; newState = G_State.Null; } }
public void SetNewState(G_State n) { newState = n; }