public void Main()
        {
            while (this.BroadcastListener.HasPendingMessage)
            {
                var message = this.BroadcastListener.AcceptMessage();

                //Notice no deserializetion is needed.
                // You can get your data easy like this:
                var data = message.As <MyTuple <string, Vector3D, Vector3D> >();

                var droneInfo = new DroneInfo
                {
                    Name         = data.Item1,
                    Velocity     = data.Item2,
                    Acceleration = data.Item3
                };

                this.Drones[droneInfo.Name] = droneInfo;
            }

            foreach (var x in this.Drones.Values)
            {
                this.Buffer.AppendLine(x.Name)
                .AppendLine("Velocity: ").Append(x.Velocity.ToString("F2")).AppendLine(" m/s")
                .Append("Acceleration: ").Append(x.Acceleration.ToString("F2")).AppendLine(" m/s2");

                this.Buffer.AppendLine();
            }

            this.TextPanel.WritePublicText(this.Buffer);
            this.Buffer.Clear();
        }
        private void RegisterDrone(long antennaEntityId, MyEntity droneMainEntity, bool immediate = true)
        {
            var newInfo = DroneInfo.Allocate(antennaEntityId, MySandboxGame.TotalGamePlayTimeInMilliseconds + DRONE_DESPAWN_TIMER);

            m_droneInfos.Add(droneMainEntity.EntityId, newInfo, immediate: immediate);
            droneMainEntity.OnClosing += DroneMainEntityOnClosing;

            PirateAntennaInfo antennaInfo = null;

            if (!m_pirateAntennas.TryGetValue(antennaEntityId, out antennaInfo))
            {
                MyEntity entity;
                if (MyEntities.TryGetEntityById(antennaEntityId, out entity))
                {
                    var antenna = entity as MyRadioAntenna;
                    if (antenna != null)
                    {
                        antenna.UpdatePirateAntenna();
                        m_pirateAntennas.TryGetValue(antennaEntityId, out antennaInfo);
                    }
                }
            }
            if (antennaInfo != null)
            {
                antennaInfo.SpawnedDrones++;
            }
            Debug.Assert(antennaEntityId == 0 || antennaInfo != null, "Antenna info not present when registering a drone!");

            var remote = droneMainEntity as MyRemoteControl;

            if (remote != null)
            {
                remote.OwnershipChanged += DroneRemoteOwnershipChanged;
            }
        }
        private void UnregisterDrone(MyEntity entity, bool immediate = true)
        {
            long antennaEntityId = 0;

            DroneInfo info = null;

            Debug.Assert(m_droneInfos.ContainsKey(entity.EntityId), "Unregistering drone with inconsistend entity id");
            m_droneInfos.TryGetValue(entity.EntityId, out info);
            if (info != null)
            {
                antennaEntityId = info.AntennaEntityId;
                DroneInfo.Deallocate(info);
            }
            m_droneInfos.Remove(entity.EntityId, immediate: immediate);

            PirateAntennaInfo antennaInfo = null;

            m_pirateAntennas.TryGetValue(antennaEntityId, out antennaInfo);
            if (antennaInfo != null)
            {
                antennaInfo.SpawnedDrones--;
                Debug.Assert(antennaInfo.SpawnedDrones >= 0, "Inconsistence in registered drone counts!");
            }

            entity.OnClosing -= DroneMainEntityOnClosing;
            var remote = entity as MyRemoteControl;

            if (remote != null)
            {
                remote.OwnershipChanged -= DroneRemoteOwnershipChanged;
            }
        }
