protected BaseAction Decide() { var initialAction = MoveAction.GetRandom(); switch (initialAction) { case MoveAction m: if (!CanMove(m.direction)) { return(new NoAction()); } return(m); default: return(initialAction); } }