feat: Panorama skill HUD and menu, CSS 1.0.375

- Skill card and W/S/E target menu drawn as CCSCustomHudLayout panels via PanoramaManager
  (panorama/ sources), replacing PrintToCenterHtml and WASDMenuAPI; WASDMenuAPI.dll dropped
- Custom status lines (cooldowns, charges) overwrite the description on the card; Medic keeps its
  description with the charge count below
- css_setoverride toggles a per-player cooldown bypass
- YourSkillChatInfo also gates the round-start skill description in chat
- Language: "[css_useSkill]" becomes the configured button name, "Press ... key" wording,
  welcome message trimmed to its first line
- Build against CounterStrikeSharp.API 1.0.375
This commit is contained in:
Astra 2026-09-24 21:28:37 +01:00
parent 20dafd2a7c
commit 793370a55f
37 changed files with 1076 additions and 415 deletions

View file

@ -0,0 +1,42 @@
<root>
<styles>
<include src="s2r://panorama/styles/gamestyles.vcss_c" />
<include src="s2r://panorama/styles/custom_game/jrs_menu.vcss_c" />
</styles>
<!--
W/S/E skill-target picker, replacing WASDMenuAPI's PrintToCenterHtml menu - driven by
src/utils/PanoramaMenu.cs through SkillUtils.CreateMenu/UpdateMenu/CloseMenu. Ported from
PanoramaHudDemo's skill_menu.xml but its own file: PanoramaManager warns two plugins driving
the same layout share one entity and fight over transmit.
mrow0..mrow9 is a fixed window onto a longer item list; how many are used comes from
config.json's WSADMenuVisibleItems. Not "row0".. - those ids belong to PanoramaManager's own
row pool.
-->
<Panel class="jrsmenu-viewport" hittest="false">
<Panel id="JrsMenuRoot" class="jrsmenu-root hidden" hittest="false">
<Panel class="jrsmenu-scrim" hittest="false" />
<Panel id="jrsmenu_card" class="jrsmenu-card">
<Label id="jrsmenu_skill" class="jrsmenu-skill" text="{s:menu_skill}" />
<Label id="jrsmenu_subtitle" class="jrsmenu-subtitle" text="{s:menu_subtitle}" />
<Panel class="jrsmenu-rows" hittest="false">
<Label id="mrow0" class="jrsmenu-row hidden" text="{s:mrow0_title}" />
<Label id="mrow1" class="jrsmenu-row hidden" text="{s:mrow1_title}" />
<Label id="mrow2" class="jrsmenu-row hidden" text="{s:mrow2_title}" />
<Label id="mrow3" class="jrsmenu-row hidden" text="{s:mrow3_title}" />
<Label id="mrow4" class="jrsmenu-row hidden" text="{s:mrow4_title}" />
<Label id="mrow5" class="jrsmenu-row hidden" text="{s:mrow5_title}" />
<Label id="mrow6" class="jrsmenu-row hidden" text="{s:mrow6_title}" />
<Label id="mrow7" class="jrsmenu-row hidden" text="{s:mrow7_title}" />
<Label id="mrow8" class="jrsmenu-row hidden" text="{s:mrow8_title}" />
<Label id="mrow9" class="jrsmenu-row hidden" text="{s:mrow9_title}" />
</Panel>
<Label class="jrsmenu-hint" text="{s:menu_hint}" />
</Panel>
</Panel>
</Panel>
</root>

View file

@ -0,0 +1,31 @@
<root>
<styles>
<include src="s2r://panorama/styles/gamestyles.vcss_c" />
<include src="s2r://panorama/styles/custom_game/skill_hud.vcss_c" />
</styles>
<!--
Stage 1 of the jRandomSkills HUD replacement (see CLAUDE.md's "Panorama HUD" section) - a
real CCSCustomHudLayout panel driving Event.UpdateSkillHUD in PlayerEvents.cs, for the ~119
skills that don't set a custom PrintHTML override. The 36 skills that do (custom bars/
cooldown visuals) still go through the original PrintToCenterHtml path untouched - that's
stage 2, not built yet.
Real per-skill hex colors (from skillsInfo.json) can't be sent here - the server can only
toggle a class, never a color value. skill_hud.css defines 5 rarity classes instead
(rarity-common..rarity-legendary), and PlayerEvents.cs picks one from the skill's own
configured Rarity.
No captured mouse, no row pool - this is a passive always-on display, same shape as
PanoramaHudDemo's panel_demo.xml. Same structural rules: root has no id (compiler-assigned),
authored hidden, PanoramaManager toggles it per player.
-->
<Panel class="skillhud-viewport" hittest="false">
<Panel id="SkillHudRoot" class="skillhud-root hidden" hittest="false">
<Panel id="skillhud_card" class="skillhud-card">
<Label id="skillhud_skill" class="skillhud-skill" text="{s:hud_skill}" />
<Label id="skillhud_extra" class="skillhud-extra" text="{s:hud_extra}" />
</Panel>
</Panel>
</Panel>
</root>