Example #4
0
        public override void BeforeStart()
        {
            base.BeforeStart();

            // Make sure that the pirate identity exists
            if (m_piratesIdentityId != 0)
            {
                MyIdentity pirateIdentity = Sync.Players.TryGetIdentity(m_piratesIdentityId);
                Debug.Assert(pirateIdentity != null, "The pirate identity does not exist, although its ID was saved!");

                if (Sync.IsServer && pirateIdentity == null)
                {
                    Sync.Players.CreateNewIdentity(IDENTITY_NAME, m_piratesIdentityId, null);
                }
            }
            else
            {
                var identity = Sync.Players.CreateNewIdentity(IDENTITY_NAME);
                m_piratesIdentityId = identity.IdentityId;
            }

            if (!Sync.Players.IdentityIsNpc(m_piratesIdentityId))
            {
                Sync.Players.MarkIdentityAsNPC(m_piratesIdentityId);
            }

            // Make sure that all the drone entities exist
            foreach (var drone in m_droneInfos)
            {
                MyEntity entity;
                MyEntities.TryGetEntityById(drone.Key, out entity);
                if (entity == null)
                {
                    DroneInfo.Deallocate(drone.Value);
                    m_droneInfos.Remove(drone.Key);
                }
                else
                {
                    if (!MySession.Static.Settings.EnableDrones)
                    {
                        MyCubeGrid grid   = entity as MyCubeGrid;
                        var        remote = entity as MyRemoteControl;
                        if (grid == null)
                        {
                            grid = remote.CubeGrid;
                        }

                        UnregisterDrone(entity, immediate: false);
                        grid.SyncObject.SendCloseRequest();
                    }
                    else
                    {
                        RegisterDrone(drone.Value.AntennaEntityId, entity, immediate: false);
                    }
                }
            }
            m_droneInfos.ApplyRemovals();
        }
Example #5
0
        public SettingsForm(Drone drone)
        {
            InitializeComponent();

            this.drone = drone;
            this.info  = drone.Info;
            this.data  = drone.Settings;

            Bind(nameTextBox, "data.DroneName");
            Bind(saveConfigCheckBox, "data.SaveConfig");

            Bind(firmwareVersionTextBox, "info.BuildVersion");
            Bind(buildDateTextBox, "info.BuildName");

            Bind(modelTextBox, "info.ModelName");
            Bind(idTextBox, "info.SerialCode");
            Bind(gyroSensorTextBox, "info.GyroSensor");
            Bind(magnetometerTextBox, "info.Magnetometer");

            Bind(minValueTextBox, "data.ServoMin");
            Bind(idleValueTextBox, "data.ServoIdle");
            Bind(hoverValueTextBox, "data.ServoHover");
            Bind(maxValueTextBox, "data.ServoMax");

            Bind(safeMotorValueTextBox, "data.SafeServoValue");
            Bind(safeTemperatureTextBox, "data.MaxTemperature");
            Bind(safePitchTextBox, "data.SafePitch");
            Bind(safeRollTextBox, "data.SafeRoll");

            Bind(pitchKpTextBox, "data.PitchPid.Kp");
            Bind(pitchKiTextBox, "data.PitchPid.Ki");
            Bind(pitchKdTextBox, "data.PitchPid.Kd");

            Bind(rollKpTextBox, "data.RollPid.Kp");
            Bind(rollKiTextBox, "data.RollPid.Ki");
            Bind(rollKdTextBox, "data.RollPid.Kd");

            Bind(yawKpTextBox, "data.YawPid.Kp");
            Bind(yawKiTextBox, "data.YawPid.Ki");
            Bind(yawKdTextBox, "data.YawPid.Kd");

            Bind(enableStabilizationCheckBox, "data.EnableStabilization");
            Bind(negativeMixingCheckBox, "data.NegativeMixing");
            Bind(keepMotorsOnCheckBox, "data.KeepMotorsOn");

            Bind(maxThrustForFlyingTextBox, "data.MaxThrustForFlying");
            Bind(onlyArmWhenStillCheckBox, "data.OnlyArmWhenStill");

            Bind(gyroUseDmpCheckBox, "data.GyroUseDMP");
            Bind(gyroUseRawCheckBox, "data.GyroUseRaw");
            Bind(engineUseGyroCheckBox, "data.EngineUseGyro");

            drone.OnSettingsChange += Drone_OnSettingsChange;
            drone.OnInfoChange     += Drone_OnInfoChange;
        }
