/// <summary>
 /// Translate the RobotActions into real world robot movements serial commands 
 /// </summary>
 /// <param name="action"></param>
 public override void DoActions(PhysicalRobotAction action)
 {
     if (action.ActionType == PhysicalActionType.MoveForward)
         moveDistance(action.RobotId, (int) action.ActionValue);
     else if (action.ActionType == PhysicalActionType.MoveBackward)
         moveDistance(action.RobotId, -1*(int)action.ActionValue);
     else if (action.ActionType == PhysicalActionType.Turn)
         rotateDegree(action.RobotId, (int)action.ActionValue);
     else if (action.ActionType == PhysicalActionType.SetSpeed)
         moveDistance(action.RobotId, (int)action.ActionValue);
 }
        public override void DoActions(PhysicalRobotAction action)
        {
            //Console.WriteLine("Sending action to simulator");
            Random rng = new Random();

            if (action.ActionType == PhysicalActionType.MoveForward)
            {
                //Accounts for scaling differences in the simulator and the controller
                action.ActionValue = (action.ActionValue / 1000) * this.scale;
                Console.WriteLine("=====================MOVING FORWARD THIS DISTANCE: " + action.ActionValue);
                CS266.SimCon.Simulator.RobotActions rb = new RobotActions();
                rb.Add(new RobotAction(action.RobotId.ToString(), 0, (float)action.ActionValue));
                os.ExecuteActions(rb);
            }
            else if (action.ActionType == PhysicalActionType.MoveBackward)
            {
                //Accounts for scaling differences in the simulator and controller
                action.ActionValue = (action.ActionValue / 1000) * this.scale;
                CS266.SimCon.Simulator.RobotActions rb = new RobotActions();
                rb.Add(new RobotAction(action.RobotId.ToString(), 0, (float)-action.ActionValue));
                os.ExecuteActions(rb);
            }
            else if (action.ActionType == PhysicalActionType.Turn)
            {
                if (os.Algo.name != "DFS")
                {
                    if (action.ActionValue < 0)
                    {
                        action.ActionValue = (-1) * (360f + action.ActionValue);
                    }
                    else
                    {
                        action.ActionValue *= -1;
                    }
                }

                Console.WriteLine("=====================TURNING THIS ANGLE: " + action.ActionValue);

                CS266.SimCon.Simulator.RobotActions rb = new RobotActions();

                //rb.Add(new RobotAction(action.RobotId.ToString(), (float)action.ActionValue, 0));

                rb.Add(new RobotAction(action.RobotId.ToString(), (-1) * (float)action.ActionValue, 0));
                // multiply by -1 to undo what Robot.cs does!
                os.ExecuteActions(rb);
            }
            else if (action.ActionType == PhysicalActionType.CreateRobot)
            {
                os.AddNewRobot(new ObjectState("N1", "robot", new float[3] { DFSExperiment.doorX, DFSExperiment.doorY, 0 }, new float[3] { 1, 0, 0 }, new float[3] { 0, 0, 0 }, new float[3] { 0, 0, 0 }));
            }
            else if (action.ActionType == PhysicalActionType.SetSpeed) { }
            //System.Threading.Thread.Sleep(500);
        }
 public abstract void DoActions(PhysicalRobotAction action);