* yes (cherry picked from commit a6b5e1c66dfe4241977bcde753af594392164eca) * Is real, navernoe (#944) * its real * fix shield * remove comments game preset * maximum predicted * fixes * АААААААААААААААААААААААААААА ПОМОГИТЕ Я ЕБНУЛСЯ ПОКА ФИКСИЛ ЭТУ ЗАЛУПУ * govnoedit * secret (cherry picked from commit 22c7b68048590b5098efbfff0d0f5205d3a64c48) * [Feature/Tweaks] Raznoe (#934) * make thruster great again * make hardsuit hos great again * new ficha for medical hud * fix * vrode da * GOOOVNO REMIX REVERB EXTRA * fix * правки --------- Co-authored-by: BIGZi0348 <svalker0348@gmail.com> (cherry picked from commit 141e61a0449873842f46d83eff9e9ce857147d60) * Automatic changelog update (cherry picked from commit d14fe5fb6c934ed522df0b5bc453e4c04707a6db) * [Feature] Executions (#932) * based * cleanup * cleanup + fixes * fix * fix * fix ftl * Update Resources/Locale/ru-RU/_white/executions/execution.ftl Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * Update execution.ftl * правки * vrode norm * da --------- Co-authored-by: BIGZi0348 <118811750+BIGZi0348@users.noreply.github.com> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: BIGZi0348 <svalker0348@gmail.com> (cherry picked from commit 83e164172f8e290acee7634f14ac51281be020ad) * Automatic changelog update (cherry picked from commit 71f907c563a30a1fc7ef5751a4d6f2c780a14f4c) * hotfix (#946) (cherry picked from commit f577caec41ab277ee8fc1c18fe64f7e26a6e50f5) --------- Co-authored-by: RavmorganButOnCocaine <valtos@nextmail.ru>
123 lines
3.7 KiB
C#
123 lines
3.7 KiB
C#
using Content.Client._White.UserInterface.Radial;
|
|
using Content.Client.CombatMode;
|
|
using Content.Client.ContextMenu.UI;
|
|
using Content.Client.Gameplay;
|
|
using Content.Shared._White.Radials;
|
|
using Robust.Client.Player;
|
|
using Robust.Client.UserInterface;
|
|
using Robust.Client.UserInterface.Controllers;
|
|
|
|
namespace Content.Client._White.Radials;
|
|
|
|
public sealed class RadialUIController : UIController, IOnStateEntered<GameplayState>, IOnStateExited<GameplayState>
|
|
{
|
|
[Dependency] private readonly IPlayerManager _playerManager = default!;
|
|
[Dependency] private readonly IUserInterfaceManager _userInterfaceManager = default!;
|
|
[Dependency] private readonly IEntityManager _entityManager = default!;
|
|
|
|
[UISystemDependency] private readonly CombatModeSystem _combatMode = default!;
|
|
[UISystemDependency] private readonly RadialSystem _radialSystem = default!;
|
|
|
|
public EntityUid CurrentTarget;
|
|
public SortedSet<Radial> CurrentRadials = new();
|
|
|
|
/// <summary>
|
|
/// Separate from <see cref="ContextMenuUIController.RootMenu"/>, since we can open a verb menu as a submenu
|
|
/// of an entity menu element. If that happens, we need to be aware and close it properly.
|
|
/// </summary>
|
|
public RadialContainer? OpenMenu;
|
|
|
|
public void OnStateEntered(GameplayState state)
|
|
{
|
|
//_context.OnContextClosed += Close;
|
|
_radialSystem.OnRadialsResponse += HandleVerbsResponse;
|
|
}
|
|
|
|
public void OnStateExited(GameplayState state)
|
|
{
|
|
//_context.OnContextClosed -= Close;
|
|
if (_radialSystem != null)
|
|
{
|
|
_radialSystem.OnRadialsResponse -= HandleVerbsResponse;
|
|
}
|
|
|
|
Close();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Open a verb menu and fill it with verbs applicable to the given target entity.
|
|
/// </summary>
|
|
/// <param name="target">Entity to get verbs on.</param>
|
|
/// <param name="force">Used to force showing all verbs (mostly for admins).</param>
|
|
public void OpenRadialMenu(EntityUid target, bool force = false)
|
|
{
|
|
if (_playerManager.LocalSession?.AttachedEntity is not { Valid: true } user ||
|
|
_combatMode.IsInCombatMode(user))
|
|
return;
|
|
|
|
if(OpenMenu != null)
|
|
Close();
|
|
|
|
CurrentTarget = target;
|
|
CurrentRadials = _radialSystem.GetRadials(target, user, Radial.RadialTypes, force);
|
|
OpenMenu = new RadialContainer();
|
|
OpenMenu.NormalSize = 50;
|
|
OpenMenu.FocusSize = 64;
|
|
|
|
//Feat: Disable action text, while im not fixed it
|
|
OpenMenu.IsAction = false;
|
|
}
|
|
|
|
private void FillRadial()
|
|
{
|
|
OpenMenu ??= new RadialContainer();
|
|
|
|
OpenMenu.CloseButton.Controller.OnPressed += _ =>
|
|
{
|
|
Close();
|
|
};
|
|
|
|
foreach (var radial in CurrentRadials)
|
|
{
|
|
var button = OpenMenu.AddButton(radial.Text, radial.Icon ?? null);
|
|
button.Controller.OnPressed += _ => { ExecuteRadial(radial); };
|
|
}
|
|
|
|
OpenMenu.Open(_userInterfaceManager.MousePositionScaled.Position);
|
|
}
|
|
|
|
public void AddServerRadials(List<Radial> radials)
|
|
{
|
|
CurrentRadials.UnionWith(radials);
|
|
FillRadial();
|
|
}
|
|
|
|
private void Close()
|
|
{
|
|
if (OpenMenu == null)
|
|
return;
|
|
|
|
OpenMenu.Close(true);
|
|
OpenMenu = null;
|
|
}
|
|
|
|
private void HandleVerbsResponse(RadialsResponseEvent msg)
|
|
{
|
|
if (OpenMenu == null || CurrentTarget != _entityManager.GetEntity(msg.Entity))
|
|
return;
|
|
|
|
if (msg.Radials == null)
|
|
return;
|
|
|
|
AddServerRadials(msg.Radials);
|
|
}
|
|
|
|
private void ExecuteRadial(Radial radial)
|
|
{
|
|
_radialSystem.ExecuteRadial(CurrentTarget, radial);
|
|
|
|
if (radial.CloseMenu ?? radial.CloseMenuDefault)
|
|
Close(); //_context.Close();
|
|
}
|
|
}
|