Example #6
0
        public SettingsForm(Drone drone)
        {
            InitializeComponent();

            this.drone = drone;
            this.info = drone.Info;
            this.data = drone.Settings;

            Bind(nameTextBox, "data.DroneName");
            Bind(saveConfigCheckBox, "data.SaveConfig");

            Bind(firmwareVersionTextBox, "info.BuildVersion");
            Bind(buildDateTextBox, "info.BuildName");

            Bind(modelTextBox, "info.ModelName");
            Bind(idTextBox, "info.SerialCode");
            Bind(gyroSensorTextBox, "info.GyroSensor");
            Bind(magnetometerTextBox, "info.Magnetometer");

            Bind(minValueTextBox, "data.ServoMin");
            Bind(idleValueTextBox, "data.ServoIdle");
            Bind(hoverValueTextBox, "data.ServoHover");
            Bind(maxValueTextBox, "data.ServoMax");

            Bind(safeMotorValueTextBox, "data.SafeServoValue");
            Bind(safeTemperatureTextBox, "data.MaxTemperature");
            Bind(safePitchTextBox, "data.SafePitch");
            Bind(safeRollTextBox, "data.SafeRoll");

            Bind(pitchKpTextBox, "data.PitchPid.Kp");
            Bind(pitchKiTextBox, "data.PitchPid.Ki");
            Bind(pitchKdTextBox, "data.PitchPid.Kd");

            Bind(rollKpTextBox, "data.RollPid.Kp");
            Bind(rollKiTextBox, "data.RollPid.Ki");
            Bind(rollKdTextBox, "data.RollPid.Kd");

            Bind(yawKpTextBox, "data.YawPid.Kp");
            Bind(yawKiTextBox, "data.YawPid.Ki");
            Bind(yawKdTextBox, "data.YawPid.Kd");

            Bind(enableStabilizationCheckBox, "data.EnableStabilization");
            Bind(negativeMixingCheckBox, "data.NegativeMixing");
            Bind(keepMotorsOnCheckBox, "data.KeepMotorsOn");

            Bind(maxThrustForFlyingTextBox, "data.MaxThrustForFlying");
            Bind(onlyArmWhenStillCheckBox, "data.OnlyArmWhenStill");

            Bind(gyroUseDmpCheckBox, "data.GyroUseDMP");
            Bind(gyroUseRawCheckBox, "data.GyroUseRaw");
            Bind(engineUseGyroCheckBox, "data.EngineUseGyro");

            drone.OnSettingsChange += Drone_OnSettingsChange;
            drone.OnInfoChange += Drone_OnInfoChange;
        }
Example #7
0
    void ReturnDroneSlot(int slot)
    {
        DroneInfo droneInfo = droneSlots[slot];

        droneInfo.occupied   = false;
        droneInfo.deliveryId = new EntityId(-1);
        AddEnergyCost(droneInfo.energyUsed);
        droneInfo.energyUsed = 0;
        droneSlots[slot]     = droneInfo;
        usedSlots--;
    }
Example #8
0
        private void UpdateInfo(DroneInfo info)
        {
            if (string.IsNullOrWhiteSpace(info.Name))
            {
                Text = string.Format("DroneControl - {0}", drone.Address);
            }
            else
            {
                Text = string.Format("DroneControl - {0}", info.Name);
            }

            droneInfoPropertyGrid.SelectedObject = info;
        }
Example #9
0
 private void CreateDroneCamera()
 {
     MainMenu.EnhancedCamMenu.ResetCameras();
     MainMenu.EnhancedCamMenu.droneCamera             = MainMenu.EnhancedCamMenu.CreateNonAttachedCamera();
     MainMenu.EnhancedCamMenu.droneCamera.FieldOfView = droneFov;
     MainMenu.EnhancedCamMenu.droneCamera.IsActive    = true;
     drone = new DroneInfo {
         velocity     = Vector3.Zero,
         downVelocity = 0f,
         rotation     = new Quaternion(0f, 0f, 0f, 1f)
     };
     Game.Player.CanControlCharacter = false;
 }
Example #10
0
            public static DroneInfo Allocate(long antennaEntityId, int despawnTime)
            {
                DroneInfo info = null;
                if (m_pool.Count == 0)
                {
                    info = new DroneInfo();
                }
                else
                {
                    info = m_pool[m_pool.Count - 1];
                    m_pool.RemoveAt(m_pool.Count - 1);
                }

                info.AntennaEntityId = antennaEntityId;
                info.DespawnTime = despawnTime;

                return info;
            }
Example #11
0
        public override void Init(MyObjectBuilder_SessionComponent sessionComponent)
        {
            base.Init(sessionComponent);

            var ob = sessionComponent as MyObjectBuilder_PirateAntennas;

            m_piratesIdentityId = ob.PiratesIdentity;

            int currentTime = MySandboxGame.TotalGamePlayTimeInMilliseconds;

            if (ob.Drones != null)
            {
                foreach (var entry in ob.Drones)
                {
                    m_droneInfos.Add(entry.EntityId, DroneInfo.Allocate(entry.AntennaEntityId, currentTime + entry.DespawnTimer), immediate: true);
                }
            }
        }
            public static DroneInfo Allocate(long antennaEntityId, int despawnTime)
            {
                DroneInfo info = null;

                if (m_pool.Count == 0)
                {
                    info = new DroneInfo();
                }
                else
                {
                    info = m_pool[m_pool.Count - 1];
                    m_pool.RemoveAt(m_pool.Count - 1);
                }

                info.AntennaEntityId = antennaEntityId;
                info.DespawnTime     = despawnTime;

                return(info);
            }
Example #13
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);
        }
Example #14
0
    void DroneDeploymentSuccess(EntityId droneId, DeliveryInfo deliveryInfo)
    {
        deliveryInfo.nextWaypoint++;
        deliveriesMap.Add(droneId, deliveryInfo);

        DroneInfo droneInfo = droneSlots[deliveryInfo.slot];

        droneInfo.deliveryId          = droneId;
        droneInfo.occupied            = true;
        droneSlots[deliveryInfo.slot] = droneInfo;

        avgWaitTime += Time.time - deliveryInfo.timestamp;
        ++launches;

        MetricsWriter.Send(new ControllerMetrics.Update()
                           .SetAvgWaitTime(avgWaitTime)
                           .SetLaunches(launches));

        UpdateDroneSlotsAndMap();
    }
Example #15
0
    private void IncrementNextWaypoint(EntityId droneId, DeliveryInfo deliveryInfo, float energyUsed)
    {
        deliveryInfo.nextWaypoint++;
        deliveryInfo.latestCheckinTime
            = Time.time
              + (SimulationSettings.DroneETAConstant
                 * Vector3.Distance(
                     deliveryInfo.waypoints[deliveryInfo.nextWaypoint - 1].ToUnityVector(),
                     deliveryInfo.waypoints[deliveryInfo.nextWaypoint - 2].ToUnityVector())
                 / SimulationSettings.MaxDroneSpeed);
        deliveriesMap.Remove(droneId);
        deliveriesMap.Add(droneId, deliveryInfo);

        DroneInfo droneInfo = droneSlots[deliveryInfo.slot];

        droneInfo.energyUsed          = energyUsed;
        droneSlots[deliveryInfo.slot] = droneInfo;

        UpdateDroneSlotsAndMap();
    }
        private void UpdateDroneDespawning()
        {
            foreach (var entry in m_droneInfos)
            {
                if (entry.Value.DespawnTime < MySandboxGame.TotalGamePlayTimeInMilliseconds)
                {
                    MyEntity droneEntity = null;
                    MyEntities.TryGetEntityById(entry.Key, out droneEntity);
                    Debug.Assert(droneEntity != null, "Could not find the drone entity to despawn!");

                    if (droneEntity != null)
                    {
                        MyCubeGrid grid   = droneEntity as MyCubeGrid;
                        var        remote = droneEntity as MyRemoteControl;
                        if (grid == null)
                        {
                            grid = remote.CubeGrid;
                        }

                        if (CanDespawn(grid, remote))
                        {
                            UnregisterDrone(droneEntity, immediate: false);
                            grid.SyncObject.SendCloseRequest();
                        }
                        else
                        {
                            entry.Value.DespawnTime = MySandboxGame.TotalGamePlayTimeInMilliseconds + DRONE_DESPAWN_RETRY;
                        }
                    }
                    else
                    {
                        DroneInfo.Deallocate(entry.Value);
                        m_droneInfos.Remove(entry.Key);
                    }
                }
            }

            m_droneInfos.ApplyChanges();
        }
        private void addBtn_Click(object sender, EventArgs e)
        {
            String deviceName = deviceNameTextBox.Text;
            String apName     = apNameTextBox.Text;
            int    tagId      = -1;

            try
            {
                tagId = int.Parse(tagIdTextBox.Text);
            }
            catch (FormatException ex)
            {
                parent.ShowMessageBox("Please type only number in the tag textbox.");
                this.Close();
            }

            DroneInfo dInfo = new DroneInfo(apName, tagId);

            DroneList.AddDroneInfo(parent, deviceName, dInfo);

            this.Close();
        }
        public override void BeforeStart()
        {
            base.BeforeStart();

            MyFaction pirateFaction = MySession.Static.Factions.TryGetFactionByTag(PIRATE_FACTION_TAG);

            Debug.Assert(pirateFaction != null, "No pirate faction in the world. Pirate antenan needs it.");

            if (pirateFaction != null)
            {
                // Make sure that the pirate identity exists
                if (m_piratesIdentityId != 0)
                {
                    if (Sync.IsServer)
                    {
                        MyIdentity pirateIdentity = Sync.Players.TryGetIdentity(m_piratesIdentityId);
                        Debug.Assert(pirateIdentity != null, "The pirate identity does not exist, although its ID was saved!");

                        if (pirateIdentity == null)
                        {
                            Sync.Players.CreateNewIdentity(IDENTITY_NAME, m_piratesIdentityId, null);
                        }

                        pirateIdentity.LastLoginTime = DateTime.Now;

                        // Check if he is already in a faction.
                        MyFaction oldPirateFaction = MySession.Static.Factions.GetPlayerFaction(m_piratesIdentityId);
                        if (oldPirateFaction == null)
                        {
                            MyFactionCollection.SendJoinRequest(pirateFaction.FactionId, m_piratesIdentityId);
                        }
                    }
                }
                else
                {
                    m_piratesIdentityId = pirateFaction.FounderId;
                }

                if (!Sync.Players.IdentityIsNpc(m_piratesIdentityId))
                {
                    Sync.Players.MarkIdentityAsNPC(m_piratesIdentityId);
                }
            }

            // Make sure that all the drone entities exist
            foreach (var drone in m_droneInfos)
            {
                MyEntity entity;
                MyEntities.TryGetEntityById(drone.Key, out entity);
                if (entity == null)
                {
                    DroneInfo.Deallocate(drone.Value);
                    m_droneInfos.Remove(drone.Key);
                }
                else
                {
                    if (!MySession.Static.Settings.EnableDrones)
                    {
                        MyCubeGrid grid   = entity as MyCubeGrid;
                        var        remote = entity as MyRemoteControl;
                        if (grid == null)
                        {
                            grid = remote.CubeGrid;
                        }

                        UnregisterDrone(entity, immediate: false);
                        grid.Close();
                        //grid.SyncObject.SendCloseRequest();
                    }
                    else
                    {
                        RegisterDrone(drone.Value.AntennaEntityId, entity, immediate: false);
                    }
                }
            }
            m_droneInfos.ApplyRemovals();
        }
 public static void Deallocate(DroneInfo toDeallocate)
 {
     toDeallocate.AntennaEntityId = 0;
     toDeallocate.DespawnTime     = 0;
     m_pool.Add(toDeallocate);
 }
