void previewGrid_OnBlockAdded(MySlimBlock obj) { m_shouldUpdateProjection = true; m_shouldUpdateTexts = true; // Text should always be updated, not only when terminal block is added, armor blocks etc also count! //Update groups if (m_originalGridBuilder == null || !IsProjecting()) { return; } Vector3I transformed = ProjectedGrid.WorldToGridInteger(CubeGrid.GridIntegerToWorld(obj.Position)); var terminalBlock = obj.FatBlock as MyTerminalBlock; if (terminalBlock != null) { foreach (var groupBuilder in m_originalGridBuilder.BlockGroups) { foreach (var block in groupBuilder.Blocks) { if (transformed == block) { //Search if group already exits and add the terminal block to it bool found = false; for (int i = 0; i < CubeGrid.BlockGroups.Count; i++) { var group = CubeGrid.BlockGroups[i]; if (group.Name.ToString() == groupBuilder.Name) { if (!group.Blocks.Contains(terminalBlock)) { MyBlockGroup newGroup = new MyBlockGroup(CubeGrid); newGroup.Name = group.Name; newGroup.Blocks.Add(terminalBlock); newGroup.Blocks.AddList(group.Blocks); CubeGrid.RemoveGroup(group); CubeGrid.AddGroup(newGroup); } found = true; break; } } //Group was not found if (!found) { MyBlockGroup newGroup = new MyBlockGroup(CubeGrid); newGroup.Name = new StringBuilder(groupBuilder.Name); newGroup.Blocks.Add(terminalBlock); CubeGrid.AddGroup(newGroup); } } } } } }