using Sandbox.ModAPI.Ingame; using System.Collections.Generic; using System.Linq; using System.Security.Cryptography; using VRage.Game.ModAPI.Ingame; namespace IngameScript { static class Utils { /// /// Get the first terminal block matching the given name or null if nothing is found. /// /// /// /// /// /// public static T GetBlock(this IMyGridTerminalSystem gridTerminal, string name = null, IMyCubeGrid grid = null) where T: class, IMyTerminalBlock { return Utils.GetBlocks(gridTerminal, name, grid).FirstOrDefault(); } /// /// Get all terminal blocks matching the given name. /// /// /// /// /// /// public static IEnumerable GetBlocks(this IMyGridTerminalSystem gridTerminal, string name = null, IMyCubeGrid grid = null) where T : class, IMyTerminalBlock { var l = new List(); gridTerminal.GetBlocksOfType(l, (T block) => (name == null || block.CustomName == name) && (grid == null || block.CubeGrid == grid) ); return l; } /// /// Get all groups matching the given name. /// /// /// /// /// public static IEnumerable GetBlockGroups(this IMyGridTerminalSystem gridTerminal, string groupName = null, IMyCubeGrid grid = null) { var groups = new List(); gridTerminal.GetBlockGroups( groups, group => { if (groupName != null && group.Name != groupName) return false; if (grid == null) return true; var l = new List(); group.GetBlocks(l, block => block.CubeGrid == grid); return l.Count > 0; } ); return groups; } /// /// Get all terminal blocks owned by the first given group name. /// /// /// /// /// /// public static IEnumerable GetBlocksFromGroup(this IMyGridTerminalSystem gridTerminal, string groupName = null, IMyCubeGrid grid = null) where T : class, IMyTerminalBlock { foreach (var group in gridTerminal.GetBlockGroups(groupName, grid)) { var l = new List(); group.GetBlocksOfType(l); if (l.Count > 0) return l; } return new List(); } } }