Example #20
0
        private void UpdateInfo(DroneInfo info)
        {
            if (string.IsNullOrWhiteSpace(info.Name))
                Text = string.Format("DroneControl - {0}", drone.Address);
            else
                Text = string.Format("DroneControl - {0}", info.Name);

            droneInfoPropertyGrid.SelectedObject = info;
        }
Example #21
0
    void HandleTargetRequest(Improbable.Entity.Component.ResponseHandle <Controller.Commands.RequestNewTarget, TargetRequest, TargetResponse> handle)
    {
        DeliveryInfo deliveryInfo;

        if (deliveriesMap.TryGetValue(handle.Request.droneId, out deliveryInfo))
        {
            //Debug.LogWarning("is final waypoint?");
            //final waypoint, figure out if it's back at controller or only just delivered
            if (deliveryInfo.nextWaypoint < deliveryInfo.waypoints.Count)
            {
                handle.Respond(new TargetResponse(deliveryInfo.waypoints[deliveryInfo.nextWaypoint], TargetResponseCode.SUCCESS));
                IncrementNextWaypoint(handle.Request.droneId, handle.Request.energyUsed);
            }
            else
            {
                if (deliveryInfo.returning)
                {
                    UnsuccessfulTargetRequest(handle, TargetResponseCode.JOURNEY_COMPLETE);
                    DestroyDrone(handle.Request.droneId, deliveryInfo.slot);
                    MetricsWriter.Send(new ControllerMetrics.Update()
                                       .SetCompletedRoundTrips(++completedRoundTrips)
                                       .SetCosts(costs));
                    UpdateDroneSlotsAndMap();
                }
                else
                {
                    RegisterCompletedDelivery(deliveryInfo);
                    MetricsWriter.Send(new ControllerMetrics.Update()
                                       .SetCompletedDeliveries(completedDeliveries)
                                       .SetAvgDeliveryTime(avgDeliveryTime)
                                       .SetRevenue(revenue));

                    deliveryInfo.returning = true;
                    deliveryInfo.waypoints.Reverse();
                    Vector3f arrivalsGridPoint = globalLayer.GetClosestVector3fOnGrid(deliveryInfo.waypoints[0]);
                    arrivalsGridPoint.y       = deliveryInfo.waypoints[2].y;
                    deliveryInfo.waypoints[1] = arrivalsGridPoint;
                    deliveryInfo.nextWaypoint = 2;
                    deliveryInfo.latestCheckinTime
                        = Time.time
                          + (SimulationSettings.DroneETAConstant
                             * Vector3.Distance(
                                 deliveryInfo.waypoints[0].ToUnityVector(),
                                 deliveryInfo.waypoints[1].ToUnityVector())
                             / SimulationSettings.MaxDroneSpeed);

                    deliveriesMap.Remove(handle.Request.droneId);
                    deliveriesMap.Add(handle.Request.droneId, deliveryInfo);

                    DroneInfo droneInfo = droneSlots[deliveryInfo.slot];
                    droneInfo.energyUsed          = handle.Request.energyUsed;
                    droneSlots[deliveryInfo.slot] = droneInfo;

                    UpdateDroneSlotsAndMap();

                    //ignore 0 because that's the point that we've just reached
                    //saved as 2, but sending 1 back to drone - only 1 spatial update instead of 2 now
                    handle.Respond(new TargetResponse(deliveryInfo.waypoints[1], TargetResponseCode.SUCCESS));
                }
            }
        }
        else
        {
            UnsuccessfulTargetRequest(handle, TargetResponseCode.WRONG_CONTROLLER);
        }
    }
