Exemple #1
0
        private bool IssueDockOrder(DroneContext drone)
        {
            //if (dockOrders.Count > 3)
            //  return false;

            //log.Debug("Attampting Dock Order. miner? "+ (drone.Info.NumDrills > 0));
            var unused = (drone.Info.NumDrills > 0) ?
                         shipComponents.Connectors.Where(x => x.Status != MyShipConnectorStatus.Connectable && x.Status != MyShipConnectorStatus.Connected && x.CustomName.Contains("#miner#") && !x.CustomName.Contains("#trash#")) :
                         shipComponents.Connectors.Where(x => x.Status != MyShipConnectorStatus.Connectable && x.Status != MyShipConnectorStatus.Connected && !x.CustomName.Contains("#miner#") && !x.CustomName.Contains("#trash#"));

            var used            = drones.Where(x => x.Order != null && x.Order.Connector != null).Select(x => x.Order.Connector);
            var available       = unused.Where(x => !used.Contains(x));
            var usableConnector = available.FirstOrDefault();

            //log.Debug("unused: " + unused.Count() + " used: " + used.Count() + " available: " + available.Count() + "  : " + (usableConnector != null));

            if (usableConnector != null)
            {
                log.Debug("Issuing Dock Order");
                var order = new DroneOrder(log, OrderType.Dock, communicationSystems.GetMsgSntCount(), usableConnector.EntityId, drone.Info.EntityId, usableConnector.GetPosition(), usableConnector.WorldMatrix.Forward, usableConnector.WorldMatrix.Up);
                order.Connector = usableConnector;
                communicationSystems.TransmitOrder(order, Me.CubeGrid.EntityId);
                drone.Order = order;
                return(true);
            }
            return(false);
        }
Exemple #2
0
        private void IssueScanOrder(DroneContext droneInfo)
        {
            var existingOrder = OngoingScanOrders.Where(x => x.DroneId == droneInfo.Info.EntityId).ToList();

            if (existingOrder.Any())
            {
                droneInfo.Order = existingOrder.First();
            }
            else
            {
                var drone        = droneInfo.Info;
                var miningTarget = trackingSystems.GetNearestScanPoint(Me.GetPosition(), 600);
                if (miningTarget != null)
                {
                    miningTarget.HasPendingOrder = true;
                    var order = new DroneOrder(log, OrderType.Scan, communicationSystems.GetMsgSntCount(), 0, drone.EntityId, miningTarget.Location, navigationSystems.GetGravityDirection(), Vector3D.Zero);
                    OngoingScanOrders.Add(order);
                    order.PointOfIntrest = miningTarget;
                    droneInfo.Order      = order;
                    communicationSystems.TransmitOrder(order, Me.CubeGrid.EntityId);
                    log.Debug("scan order sent");
                }
                else
                {
                    log.Debug("failed to get scan location");
                }
            }
        }
Exemple #3
0
        public void IntrepretMessage(String argument)
        {
            if (argument == null)
            {
                return;
            }

            var pm = communicationSystems.ParseMessage(argument);

            if (!registered && pm.TargetEntityId == Me.CubeGrid.EntityId && pm.MessageType == MessageCode.Confirmation)
            {
                registered        = true;
                CommandShipEntity = pm.EntityId;
                log.Debug("Registered!!");
            }

            if (ParsedMessage.MaxNumBounces < pm.NumBounces && pm.MessageType != MessageCode.PingEntity)
            {
                pm.NumBounces++;
                //LOG.Debug("Bounced Message");
                communicationSystems.SendMessage(pm.ToString());
            }

            if (pm.IsAwakeningSignal)
            {
                ForceStartup();
            }
            else if (registered)
            {
                switch (pm.MessageType)
                {
                case MessageCode.Order:
                    if (CommandShipEntity == pm.CommanderId)
                    {
                        //log.Debug(pm.OrderType+" order recieved");
                        if (pm.OrderType == OrderType.Dock && CurrentOrder != null && CurrentOrder.Ordertype == OrderType.Dock)
                        {
                            try
                            {
                                CurrentOrder.PrimaryLocation = pm.Location;
                                CurrentOrder.UpdateDockingCoords();
                            }
                            catch (Exception e) { log.Error(e.StackTrace); }
                        }
                        else
                        {
                            NextOrder = new DroneOrder(log, pm.OrderType, pm.RequestID, pm.TargetEntityId, pm.EntityId, pm.Location, pm.AlignUp, pm.AlignForward);
                        }
                    }
                    break;
                    //case MessageCode.PingEntity:
                    //    if (pm.Type.Trim().ToLower().Contains("planet"))
                    //        trackingSystems.UpdatePlanetData(pm, false);
                    //    else
                    //        trackingSystems.UpdateTrackedEntity(pm, false);

                    //    break;
                }
            }
        }
