Files
gta6/tests/panel.test.js
T
knsoandClaude Opus 5 0ece90e2ec 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>
2026-09-13 04:14:01 +02:00

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);
});
});