* Initial * Cleanup a bunch of things * some changes dunno * RequireAnchored * a * stuff * more work * Lots of progress * delete pipe visualizer * a * b * pipenet and pipenode cleanup * Fixes * Adds GasValve * Adds GasMiner * Fix stuff, maybe? * More fixes * Ignored components on the client * Adds thermomachine behavior, change a bunch of stuff * Remove Anchored * some work, but it's shitcode * significantly more ECS * ECS AtmosDevices * Cleanup * fix appearance * when the pipe direction is sus * Gas tanks and canisters * pipe anchoring and stuff * coding is my passion * Unsafe pipes take longer to unanchor * turns out we're no longer using eris canisters * Gas canister inserted tank appearance, improvements * Work on a bunch of appearances * Scrubber appearance * Reorganize AtmosphereSystem.Piping into a bunch of different systems * Appearance for vent/scrubber/pump turns off when leaving atmosphere * ThermoMachine appearance * Cleanup gas tanks * Remove passive gate unused imports * remove old canister UI functionality * PipeNode environment air, make everything use AssumeAir instead of merging manually * a * Reorganize atmos to follow new structure * ????? * Canister UI, restructure client * Restructure shared * Fix build tho * listen, at least the canister UI works entirely... * fix build : ) * Atmos device prototypes have names and descriptions * gas canister ui slider doesn't jitter * trinary prototypes * sprite for miners * ignore components * fix YAML * Fix port system doing useless thing * Fix build * fix thinking moment * fix build again because * canister direction * pipenode is a word * GasTank Air will throw on invalid states * fix build.... * Unhardcode volume pump thresholds * Volume pump and filter take time into account * Rename Join/Leave atmosphere events to AtmosDeviceEnabled/Disabled Event * Gas tank node volume is set by initial mixtuer * I love node container
169 lines
5.1 KiB
C#
169 lines
5.1 KiB
C#
#nullable enable
|
|
using System.Collections.Generic;
|
|
using Content.Shared.Ghost;
|
|
using Robust.Client.Console;
|
|
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;
|
|
|
|
namespace Content.Client.Ghost
|
|
{
|
|
public class GhostGui : Control
|
|
{
|
|
private readonly Button _returnToBody = new() {Text = Loc.GetString("Return to body")};
|
|
private readonly Button _ghostWarp = new() {Text = Loc.GetString("Ghost Warp")};
|
|
private readonly Button _ghostRoles = new() {Text = Loc.GetString("Ghost Roles")};
|
|
private readonly GhostComponent _owner;
|
|
|
|
public GhostTargetWindow? TargetWindow { get; }
|
|
|
|
public GhostGui(GhostComponent owner, IEntityNetworkManager eventBus)
|
|
{
|
|
IoCManager.InjectDependencies(this);
|
|
|
|
_owner = owner;
|
|
|
|
TargetWindow = new GhostTargetWindow(owner, eventBus);
|
|
|
|
MouseFilter = MouseFilterMode.Ignore;
|
|
|
|
_ghostWarp.OnPressed += _ =>
|
|
{
|
|
eventBus.SendSystemNetworkMessage(new GhostWarpsRequestEvent());
|
|
TargetWindow.Populate();
|
|
TargetWindow.OpenCentered();
|
|
};
|
|
_returnToBody.OnPressed += _ =>
|
|
{
|
|
var msg = new GhostReturnToBodyRequest();
|
|
eventBus.SendSystemNetworkMessage(msg);
|
|
};
|
|
_ghostRoles.OnPressed += _ => IoCManager.Resolve<IClientConsoleHost>()
|
|
.RemoteExecuteCommand(null, "ghostroles");
|
|
|
|
AddChild(new HBoxContainer
|
|
{
|
|
Children =
|
|
{
|
|
_returnToBody,
|
|
_ghostWarp,
|
|
_ghostRoles,
|
|
}
|
|
});
|
|
}
|
|
|
|
public void Update()
|
|
{
|
|
_returnToBody.Disabled = !_owner.CanReturnToBody;
|
|
TargetWindow?.Populate();
|
|
}
|
|
|
|
protected override void Dispose(bool disposing)
|
|
{
|
|
base.Dispose(disposing);
|
|
|
|
if (disposing)
|
|
{
|
|
TargetWindow?.Dispose();
|
|
}
|
|
}
|
|
}
|
|
|
|
public class GhostTargetWindow : SS14Window
|
|
{
|
|
private readonly GhostComponent _owner;
|
|
private readonly IEntityNetworkManager _netManager;
|
|
|
|
private readonly VBoxContainer _buttonContainer;
|
|
|
|
public List<string> Locations { get; set; } = new();
|
|
|
|
public Dictionary<EntityUid, string> Players { get; set; } = new();
|
|
|
|
public GhostTargetWindow(GhostComponent owner, IEntityNetworkManager netManager)
|
|
{
|
|
MinSize = SetSize = (300, 450);
|
|
Title = "Ghost Warp";
|
|
_owner = owner;
|
|
_netManager = netManager;
|
|
|
|
_buttonContainer = new VBoxContainer()
|
|
{
|
|
VerticalExpand = true,
|
|
SeparationOverride = 5,
|
|
|
|
};
|
|
|
|
var scrollBarContainer = new ScrollContainer()
|
|
{
|
|
VerticalExpand = true,
|
|
HorizontalExpand = true
|
|
};
|
|
|
|
scrollBarContainer.AddChild(_buttonContainer);
|
|
|
|
Contents.AddChild(scrollBarContainer);
|
|
}
|
|
|
|
public void Populate()
|
|
{
|
|
_buttonContainer.DisposeAllChildren();
|
|
AddButtonPlayers();
|
|
AddButtonLocations();
|
|
}
|
|
|
|
private void AddButtonPlayers()
|
|
{
|
|
foreach (var (key, value) in Players)
|
|
{
|
|
var currentButtonRef = new Button
|
|
{
|
|
Text = value,
|
|
TextAlign = Label.AlignMode.Right,
|
|
HorizontalAlignment = HAlignment.Center,
|
|
VerticalAlignment = VAlignment.Center,
|
|
SizeFlagsStretchRatio = 1,
|
|
MinSize = (230, 20),
|
|
ClipText = true,
|
|
};
|
|
|
|
currentButtonRef.OnPressed += (_) =>
|
|
{
|
|
var msg = new GhostWarpToTargetRequestEvent(key);
|
|
_netManager.SendSystemNetworkMessage(msg);
|
|
};
|
|
|
|
_buttonContainer.AddChild(currentButtonRef);
|
|
}
|
|
}
|
|
|
|
private void AddButtonLocations()
|
|
{
|
|
foreach (var name in Locations)
|
|
{
|
|
var currentButtonRef = new Button
|
|
{
|
|
Text = $"Warp: {name}",
|
|
TextAlign = Label.AlignMode.Right,
|
|
HorizontalAlignment = HAlignment.Center,
|
|
VerticalAlignment = VAlignment.Center,
|
|
SizeFlagsStretchRatio = 1,
|
|
MinSize = (230,20),
|
|
ClipText = true,
|
|
};
|
|
|
|
currentButtonRef.OnPressed += (_) =>
|
|
{
|
|
var msg = new GhostWarpToLocationRequestEvent(name);
|
|
_netManager.SendSystemNetworkMessage(msg);
|
|
};
|
|
|
|
_buttonContainer.AddChild(currentButtonRef);
|
|
}
|
|
}
|
|
}
|
|
}
|