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); }
/// <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; }
/// <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); }