private void DisableGrid(IMyCubeGrid grid) { HashSet <long> disabledBlocks = new HashSet <long>(); List <IMySlimBlock> blocks = new List <IMySlimBlock>(); grid.GetBlocks(blocks); foreach (IMySlimBlock block in blocks) { if (block.FatBlock == null) { continue; } IMyCubeBlock cubeBlock = block.FatBlock; if (!(cubeBlock is IMyFunctionalBlock)) { continue; } if (cubeBlock.BlockDefinition.TypeId == typeof(MyObjectBuilder_Reactor) || cubeBlock.BlockDefinition.TypeId == typeof(MyObjectBuilder_Thrust) || cubeBlock.BlockDefinition.TypeId == typeof(MyObjectBuilder_Battery) || cubeBlock.BlockDefinition.TypeId == typeof(MyObjectBuilder_SolarPanel) || cubeBlock.BlockDefinition.TypeId == typeof(MyObjectBuilder_Gyro) || cubeBlock.BlockDefinition.TypeId == typeof(MyObjectBuilder_MedicalRoom)) { continue; } if (cubeBlock is IMyProductionBlock) { IMyProductionBlock productionBlock = (IMyProductionBlock)cubeBlock; if (productionBlock.IsProducing) { continue; } } if (FunctionalBlockEntity.GetState(cubeBlock)) { FunctionalBlockEntity.SetState(cubeBlock, false); disabledBlocks.Add(cubeBlock.EntityId); m_enableCount++; } } lock (GridDisabled) { GridDisabled.Add(grid.EntityId); //if (disabledBlocks.Count > 0) //{ Console.WriteLine("Adding"); GridBlocksDisabled.Add(grid.EntityId, disabledBlocks); //} } }
public void EnableGrid(IMyCubeGrid grid) { List <IMySlimBlock> blocks = new List <IMySlimBlock>(); grid.GetBlocks(blocks); lock (GridDisabled) { if (!GridBlocksDisabled.ContainsKey(grid.EntityId)) { if (GridDisabled.Contains(grid.EntityId)) { GridDisabled.Remove(grid.EntityId); } return; } } HashSet <long> disabledBlocks = GridBlocksDisabled[grid.EntityId]; foreach (IMySlimBlock block in blocks) { if (block.FatBlock == null) { continue; } IMyCubeBlock cubeBlock = block.FatBlock; if (!(cubeBlock is IMyFunctionalBlock)) { continue; } if (!disabledBlocks.Contains(cubeBlock.EntityId)) { continue; } if (!FunctionalBlockEntity.GetState(cubeBlock)) { FunctionalBlockEntity.SetState(cubeBlock, true); m_enableCount++; } } lock (GridDisabled) { if (GridDisabled.Contains(grid.EntityId)) { GridDisabled.Remove(grid.EntityId); } GridBlocksDisabled.Remove(grid.EntityId); } }
private void GridListCleanup() { if (DateTime.Now - m_lastCleanup < TimeSpan.FromSeconds(120)) { return; } m_lastCleanup = DateTime.Now; HashSet <IMyEntity> entities = new HashSet <IMyEntity>(); MyAPIGateway.Entities.GetEntities(entities); lock (GridDisabled) { int removed = GridDisabled.RemoveWhere(x => entities.FirstOrDefault(y => y.EntityId == x) == null); if (removed > 0) { Logging.WriteLineAndConsole(string.Format("Removed {0} entities from Disabled Grid List", removed)); } HashSet <long> removeSet = new HashSet <long>(); foreach (KeyValuePair <long, HashSet <long> > p in GridBlocksDisabled) { if (entities.FirstOrDefault(x => x.EntityId == p.Key) == null) { removeSet.Add(p.Key); } } foreach (long item in removeSet) { GridBlocksDisabled.Remove(item); } } }