Skip to content

Port Radial Menu Refactor - #364

Open
SquishyEmmaaaa wants to merge 25 commits into
Triad-Sector:mainfrom
SquishyEmmaaaa:Port-Radial-Wheel-Improvements
Open

Port Radial Menu Refactor#364
SquishyEmmaaaa wants to merge 25 commits into
Triad-Sector:mainfrom
SquishyEmmaaaa:Port-Radial-Wheel-Improvements

Conversation

@SquishyEmmaaaa

@SquishyEmmaaaa SquishyEmmaaaa commented Jul 16, 2026

Copy link
Copy Markdown
Contributor

About the PR

This PR ports the wizden radial menu refactor, various cleanups and fixes for it, and cherry-picks the work of sleepyyapril in fixes to the various radial menu changes.

The various prs that were cherry-picked:
space-wizards/space-station-14#32653
space-wizards/space-station-14#34639
space-wizards/space-station-14#36486
space-wizards/space-station-14#36690
TheDenSS14/TheDen#1874

rebaserHEAD has assisted with updating the RPD menu to the new system, and preserving our fork's addition of a pipe color selector as part of the menu.

Why / Balance

This refactor is a needed step for #238 to work as intended. (Emote wheel will display the actual allowed Emotes without needing to hard code them into the wheel.)

Additionally, this brings us to parity with wizden for this system.

Media

Please see original PRs.

Requirements

  • I have read relevant guidelines/documentation to this PR found on our devwiki.
  • I have added media to this PR or it does not require an ingame showcase.
  • I can confirm this PR contains either no AI-generated content, or AI-generated content that meets our guidelines.

How to test

Breaking changes

(Pulled from the PRs:)
removed RadialMenuButton - was not used.
now RadialMenuTextureButton requires to be inside RadialContainer to work properly.

RadialMenuTextureButton.TargetLayer property is now of Control type, to get previous behaviour - use TargetLayerControlName property instead. Also consider using SimpleRadialMenu.

Changelog

🆑 Fildrance, SaphireLattice, eoineoineoin, Tayrtahn, sleepyyapril

  • tweak: Radial menu UIs have been updated for readability.
  • fix: returned deconstruct to the top level option on RCD
  • tweak: The RCD, RPD, card hand selection, and emotes radial menus have a new look!

Fildrance and others added 21 commits July 15, 2026 18:56
* it works! kinda

* so it works now

* minor cleanup

* central button now is useful too

* more cleanup

* minor cleanup

* more cleanup

* refactor: migrated code from toolbox (as it was rejected as too specific)

* feat: moved border drawing for radial menu into RadialMenuTextureButton. Radial menu position setting into was moved to OverrideArrange to not being called on every frame

* refactor: major reworks!

* renamed DrawBagleSector to DrawAnnulusSector

* Remove strange indexing

* Regularize math

* refactor: re-orienting segment elements to be Y-mirrored

* refactor: extracted radial menu radius multiplier property, changed color pallet for radial menu button

* refactor: removed icon backgrounds on textures used in current radial menu buttons with sectors, RadialContainer Radius renamed and now actually changed control radius.

* refactor: in RadialMenuTextureButtonWithSector all sector colors are converted to and from sRGB in property getter-setters

* refactor: renamed srgb to include Srgb suffix so devs gonna see that its srgb clearly

* fix: enabled any functional keys pressed when pushing radial menu buttons

* fix: radial menu sector now scales with UIScale

* fix: accept only one event when clicking on radial menu ContextualButton

* fix: now radial menu buttons accepts only click/alt-click, now clicks outside menu closes menu always

---------

Co-authored-by: pa.pecherskij <pa.pecherskij@interfax.ru>
Co-authored-by: Eoin Mcloughlin <helloworld@eoinrul.es>
* it works! kinda

* so it works now

* minor cleanup

* central button now is useful too

* more cleanup

* minor cleanup

* more cleanup

* refactor: migrated code from toolbox (as it was rejected as too specific)

* feat: moved border drawing for radial menu into RadialMenuTextureButton. Radial menu position setting into was moved to OverrideArrange to not being called on every frame

* refactor: major reworks!

* renamed DrawBagleSector to DrawAnnulusSector

* Remove strange indexing

* Regularize math

* refactor: re-orienting segment elements to be Y-mirrored

* refactor: extracted radial menu radius multiplier property, changed color pallet for radial menu button

