Files
tbd-station-14/Content.Client/UserInterface/Systems/Hands/Controls/HandsContainer.cs
Flipp Syder a3dafd88dc Oldchat (#11913)
* attempt at moving MainViewport to UIWidget

* oldchat (prototype)

* separate oldchat and default ss14 HUD into their own files

* restores original default game screen logic and adds that logic into separated chat game screen

* hand reloading, several tweaks to port oldchat to main ss14 branch

oldchat is currently not selectable

* screen type cvar, gameplay state screen reloading/loading

* reload screen on ui layout cvar change

* fixes up basic reloading (HUD switching is still very bad)

* some UI widget reloading for main UI screen switching

* alert sync on screen change

* inventory reload

* hotbar margin fix

* chat bubbles above viewport

* whoops

* fixes ordering of speech bubble root

* should fix the chat focus issue (at least in-game, not lobby yet)

* should fix up the lobby/game chat focus

* fixes chat for lobby, turns lobby into a UI state

* viewport UI controller

* viewport ratio selection

* whoops

* adds the /tg/ widescreen ratio

* removes warning from inventory UI controller, adds background to separated chat game screen's chat portion

* menu button reload

* unload menu buttons only from gameplay state shutdown

* bugfix

* character button fix

* adds config options for viewport width/UI layout

* variable naming changes, get or null instead of get to avoid exceptions

* moves entity system get into controller
2022-10-17 17:13:41 -05:00

90 lines
2.2 KiB
C#

using System.Linq;
using Content.Client.UserInterface.Systems.Inventory.Controls;
using Robust.Client.UserInterface.Controls;
namespace Content.Client.UserInterface.Systems.Hands.Controls;
public sealed class HandsContainer : ItemSlotUIContainer<HandButton>
{
private readonly GridContainer _grid;
public int ColumnLimit { get => _grid.Columns; set => _grid.Columns = value; }
public int MaxButtonCount { get; set; } = 0;
/// <summary>
/// Indexer. This is used to reference a HandsContainer from the
/// controller.
/// </summary>
public string? Indexer { get; set; }
public HandsContainer()
{
AddChild(_grid = new GridContainer());
_grid.ExpandBackwards = true;
}
public override HandButton? AddButton(HandButton newButton)
{
if (MaxButtonCount > 0)
{
if (ButtonCount >= MaxButtonCount)
return null;
_grid.AddChild(newButton);
}
else
{
_grid.AddChild(newButton);
}
return base.AddButton(newButton);
}
public override void RemoveButton(string handName)
{
var button = GetButton(handName);
if (button == null)
return;
base.RemoveButton(button);
_grid.RemoveChild(button);
}
public bool TryGetLastButton(out HandButton? control)
{
if (Buttons.Count == 0)
{
control = null;
return false;
}
control = Buttons.Values.Last();
return true;
}
public bool TryRemoveLastHand(out HandButton? control)
{
var success = TryGetLastButton(out control);
if (control != null)
RemoveButton(control);
return success;
}
public void Clear()
{
ClearButtons();
_grid.DisposeAllChildren();
}
public IEnumerable<HandButton> GetButtons()
{
foreach (var child in _grid.Children)
{
if (child is HandButton hand)
yield return hand;
}
}
public bool IsFull => (MaxButtonCount != 0 && ButtonCount >= MaxButtonCount);
public int ButtonCount => _grid.ChildCount;
}