Files
2024-04-24 18:09:05 +03:00

83 lines
3.0 KiB
C#

#nullable enable
using System.Xml.Linq;
using Barotrauma.Items.Components;
using Microsoft.Xna.Framework;
namespace Barotrauma
{
internal sealed partial class CircuitBoxLabelNode : CircuitBoxNode, ICircuitBoxIdentifiable
{
public Color Color;
public ushort ID { get; }
public override bool IsResizable => true;
public static NetLimitedString DefaultHeaderText => new("label");
public NetLimitedString BodyText = NetLimitedString.Empty;
public NetLimitedString HeaderText = DefaultHeaderText;
public static Vector2 MinSize = new(128, 8);
public CircuitBoxLabelNode(ushort id, Color color, Vector2 pos, CircuitBox circuitBox) : base(circuitBox)
{
Size = new Vector2(256);
Position = pos;
ID = id;
Color = color;
UpdatePositions();
#if CLIENT
bodyLabel = new GUITextBlock(new RectTransform(Point.Zero), text: string.Empty, font: GUIStyle.Font, textAlignment: Alignment.TopLeft, wrap: true);
headerLabel = new CircuitBoxLabel(HeaderText.Value, GUIStyle.LargeFont);
UpdateDrawRects();
UpdateTextSizes(DrawRect);
#endif
}
public void EditText(NetLimitedString header, NetLimitedString body)
{
HeaderText = header;
BodyText = body;
#if CLIENT
UpdateTextSizes(DrawRect);
#endif
}
public XElement Save()
{
var element = new XElement("Label",
new XAttribute("id", ID),
new XAttribute("color", Color.ToStringHex()),
new XAttribute("position", XMLExtensions.Vector2ToString(Position)),
new XAttribute("size", XMLExtensions.Vector2ToString(Size)),
new XAttribute("header", HeaderText),
new XAttribute("body", BodyText));
return element;
}
public static CircuitBoxLabelNode LoadFromXML(ContentXElement element, CircuitBox circuitBox)
{
ushort id = element.GetAttributeUInt16("id", ICircuitBoxIdentifiable.NullComponentID);
Vector2 position = element.GetAttributeVector2("position", Vector2.Zero);
Vector2 size = element.GetAttributeVector2("size", Vector2.Zero);
Color color = element.GetAttributeColor("color", Color.White);
string header = element.GetAttributeString("header", string.Empty);
string body = element.GetAttributeString("body", string.Empty);
var labelNode = new CircuitBoxLabelNode(id, color, position, circuitBox)
{
Size = size,
HeaderText = new NetLimitedString(header),
BodyText = new NetLimitedString(body)
};
// proc a edit to force the sizes to be updated
labelNode.EditText(new NetLimitedString(header), new NetLimitedString(body));
labelNode.UpdatePositions();
#if CLIENT
labelNode.UpdateTextSizes(labelNode.Rect);
#endif
return labelNode;
}
}
}