From 937fbd6ede9f995f6e3cef58f926d07c72c4136a Mon Sep 17 00:00:00 2001 From: irrlicht Date: Tue, 1 Sep 2026 23:24:17 +0200 Subject: [PATCH] maps-Verzeichnis per --maps statt hartkodiert MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Das Fenster-Frontend lud die Welt-.glb aus dem festen String "assets/maps/props". Jetzt ist das nur noch der Default (render::DEFAULT_MAPS_DIR); `main` parst `--maps ` und reicht das Verzeichnis an render::run weiter. Der übergebene Pfad wird wie angegeben benutzt (relativ zum CWD), der Default wie bisher relativ zum Asset-Basisverzeichnis. Damit lässt sich z.B. `assets/maps/inactive` ohne Neubau laden. Die CLI lädt weiterhin keine Modelle und ignoriert das Flag. README + artist.md ergänzt. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_0196AM4UyAJEXVtPvp5DdKr8 --- README.md | 3 +++ artist.md | 2 +- src/main.rs | 19 +++++++++++++++++-- src/render/mod.rs | 13 +++++++++---- 4 files changed, 30 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 5795d6e..c4a185f 100644 --- a/README.md +++ b/README.md @@ -15,3 +15,6 @@ Toolchain (Rust ≥ 1.85). Das `cargo` aus den Distributions-Paketquellen - Anwendung bauen und ausführen: `cargo run` Alternativ ohne Fenster/GPU in der Konsole: `cargo run -- --cli` + +Ein anderes Welt-Verzeichnis laden (Default `assets/maps/props/`): +`cargo run -- --maps ` (Pfad relativ zum aktuellen Verzeichnis). diff --git a/artist.md b/artist.md index 57df984..4403569 100644 --- a/artist.md +++ b/artist.md @@ -6,7 +6,7 @@ Start in der Konsole gemeldet (`[model]`, `[audio]`, `[tex]`, …). ## 3D / Blender - **Format:** glTF Binary (`.glb`) nach `assets/maps/props/` — alle Dateien - dort werden beim Start geladen. + dort werden beim Start geladen (anderer Ordner: `cargo run -- --maps `). - **Beim Export anhaken:** „Include → Custom Properties" (sonst kommen keine der Properties unten an!). - **Maßstab:** 1 Blender-Meter = 1 Engine-Meter. Augenhöhe 1,6 m, diff --git a/src/main.rs b/src/main.rs index a34fd87..4669536 100644 --- a/src/main.rs +++ b/src/main.rs @@ -5,6 +5,10 @@ //! darüber (Game + Dialog-Modus + Befehls-Interpreter). Beide Frontends //! steuern dieselbe Session: das Fenster (`render`, Default) und die //! Konsolen-REPL (`cli`, via `--cli`). +//! +//! Flags: `--cli` startet die Konsolen-REPL statt des Fensters; `--maps ` +//! überschreibt das Verzeichnis der Welt-`.glb` (Pfad wie angegeben, also +//! relativ zum CWD). mod cli; mod engine; @@ -15,11 +19,22 @@ use engine::assets; use session::Session; fn main() { + let args: Vec = std::env::args().collect(); let signals_path = assets::path("assets/signals.toml"); let session = Session::new(signals_path.clone()); - if std::env::args().any(|a| a == "--cli") { + if args.iter().any(|a| a == "--cli") { cli::run(session, &signals_path); } else { - render::run(session); + let maps_dir = arg_value(&args, "--maps") + .unwrap_or_else(|| assets::path(render::DEFAULT_MAPS_DIR)); + render::run(session, &maps_dir); } } + +/// Wert eines `--flag `-Paars aus `args`, falls das Flag vorkommt und +/// ein Wort folgt. +fn arg_value(args: &[String], flag: &str) -> Option { + args.iter().position(|a| a == flag) + .and_then(|i| args.get(i + 1)) + .cloned() +} diff --git a/src/render/mod.rs b/src/render/mod.rs index 7945ec9..a8535b1 100644 --- a/src/render/mod.rs +++ b/src/render/mod.rs @@ -44,14 +44,19 @@ const EYE_SMOOTH_TAU: f32 = 0.06; /// Maximaler vertikaler Nachlauf der Kamera hinter den Füßen (units). const EYE_MAX_LAG: f32 = 0.6; -pub fn run(mut session: Session) { +/// Default-Verzeichnis der Welt-`.glb` (relativ zum Asset-Basisverzeichnis). +/// `main` löst es auf und lässt `--maps ` es überschreiben. +pub const DEFAULT_MAPS_DIR: &str = "assets/maps/props"; + +pub fn run(mut session: Session, maps_dir: &str) { // Init-Signal feuern, bevor das Fenster steht (kann bereits einen // Dialog öffnen — dann startet die Welt eben pausiert). for line in session.start() { println!("{line}"); } - // Die Welt sind alle .glb unter assets/maps/props/. Decode (CPU) hier, - // Upload (GPU) später in `Gpu` — die beiden bleiben getrennt. - let models = load_models(&assets::path("assets/maps/props")); + // Die Welt sind alle .glb unter `maps_dir` (Default DEFAULT_MAPS_DIR, per + // `--maps ` überschrieben). Decode (CPU) hier, Upload (GPU) später in + // `Gpu` — die beiden bleiben getrennt. + let models = load_models(maps_dir); // Eine geteilte Texturliste über alle Modelle, damit ihre Meshes // denselben Index-Raum benutzen und zu einem Buffer verschmelzen können.