Ejemplo n.º 1
0
            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);
            }
Ejemplo n.º 2
0
            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);
            }
Ejemplo n.º 3
0
            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);
            }