Exemple #4
0
        private void IssueStandbyOrder(DroneContext drone)
        {
            log.Debug("Attampting Standby Order");
            var order = new DroneOrder(log, OrderType.Standby, communicationSystems.GetMsgSntCount(), 0, drone.Info.EntityId, Vector3D.Zero, Vector3D.Zero, Vector3D.Zero);

            communicationSystems.TransmitOrder(order, Me.CubeGrid.EntityId);
            drone.Order = order;
        }
        internal static string CreateEncryptedOrder(DroneOrder order, long commandId)
        {
            string ordertype = "";

            switch (order.Ordertype)
            {
            case OrderType.AlignTo:
                ordertype = ALIGNTOORDER;
                break;

            case OrderType.Dock:
                ordertype = DOCKORDER;
                break;

            case OrderType.Undock:
                ordertype = UNDOCKORDER;
                break;

            case OrderType.FlyTo:
                ordertype = FLYTOORDER;
                break;

            case OrderType.Mine:
                ordertype = MININGORDER;
                break;

            case OrderType.Scan:
                ordertype = SCANTOORDER;
                break;

            case OrderType.Attack:
                ordertype = ATTACKORDER;
                break;

            case OrderType.Standby:
                ordertype = STANDBYORDER;
                break;
            }
            var msgStr = MESSAGETYPE_FLAG + ":" + ORDER_FLAG +
                         "," + ORDERTYPE_FLAG + ":" + ordertype +
                         "," + TARGETID_FLAG + ":" + order.TargetEntityID +
                         "," + ALIGNFORWARDVECTOR_FLAG + ":" + VectorToString(order.DirectionalVectorOne) +
                         "," + ALIGNUPVECTOR_FLAG + ":" + VectorToString(order.ThirdLocation) +
                         "," + COMMANDID_FLAG + ":" + commandId +
                         "," + ENTITYID_FLAG + ":" + order.DroneId +
                         "," + REQUESTID_FLAG + ":" + order.RequestId +
                         "," + NUMBOUNCES_FLAG + ":" + 0 +
                         "," + LOCATION_FLAG + ":" + VectorToString(order.PrimaryLocation);

            return("{" + msgStr + "}");
        }
        private void RecieveFleetMessages()
        {
            var messages = RecieveMessages();

            //log.Debug("recieved Message: " + messages);
            foreach (var mes in messages)
            {
                var pm = communicationSystems.ParseMessage(mes);

                if (!registered && pm.TargetEntityId == Me.CubeGrid.EntityId && pm.MessageType == MessageCode.Confirmation)
                {
                    registered        = true;
                    CommandShipEntity = pm.EntityId;
                    //log.Debug("Registered!!");
                }

                if (ParsedMessage.MaxNumBounces < pm.NumBounces && pm.MessageType != MessageCode.PingEntity)
                {
                    pm.NumBounces++;
                    //log.Debug("Bounced Message");
                    communicationSystems.SendMessage(pm.ToString());
                }

                if (registered)
                {
                    switch (pm.MessageType)
                    {
                    case MessageCode.Order:
                        if (CommandShipEntity == pm.CommanderId && pm.EntityId == Me.CubeGrid.EntityId)
                        {
                            log.Debug(pm.OrderType + " order recieved");
                            if (pm.OrderType == OrderType.Dock && CurrentOrder != null && CurrentOrder.Ordertype == OrderType.Dock)
                            {
                                try
                                {
                                    CurrentOrder.PrimaryLocation = pm.Location;
                                    CurrentOrder.UpdateDockingCoords();
                                }
                                catch (Exception e) { log.Error(e.StackTrace); }
                            }
                            else
                            {
                                NextOrder = new DroneOrder(log, pm.OrderType, pm.RequestID, pm.TargetEntityId, pm.EntityId, pm.Location, pm.AlignForward, pm.AlignUp);
                            }
                        }
                        break;
                    }
                }
            }
        }
