Files
OldThink/Content.Client/_White/Radials/RadialUIController.cs
withoutcode333 0e4e5b7805 Upstream core (#282)
* 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>
2025-04-13 19:03:49 +05:00

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();
}
}