* refactor: removed icon backgrounds on textures used in current radial menu buttons with sectors, RadialContainer Radius renamed and now actually changed control radius.

* refactor: in RadialMenuTextureButtonWithSector all sector colors are converted to and from sRGB in property getter-setters

* refactor: renamed srgb to include Srgb suffix so devs gonna see that its srgb clearly

* fix: enabled any functional keys pressed when pushing radial menu buttons

* fix: radial menu sector now scales with UIScale

* fix: accept only one event when clicking on radial menu ContextualButton

* fix: now radial menu buttons accepts only click/alt-click, now clicks outside menu closes menu always

* feat: simple radial menu prototype for easier creation

* refactor: cleanup, restored emote filtering, button models now have class hierarchy

* refactor: remove usage of closure from 'outside code'

* refactor: remove non existing type from UiControlTest

* refactor: remove unused using

* refactor: revert ability to declare radial menu layers in xaml, scale 32px sprites using scale in radial menu

* refactor: whitespaces

* refactor: subscribe for dispose on existing radial menus

* feat: now simple radial menu button models can have custom color for each sector background (and hover background color). Also added OpenOverMouseScreenPosition inside SimpleRadialMenu

* fix: AI door menu now can be closed by verb if it gets unpowered

* refactor: simplify hiding border, extended xml-doc for simple radial menu settings

* refactor: remove linq

* fix: fix AI radial action serialization using invalid type

* refactor: fix duplicate ShowDeviceNotRespondingPopup for AI by properly checking if it can interact

* refactor: whitespaces, changed list to array in simple radial button preparing methods

---------

Co-authored-by: pa.pecherskij <pa.pecherskij@interfax.ru>
Co-authored-by: Eoin Mcloughlin <helloworld@eoinrul.es>
feat: now RCD can have recepies that are placed on the top level of radial menu - 'Main' category name is reserved for this

Co-authored-by: pa.pecherskij <pa.pecherskij@interfax.ru>
…ter P for the pipe device is important it seems!

Removes the virtual tag from the Radial Menu Button Base, to match parity with Wizden, and fix a virtual classes cannot be abstract error.
Adds the keybind down to both fields. Maybe this will fix the stack overflow?

We don't have the IsClickOrAltClick function.
@github-actions github-actions Bot added S: Untriaged size/L C# FTL Changes to localization files UI labels Jul 16, 2026
SquishyEmmaaaa and others added 4 commits July 29, 2026 16:32
This reverts commit 7ca4a0f.
This reverts commit 54a5fe2.
Apparently we are bootstrapping mirroring off the KeyBindDown, so that makes more sense now.
The radial refactor deleted RCDMenu, which the RPD picker embedded for
its category radial. The interim rename made RPDMenu construct itself
recursively and stack-overflow on open. The RPD BUI now builds the same
button models as RCDMenuBoundUserInterface with the RPD atmos categories
and feeds them to an embedded SimpleRadialMenu; the color strip is
unchanged. Also restores the SPDX header dropped from RPDMenu.xaml.cs.
The ammo selector port renamed the C# loc key to
ammo-selector-mode-selected without renaming the ftl entry, so the
popup printed the raw key. Also drops a redundant Open() and duplicate
Invalid check in the emotes controller and trailing whitespace.
@rebaserHEAD

Copy link
Copy Markdown
Collaborator

For the sake of posterity and tracking I pushed two commits to fix the draft blockers. The RPD picker is rebuilt on SimpleRadialMenu: the BUI now builds the same button models as the RCD one with the RPD's atmos categories, and the color strip is untouched. The stack overflow was the interim rename making RPDMenu construct itself. Also restored the SPDX header on RPDMenu.xaml.cs, renamed the ammo selector ftl entry to match the new ammo-selector-mode-selected key (the popup was printing the raw key), and cleaned up a stray Open() in the emotes controller.

UiControlTest passes again and the client builds. I have not done an in-game pass over every menu yet, so the new look still needs eyes before this leaves draft.

@SquishyEmmaaaa

Copy link
Copy Markdown
Contributor Author

Emotes, RPD, RCD, cards all seem to be working, and it is passing both linter and dotnet build. Will be taking out of draft for review/testing.

@SquishyEmmaaaa
SquishyEmmaaaa marked this pull request as ready for review July 30, 2026 01:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

C# FTL Changes to localization files S: Untriaged size/L UI

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants