using Content.Client.Stylesheets; using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.CustomControls; using Robust.Shared.GameObjects; using Robust.Shared.IoC; using Robust.Shared.Localization; using static Content.Shared.AME.SharedAMEControllerComponent; using static Robust.Client.UserInterface.Controls.BoxContainer; namespace Content.Client.AME.UI { public class AMEWindow : SS14Window { public Label InjectionStatus { get; set; } public Button EjectButton { get; set; } public Button ToggleInjection { get; set; } public Button IncreaseFuelButton { get; set; } public Button DecreaseFuelButton { get; set; } public ProgressBar? FuelMeter { get; set; } public Label FuelAmount { get; set; } public Label InjectionAmount { get; set; } public Label CoreCount { get; set; } public AMEWindow() { IoCManager.InjectDependencies(this); Title = Loc.GetString("ame-window-title"); MinSize = SetSize = (250, 250); Contents.AddChild(new BoxContainer { Orientation = LayoutOrientation.Vertical, Children = { new BoxContainer { Orientation = LayoutOrientation.Horizontal, Children = { new Label {Text = Loc.GetString("ame-window-engine-status-label") + " "}, (InjectionStatus = new Label {Text = Loc.GetString("ame-window-engine-injection-status-not-injecting-label")}) } }, new BoxContainer { Orientation = LayoutOrientation.Horizontal, Children = { (ToggleInjection = new Button {Text = Loc.GetString("ame-window-toggle-injection-button"), StyleClasses = {StyleBase.ButtonOpenBoth}, Disabled = true}), } }, new BoxContainer { Orientation = LayoutOrientation.Horizontal, Children = { new Label {Text = Loc.GetString("ame-window-fuel-status-label") + " "}, (FuelAmount = new Label {Text = Loc.GetString("ame-window-fuel-not-inserted-text")}) } }, new BoxContainer { Orientation = LayoutOrientation.Horizontal, Children = { (EjectButton = new Button {Text = Loc.GetString("ame-window-eject-button"), StyleClasses = {StyleBase.ButtonOpenBoth}, Disabled = true}), } }, new BoxContainer { Orientation = LayoutOrientation.Horizontal, Children = { new Label {Text = Loc.GetString("ame-window-injection-amount-label") + " "}, (InjectionAmount = new Label {Text = "0"}) } }, new BoxContainer { Orientation = LayoutOrientation.Horizontal, Children = { (IncreaseFuelButton = new Button {Text = Loc.GetString("ame-window-increase-fuel-button"), StyleClasses = {StyleBase.ButtonOpenRight}}), (DecreaseFuelButton = new Button {Text = Loc.GetString("ame-window-decrease-fuel-button"), StyleClasses = {StyleBase.ButtonOpenLeft}}), } }, new BoxContainer { Orientation = LayoutOrientation.Horizontal, Children = { new Label { Text = Loc.GetString("ame-window-core-count-label") + " "}, (CoreCount = new Label { Text = "0"}), } } } }); } /// /// This searches recursively through all the children of "parent" /// and sets the Disabled value of any buttons found to "val" /// /// The control which childrens get searched /// The value to which disabled gets set private void SetButtonDisabledRecursive(Control parent, bool val) { foreach (var child in parent.Children) { if (child is Button but) { but.Disabled = val; continue; } if (child.Children != null) { SetButtonDisabledRecursive(child, val); } } } /// /// Update the UI state when new state data is received from the server. /// /// State data sent by the server. public void UpdateState(BoundUserInterfaceState state) { var castState = (AMEControllerBoundUserInterfaceState) state; // Disable all buttons if not powered if (Contents.Children != null) { SetButtonDisabledRecursive(Contents, !castState.HasPower); EjectButton.Disabled = false; } if (!castState.HasFuelJar) { EjectButton.Disabled = true; ToggleInjection.Disabled = true; FuelAmount.Text = Loc.GetString("ame-window-fuel-not-inserted-text"); } else { EjectButton.Disabled = false; ToggleInjection.Disabled = false; FuelAmount.Text = $"{castState.FuelAmount}"; } if (!castState.IsMaster) { ToggleInjection.Disabled = true; } if (!castState.Injecting) { InjectionStatus.Text = Loc.GetString("ame-window-engine-injection-status-not-injecting-label") + " "; } else { InjectionStatus.Text = Loc.GetString("ame-window-engine-injection-status-injecting-label") + " "; } CoreCount.Text = $"{castState.CoreCount}"; InjectionAmount.Text = $"{castState.InjectionAmount}"; } } }