107 lines
5.1 KiB
C#
107 lines
5.1 KiB
C#
using Microsoft.Xna.Framework;
|
|
using System;
|
|
using System.Xml.Linq;
|
|
|
|
namespace Barotrauma.Items.Components
|
|
{
|
|
partial class PowerTransfer : Powered
|
|
{
|
|
public override bool RecreateGUIOnResolutionChange => true;
|
|
protected GUIComponent guiContent;
|
|
|
|
private GUITickBox powerIndicator;
|
|
private GUITickBox highVoltageIndicator;
|
|
private GUITickBox lowVoltageIndicator;
|
|
|
|
private GUITextBlock powerLabel, loadLabel;
|
|
protected GUITextBlock powerDisplay, loadDisplay;
|
|
|
|
protected LanguageIdentifier prevLanguage;
|
|
|
|
partial void InitProjectSpecific(XElement element)
|
|
{
|
|
if (GuiFrame == null) { return; }
|
|
CreateGUI();
|
|
prevLanguage = GameSettings.CurrentConfig.Language;
|
|
}
|
|
|
|
protected override void CreateGUI()
|
|
{
|
|
if (GuiFrame == null) { return; }
|
|
guiContent = new GUIFrame(new RectTransform(GuiFrame.Rect.Size - GUIStyle.ItemFrameMargin, GuiFrame.RectTransform, Anchor.Center) { AbsoluteOffset = GUIStyle.ItemFrameOffset }, style: null)
|
|
{
|
|
CanBeFocused = false
|
|
};
|
|
CreateDefaultPowerUI(guiContent);
|
|
}
|
|
|
|
protected void CreateDefaultPowerUI(GUIComponent parent)
|
|
{
|
|
GUILayoutGroup lightsArea = new(new RectTransform(new Vector2(0.4f, 1f), parent.RectTransform, Anchor.CenterLeft))
|
|
{
|
|
Stretch = true
|
|
};
|
|
powerIndicator = GUI.CreateIndicatorLight(new RectTransform(new Vector2(1, 0.33f), lightsArea.RectTransform),
|
|
"IndicatorLightGreen", TextManager.Get("PowerTransferPowered"));
|
|
highVoltageIndicator = GUI.CreateIndicatorLight(new RectTransform(new Vector2(1, 0.33f), lightsArea.RectTransform),
|
|
"IndicatorLightRed", TextManager.Get("PowerTransferHighVoltage"), TextManager.Get("PowerTransferTipOvervoltage"));
|
|
lowVoltageIndicator = GUI.CreateIndicatorLight(new RectTransform(new Vector2(1, 0.33f), lightsArea.RectTransform),
|
|
"IndicatorLightRed", TextManager.Get("PowerTransferLowVoltage"), TextManager.Get("PowerTransferTipLowvoltage"));
|
|
GUITextBlock.AutoScaleAndNormalize(powerIndicator.TextBlock, highVoltageIndicator.TextBlock, lowVoltageIndicator.TextBlock);
|
|
|
|
GUIFrame textContainer = new(new RectTransform(new Vector2(0.58f, 1f), parent.RectTransform, Anchor.CenterRight), style: null);
|
|
|
|
powerDisplay = GUI.CreateDigitalDisplay(new RectTransform(new Vector2(1f, 0.5f), textContainer.RectTransform, Anchor.TopLeft),
|
|
out powerLabel, out GUITextBlock unitLabel1, TextManager.Get("PowerTransferPowerLabel"), TextManager.Get("kilowatt"), TextManager.Get("PowerTransferTipPower"));
|
|
|
|
powerDisplay.TextGetter = () =>
|
|
{
|
|
float currPower = powerLoad < 0 ? -powerLoad : 0;
|
|
if (this is not RelayComponent && PowerConnections != null && PowerConnections.Count > 0 && PowerConnections[0].Grid != null)
|
|
{
|
|
currPower = PowerConnections[0].Grid.Power;
|
|
}
|
|
return MathUtils.RoundToInt(currPower).ToString();
|
|
};
|
|
|
|
loadDisplay = GUI.CreateDigitalDisplay(new RectTransform(new Vector2(1f, 0.5f), textContainer.RectTransform, Anchor.BottomLeft),
|
|
out loadLabel, out GUITextBlock unitLabel2, TextManager.Get("PowerTransferLoadLabel"), TextManager.Get("kilowatt"), TextManager.Get("PowerTransferTipLoad"));
|
|
|
|
loadDisplay.TextGetter = () =>
|
|
{
|
|
float load = PowerLoad;
|
|
if (this is RelayComponent relay)
|
|
{
|
|
load = relay.DisplayLoad;
|
|
}
|
|
else if (load < 0)
|
|
{
|
|
load = 0;
|
|
}
|
|
return MathUtils.RoundToInt(load).ToString();
|
|
};
|
|
|
|
GUITextBlock.AutoScaleAndNormalize(powerLabel, loadLabel);
|
|
GUITextBlock.AutoScaleAndNormalize(true, true, powerDisplay, loadDisplay);
|
|
GUITextBlock.AutoScaleAndNormalize(unitLabel1, unitLabel2);
|
|
}
|
|
|
|
public override void UpdateHUDComponentSpecific(Character character, float deltaTime, Camera cam)
|
|
{
|
|
if (GuiFrame == null) return;
|
|
|
|
float voltage = (PowerConnections.Count > 0 && PowerConnections[0].Grid != null) ? PowerConnections[0].Grid.Voltage : 0f;
|
|
powerIndicator.Selected = IsActive && voltage > 0;
|
|
highVoltageIndicator.Selected = Timing.TotalTime % 0.5f < 0.25f && powerIndicator.Selected && voltage > 1.2f;
|
|
lowVoltageIndicator.Selected = Timing.TotalTime % 0.5f < 0.25f && powerIndicator.Selected && voltage < 0.8f;
|
|
|
|
if (prevLanguage != GameSettings.CurrentConfig.Language)
|
|
{
|
|
GUITextBlock.AutoScaleAndNormalize(powerIndicator.TextBlock, highVoltageIndicator.TextBlock, lowVoltageIndicator.TextBlock);
|
|
GUITextBlock.AutoScaleAndNormalize(powerLabel, loadLabel);
|
|
prevLanguage = GameSettings.CurrentConfig.Language;
|
|
}
|
|
}
|
|
}
|
|
}
|