fix(ui): Höhe-Regler nachführen, Teleport-Warnfrist, SUV-Abstimmung
Der Höhe-Regler las den Höhenfaktor nur beim Bau des Panels und zeigte nach einem Figurenwechsel weiter den alten Wert; beim nächsten Ziehen überschrieb er die korrekt gesetzte Größe mit einem Sprung (Ruling 68). Der Teleport hielt den Spieler notfalls unbegrenzt still. Er bekommt dieselbe einmalige Warnung nach 15 s wie der Spawn, mit Frist je Sprung statt modulweit (Ruling 69). Der SUV bekommt metalness und roughness zurück, die der Kommentar darüber als unverändert zusicherte (Ruling 70). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
182db238c6
commit
0ece90e2ec
3 files changed
+105
-4
No files matched your search
@@ -0,0 +1,46 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
import { switchCharacterAndSyncHeight } from "../src/ui/panel.js";
|
||||
|
||||
// Ruling 68: applyCharacter setzt state.currentHeightFactor bei jedem Figurenwechsel neu
|
||||
// (0,93 für die weibliche Figur gegenüber 1 beim Mannequin), aber lil-gui merkt das nicht von
|
||||
// selbst — der Regler liest params.height nur beim Bau des Panels. Ohne Nachführen zeigt der
|
||||
// Regler nach dem Wechsel weiter den alten Wert; zieht man ihn dann, rechnet applyHeight vom
|
||||
// falschen Ausgangswert los und überschreibt die korrekte Größe mit einem Sprung. Der Test
|
||||
// hält darum den Zustand NACH dem Wechsel fest (angezeigter Wert == tatsächlicher
|
||||
// Höhenfaktor), nicht bloß, dass irgendeine Funktion aufgerufen wurde.
|
||||
describe("switchCharacterAndSyncHeight", () => {
|
||||
it("führt den Höhe-Regler nach einem Wechsel auf den tatsächlichen Wert nach (Ruling 68)", async () => {
|
||||
const state = { currentCharacterName: "Mannequin", currentHeightFactor: 1 };
|
||||
const characterModule = {
|
||||
state,
|
||||
// Bildet applyCharacter nach: setzt currentHeightFactor passend zur Figur neu.
|
||||
switchCharacter: async (name) => {
|
||||
state.currentCharacterName = name;
|
||||
state.currentHeightFactor = name === "Superhero Female" ? 0.93 : 1;
|
||||
},
|
||||
};
|
||||
const params = { height: 1 };
|
||||
let displayCalls = 0;
|
||||
const heightController = { updateDisplay: () => { displayCalls++; } };
|
||||
|
||||
await switchCharacterAndSyncHeight(characterModule, params, heightController, "Superhero Female");
|
||||
|
||||
expect(params.height).toBe(0.93);
|
||||
expect(displayCalls).toBe(1);
|
||||
});
|
||||
|
||||
it("führt auch nach, wenn switchCharacter wegen gleichnamiger Figur nichts tut", async () => {
|
||||
// switchCharacter im echten Modul kehrt früh zurück, wenn der Name unverändert ist
|
||||
// (state.busy-Wache) — der Regler soll trotzdem korrekt bleiben, nicht veraltet.
|
||||
const state = { currentCharacterName: "Mannequin", currentHeightFactor: 1 };
|
||||
const characterModule = { state, switchCharacter: async () => {} };
|
||||
const params = { height: 1 };
|
||||
let displayCalls = 0;
|
||||
const heightController = { updateDisplay: () => { displayCalls++; } };
|
||||
|
||||
await switchCharacterAndSyncHeight(characterModule, params, heightController, "Mannequin");
|
||||
|
||||
expect(params.height).toBe(1);
|
||||
expect(displayCalls).toBe(1);
|
||||
});
|
||||
});
|
||||
Reference in new issue
Block a user