Example #22
0
        private void HandlePacket(byte[] packet)
        {
            // jedes Drohnen Paket ist mindestens HeaderSize Bytes lang und fangen mit "FLY" an
            using (MemoryStream stream = new MemoryStream(packet))
            {
                PacketBuffer buffer = new PacketBuffer(stream);

                if (packet.Length < HeaderSize || buffer.ReadByte() != 'F' || buffer.ReadByte() != 'L' || buffer.ReadByte() != 'Y')
                    return;

                int revision = buffer.ReadInt();

                bool isGuaranteed = buffer.ReadByte() > 0;
                PacketType type = (PacketType)buffer.ReadByte();

                if (Config.VerbosePacketReceive
                    && type != PacketType.Ack
                    && (type != PacketType.Ping || Config.LogPingPacket))
                    Log.Verbose("[{0}] Received: [{1}] {2}, size: {3} bytes", Address.ToString(), revision, type, packet.Length);

                switch (type)
                {
                    case PacketType.Ping:
                        if (packet.Length < HeaderSize + sizeof(long))
                            throw new InvalidDataException("Packet is not long enough.");

                        bool wasNotConnected = !CheckConnection();

                        lastPing = Environment.TickCount;

                        long time = buffer.ReadLong(); // time ist der Wert von stopwatch zum Zeitpunkt des Absenden des Pakets
                        Ping = (int)(stopwatch.ElapsedMilliseconds - time);

                        if (wasNotConnected)
                            OnConnected?.Invoke(this, EventArgs.Empty);

                        RemovePacketToAcknowlegde(revision);
                        break;
                    case PacketType.Ack:
                        IPacket acknowlegdedPacket;
                        if (!packetsToAcknowledge.TryGetValue(revision, out acknowlegdedPacket))
                        {
                            if (Config.VerbosePacketReceive)
                                Log.Verbose("[{0}] Unknown acknowlegde: [{1}]", Address.ToString(), revision);
                            break;
                        }

                        if (Config.VerbosePacketReceive)
                            Log.Verbose("[{0}] Acknowlegde: [{1}] {2}", Address.ToString(), revision, acknowlegdedPacket.Type);

                        RemovePacketToAcknowlegde(revision);
                        break;

                    case PacketType.Info:
                        Info = new DroneInfo(buffer);
                        Settings = DroneSettings.Read(buffer);

                        RemovePacketToAcknowlegde(revision);
                        break;
                    default:
                        throw new InvalidDataException("Invalid packet type to get sent by cluster.");
                }
            }
        }
 public static void Deallocate(DroneInfo toDeallocate)
 {
     toDeallocate.AntennaEntityId = 0;
     toDeallocate.DespawnTime = 0;
     m_pool.Add(toDeallocate);
 }
