public static bool Prefix(SolarPanel __instance)
        {
            Constructable component = __instance.gameObject.GetComponent <Constructable>();

            if (component.constructed)
            {
                float producedPower = (float)funcGetRechargeScalar.Invoke(__instance, new object[] { }) * DayNightCycle.main.deltaTime * 0.25f * 5f;
                float excessPower   = Mathf.Max(0f, producedPower - (__instance.powerSource.maxPower - __instance.powerSource.power)) * DW_Tweaks_Settings.Instance.RenewablePowerPushExcess;
                __instance.powerSource.power = Mathf.Clamp(__instance.powerSource.power + producedPower, 0f, __instance.powerSource.maxPower);
                if (excessPower > 0)
                {
                    float transferredPower = 0;
                    if (__instance.powerSource.connectedRelay != null)
                    {
                        if (!__instance.powerSource.connectedRelay.AddEnergy(excessPower, out transferredPower))
                        {
                            __instance.GetComponent <PowerRelay>().GetEndpoint().AddEnergy(excessPower - transferredPower, out transferredPower);
                        }
                    }
                    else
                    {
                        __instance.GetComponent <PowerRelay>().GetEndpoint().AddEnergy(excessPower, out transferredPower);
                    }
                }
            }
            return(false);
        }
Esempio n. 2
0
            internal static void Postfix(SolarPanel __instance)
            {
                var def = __instance.GetComponent <BuildingComplete>().Def;
                int baseCell = Grid.PosToCell(__instance), n = def.WidthInCells;
                var solidChanged = GameScenePartitioner.Instance.solidChangedLayer;

                for (int i = 0; i < n; i++)
                {
                    int cell = Grid.OffsetCell(baseCell, new CellOffset(i - (n - 1) / 2, 0));
                    SimMessages.SetCellProperties(cell, LI_GI);
                    Grid.Foundation[cell] = true;
                    Grid.SetSolid(cell, true, CellEventLogger.Instance.
                                  SimCellOccupierForceSolid);
                    World.Instance.OnSolidChanged(cell);
                    GameScenePartitioner.Instance.TriggerEvent(cell, solidChanged, null);
                    Grid.RenderedByWorld[cell] = false;
                }
            }