Ejemplo n.º 1
0
        public new void Main(string arguments)
        {
            enemies.Clear();
            lostContact.Clear();

            sinceLastAlarm += Runtime.TimeSinceLastRun;

            DetectedEntityData entityData;

            foreach (string serialized in arguments.Split(entitySeparator))
            {
                if (DetectedEntityData.TryDeserialize(serialized, out entityData))
                {
                    if (entityData.relations == Relation_Enemy)
                    {
                        enemies.Add(TerminalActionParameter.Get(entityData.entityId));

                        // sound alarm if enemy is near
                        if (sinceLastAlarm >= alarmInterval &&
                            (entityData.volume > 100 || entityData.volume == 0f) &&
                            entityData.secondsSinceDetected < 60 &&
                            Vector3D.DistanceSquared(Me.GetPosition(), entityData.predictedPosition) < 10000 * 10000)
                        {
                            sinceLastAlarm = new TimeSpan();

                            IMySoundBlock alarm = GridTerminalSystem.GetBlockWithName("Proximity Alarm")
                                                  as IMySoundBlock;
                            if (alarm == null)
                            {
                                Terminate("Proximity Alarm is not a sound block");
                                return;
                            }
                            else
                            {
                                alarm.ApplyAction("PlaySound");
                            }
                        }
                    }
                    else if (entityData.relations == Relation_Owner && entityData.secondsSinceDetected > 10)
                    {
                        lostContact.Add(TerminalActionParameter.Get(entityData.entityId));
                    }
                }
                else
                {
                    Terminate("Deserialize failed: " + serialized);
                    return;
                }
            }

            DisplayEntitiesOnPanel("Wide LCD panel for Enemy", enemies);
            DisplayEntitiesOnPanel("Wide LCD panel for Lost Contact", lostContact);
        }
Ejemplo n.º 2
0
            /// <summary>
            /// Attempts to create a DetectedEntityData from a string.
            /// </summary>
            /// <param name="serialized">The serialized object.</param>
            /// <param name="deserialized">The deserialized object</param>
            /// <returns>True iff the string could be deserialized.</returns>
            public static bool TryDeserialize(string serialized, out DetectedEntityData deserialized)
            {
                deserialized = new DetectedEntityData();
                string[] fields = serialized.Split(fieldSeparator);
                int index = 0;

                if (!long.TryParse(fields[index++], out deserialized.entityId))
                  return false;
                if (!byte.TryParse(fields[index++], out deserialized.relations))
                  return false;
                if (!byte.TryParse(fields[index++], out deserialized.type))
                  return false;
                deserialized.name = fields[index++];
                if (!bool.TryParse(fields[index++], out deserialized.hasRadar))
                  return false;
                if (!bool.TryParse(fields[index++], out deserialized.hasJammer))
                  return false;
                if (!int.TryParse(fields[index++], out  deserialized.secondsSinceDetected))
                  return false;
                {
                  double x, y, z;
                  if (!double.TryParse(fields[index++], out x))
                return false;
                  if (!double.TryParse(fields[index++], out y))
                return false;
                  if (!double.TryParse(fields[index++], out z))
                return false;
                  deserialized.predictedPosition = new Vector3D(x, y, z);
                }
                {
                  float x, y, z;
                  if (!float.TryParse(fields[index++], out x))
                return false;
                  if (!float.TryParse(fields[index++], out y))
                return false;
                  if (!float.TryParse(fields[index++], out z))
                return false;
                  deserialized.lastKnownVelocity = new Vector3(x, y, z);
                }

                if (!float.TryParse(fields[index++], out deserialized.volume))
                  return false;

                if (index < fields.Length)
                {
                  deserialized.blockCounts = new int[fields.Length - index];
                  for (int block = 0; block < deserialized.blockCounts.Length; block++)
                if (!int.TryParse(fields[index++], out deserialized.blockCounts[block]))
                  return false;
                }

                return true;
            }
Ejemplo n.º 3
0
            /// <summary>
            /// Attempts to create a DetectedEntityData from a string.
            /// </summary>
            /// <param name="serialized">The serialized object.</param>
            /// <param name="deserialized">The deserialized object</param>
            /// <returns>True iff the string could be deserialized.</returns>
            public static bool TryDeserialize(string serialized, out DetectedEntityData deserialized)
            {
                deserialized = new DetectedEntityData();
                string[] fields = serialized.Split(fieldSeparator);
                int      index  = 0;

                if (!long.TryParse(fields[index++], out deserialized.entityId))
                {
                    return(false);
                }
                if (!byte.TryParse(fields[index++], out deserialized.relations))
                {
                    return(false);
                }
                if (!byte.TryParse(fields[index++], out deserialized.type))
                {
                    return(false);
                }
                deserialized.name = fields[index++];
                if (!bool.TryParse(fields[index++], out deserialized.hasRadar))
                {
                    return(false);
                }
                if (!bool.TryParse(fields[index++], out deserialized.hasJammer))
                {
                    return(false);
                }
                if (!int.TryParse(fields[index++], out deserialized.secondsSinceDetected))
                {
                    return(false);
                }
                {
                    double x, y, z;
                    if (!double.TryParse(fields[index++], out x))
                    {
                        return(false);
                    }
                    if (!double.TryParse(fields[index++], out y))
                    {
                        return(false);
                    }
                    if (!double.TryParse(fields[index++], out z))
                    {
                        return(false);
                    }
                    deserialized.predictedPosition = new Vector3D(x, y, z);
                }
                {
                    float x, y, z;
                    if (!float.TryParse(fields[index++], out x))
                    {
                        return(false);
                    }
                    if (!float.TryParse(fields[index++], out y))
                    {
                        return(false);
                    }
                    if (!float.TryParse(fields[index++], out z))
                    {
                        return(false);
                    }
                    deserialized.lastKnownVelocity = new Vector3(x, y, z);
                }

                if (!float.TryParse(fields[index++], out deserialized.volume))
                {
                    return(false);
                }

                if (index < fields.Length)
                {
                    deserialized.blockCounts = new int[fields.Length - index];
                    for (int block = 0; block < deserialized.blockCounts.Length; block++)
                    {
                        if (!int.TryParse(fields[index++], out deserialized.blockCounts[block]))
                        {
                            return(false);
                        }
                    }
                }

                return(true);
            }