Hausputz: UV-Doppel-Flip raus, tga::load → Result, hide_object entfernt

UVs laufen jetzt durchgehend in glTF-/tga-Konvention (der Flip-Hin-und-
Zurück stammte vom gelöschten OBJ-Pfad). Kaputte Welt-Texturen fallen auf
den Platzhalter statt zu panicken. Player::eye() statt vierfacher
Augenpunkt-Rechnung. hide_object war ein irl3d-Demo-Relikt ohne
Konsument.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-16 20:37:18 +02:00
co-authored by Claude Fable 5
parent 31e1942870
commit 01f299aa4f
11 changed files with 46 additions and 48 deletions
+4 -8
View File
@@ -14,7 +14,6 @@
//! `set <name> <value>` KV setzen (true/false/i32/f32/string)
//! `inc <name> [<delta>]` KV-Integer inkrementieren (Default +1)
//! `clear <name>` KV-Eintrag entfernen
//! `hide_object <name>` → Action::HideObject (deferred)
//! `play_sound <name>` → Action::PlaySound (deferred): SFX aus
//! `assets/sounds/{name}.wav`
//! `mode <play|free|menu>` → Action::SetMode (deferred): Anzeige-/
@@ -22,7 +21,7 @@
//!
//! Parameter-Substitution: vor dem Parsen ersetzt `execute` `$self` in den
//! Action-Args durch `ctx.instance_name`. Damit kann eine generische Action
//! wie `hide_object $self` für viele duplizierte Instances wirken, ohne pro
//! (z.B. `set $self true`) für viele duplizierte Instances wirken, ohne pro
//! Instance einen Eintrag in signals.toml zu brauchen.
//!
//! Dispatch-Reihenfolge: erst Signal-Lookup; steht der Name in der Table,
@@ -79,7 +78,7 @@ pub fn dispatch(signal: &str, ctx: &mut ActionCtx) {
/// entscheidet, ob das eine Meldung wert ist — siehe `dispatch`).
fn execute(cmd: &str, ctx: &mut ActionCtx) -> bool {
// $self → ctx.instance_name. Substituieren bevor wir Verb/Args splitten,
// damit Tokens wie `hide_object $self` einheitlich funktionieren. Ohne
// damit Tokens wie `set $self true` einheitlich funktionieren. Ohne
// instance_name (z.B. `init`-Signal) bleibt `$self` stehen — die Action
// zielt dann ins Leere, was für deferred Actions ein No-Op beim
// Konsumenten ist.
@@ -98,7 +97,6 @@ fn execute(cmd: &str, ctx: &mut ActionCtx) -> bool {
"set" => kv::apply_set(args, ctx.kv),
"inc" => kv::apply_inc(args, ctx.kv),
"clear" => kv::apply_clear(args, ctx.kv),
"hide_object" => ctx.actions.push(Action::HideObject(args.to_string())),
"play_sound" => ctx.actions.push(Action::PlaySound(args.to_string())),
"mode" => if let Some(t) = ModeTarget::parse(args) {
ctx.actions.push(Action::SetMode(t));
@@ -183,8 +181,7 @@ mod tests {
let mut signals = Signals::new();
signals.insert("pickup".into(), vec![
"inc items".into(),
"play_sound pickup".into(),
"hide_object $self".into(),
"play_sound $self".into(), // $self-Substitution in deferred Action
]);
let mut game = Game::new(signals);
@@ -193,8 +190,7 @@ mod tests {
assert_eq!(game.kv["items"].coerce_to_int().unwrap(), 1);
assert_eq!(game.actions, vec![
Action::PlaySound("pickup".into()),
Action::HideObject("Mushroom.005".into()),
Action::PlaySound("Mushroom.005".into()),
]);
}