public static RoboPosition PerformAction(RoboBoard board, ActionPhase actionPhase, RoboAction action, RoboPosition position) { if (action == null) { return(position); } position.Assign(action.PerformAction(position, board)); position.Assign(PerformAction(board, actionPhase, board.GetField(position).OnRobotAction(actionPhase, action, position), position)); return(position); }
public static RoboPosition PlayCardCore(RoboBoard board, RoboCard card, RoboPosition position) { foreach (RoboAction action in card.GetActionList(position)) { if (position.IsDead || board.GetField(position).IsDestination) { return(position); } position.Assign(PerformAction(board, ActionPhase.ActionCard, action, position)); } position.Assign(PerformAction(board, ActionPhase.ActionConveyor, RoboAction.EMPTY, position)); position.Assign(PerformAction(board, ActionPhase.ActionPusher, RoboAction.EMPTY, position)); position.Assign(PerformAction(board, ActionPhase.ActionRotator, RoboAction.EMPTY, position)); return(position); }