feat: Loksyu & TinJi standalone AppV2 apps with chat buttons and dice automation

- CDELoksyuApp: standalone HandlebarsApplicationMixin(ApplicationV2) app
  - 5-element Wu Xing grid with yin/yang inputs per element
  - Per-element reset buttons + global reset-all
  - Auto-refresh via updateActor hook

- CDETinjiApp: standalone AppV2 for the collective Tin Ji dice pool
  - Large neon counter with +/- buttons and direct input
  - Spend button sends a chat message with remaining count

- singletons.js: shared utilities
  - getSingletonActor: find or auto-create singleton actor
  - updateLoksyuFromRoll: compute lokAspect from Wu Xing cycle, update yin/yang
  - updateTinjiFromRoll: add tinji face count to value

- rolling.js: auto-update both singletons after every dice roll
  (weapon path + main roll path)

- system.js: renderChatLog hook injects Loksyu/TinJi footer buttons
  in the chat sidebar

- loksyu.js / tinji.js: actor sheets redirect to standalone apps
  when opened via the sidebar

- CSS: .cde-loksyu-standalone, .cde-tinji-standalone, .cde-chat-app-buttons,
  .cde-tinji-spend-msg styles added

- i18n: new keys in fr-cde.json and en-cde.json for all new UI strings
  (LoksyuNotFound, TinjiNotFound, Reset, ResetAll, SpendTinji, etc.)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
2026-03-30 09:51:39 +02:00
parent 6fda4b9246
commit 0689fae792
41 changed files with 1558 additions and 13 deletions

View File

@@ -151,6 +151,7 @@
"CDE.Loksyu": "Loksyu",
"CDE.Loksyu2": "Loksyu :",
"CDE.LoksyuName": "Nom du Loksyu",
"CDE.LoksyuNotFound": "Aucun acteur Loksyu trouvé. Le Maître du Jeu doit en créer un.",
"CDE.MagicPromptName": "Jet de Magie",
"CDE.Magics": "Magies",
"CDE.Manipulation": "Manipulation",
@@ -281,6 +282,15 @@
"CDE.TinJi": "Tin Ji :",
"CDE.TinJi2": "Tin Ji",
"CDE.TinJiName": "Nom de la Tin Ji",
"CDE.TinjiNotFound": "Aucun acteur Tin Ji trouvé. Le Maître du Jeu doit en créer un.",
"CDE.TinjiEmpty": "Il n'y a plus de dés de Tin Ji disponibles.",
"CDE.TinjiSpent": "{name} dépense 1 dé de Tin Ji.",
"CDE.TinjiRemaining": "restant(s)",
"CDE.SpendTinji": "Dépenser un dé",
"CDE.Reset": "Réinitialiser",
"CDE.ResetAll": "Tout réinitialiser",
"CDE.Decrement": "Diminuer",
"CDE.Increment": "Augmenter",
"CDE.Total": "Total",
"CDE.Total-Present": "Total ● Actuel",
"CDE.Tracking": "Traque",