Exemple #7
0
        public void IssueAttackOrder(DroneContext drone)
        {
            var closestTargets = trackingSystems.getCombatTargets(Me.GetPosition());

            if (closestTargets.Any())
            {
                var biggestTarget = closestTargets.OrderByDescending(x => x.Radius).FirstOrDefault();
                if (biggestTarget != null)
                {
                    log.Debug("Issuing Attack Order");
                    var order = new DroneOrder(log, OrderType.Attack, communicationSystems.GetMsgSntCount(), biggestTarget.EntityID, drone.Info.EntityId, biggestTarget.PointsOfInterest[0].Location, navigationSystems.GetGravityDirection(), biggestTarget.Location);
                    communicationSystems.TransmitOrder(order, Me.CubeGrid.EntityId);
                    drone.Order = order;
                }
            }
        }
Exemple #8
0
 public void ResendOrder(DroneOrder order)
 {
     if (order != null)
     {
         var time = (DateTime.Now - order.LastUpdated).TotalSeconds;
         if (time >= 10)
         {
             if (order.Ordertype == OrderType.Dock)
             {
                 order.PrimaryLocation = order.Connector.GetPosition();
             }
             //send again
             communicationSystems.TransmitOrder(order, Me.CubeGrid.EntityId);
             log.Debug("Resending " + order.Ordertype + " order");
             order.LastUpdated = DateTime.Now;
         }
     }
 }
Exemple #9
0
        private bool ScanDroneLogic(DroneContext droneInfo, DroneInfo drone, DroneOrder order)
        {
            var awaitingOrders = (order != null && order.Ordertype == OrderType.Standby);

            if (awaitingOrders)
            {
                // log.Debug("Issuing First Scan Order");
                IssueScanOrder(droneInfo);
            }
            else if (order != null && order.Ordertype == OrderType.Scan)
            {
                var droneDistance = Math.Abs((order.PrimaryLocation - drone.lastKnownPosition).Length());
                if (droneDistance < 250 || (DateTime.Now - order.IssuedAt).TotalMinutes >= 2)
                {
                    //log.Debug("Scan Order Complete");
                    order.PointOfIntrest.HasPendingOrder = false;
                    order.PointOfIntrest.Timestamp       = DateTime.Now;
                    order.PointOfIntrest.Reached         = true;
                    OngoingScanOrders.Remove(order);
                    trackingSystems.UpdateScanPoint(order.PointOfIntrest);

                    var nextScanPoint = trackingSystems.GetNearestScanPoint(Me.GetPosition(), 600);
                    if (nextScanPoint != null)
                    {
                        //log.Debug("Issuing New Scan Order "+ nextScanPoint.Location);
                        droneInfo.Order = new DroneOrder(log, OrderType.Scan, communicationSystems.GetMsgSntCount(), 0, drone.EntityId, nextScanPoint.Location, Vector3D.Zero, Vector3D.Zero);
                        droneInfo.Order.PointOfIntrest = nextScanPoint;
                        communicationSystems.TransmitOrder(droneInfo.Order, Me.CubeGrid.EntityId);
                    }
                }
                else
                {
                    return(false);
                }
            }
            else
            {
                return(false);
            }

            return(true);
        }
