private void OnCollisionEnter(Collision collision) { if (collision.collider.name == "Sesame" && (tigerState == TigerState.Charge || tigerState == TigerState.JumpAttack)) { collided = true; Debug.Log("Love Sesame"); rigidbody.velocity = Vector3.zero; target.GetComponent <SesameHealth>().decrementHealth(40); tigerState = TigerState.Idol; } }
IEnumerator TigerStateMachine() { while (true) { Debug.Log("State Machine"); if (target) { switch (tigerState) { case TigerState.Charge: StartCoroutine("Charge"); yield return(new WaitUntil(() => finish)); tigerState = TigerState.Idol; break; case TigerState.Idol:; StartCoroutine("Idol"); yield return(new WaitForEndOfFrame()); break; case TigerState.JumpAttack: StartCoroutine("JumpAttack"); yield return(new WaitUntil(() => finish)); tigerState = TigerState.Idol; break; case TigerState.Attack: StartCoroutine("Palm"); yield return(new WaitUntil(() => finish)); tigerState = TigerState.Idol; break; case TigerState.Alert: StartCoroutine("Alert"); yield return(new WaitUntil(() => finish)); tigerState = TigerState.Idol; break; default: yield return(new WaitUntil(() => finish)); break; } } yield return(new WaitForFixedUpdate()); } }
IEnumerator Idol() { Debug.Log("Idol"); float random = Random.Range(0, 3); if (CheckDistance() < 3f) { collided = false; if (random >= 0 && random < 1) { tigerState = TigerState.Attack; } else if (random >= 1 && random < 2) { tigerState = TigerState.Idol; } else if (random >= 2 && random < 3) { tigerState = TigerState.Alert; } } else { if (random >= 0 && random < 1) { tigerState = TigerState.Charge; } else if (random >= 1 && random < 2) { tigerState = TigerState.Alert; } else if (random >= 2 && random < 3) { tigerState = TigerState.JumpAttack; } } Debug.Log("end of idol attack"); Debug.Log("Next State: " + tigerState); finish = false; yield return(null); }