Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public string receiveTag = "spycoordinate", sendTag = "controlcoordinate";
- public IMyBroadcastListener coordinateListener;
- public List<Vector3D> receivedCoordinates = new List<Vector3D>(), sentCoordinates = new List<Vector3D>();
- public int currentCoordinate = 0;
- public Program()
- {
- Runtime.UpdateFrequency = UpdateFrequency.Update10;
- coordinateListener = IGC.RegisterBroadcastListener(receiveTag);
- Echo("Listening on tag: " + receiveTag);
- Save();
- }
- public void Save()
- {
- }
- public void Main(string argument, UpdateType updateSource)
- {
- if (argument != "" && receivedCoordinates.Count > 0) Commands(argument.ToLower());
- if (coordinateListener.HasPendingMessage)
- {
- MyIGCMessage message = coordinateListener.AcceptMessage();
- Vector3D coordinate = (Vector3D)(message.Data);
- Echo("Coordinate received at: " + coordinate.ToString("N0"));
- if (!receivedCoordinates.Contains(coordinate)) receivedCoordinates.Add(coordinate);
- }
- while (currentCoordinate > 0 && currentCoordinate > receivedCoordinates.Count - 1) currentCoordinate--;
- StringBuilder builder = new StringBuilder();
- builder.Append("Received Coordinates");
- if (receivedCoordinates.Count > 0)
- {
- Echo("Commands: 'down', 'up', 'remove', 'send'");
- Echo("Current Coordinates");
- for (int i = 0; i < receivedCoordinates.Count; i++)
- {
- if (currentCoordinate == i) Echo("> " + receivedCoordinates[i].ToString("N0"));
- else Echo(receivedCoordinates[i].ToString("N0"));
- builder.AppendLine();
- builder.Append("Received: " + receivedCoordinates[i].ToString("N0"));
- }
- } else Echo("No coordinates");
- OutputBuilder(builder, "received");
- builder.Clear();
- builder.Append("Sent Coordinates");
- if (sentCoordinates.Count > 0)
- {
- for (int i = 0; i < sentCoordinates.Count; i++)
- {
- builder.AppendLine();
- builder.Append("Sent: " + sentCoordinates[i].ToString("N0"));
- }
- }
- OutputBuilder(builder, "sent");
- }
- public void OutputBuilder(StringBuilder builder, string panelKeyword)
- {
- List<IMyTerminalBlock> blocks = new List<IMyTerminalBlock>();
- GridTerminalSystem.GetBlocksOfType<IMyTextPanel>(blocks, b => b.CustomName.ToLower().Contains(panelKeyword));
- for (int i = 0; i < blocks.Count; i++)
- {
- IMyTextSurface surface = (IMyTextSurface)blocks[i];
- surface.ContentType = VRage.Game.GUI.TextPanel.ContentType.TEXT_AND_IMAGE;
- surface.WriteText(builder);
- }
- }
- public void Commands(string argument)
- {
- switch (argument)
- {
- case "down":
- if (currentCoordinate < receivedCoordinates.Count - 1) currentCoordinate++;
- break;
- case "up":
- if (currentCoordinate > 0) currentCoordinate--;
- break;
- case "remove":
- if (currentCoordinate <= receivedCoordinates.Count - 1) receivedCoordinates.RemoveAt(currentCoordinate);
- break;
- case "send":
- IGC.SendBroadcastMessage<Vector3D>(sendTag, receivedCoordinates[currentCoordinate], TransmissionDistance.AntennaRelay);
- if (!sentCoordinates.Contains(receivedCoordinates[currentCoordinate])) sentCoordinates.Add(receivedCoordinates[currentCoordinate]);
- break;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement