public void RemoveGroup(MyBlockGroup group) { bool removed = false; if (!BlockGroups.Contains(group)) // if you delete from terminal group matches and you delete whole group { for (int index = 0; index < BlockGroups.Count; index++) { var g = BlockGroups[index]; if (g.Name.CompareTo(group.Name) == 0) { for (int i = 0; i < g.Blocks.Count; i++) { var b = g.Blocks[i]; if (b.CubeGrid == group.CubeGrid) //remove only blocks of that grid from group { g.Blocks.Remove(b); i--; } } if (g.Blocks.Count == 0) { group = g; //group to remove } else { removed = true; } break; } } } if (!removed) { BlockGroups.Remove(group); } if (GroupRemoved != null && group.CubeGrid == null) { GroupRemoved(group); } }
public void RemoveGroup(MyBlockGroup group) { bool removed = false; if (!BlockGroups.Contains(group)) // if you delete from terminal group matches and you delete whole group { foreach (var g in BlockGroups) //removing group from grid side (grid disconnected, or last block from that grid group removed) { if (g.Name.CompareTo(group.Name) == 0) { for (int i = 0; i < g.Blocks.Count; i++) { var b = g.Blocks[i]; if (b.CubeGrid == group.CubeGrid) //remove only blocks of that grid from group { g.Blocks.Remove(b); i--; } } if (g.Blocks.Count == 0) { group = g; //group to remove } else { removed = true; } break; } } } if (!removed) { BlockGroups.Remove(group); } if (GroupRemoved != null) { GroupRemoved(group); } }
internal void ReScanBlockGroups() { if (TerminalSystem == null) { TerminalSystem = MyAPIGateway.TerminalActionsHelper.GetTerminalSystemForGrid(MyGrid); } if (TerminalSystem != null) { TerminalSystem.GetBlockGroups(null, group => { GroupInfo groupInfo = null; if (BlockGroups.TryGetValue(group.Name, out groupInfo)) { groupInfo.ChangeState = GroupInfo.ChangeStates.None; groupInfo.Name = group.Name; } group.GetBlocks(null, block => { var cube = (MyCubeBlock)block; WeaponComponent comp; if (cube.Components.TryGet(out comp) && SubGrids.Contains(cube.CubeGrid)) { if (groupInfo == null) { groupInfo = Session.GroupInfoPool.Get(); groupInfo.Name = group.Name; groupInfo.ChangeState = GroupInfo.ChangeStates.Add; BlockGroups.Add(group.Name, groupInfo); } groupInfo.Comps.Add(comp); if (groupInfo.ChangeState == GroupInfo.ChangeStates.None) { groupInfo.ChangeState = GroupInfo.ChangeStates.Modify; } } return(false); }); return(false); }); BlockGroups.ApplyAdditionsAndModifications(); foreach (var group in BlockGroups) { if (group.Value.ChangeState == GroupInfo.ChangeStates.None) { group.Value.Comps.Clear(); Session.GroupInfoPool.Return(group.Value); BlockGroups.Remove(group.Key); } else { group.Value.ChangeState = GroupInfo.ChangeStates.None; } if (Session.MpActive && group.Value.Comps != null) { foreach (var comp in group.Value.Comps) { if (comp.Set?.Value?.Overrides != null) { SyncGridOverrides(this, group.Key, comp.Set.Value.Overrides); } break; } } } BlockGroups.ApplyRemovals(); ScanBlockGroups = false; } }