Exemple #10
0
        protected void IssueMiningOrder(DroneContext droneinfo)
        {
            var existingOrder = miningOrders.Where(x => x.DroneId == droneinfo.Info.EntityId).ToList();

            if (existingOrder.Any())
            {
                droneinfo.Order = existingOrder.First();
            }
            else
            {
                var drone        = droneinfo.Info;
                var miningTarget = trackingSystems.GetNextMiningSamplePoint(Me.GetPosition());
                if (miningTarget != null)
                {
                    miningTarget.HasPendingOrder = true;
                    var order = new DroneOrder(log, OrderType.Mine, communicationSystems.GetMsgSntCount(), 0, drone.EntityId, miningTarget.Location, navigationSystems.GetGravityDirection(), Vector3D.Zero);
                    order.PointOfIntrest = miningTarget;
                    droneinfo.Order      = order;
                    miningOrders.Add(order);
                    communicationSystems.TransmitOrder(order, Me.CubeGrid.EntityId);
                }
            }
        }
Exemple #11
0
        public void IssueSurveyOrder(DroneOrder order, DroneContext drone)
        {
            //get planets with a high scan density and few points
            var RegionsOfIntrest = trackingSystems.GetNearestPlanet().Regions.Where(x => (x.surfaceCenter - Me.CubeGrid.GetPosition()).Length() < 2000).Where(x => x.PointsOfInterest.Count() < 13 && x.GetScanDensity() >= 50).OrderBy(x => (x.surfaceCenter - Me.CubeGrid.GetPosition()).Length()).Take(5);

            if (RegionsOfIntrest.Any())
            {
                //log.Debug(RegionsOfIntrest.Count() + " Regions of Intrest Located");
                var regionsWithLowCoverage = RegionsOfIntrest.Where(x => x.GetPercentReached() < 50);
                if (regionsWithLowCoverage.Any())
                {
                    //log.Debug(regionsWithLowCoverage.Count() + " Regions of Intrest With low coverage Located");
                    var closiestRegion = regionsWithLowCoverage.First();
                    var closestUnscannedPointToDrone = closiestRegion.GetNearestSurveyPoint(closiestRegion.surfaceCenter);
                    if (closestUnscannedPointToDrone != null)
                    {
                        log.Debug(regionsWithLowCoverage.Count() + " Point of Intrest in low coverage region Located");
                        order = new DroneOrder(log, OrderType.Scan, communicationSystems.GetMsgSntCount(), 0, drone.Info.EntityId, closestUnscannedPointToDrone.Location, navigationSystems.GetGravityDirection(), Vector3D.Zero);
                        communicationSystems.TransmitOrder(order, Me.CubeGrid.EntityId);
                        drone.Order = order;
                    }
                }
            }
        }
