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;
                }
            }
        }
示例#2
0
        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);
    }