Example #24
0
 public DroneContext(DroneInfo info, DroneOrder o)
 {
     Order = o;
     Info  = info;
 }
Example #25
0
        public SettingsForm(Drone drone)
        {
            InitializeComponent();

            this.drone        = drone;
            this.info         = drone.Info;
            this.originalData = drone.Settings;
            this.data         = drone.Settings;

            try
            {
                Bind(nameTextBox, "data.DroneName");
                Bind(saveConfigCheckBox, "data.SaveConfig");

                Bind(firmwareVersionTextBox, "info.BuildVersion");
                Bind(buildDateTextBox, "info.BuildName");

                Bind(modelTextBox, "info.ModelName");
                Bind(idTextBox, "info.SerialCode");
                Bind(gyroSensorTextBox, "info.GyroSensor");
                Bind(magnetometerTextBox, "info.Magnetometer");
                Bind(baroSensorTextBox, "info.BaroSensor");

                Bind(minValueTextBox, "data.ServoMin");
                Bind(idleValueTextBox, "data.ServoIdle");
                Bind(maxValueTextBox, "data.ServoMax");

                Bind(safeMotorValueTextBox, "data.SafeServoValue");
                Bind(ignoreSafeOrientationCheckBox, "data.IgnoreSafeOrientationWhileFlying");
                Bind(safeTemperatureTextBox, "data.MaxTemperature");
                Bind(safeRollTextBox, "data.SafeRoll");
                Bind(safePitchTextBox, "data.SafePitch");

                Bind(rollKpTextBox, "data.RollPid.Kp");
                Bind(rollKiTextBox, "data.RollPid.Ki");
                Bind(rollKdTextBox, "data.RollPid.Kd");

                Bind(pitchKpTextBox, "data.PitchPid.Kp");
                Bind(pitchKiTextBox, "data.PitchPid.Ki");
                Bind(pitchKdTextBox, "data.PitchPid.Kd");

                Bind(yawKpTextBox, "data.YawPid.Kp");
                Bind(yawKiTextBox, "data.YawPid.Ki");
                Bind(yawKdTextBox, "data.YawPid.Kd");

                Bind(enableStabilizationCheckBox, "data.EnableStabilization");

                Bind(maxThrustForFlyingTextBox, "data.MaxThrustForFlying");
                Bind(ignoreSafeOrientationCheckBox, "data.OnlyArmWhenStill");

                Bind(angleRollKpTextBox, "data.AngleRoll.Kp");
                Bind(angleRollKiTextBox, "data.AngleRoll.Ki");
                Bind(angleRollKdTextBox, "data.AngleRoll.Kd");

                Bind(anglePitchKpTextBox, "data.AnglePitch.Kp");
                Bind(anglePitchKiTextBox, "data.AnglePitch.Ki");
                Bind(anglePitchKdTextBox, "data.AnglePitch.Kd");

                Bind(angleYawKpTextBox, "data.AngleYaw.Kp");
                Bind(angleYawKiTextBox, "data.AngleYaw.Ki");
                Bind(angleYawKdTextBox, "data.AngleYaw.Kd");

                Bind(rollTrim, "data.RollTrim");
                Bind(pitchTrim, "data.PitchTrim");
                Bind(yawTrim, "data.YawTrim");

                drone.OnSettingsChange += Drone_OnSettingsChange;
                drone.OnInfoChange     += Drone_OnInfoChange;
            }
            catch (Exception e)
            {
                bindingError = true;

                Log.Error(e);
                MessageBox.Show("Could not load the settings.", "Error while loading settings", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
Example #26
0
 private void Drone_OnInfoChange(object sender, InfoChangedEventArgs e)
 {
     info = e.Info;
     UpdateValues();
 }
Example #27
0
 private bool CombatDroneLogic(DroneContext droneInfo, DroneInfo drone, DroneOrder order)
 {
     return(false);
 }
Example #28
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);
        }
 public InfoChangedEventArgs(Drone drone)
 {
     this.Info = drone.Info;
 }
Example #30
0
 private void Drone_OnInfoChange(object sender, InfoChangedEventArgs e)
 {
     info = e.Info;
     UpdateValues();
 }