Exemple #12
0
        private void RecieveFleetMessages()
        {
            var messages = RecieveMessages();

            foreach (var mes in messages)
            {
                var pm = communicationSystems.ParseMessage(mes);

                if (!registered && pm.TargetEntityId == Me.CubeGrid.EntityId && pm.MessageType == MessageCode.Confirmation)
                {
                    registered        = true;
                    CommandShipEntity = pm.EntityId;
                    log.Debug("Registered!!");
                }

                if (ParsedMessage.MaxNumBounces < pm.NumBounces && pm.MessageType != MessageCode.PingEntity)
                {
                    pm.NumBounces++;
                    //LOG.Debug("Bounced Message");
                    communicationSystems.SendMessage(pm.ToString());
                }

                if (registered)
                {
                    switch (pm.MessageType)
                    {
                    case MessageCode.Order:
                        //log.Debug((CommandShipEntity == pm.CommanderId) + " command ship set | meant for me: "+  Me.CubeGrid.EntityId + "  " + pm.EntityId +"  "+ pm.TargetEntityId);
                        if (CommandShipEntity == pm.CommanderId && pm.EntityId == Me.CubeGrid.EntityId)
                        {
                            log.Debug(pm.OrderType + " order recieved");
                            if (pm.OrderType == OrderType.Dock && CurrentOrder != null && CurrentOrder.Ordertype == OrderType.Dock)
                            {
                                try
                                {
                                    CurrentOrder.PrimaryLocation      = pm.Location;
                                    CurrentOrder.DirectionalVectorOne = pm.AlignForward;
                                    CurrentOrder.ThirdLocation        = pm.AlignUp;
                                    CurrentOrder.UpdateDockingCoords();
                                }
                                catch (Exception e) { log.Error(e.StackTrace); }
                            }
                            else if (pm.OrderType == OrderType.Mine && CurrentOrder != null && CurrentOrder.Ordertype == OrderType.Mine)
                            {
                                if (pm.Location != CurrentOrder.PrimaryLocation)
                                {
                                    Disengaging = true;

                                    NextOrder = new DroneOrder(log, pm.OrderType, pm.RequestID, pm.TargetEntityId, pm.EntityId, pm.Location, pm.AlignForward, pm.AlignUp);
                                    //log.Error("Mining Order changed unexpectedly");
                                }
                            }
                            else if (pm.OrderType == OrderType.Mine && CurrentOrder == null)
                            {
                                NextOrder = new DroneOrder(log, pm.OrderType, pm.RequestID, pm.TargetEntityId, pm.EntityId, pm.Location, pm.AlignForward, pm.AlignUp);
                                log.Error("New Mining Order -checking for reboot");
                                NextOrder.DockRouteIndex = NextOrder.dockroute.IndexOf(NextOrder.dockroute.OrderBy(x => (x - navigationSystems.RemoteControl.GetPosition()).Length()).First());
                            }
                            else if (CurrentOrder == null)
                            {
                                CurrentOrder = new DroneOrder(log, pm.OrderType, pm.RequestID, pm.TargetEntityId, pm.EntityId, pm.Location, pm.AlignForward, pm.AlignUp);
                            }
                            else
                            {
                                if (CurrentOrder != null && CurrentOrder.Ordertype == OrderType.Mine)
                                {
                                    Disengaging = true;
                                }

                                if (CurrentOrder.Ordertype == OrderType.Mine && pm.OrderType == OrderType.Dock)
                                {
                                    Disengaging = true;
                                }

                                NextOrder = new DroneOrder(log, pm.OrderType, pm.RequestID, pm.TargetEntityId, pm.EntityId, pm.Location, pm.AlignForward, pm.AlignUp);
                            }
                        }
                        break;
                    }
                }
            }
        }
Exemple #13
0
        private void ProcessCurrentOrder()
        {
            maxCameraRange = 3000;
            maxCameraAngle = 100;

            //weaponSystems.Disengage();

            if (NextOrder != null)
            {
                CurrentOrder = NextOrder;
                NextOrder    = null;
            }

            //log.Debug("processing");
            if (CurrentOrder != null)
            {
                //log.Debug("processing order");

                if (CurrentOrder.Ordertype == OrderType.Scan)
                {
                    navigationSystems.HoverApproach(CurrentOrder.Destination, Mass);
                }
                else if (CurrentOrder.Ordertype == OrderType.Dock)
                {
                    try
                    {
                        //log.Debug("Processing Dock Order");
                        //log.Debug(CurrentOrder.dockroute.Count()+" Number of dock Orders");
                        var preDockLocation = CurrentOrder.dockroute[CurrentOrder.DockRouteIndex];
                        if (preDockLocation != null)
                        {
                            //CurrentOrder.PrimaryLocation + (CurrentOrder.DirectionalVectorOne * 20);

                            var remoteControl = shipComponents.ControlUnits.FirstOrDefault();
                            var connector     = shipComponents.Connectors.FirstOrDefault();

                            var shipDockPoint         = remoteControl.GetPosition();
                            var connectorAdjustVector = connector.GetPosition() - remoteControl.GetPosition();


                            if (connector.Status != MyShipConnectorStatus.Connected)
                            {
                                var distanceFromCPK1 = ((shipDockPoint + connectorAdjustVector) - preDockLocation).Length();

                                if (distanceFromCPK1 <= 2 && CurrentOrder.DockRouteIndex > 0)
                                {
                                    CurrentOrder.DockRouteIndex--;
                                }

                                var distanceFromConnector = ((shipDockPoint) - CurrentOrder.PrimaryLocation).Length();

                                var maxSpeed = distanceFromCPK1 > 10 ? 2 : 1;

                                if (!navigationSystems.DockApproach(connector.GetPosition(), preDockLocation, maxSpeed))
                                {
                                    navigationSystems.Roll(0.15f);
                                }
                                else
                                {
                                    navigationSystems.Roll(0.00f);
                                }

                                if (distanceFromConnector < 10)
                                {
                                    log.Debug("Dock cp3");
                                    connector.GetActionWithName("OnOff_On").Apply(connector);
                                    if (connector.Status == MyShipConnectorStatus.Connectable)
                                    {
                                        connector.Connect();
                                    }
                                }

                                log.Debug("from dock " + distanceFromConnector + " from point: " + distanceFromCPK1 + " index: " + CurrentOrder.dockroute.Count);

                                navigationSystems.AlignTo(Me.CubeGrid.GetPosition() + (CurrentOrder.DirectionalVectorOne * 100));
                            }
                            else
                            {
                                navigationSystems.EnableDockedMode();
                                Docked = true;
                            }
                        }
                        else
                        {
                            log.Error("No Predock Location");
                            navigationSystems.SlowDown();
                        }
                    }
                    catch (Exception e)
                    {
                        log.Error("In Dock\n" + e.Message + "\n" + e.StackTrace);
                    }
                }
                else if (CurrentOrder.Ordertype == OrderType.Standby)
                {
                    if (Docked)
                    {
                        navigationSystems.EnableDockedMode();
                        return;
                    }
                }
            }
            else if (Docked)
            {
                navigationSystems.EnableDockedMode();
            }
            else
            {
                //if no command ship

                //navigationSystems.AlignAcrossGravity();
                navigationSystems.SlowDown();
                navigationSystems.AlignAgainstGravity();
                //navigationSystems.Roll(0);
                //navigationSystems.StopRoll();


                navigationSystems.MaintainAltitude(trackingSystems.GetAltitude(), 10);
            }
        }
