feat: Figurenauswahl, Autos, Debug-Panel und Namensnennung

Task 11: Figuren (Mannequin/Superhero Male/Female) mit auf ual.glb
retargeteten Animationen, Frisuren, vier SUVs auf angehefteten Chunks,
ein lil-gui-Debug-Panel (Figur/Frisur/Höhe/Hitbox/Chunk-Grenzen/
Kartenbild/Nebel/Wahrzeichen-Sprung) und die verpflichtende
Namensnennung fürs HUD (Kartenkacheln, Wahrzeichen, SUV, Texturen,
Palme, Figuren — jede Quelle mit ihrer eigenen Lizenz).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
knsoandClaude Sonnet 5 committed 2026-09-13 03:04:49 +02:00
1 parent 02d0f36580
commit d30aae68a1
42 files changed
+13143 -4

No files matched your search

+37
View File
@@ -0,0 +1,37 @@
import { describe, expect, it } from "vitest";
import { buildAttribution } from "../src/ui/hud.js";
// Die Namensnennung ist Pflicht (CC BY, s. task-11-brief.md), keine Kosmetik — deshalb wird
// die Textzusammensetzung hier ohne Browser geprüft statt nur im laufenden HUD betrachtet.
describe("buildAttribution", () => {
const manifest = {
attribution: "Kartenkacheln: GTA VI Map (CC BY 4.0) — https://map.gtadb.org, YANIS v15. " +
"Wahrzeichen: rolux/gtamaplib-vc (Unlicense).",
};
it("behält den Manifest-Text wörtlich bei", () => {
expect(buildAttribution(manifest)).toContain(manifest.attribution);
});
it("ergänzt alle vier Modellquellen mit ihrer jeweiligen Lizenz", () => {
const text = buildAttribution(manifest);
expect(text).toContain("Boris731");
expect(text).toContain("Poly Haven");
expect(text).toContain("Nobiax");
expect(text).toContain("Quaternius");
expect(text).toMatch(/Boris731[^.]*CC BY/);
expect(text).toMatch(/Poly Haven[^.]*CC0/);
expect(text).toMatch(/Nobiax[^.]*CC0/);
expect(text).toMatch(/Quaternius[^.]*CC0/);
});
// Ruling (task-11-brief.md): keine Lizenz kürzen, keine zwei Lizenzen in einer Zeile
// vermischen, kein CC0 für etwas behaupten, das CC BY ist — der SUV-Satz muss darum
// isoliert bleiben und darf nicht in denselben Satz wie ein CC0-Eintrag rutschen.
it("vermischt die SUV-Lizenz (CC BY) nicht mit einer CC0-Angabe im selben Satz", () => {
const text = buildAttribution(manifest);
const suvSentence = text.split(".").find((s) => s.includes("Boris731"));
expect(suvSentence).toBeTruthy();
expect(suvSentence).not.toContain("CC0");
});
});