public bool Perform() { switch (this.State) { case 0: //Next Waypoint if (Waypoints.Count == 0) { return(true); } CurrentWaypoint = Waypoints.Dequeue(); if (Align) { this.State = 1; } else { this.State = 2; } break; case 1: Drone.Log("Rotating"); if (Drone.ManeuverService.AlignBlockTo(CurrentWaypoint, ReferenceBlock)) { this.State = 2; } break; case 2: Drone.Log("Translating"); if (Drone.FlyTo(CurrentWaypoint, ReferenceBlock, Align, SpeedLimit)) { this.State = 3; } break; case 3: Drone.AllStop(); this.State = 0; break; } return(false); }
public bool Mine() { switch (this.State) { //Mining Tunnel case 0: Drone.ManeuverService.AlignBlockTo(EndPoint, Drone.Remote); if (Drone.FlyTo(EndPoint, Drone.Remote, false, 0.3)) { State = 1; } else if (Drone.CurrentCargo() > MyFixedPoint.MultiplySafe(Drone.MaxCargo, 0.9f)) { Drone.AllStop(); State = 2; } break; //Tunnel complete case 1: Drone.Program.IGC.SendUnicastMessage(ParentAddress, "tunnel_complete", TunnelIndex); State = 3; break; //Unable to continue case 2: State = 3; break; //Backing out case 3: //Calculate backout point Vector3D BackOutPoint = (EndPoint - StartingPoint) * 2; if (Drone.FlyTo(StartingPoint, Drone.DockingConnector, false, 1)) { return(true); } break; } return(false); }
public bool Perform() { switch (State) { case "Initial": State = "Requesting Clearance"; break; case "Requesting Clearance": SendRequest(); State = "Waiting for Clearance"; break; case "Waiting for Clearance": Drone.Log("Waiting for clearance"); break; case "Approaching Dock": if (Move == null) { Move = new Move(Drone, new Queue <Vector3D>(new[] { ApproachPath[0] }), Drone.Remote, true); } if (Move.Perform()) { Move = null; State = "Docking"; } break; case "Docking": DockingPort.Enabled = true; Vector3D nearDock = ApproachPath[1] + Vector3D.Normalize(ApproachPath[0] - ApproachPath[1]) * 2.5; if (Move == null) { Move = new Move(Drone, new Queue <Vector3D>(new[] { nearDock }), DockingPort, true); } if (Move.Perform()) { Move = null; Drone.AllStop(); State = "Final Approach"; } break; case "Final Approach": if (Move == null) { Move = new Move(Drone, new Queue <Vector3D>(new[] { ApproachPath[1] }), DockingPort, true, 0.25); } if (Move.Perform() || DockingPort.Status == MyShipConnectorStatus.Connected) { Move = null; Drone.AllStop(); State = "Connecting"; } DockingPort.Connect(); break; case "Connecting": if (DockingPort.Status == MyShipConnectorStatus.Connected) { Drone.AllStop(); State = "Final"; } DockingPort.Connect(); break; case "Final": return(true); } return(false); }