public ICharacterState Step() { if (target.Dead) { return(new IdleState(behaviour, character)); } var reached = behaviour.Chase(target); if (reached) { var done = behaviour.Attack(target); if (done) { // Re-evaluate after each attack return(new IdleState(behaviour, character)); } } return(this); }