maps-Verzeichnis per --maps <dir> statt hartkodiert
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 <dir>` 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 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0196AM4UyAJEXVtPvp5DdKr8
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
307b52ae1f
commit
937fbd6ede
+17
-2
@@ -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 <dir>`
|
||||
//! ü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<String> = 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 <wert>`-Paars aus `args`, falls das Flag vorkommt und
|
||||
/// ein Wort folgt.
|
||||
fn arg_value(args: &[String], flag: &str) -> Option<String> {
|
||||
args.iter().position(|a| a == flag)
|
||||
.and_then(|i| args.get(i + 1))
|
||||
.cloned()
|
||||
}
|
||||
|
||||
+9
-4
@@ -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 <dir>` 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 <dir>` ü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.
|
||||
|
||||
Reference in New Issue
Block a user