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>
47 lines
2.4 KiB
JavaScript
47 lines
2.4 KiB
JavaScript
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);
|
|
});
|
|
});
|