Exemple #14
0
        private bool MiningDroneLogic(DroneContext droneInfo, DroneInfo drone, DroneOrder order)
        {
            var awaitingOrders = order != null && order.Ordertype == OrderType.Standby && drone.Docked;

            if (awaitingOrders)
            {
                IssueMiningOrder(droneInfo);
            }
            else if (order != null && order.Ordertype == OrderType.Standby && !drone.Docked)
            {
                IssueDockOrder(droneInfo);
            }
            else if (order != null && order.Ordertype == OrderType.Mine && !drone.Docked)
            {
                var directionV = navigationSystems.GetGravityDirection();
                directionV.Normalize();
                var target_endpoint              = order.PrimaryLocation + (directionV * 35);
                var target_end_point_distance    = (int)(drone.lastKnownPosition - target_endpoint).Length();
                var target_between_start_and_end = (int)(order.PrimaryLocation - target_endpoint).Length();
                // log.Debug("target endpoint: " + target_endpoint);
                // log.Debug("Distance to finish mining: "+ target_end_point_distance);
                // log.Debug("start - end distance: " + target_between_start_and_end);
                if (target_end_point_distance <= 5)
                {
                    miningOrders.Remove(order);
                    order.PointOfIntrest.Mined = true;
                    IssueDockOrder(droneInfo);
                }
                else
                {
                    return(false);
                }
            }
            else
            {
                return(false);
            }
            //else if (order != null && order.Ordertype == OrderType.Mine)
            //{
            //    double dist = 1000000;

            //    for (int i = 0; i < droneInfo.Order.dockroute.Count(); i++)
            //    {
            //        var vect = droneInfo.Order.dockroute[i];
            //        var distance = Math.Abs((droneInfo.Info.lastKnownPosition - vect).Length());
            //        if (distance < dist && i > droneInfo.Order.MiningIndex)
            //        {
            //            droneInfo.Order.MiningIndex = i;
            //            dist = distance;
            //        }
            //    }
            //    log.Debug(droneInfo.Order.MiningIndex+" Mining Index");
            //    if(droneInfo.Order.MiningIndex == (droneInfo.Order.dockroute.Count()-1))
            //    {
            //        miningOrders.Remove(order);
            //        IssueStandbyOrder(droneInfo);
            //    }
            //    return false;
            //}


            return(true);
        }
