public override RoboAction OnRobotStay(ActionPhase actionPhase, RoboAction action, RoboPosition position) { switch (actionPhase) { case ActionPhase.ActionPusher: position.IsDead = true; break; } return(base.OnRobotStay(actionPhase, action, position)); }
public override RoboAction OnRobotStay(ActionPhase actionPhase, RoboAction action, RoboPosition position) { switch (actionPhase) { case ActionPhase.ActionRotator: return(new RoboRotation( (FieldType & FieldType.RotatorLeft) == FieldType.RotatorLeft ? Rotation.Left : Rotation.Right )); } return(base.OnRobotStay(actionPhase, action, position)); }
public override RoboAction OnRobotStay(ActionPhase actionPhase, RoboAction action, RoboPosition position) { switch (actionPhase) { case ActionPhase.ActionConveyor: return(new RoboMovement ( (FieldType & FieldType.ConveyorDown) == FieldType.ConveyorDown ? Direction.Down : (FieldType & FieldType.ConveyorLeft) == FieldType.ConveyorLeft ? Direction.Left : (FieldType & FieldType.ConveyorRight) == FieldType.ConveyorRight ? Direction.Right : Direction.Up )); } return(base.OnRobotStay(actionPhase, action, position)); }
/// <summary> /// Main function for handling robot action - splits behavior in enter (move in), rotation and stay to ease up programming... /// </summary> /// <param name="actionPhase"> /// A <see cref="ActionPhase"/> /// </param> /// <param name="action"> /// A <see cref="RoboAction"/> /// </param> /// <param name="position"> /// A <see cref="RoboPosition"/> /// </param> /// <returns> /// A <see cref="RoboAction"/> /// </returns> public virtual RoboAction OnRobotAction(ActionPhase actionPhase, RoboAction action, RoboPosition position) { if (position.IsDead) { return(null); } if (action is RoboMovement) { return(OnRobotEnter(actionPhase, action as RoboMovement, position)); } if (action is RoboRotation) { return(OnRobotRotate(actionPhase, action as RoboRotation, position)); } return(OnRobotStay(actionPhase, action, position)); }
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 override RoboAction OnRobotAction(ActionPhase actionPhase, RoboAction action, RoboPosition position) { position.IsDead = true; return(null); }
public virtual RoboAction OnRobotStay(ActionPhase actionPhase, RoboAction action, RoboPosition position) { return(null); }