Files
tbd-station-14/Content.Client/Health/BodySystem/BodyScanner/BodyScannerDisplay.cs
DrSmugleaf 4a8ed41e3a Fix namespaces and optimize imports (#1651)
* Fix namespaces and optimize imports

* Cleanup fixes

* Merge conflict fixes

* Merge conflict fixes

* Merge conflict fixes
2020-08-13 14:40:27 +02:00

156 lines
5.7 KiB
C#

using System.Collections.Generic;
using System.Globalization;
using Content.Shared.Health.BodySystem.BodyScanner;
using Robust.Client.UserInterface.Controls;
using Robust.Client.UserInterface.CustomControls;
using Robust.Shared.IoC;
using Robust.Shared.Localization;
using Robust.Shared.Maths;
using static Robust.Client.UserInterface.Controls.ItemList;
namespace Content.Client.Health.BodySystem.BodyScanner
{
public sealed class BodyScannerDisplay : SS14Window
{
#pragma warning disable 649
[Dependency] private readonly ILocalizationManager _loc;
#pragma warning restore 649
public BodyScannerBoundUserInterface Owner { get; private set; }
protected override Vector2? CustomSize => (800, 600);
private ItemList BodyPartList { get; }
private Label BodyPartLabel { get; }
private Label BodyPartHealth { get; }
private ItemList MechanismList { get; }
private RichTextLabel MechanismInfoLabel { get; }
private BodyScannerTemplateData _template;
private Dictionary<string, BodyScannerBodyPartData> _parts;
private List<string> _slots;
private BodyScannerBodyPartData _currentBodyPart;
public BodyScannerDisplay(BodyScannerBoundUserInterface owner)
{
IoCManager.InjectDependencies(this);
Owner = owner;
Title = _loc.GetString("Body Scanner");
var hSplit = new HBoxContainer();
Contents.AddChild(hSplit);
//Left half
var scrollBox = new ScrollContainer
{
SizeFlagsHorizontal = SizeFlags.FillExpand,
};
hSplit.AddChild(scrollBox);
BodyPartList = new ItemList { };
scrollBox.AddChild(BodyPartList);
BodyPartList.OnItemSelected += BodyPartOnItemSelected;
//Right half
var vSplit = new VBoxContainer
{
SizeFlagsHorizontal = SizeFlags.FillExpand,
};
hSplit.AddChild(vSplit);
//Top half of the right half
var limbBox = new VBoxContainer
{
SizeFlagsVertical = SizeFlags.FillExpand
};
vSplit.AddChild(limbBox);
BodyPartLabel = new Label();
limbBox.AddChild(BodyPartLabel);
var limbHealthHBox = new HBoxContainer();
limbBox.AddChild(limbHealthHBox);
var healthLabel = new Label
{
Text = "Health: "
};
limbHealthHBox.AddChild(healthLabel);
BodyPartHealth = new Label();
limbHealthHBox.AddChild(BodyPartHealth);
var limbScroll = new ScrollContainer
{
SizeFlagsVertical = SizeFlags.FillExpand
};
limbBox.AddChild(limbScroll);
MechanismList = new ItemList();
limbScroll.AddChild(MechanismList);
MechanismList.OnItemSelected += MechanismOnItemSelected;
//Bottom half of the right half
MechanismInfoLabel = new RichTextLabel
{
SizeFlagsVertical = SizeFlags.FillExpand
};
vSplit.AddChild(MechanismInfoLabel);
}
public void UpdateDisplay(BodyScannerTemplateData template, Dictionary<string, BodyScannerBodyPartData> parts)
{
_template = template;
_parts = parts;
_slots = new List<string>();
BodyPartList.Clear();
foreach (var (key, value) in _parts)
{
_slots.Add(key); //We have to do this since ItemLists only return the index of what item is selected and dictionaries don't allow you to explicitly grab things by index.
//So we put the contents of the dictionary into a list so that we can grab the list by index. I don't know either.
BodyPartList.AddItem(CultureInfo.CurrentCulture.TextInfo.ToTitleCase(key));
}
}
public void BodyPartOnItemSelected(ItemListSelectedEventArgs args)
{
if(_parts.TryGetValue(_slots[args.ItemIndex], out _currentBodyPart)) {
UpdateBodyPartBox(_currentBodyPart, _slots[args.ItemIndex]);
}
}
private void UpdateBodyPartBox(BodyScannerBodyPartData part, string slotName)
{
BodyPartLabel.Text = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(slotName) + ": " + CultureInfo.CurrentCulture.TextInfo.ToTitleCase(part.Name);
BodyPartHealth.Text = part.CurrentDurability + "/" + part.MaxDurability;
MechanismList.Clear();
foreach (var mechanism in part.Mechanisms) {
MechanismList.AddItem(mechanism.Name);
}
}
public void MechanismOnItemSelected(ItemListSelectedEventArgs args)
{
UpdateMechanismBox(_currentBodyPart.Mechanisms[args.ItemIndex]);
}
private void UpdateMechanismBox(BodyScannerMechanismData mechanism)
{
//TODO: Make UI look less shit and clean up whatever the fuck this is lmao
if (mechanism != null)
{
string message = "";
message += mechanism.Name;
message += "\nHealth: ";
message += mechanism.CurrentDurability;
message += "/";
message += mechanism.MaxDurability;
message += "\n";
message += mechanism.Description;
MechanismInfoLabel.SetMessage(message);
}
else
{
MechanismInfoLabel.SetMessage("");
}
}
}
}