Exemple #15
0
 public void TransmitOrder(DroneOrder m, long commandID)
 {
     PendingMessages.Add(ParsedMessage.CreateEncryptedOrder(m, commandID));
 }
        private void ProcessCurrentOrder()
        {
            maxCameraRange = 3000;
            maxCameraAngle = 100;

            //weaponSystems.Disengage();

            if (NextOrder != null)
            {
                CurrentOrder = NextOrder;
                NextOrder    = null;
            }

            //log.Debug("processing");
            if (CurrentOrder != null)
            {
                //log.Debug("processing order");
                if (CurrentOrder.Ordertype == OrderType.Scan)
                {
                    if (Docked || Undocking)
                    {
                        Undock();
                    }
                    else
                    {
                        ScanLocation();
                    }
                }
                else if (CurrentOrder.Ordertype == OrderType.Dock)
                {
                    DockToConnector();
                    //navigationSystems.MaintainAltitude(trackingSystems.GetAltitude(), hoverHeight);
                }
                else if (CurrentOrder.Ordertype == OrderType.Standby)
                {
                    if (Docked)
                    {
                        navigationSystems.EnableDockedMode();
                        return;
                    }
                    else
                    {
                        Hover();
                    }
                }
            }
            else if (Docked)
            {
                navigationSystems.EnableDockedMode();
            }
            else
            {
                //if no command ship

                //navigationSystems.AlignAcrossGravity();
                //navigationSystems.Roll(0);
                //navigationSystems.StopRoll();

                Hover();
            }
        }
Exemple #17
0
 private bool CombatDroneLogic(DroneContext droneInfo, DroneInfo drone, DroneOrder order)
 {
     return(false);
 }
Exemple #18
0
        private void ProcessCurrentOrder()
        {
            maxCameraRange = 3000;
            maxCameraAngle = 100;

            //weaponSystems.Disengage();

            if (NextOrder != null)
            {
                if (CurrentOrder != null && CurrentOrder.Ordertype == OrderType.Mine)
                {
                    Disengaging = true;
                    if (CurrentOrder.MiningIndex == 0)
                    {
                        CurrentOrder = NextOrder;
                        NextOrder    = null;
                        Disengaging  = false;
                    }
                }
                else
                {
                    CurrentOrder = NextOrder;
                    NextOrder    = null;
                }
            }

            //log.Debug("processing");
            if (CurrentOrder != null)
            {
                //log.Debug("processing order");
                if (CurrentOrder.Ordertype == OrderType.Scan)
                {
                    if (Docked || Undocking)
                    {
                        Undock();
                    }
                    else
                    {
                        ScanLocation();
                    }
                }
                else if (CurrentOrder.Ordertype == OrderType.Dock)
                {
                    DockToConnector();
                    //Hover();
                    //log.Debug("Position: " + CurrentOrder.PrimaryLocation + "\nforward: " + CurrentOrder.DirectionalVectorOne + "\nup: " + CurrentOrder.ThirdLocation);
                    //navigationSystems.MaintainAltitude(trackingSystems.GetAltitude(), hoverHeight);
                }
                else if (CurrentOrder.Ordertype == OrderType.Standby)
                {
                    if (Docked)
                    {
                        navigationSystems.EnableDockedMode();
                        return;
                    }
                    else
                    {
                        Hover();
                    }
                }
                else if (CurrentOrder.Ordertype == OrderType.Mine)
                {
                    if (Docked || Undocking)
                    {
                        Undock();
                    }
                    else if (Disengaging)
                    {
                        ExitMiningPosition();
                    }
                    else
                    {
                        MinePosition();
                    }
                }
            }
            else if (Docked)
            {
                navigationSystems.EnableDockedMode();
            }
            else
            {
                //if no command ship

                //navigationSystems.AlignAcrossGravity();
                //navigationSystems.Roll(0);
                //navigationSystems.StopRoll();

                Hover();
            }
        }