public SolarPanelDetails(ZACommons.BlockGroup group) { MaxPowerOutput = 0.0f; DefinedPowerOutput = 0.0f; foreach (var block in group.Blocks) { var panel = block as IMySolarPanel; if (panel != null && panel.IsFunctional && panel.IsWorking) { MaxPowerOutput += panel.MaxOutput; DefinedPowerOutput += panel.CubeGrid.GridSize == 2.5f ? SOLAR_PANEL_MAX_POWER_LARGE : SOLAR_PANEL_MAX_POWER_SMALL; } } }
public SolarPanelDetails(ZACommons.BlockGroup group) { MaxPowerOutput = 0.0f; DefinedPowerOutput = 0.0f; for (var e = group.Blocks.GetEnumerator(); e.MoveNext();) { var panel = e.Current as IMySolarPanel; if (panel != null && panel.IsFunctional && panel.IsWorking) { MaxPowerOutput += panel.MaxOutput; DefinedPowerOutput += panel.CubeGrid.GridSize == 2.5f ? SOLAR_PANEL_MAX_POWER_LARGE : SOLAR_PANEL_MAX_POWER_SMALL; } } }
private void CloseDoorsAsNeeded(EventDriver eventDriver, ZACommons.BlockGroup room, List <IMyDoor> doors, HashSet <IMyDoor> targetDoors, int checkState) { var openDoors = new HashSet <IMyDoor>(); OpenQueueEntry entry; if (openQueue.TryGetValue(room.Name, out entry)) { if (entry.DesiredState == checkState) { openQueue.Remove(room.Name); openDoors = entry.Doors; if (openDoors.Count == 0) { openDoors = new HashSet <IMyDoor>(targetDoors); // NB copy } // Limit to just doors in this room openDoors.IntersectWith(doors); } } // Close and lock all doors with different pressure foreach (var door in doors) { int otherState; List <IMyAirVent> otherVents; if (doorVentMap.TryGetValue(door, out otherVents)) { otherState = GetAirlockState(otherVents); } else { otherState = AIRLOCK_STATE_UNKNOWN; } if (targetDoors.Contains(door) || otherState == checkState) { // Unlock door.Enabled = true; } else { // Close & lock all others if (door.Status == DoorStatus.Open) { door.CloseDoor(); } else if (door.OpenRatio == 0.0f && door.Enabled) { door.Enabled = false; } } } // Open all required doors after some delay if (openDoors.Count > 0) { eventDriver.Schedule(2.5, (p, e) => { foreach (var door in openDoors) { door.OpenDoor(); } }); } }
private IMyMotorStator GetRotor(ZACommons.BlockGroup group) { var rotors = ZACommons.GetBlocksOfType <IMyMotorStator>(group.Blocks); return(rotors.Count == 1 ? rotors[0] : null); }