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); }
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; } }