private IEnumerator handleIdleState() { float timePassed = 0f; int rightOrLeftRoll = Random.Range(0, 2); while (timePassed < idleTime) { timePassed += Time.deltaTime; mover.turn(rightOrLeftRoll == 0, Time.deltaTime); //determine next state if (getDistanceToPlayer() < aggroDistance) { currentState = spiderState.following; } else { currentState = spiderState.wandering; } yield return(null); } }
private IEnumerator moveTowardPlayerKeepingDistance() { float timePassed = 0f; while (timePassed < walkTime && getDistanceToPlayer() > followDistance) { timePassed += Time.deltaTime; mover.moveForward(Time.deltaTime); yield return(null); } if (getDistanceToPlayer() < followDistance) { currentState = spiderState.chasing; } yield return(null); }
private IEnumerator handleWanderingState() { float timePassed = 0f; while (timePassed < walkTime) { timePassed += Time.deltaTime; mover.moveForward(Time.deltaTime); //determine next state if (getDistanceToPlayer() < aggroDistance) { currentState = spiderState.following; } else { currentState = spiderState.idle; } yield return(null); } }
private IEnumerator handleChasingState() { yield return(lookInDirectionOfPlayer()); float oldMoveSpeed = mover.moveSpeed; float oldWalkTime = walkTime; walkTime = walkTime / 2f; mover.moveSpeed = mover.moveSpeed * 2f; float timePassed = 0; while (timePassed < walkTime) { timePassed += Time.deltaTime; mover.moveForward(Time.deltaTime); yield return(null); } currentState = spiderState.idle; mover.moveSpeed = oldMoveSpeed; walkTime = oldWalkTime; yield return(null); }
private void Start() { currentState = spiderState.idle; StartCoroutine(spiderStateMachine()); }