- Himmel: 4k-HDRI von Poly Haven (CC0, tools/assets/hdri.mjs) statt Sky-Shader. Kuppel zeigt das Foto ab 12°, darunter weiches Band und Dunst in Nebelfarbe; Umgebungslicht und Spiegelungen per PMREM; Sonne aus dem Bild gekappt und als Licht übernommen (77°, Stärke 2,5) - Schatten: CSM mit vier Stufen (25/100/350/1000 m, je 2048²), Schutznetz für beleuchtete Materialien, Normal-Bias 1,5 Texel je Stufe gegen Streifen auf doppelseitigen Materialien (Figur, Autos) - Startfigur wirft Schatten, Palmen und Laternen empfangen Schatten, Wasser als ruhige See - Debug-Panel: Sonne, Himmelslicht, Himmelshelligkeit; Namensnennung um das HDRI ergänzt Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
44 lines
2.1 KiB
JavaScript
44 lines
2.1 KiB
JavaScript
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/);
|
|
});
|
|
|
|
// Himmel und Umgebungslicht kommen aus dem HDRI "Nowhere Road" (src/world/sky.js) — eine Quelle
|
|
// mehr, die wie die Texturen mit Herkunft und Lizenz im selben Satz stehen soll.
|
|
it("nennt das HDRI mit Poly Haven und CC0", () => {
|
|
expect(buildAttribution(manifest)).toMatch(/HDRI[^.]*Poly Haven[^.]*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");
|
|
});
|
|
});
|