51 lines
3.9 KiB
Markdown
51 lines
3.9 KiB
Markdown
# lib-management.launcher
|
|
|
|
Master-detail Launcher-UI und Modul-Einstieg. Listet die installierten Module aus dem modules-dir auf und zeigt sie in einem geteilten Layout: links (1/3) die Modul-Liste mit Genre-Tags, rechts (2/3) ein Detail-Panel mit Hero-Carousel, gerenderter Markdown-Beschreibung und Dependency-Status. Pro Modul wird `manifest.launcher.md` für Präsentation (Summary, Tags, Teaser) geladen. Beim Launch eines Moduls prüft der Launcher dessen Dependencies (via `lib-management.dep-fetcher`) und Update-Stand (via `lib-core.git`); ein Konflikt öffnet ein Modal statt direkt zu wechseln. Typischer Einstieg: `--module=lib-management.launcher` bootet in den Launcher-Screen statt direkt in ein Spiel.
|
|
|
|
**Version:** 0.3.3
|
|
**Module-ID:** lib-management.launcher
|
|
**Requires:** lib-core.input v0.4.0, lib-core.git v0.2.0, lib-management.dep-fetcher v0.1.2
|
|
**Tags:** launcher, menu, system, navigation
|
|
|
|
## Topology
|
|
|
|
<!-- topology:start (auto-generated; do not edit) -->
|
|
```mermaid
|
|
graph LR
|
|
this["lib-management.launcher"]
|
|
lib_core_input["lib-core.input"]
|
|
this --> lib_core_input
|
|
lib_core_git["lib-core.git"]
|
|
this --> lib_core_git
|
|
lib_management_dep_fetcher["lib-management.dep-fetcher"]
|
|
this --> lib_management_dep_fetcher
|
|
engine["engine.*"]
|
|
this --> engine
|
|
```
|
|
<!-- topology:end -->
|
|
|
|
## Controls
|
|
|
|
- **Mouse-Left**: Select a module-row in the left list to show its detail; click Launch in the detail panel to launch it; carousel arrows; confirm/cancel in the modals.
|
|
- **Mouse-Wheel**: Scroll the panel under the cursor — the module list (left) or the detail content (right). Detail content (description + dependencies) scrolls between the fixed hero strip and the fixed launch button.
|
|
- **Enter**: Confirm quit when the quit-modal is open.
|
|
- **Escape**: Open the quit-modal from the chooser; cancel the conflict/quit-modal when open.
|
|
|
|
## Demonstrates
|
|
|
|
- **Master-detail Layout** (1/3 Liste, 2/3 Detail): linke Liste zeigt je Modul **Name** + Genre-**Tags**-Subline (aus `manifest.launcher.md`); rechtes Detail-Panel zeigt Hero-Carousel, gerenderte Markdown-Beschreibung und eine Dependency-Status-Liste.
|
|
- Pro-Modul-Präsentation aus `manifest.launcher.md`: Summary/Tags für die Liste, `teaser_images` + `carousel_interval_seconds` für das Hero-Carousel (Panel-State je Modul-ID, nur das selektierte Modul wird gepumpt).
|
|
- Dependency-Status via `lib-management.dep-fetcher` (`ensure_for_module`): die `manifest.module::deps[]` werden in Load-Order zu einer Status-Liste komponiert (`ok` / `warn` / `error`) und mit Glyphen je Dep gerendert; ein Konflikt-Roll-up tönt die Liste ein und öffnet beim Launch das Konflikt-Modal statt `engine.switch_module` direkt aufzurufen.
|
|
- Update-Check via `lib-core.git` (`start_ls_remote_tags` / `take_result`): asynchrones `ls-remote` pro Modul gegen die Gitea-Repo-URL, Vergleich des höchsten `vX.Y.Z`-Tags gegen die lokale Version → Badge `available` / `no-update` / `local-only` / `fail` (Fehler-Kind für Tooltips erhalten). In CI (`SPOREL_CI=1`) deaktiviert, damit der Milestone-Check offline bleibt.
|
|
- `engine.module.list` Discovery der installierten Module aus dem modules-dir; `engine.switch_module` für den Laufzeit-Wechsel vom Launcher ins selektierte Modul.
|
|
- Scrollbare Panels via `engine.render.begin_view`/`end_view` (scissor-clipped), getrieben durch `engine.input.get_mouse_wheel`, mit Inline-Scrollbars (Liste links, Detail-Content rechts zwischen fixiertem Hero-Strip und Launch-Button).
|
|
- Markdown-/News-Rendering via sibling `markdown.lua` + `frontmatter.lua`; launcher-eigene Brand-Assets via `engine.asset.load_texture` (`assets/launcher/`).
|
|
- Input-Action-Binding über `lib-core.input` (`ui_click`, `ui_back`, `ui_confirm`).
|
|
- Modal-State-FSM (Liste <-> Quit-/Konflikt-Modal) in ein sibling `fsm.lua` ausgelagert, geladen via `engine.module.dir_of`.
|
|
|
|
## References
|
|
|
|
- meta/docs/architecture/module-lifecycle.md
|
|
- meta/docs/architecture/host-app.md
|
|
- meta/docs/superpowers/specs/2026-05-14-launcher-design.md
|