public void EnergySim200ms(float dt) { KSelectable component = GetComponent <KSelectable>(); if (operational.IsActive) { generator.GenerateJoules(generator.WattageRating * dt, false); component.SetStatusItem(Db.Get().StatusItemCategories.Power, Db.Get().BuildingStatusItems.Wattage, generator); } else { generator.ResetJoules(); component.SetStatusItem(Db.Get().StatusItemCategories.Power, Db.Get().BuildingStatusItems.GeneratorOffline, null); if (operational.IsOperational) { CircuitManager circuitManager = Game.Instance.circuitManager; if (circuitManager != null) { ushort circuitID = circuitManager.GetCircuitID(powerCell); bool flag = circuitManager.HasBatteries(circuitID); bool flag2 = false; if (!flag && circuitManager.HasConsumers(circuitID)) { flag2 = true; } else if (flag) { if (batteryRefillPercent <= 0f && circuitManager.GetMinBatteryPercentFullOnCircuit(circuitID) <= 0f) { flag2 = true; } else if (circuitManager.GetMinBatteryPercentFullOnCircuit(circuitID) < batteryRefillPercent) { flag2 = true; } } if (flag2) { if (chore == null && smi.GetCurrentState() == smi.sm.on) { chore = new WorkChore <ManualGenerator>(Db.Get().ChoreTypes.GeneratePower, this, null, true, null, null, null, true, null, false, true, null, false, true, true, PriorityScreen.PriorityClass.basic, 5, false, true); } } else if (chore != null) { chore.Cancel("No refill needed"); chore = null; } component.ToggleStatusItem(EnergyGenerator.BatteriesSufficientlyFull, !flag2, null); } } } }
protected override bool OnWorkTick(Worker worker, float dt) { CircuitManager circuitManager = Game.Instance.circuitManager; bool flag = false; if (circuitManager != null) { ushort circuitID = circuitManager.GetCircuitID(powerCell); bool flag2 = circuitManager.HasBatteries(circuitID); flag = ((flag2 && circuitManager.GetMinBatteryPercentFullOnCircuit(circuitID) < 1f) || (!flag2 && circuitManager.HasConsumers(circuitID))); } AttributeLevels component = worker.GetComponent <AttributeLevels>(); if ((Object)component != (Object)null) { component.AddExperience(Db.Get().Attributes.Athletics.Id, dt, DUPLICANTSTATS.ATTRIBUTE_LEVELING.ALL_DAY_EXPERIENCE); } return(!flag); }
public static bool Prefix(Wire __instance, ref StatusItem ___WireCircuitStatus, ref StatusItem ___WireMaxWattageStatus) { if (___WireCircuitStatus == null) { ___WireCircuitStatus = new StatusItem("WireCircuitStatus", "BUILDING", string.Empty, StatusItem.IconType.Info, NotificationType.Neutral, false, OverlayModes.None.ID).SetResolveStringCallback(delegate(string str, object data) { Wire wire2 = (Wire)data; int cell2 = Grid.PosToCell(wire2.transform.GetPosition()); CircuitManager circuitManager2 = Game.Instance.circuitManager; ushort circuitID2 = circuitManager2.GetCircuitID(cell2); float wattsUsedByCircuit = circuitManager2.GetWattsUsedByCircuit(circuitID2); GameUtil.WattageFormatterUnit unit2 = wire2.MaxWattageRating.GetFormatterUnit(); float maxWattageAsFloat2 = Wire.GetMaxWattageAsFloat(wire2.MaxWattageRating); float wattsNeededWhenActive2 = circuitManager2.GetWattsNeededWhenActive(circuitID2); string wireLoadColor = GameUtil.GetWireLoadColor(wattsUsedByCircuit, maxWattageAsFloat2, wattsNeededWhenActive2); str = str.Replace("{CurrentLoadAndColor}", (wireLoadColor == Color.white.ToHexString()) ? GameUtil.GetFormattedWattage(wattsUsedByCircuit, unit2) : ("<color=#" + wireLoadColor + ">" + GameUtil.GetFormattedWattage(wattsUsedByCircuit, unit2) + "</color>")); str = str.Replace("{MaxLoad}", GameUtil.GetFormattedWattage(maxWattageAsFloat2, unit2)); str = str.Replace("{WireType}", __instance.GetProperName()); return(str); }); } if (___WireMaxWattageStatus == null) { ___WireMaxWattageStatus = new StatusItem("WireMaxWattageStatus", "BUILDING", string.Empty, StatusItem.IconType.Info, NotificationType.Neutral, false, OverlayModes.None.ID).SetResolveStringCallback(delegate(string str, object data) { Wire wire = (Wire)data; GameUtil.WattageFormatterUnit unit = wire.MaxWattageRating.GetFormatterUnit(); int cell = Grid.PosToCell(wire.transform.GetPosition()); CircuitManager circuitManager = Game.Instance.circuitManager; ushort circuitID = circuitManager.GetCircuitID(cell); float wattsNeededWhenActive = circuitManager.GetWattsNeededWhenActive(circuitID); float maxWattageAsFloat = Wire.GetMaxWattageAsFloat(wire.MaxWattageRating); str = str.Replace("{TotalPotentialLoadAndColor}", (wattsNeededWhenActive > maxWattageAsFloat) ? ("<color=#" + new Color(251f / 255f, 176f / 255f, 59f / 255f).ToHexString() + ">" + GameUtil.GetFormattedWattage(wattsNeededWhenActive, unit) + "</color>") : GameUtil.GetFormattedWattage(wattsNeededWhenActive, unit)); str = str.Replace("{MaxLoad}", GameUtil.GetFormattedWattage(maxWattageAsFloat, unit)); return(str); }); } return(true); }
/// <summary> /// Updates the plugged in status of batteries or transformers. /// </summary> /// <param name="instance">The circuit manager to update.</param> /// <param name="batteries">The batteries or transformers to update.</param> /// <param name="hasSources">Whether the batteries have a potential energy source.</param> private static void UpdateConnectionStatus(CircuitManager instance, int circuitID, IList <Battery> batteries, bool hasSources) { int ni = batteries.Count; for (int i = 0; i < ni; i++) { var battery = batteries[i]; if (battery != null) { if (battery.powerTransformer == null) { battery.SetConnectionStatus(hasSources ? ConnectionStatus.Powered : ConnectionStatus.NotConnected); } else if (instance.GetCircuitID(battery) == circuitID) { battery.SetConnectionStatus(hasSources ? ConnectionStatus.Powered : ConnectionStatus.Unpowered); } } } }
private void Refresh() { if (!((Object)selectedTarget == (Object)null)) { foreach (KeyValuePair <string, GameObject> overviewLabel in overviewLabels) { overviewLabel.Value.SetActive(false); } foreach (KeyValuePair <string, GameObject> generatorsLabel in generatorsLabels) { generatorsLabel.Value.SetActive(false); } foreach (KeyValuePair <string, GameObject> consumersLabel in consumersLabels) { consumersLabel.Value.SetActive(false); } foreach (KeyValuePair <string, GameObject> batteriesLabel in batteriesLabels) { batteriesLabel.Value.SetActive(false); } CircuitManager circuitManager = Game.Instance.circuitManager; ushort num = ushort.MaxValue; EnergyConsumer component = selectedTarget.GetComponent <EnergyConsumer>(); if ((Object)component != (Object)null) { num = component.CircuitID; } else { Generator component2 = selectedTarget.GetComponent <Generator>(); if ((Object)component2 != (Object)null) { num = component2.CircuitID; } } if (num == 65535) { int cell = Grid.PosToCell(selectedTarget.transform.GetPosition()); num = circuitManager.GetCircuitID(cell); } if (num != 65535) { overviewPanel.SetActive(true); generatorsPanel.SetActive(true); consumersPanel.SetActive(true); batteriesPanel.SetActive(true); float joulesAvailableOnCircuit = circuitManager.GetJoulesAvailableOnCircuit(num); GameObject gameObject = AddOrGetLabel(overviewLabels, overviewPanel, "joulesAvailable"); gameObject.GetComponent <LocText>().text = string.Format(UI.DETAILTABS.ENERGYGENERATOR.AVAILABLE_JOULES, GameUtil.GetFormattedJoules(joulesAvailableOnCircuit, "F1", GameUtil.TimeSlice.None)); gameObject.GetComponent <ToolTip>().toolTip = UI.DETAILTABS.ENERGYGENERATOR.AVAILABLE_JOULES_TOOLTIP; gameObject.SetActive(true); float wattsGeneratedByCircuit = circuitManager.GetWattsGeneratedByCircuit(num); float potentialWattsGeneratedByCircuit = circuitManager.GetPotentialWattsGeneratedByCircuit(num); gameObject = AddOrGetLabel(overviewLabels, overviewPanel, "wattageGenerated"); string text = null; text = ((wattsGeneratedByCircuit != potentialWattsGeneratedByCircuit) ? $"{GameUtil.GetFormattedWattage(wattsGeneratedByCircuit, GameUtil.WattageFormatterUnit.Automatic)} / {GameUtil.GetFormattedWattage(potentialWattsGeneratedByCircuit, GameUtil.WattageFormatterUnit.Automatic)}" : GameUtil.GetFormattedWattage(wattsGeneratedByCircuit, GameUtil.WattageFormatterUnit.Automatic)); gameObject.GetComponent <LocText>().text = string.Format(UI.DETAILTABS.ENERGYGENERATOR.WATTAGE_GENERATED, text); gameObject.GetComponent <ToolTip>().toolTip = UI.DETAILTABS.ENERGYGENERATOR.WATTAGE_GENERATED_TOOLTIP; gameObject.SetActive(true); gameObject = AddOrGetLabel(overviewLabels, overviewPanel, "wattageConsumed"); gameObject.GetComponent <LocText>().text = string.Format(UI.DETAILTABS.ENERGYGENERATOR.WATTAGE_CONSUMED, GameUtil.GetFormattedWattage(circuitManager.GetWattsUsedByCircuit(num), GameUtil.WattageFormatterUnit.Automatic)); gameObject.GetComponent <ToolTip>().toolTip = UI.DETAILTABS.ENERGYGENERATOR.WATTAGE_CONSUMED_TOOLTIP; gameObject.SetActive(true); gameObject = AddOrGetLabel(overviewLabels, overviewPanel, "potentialWattageConsumed"); gameObject.GetComponent <LocText>().text = string.Format(UI.DETAILTABS.ENERGYGENERATOR.POTENTIAL_WATTAGE_CONSUMED, GameUtil.GetFormattedWattage(circuitManager.GetWattsNeededWhenActive(num), GameUtil.WattageFormatterUnit.Automatic)); gameObject.GetComponent <ToolTip>().toolTip = UI.DETAILTABS.ENERGYGENERATOR.POTENTIAL_WATTAGE_CONSUMED_TOOLTIP; gameObject.SetActive(true); gameObject = AddOrGetLabel(overviewLabels, overviewPanel, "maxSafeWattage"); gameObject.GetComponent <LocText>().text = string.Format(UI.DETAILTABS.ENERGYGENERATOR.MAX_SAFE_WATTAGE, GameUtil.GetFormattedWattage(circuitManager.GetMaxSafeWattageForCircuit(num), GameUtil.WattageFormatterUnit.Automatic)); gameObject.GetComponent <ToolTip>().toolTip = UI.DETAILTABS.ENERGYGENERATOR.MAX_SAFE_WATTAGE_TOOLTIP; gameObject.SetActive(true); ReadOnlyCollection <Generator> generatorsOnCircuit = circuitManager.GetGeneratorsOnCircuit(num); ReadOnlyCollection <IEnergyConsumer> consumersOnCircuit = circuitManager.GetConsumersOnCircuit(num); List <Battery> batteriesOnCircuit = circuitManager.GetBatteriesOnCircuit(num); ReadOnlyCollection <Battery> transformersOnCircuit = circuitManager.GetTransformersOnCircuit(num); if (generatorsOnCircuit.Count > 0) { foreach (Generator item in generatorsOnCircuit) { if ((Object)item != (Object)null && (Object)item.GetComponent <Battery>() == (Object)null) { gameObject = AddOrGetLabel(generatorsLabels, generatorsPanel, item.gameObject.GetInstanceID().ToString()); Operational component3 = item.GetComponent <Operational>(); if (component3.IsActive) { gameObject.GetComponent <LocText>().text = $"{item.GetComponent<KSelectable>().entityName}: {GameUtil.GetFormattedWattage(item.WattageRating, GameUtil.WattageFormatterUnit.Automatic)}"; } else { gameObject.GetComponent <LocText>().text = $"{item.GetComponent<KSelectable>().entityName}: {GameUtil.GetFormattedWattage(0f, GameUtil.WattageFormatterUnit.Automatic)} / {GameUtil.GetFormattedWattage(item.WattageRating, GameUtil.WattageFormatterUnit.Automatic)}"; } gameObject.SetActive(true); gameObject.GetComponent <LocText>().fontStyle = (((Object)item.gameObject == (Object)selectedTarget) ? FontStyles.Bold : FontStyles.Normal); } } } else { gameObject = AddOrGetLabel(generatorsLabels, generatorsPanel, "nogenerators"); gameObject.GetComponent <LocText>().text = UI.DETAILTABS.ENERGYGENERATOR.NOGENERATORS; gameObject.SetActive(true); } if (consumersOnCircuit.Count > 0 || transformersOnCircuit.Count > 0) { foreach (IEnergyConsumer item2 in consumersOnCircuit) { AddConsumerInfo(item2, gameObject); } foreach (Battery item3 in transformersOnCircuit) { AddConsumerInfo(item3, gameObject); } } else { gameObject = AddOrGetLabel(consumersLabels, consumersPanel, "noconsumers"); gameObject.GetComponent <LocText>().text = UI.DETAILTABS.ENERGYGENERATOR.NOCONSUMERS; gameObject.SetActive(true); } if (batteriesOnCircuit.Count > 0) { foreach (Battery item4 in batteriesOnCircuit) { if ((Object)item4 != (Object)null) { gameObject = AddOrGetLabel(batteriesLabels, batteriesPanel, item4.gameObject.GetInstanceID().ToString()); gameObject.GetComponent <LocText>().text = string.Format("{0}: {1}", item4.GetComponent <KSelectable>().entityName, GameUtil.GetFormattedJoules(item4.JoulesAvailable, "F1", GameUtil.TimeSlice.None)); gameObject.SetActive(true); gameObject.GetComponent <LocText>().fontStyle = (((Object)item4.gameObject == (Object)selectedTarget) ? FontStyles.Bold : FontStyles.Normal); } } } else { gameObject = AddOrGetLabel(batteriesLabels, batteriesPanel, "nobatteries"); gameObject.GetComponent <LocText>().text = UI.DETAILTABS.ENERGYGENERATOR.NOBATTERIES; gameObject.SetActive(true); } } else { overviewPanel.SetActive(true); generatorsPanel.SetActive(false); consumersPanel.SetActive(false); batteriesPanel.SetActive(false); GameObject gameObject2 = AddOrGetLabel(overviewLabels, overviewPanel, "nocircuit"); gameObject2.GetComponent <LocText>().text = UI.DETAILTABS.ENERGYGENERATOR.DISCONNECTED; gameObject2.SetActive(true); } } }
/// <summary> /// Rebuilds the electrical networks. /// </summary> /// <param name="instance">The networks to rebuild.</param> private static void Rebuild(CircuitManager instance) { var circuits = instance.circuitInfo; var minBatteryFull = ListPool <float, CircuitManager> .Allocate(); int n = circuits.Count, circuitID; for (int i = 0; i < n; i++) { var circuit = circuits[i]; var bridges = circuit.bridgeGroups; int nGroups = bridges.Length; circuit.generators.Clear(); circuit.consumers.Clear(); circuit.batteries.Clear(); circuit.inputTransformers.Clear(); circuit.outputTransformers.Clear(); minBatteryFull.Add(1.0f); for (int j = 0; j < nGroups; j++) { bridges[j].Clear(); } } foreach (var consumer in instance.consumers) { if (consumer != null && (circuitID = instance.GetCircuitID(consumer)) != ushort.MaxValue) { var circuit = circuits[circuitID]; if (consumer is Battery battery) { if (battery.powerTransformer != null) { circuit.inputTransformers.Add(battery); } else { circuit.batteries.Add(battery); minBatteryFull[circuitID] = Mathf.Min(minBatteryFull[circuitID], battery.PercentFull); } } else { circuit.consumers.Add(consumer); } } } for (int i = 0; i < n; i++) { var circuit = circuits[i]; circuit.consumers.Sort(ConsumerWattageComparer.Instance); circuit.minBatteryPercentFull = minBatteryFull[i]; circuits[i] = circuit; } minBatteryFull.Recycle(); foreach (var generator in instance.generators) { if (generator != null && (circuitID = instance.GetCircuitID(generator)) != ushort.MaxValue) { var circuit = circuits[circuitID]; if (generator is PowerTransformer) { circuit.outputTransformers.Add(generator); } else { circuit.generators.Add(generator); } } } foreach (var bridge in instance.bridges) { if (bridge != null && (circuitID = instance.GetCircuitID(bridge)) != ushort. MaxValue) { circuits[circuitID].bridgeGroups[(int)bridge.GetMaxWattageRating()].Add( bridge); } } instance.dirty = false; }
public override void UpdateHoverElements(List <KSelectable> hoverObjects) { HoverTextScreen instance = HoverTextScreen.Instance; HoverTextDrawer hoverTextDrawer = instance.BeginDrawing(); hoverTextDrawer.BeginShadowBar(false); ActionName = ((!((UnityEngine.Object)currentDef != (UnityEngine.Object)null) || !currentDef.DragBuild) ? UI.TOOLS.BUILD.TOOLACTION : UI.TOOLS.BUILD.TOOLACTION_DRAG); if ((UnityEngine.Object)currentDef != (UnityEngine.Object)null && currentDef.Name != null) { ToolName = string.Format(UI.TOOLS.BUILD.NAME, currentDef.Name); } DrawTitle(instance, hoverTextDrawer); DrawInstructions(instance, hoverTextDrawer); int cell = Grid.PosToCell(Camera.main.ScreenToWorldPoint(KInputManager.GetMousePos())); int min_height = 26; int width = 8; if ((UnityEngine.Object)currentDef != (UnityEngine.Object)null) { Orientation orientation = Orientation.Neutral; if ((UnityEngine.Object)PlayerController.Instance.ActiveTool != (UnityEngine.Object)null) { Type type = PlayerController.Instance.ActiveTool.GetType(); if (typeof(BuildTool).IsAssignableFrom(type) || typeof(BaseUtilityBuildTool).IsAssignableFrom(type)) { if ((UnityEngine.Object)currentDef.BuildingComplete.GetComponent <Rotatable>() != (UnityEngine.Object)null) { hoverTextDrawer.NewLine(min_height); hoverTextDrawer.AddIndent(width); string text = UI.TOOLTIPS.HELP_ROTATE_KEY.ToString(); text = text.Replace("{Key}", GameUtil.GetActionString(Action.RotateBuilding)); hoverTextDrawer.DrawText(text, Styles_Instruction.Standard); } orientation = BuildTool.Instance.GetBuildingOrientation; string fail_reason = "Unknown reason"; Vector3 pos = Grid.CellToPosCCC(cell, Grid.SceneLayer.Building); if (!currentDef.IsValidPlaceLocation(BuildTool.Instance.visualizer, pos, orientation, out fail_reason)) { hoverTextDrawer.NewLine(min_height); hoverTextDrawer.AddIndent(width); hoverTextDrawer.DrawText(fail_reason, HoverTextStyleSettings[1]); } RoomTracker component = currentDef.BuildingComplete.GetComponent <RoomTracker>(); if ((UnityEngine.Object)component != (UnityEngine.Object)null && !component.SufficientBuildLocation(cell)) { hoverTextDrawer.NewLine(min_height); hoverTextDrawer.AddIndent(width); hoverTextDrawer.DrawText(UI.TOOLTIPS.HELP_REQUIRES_ROOM, HoverTextStyleSettings[1]); } } } hoverTextDrawer.NewLine(min_height); hoverTextDrawer.AddIndent(width); hoverTextDrawer.DrawText(ResourceRemainingDisplayScreen.instance.GetString(), Styles_BodyText.Standard); hoverTextDrawer.EndShadowBar(); HashedString mode = SimDebugView.Instance.GetMode(); if (mode == OverlayModes.Logic.ID && hoverObjects != null) { SelectToolHoverTextCard component2 = SelectTool.Instance.GetComponent <SelectToolHoverTextCard>(); foreach (KSelectable hoverObject in hoverObjects) { LogicPorts component3 = hoverObject.GetComponent <LogicPorts>(); if ((UnityEngine.Object)component3 != (UnityEngine.Object)null && component3.TryGetPortAtCell(cell, out LogicPorts.Port port, out bool isInput)) { bool flag = component3.IsPortConnected(port.id); hoverTextDrawer.BeginShadowBar(false); int num; if (isInput) { string replacement = (!port.displayCustomName) ? UI.LOGIC_PORTS.PORT_INPUT_DEFAULT_NAME.text : port.description; num = component3.GetInputValue(port.id); hoverTextDrawer.DrawText(UI.TOOLS.GENERIC.LOGIC_INPUT_HOVER_FMT.Replace("{Port}", replacement).Replace("{Name}", hoverObject.GetProperName().ToUpper()), component2.Styles_Title.Standard); } else { string replacement2 = (!port.displayCustomName) ? UI.LOGIC_PORTS.PORT_OUTPUT_DEFAULT_NAME.text : port.description; num = component3.GetOutputValue(port.id); hoverTextDrawer.DrawText(UI.TOOLS.GENERIC.LOGIC_OUTPUT_HOVER_FMT.Replace("{Port}", replacement2).Replace("{Name}", hoverObject.GetProperName().ToUpper()), component2.Styles_Title.Standard); } hoverTextDrawer.NewLine(26); TextStyleSetting textStyleSetting = (!flag) ? component2.Styles_LogicActive.Standard : ((num != 1) ? component2.Styles_LogicSignalInactive : component2.Styles_LogicActive.Selected); hoverTextDrawer.DrawIcon((num != 1 || !flag) ? component2.iconDash : component2.iconActiveAutomationPort, textStyleSetting.textColor, 18, 2); hoverTextDrawer.DrawText(port.activeDescription, textStyleSetting); hoverTextDrawer.NewLine(26); TextStyleSetting textStyleSetting2 = (!flag) ? component2.Styles_LogicStandby.Standard : ((num != 0) ? component2.Styles_LogicSignalInactive : component2.Styles_LogicStandby.Selected); hoverTextDrawer.DrawIcon((num != 0 || !flag) ? component2.iconDash : component2.iconActiveAutomationPort, textStyleSetting2.textColor, 18, 2); hoverTextDrawer.DrawText(port.inactiveDescription, textStyleSetting2); hoverTextDrawer.EndShadowBar(); } LogicGate component4 = hoverObject.GetComponent <LogicGate>(); if ((UnityEngine.Object)component4 != (UnityEngine.Object)null && component4.TryGetPortAtCell(cell, out LogicGateBase.PortId port2)) { int portValue = component4.GetPortValue(port2); bool portConnected = component4.GetPortConnected(port2); LogicGate.LogicGateDescriptions.Description portDescription = component4.GetPortDescription(port2); hoverTextDrawer.BeginShadowBar(false); if (port2 == LogicGateBase.PortId.Output) { hoverTextDrawer.DrawText(UI.TOOLS.GENERIC.LOGIC_MULTI_OUTPUT_HOVER_FMT.Replace("{Port}", portDescription.name).Replace("{Name}", hoverObject.GetProperName().ToUpper()), component2.Styles_Title.Standard); } else { hoverTextDrawer.DrawText(UI.TOOLS.GENERIC.LOGIC_MULTI_INPUT_HOVER_FMT.Replace("{Port}", portDescription.name).Replace("{Name}", hoverObject.GetProperName().ToUpper()), component2.Styles_Title.Standard); } hoverTextDrawer.NewLine(26); TextStyleSetting textStyleSetting3 = (!portConnected) ? component2.Styles_LogicActive.Standard : ((portValue != 1) ? component2.Styles_LogicSignalInactive : component2.Styles_LogicActive.Selected); hoverTextDrawer.DrawIcon((portValue != 1 || !portConnected) ? component2.iconDash : component2.iconActiveAutomationPort, textStyleSetting3.textColor, 18, 2); hoverTextDrawer.DrawText(portDescription.active, textStyleSetting3); hoverTextDrawer.NewLine(26); TextStyleSetting textStyleSetting4 = (!portConnected) ? component2.Styles_LogicStandby.Standard : ((portValue != 0) ? component2.Styles_LogicSignalInactive : component2.Styles_LogicStandby.Selected); hoverTextDrawer.DrawIcon((portValue != 0 || !portConnected) ? component2.iconDash : component2.iconActiveAutomationPort, textStyleSetting4.textColor, 18, 2); hoverTextDrawer.DrawText(portDescription.inactive, textStyleSetting4); hoverTextDrawer.EndShadowBar(); } } } else if (mode == OverlayModes.Power.ID) { CircuitManager circuitManager = Game.Instance.circuitManager; ushort circuitID = circuitManager.GetCircuitID(cell); if (circuitID != 65535) { hoverTextDrawer.BeginShadowBar(false); float wattsNeededWhenActive = circuitManager.GetWattsNeededWhenActive(circuitID); wattsNeededWhenActive += currentDef.EnergyConsumptionWhenActive; float maxSafeWattageForCircuit = circuitManager.GetMaxSafeWattageForCircuit(circuitID); Color color = (!(wattsNeededWhenActive >= maxSafeWattageForCircuit)) ? Color.white : Color.red; hoverTextDrawer.AddIndent(width); hoverTextDrawer.DrawText(string.Format(UI.DETAILTABS.ENERGYGENERATOR.POTENTIAL_WATTAGE_CONSUMED, GameUtil.GetFormattedWattage(wattsNeededWhenActive, GameUtil.WattageFormatterUnit.Automatic)), Styles_BodyText.Standard, color, true); hoverTextDrawer.EndShadowBar(); } } } hoverTextDrawer.EndDrawing(); }