public ICharacterState Step() { findTargetCooldown.Update(); // Attack if there is target if (findTargetCooldown.Ready()) { var target = behaviour.FindTarget(); if (target != null) { return(new AttackState(behaviour, character, target)); } } // Keep patrolling var finished = behaviour.Patrol(); if (!finished) { return(this); } return(new IdleState(behaviour, character)); }