mirror of
https://github.com/openfrontio/OpenFrontIO.git
synced 2026-06-21 11:00:43 +00:00
66ecbabac2
The contents (Lit web components for in-game chat, build menu, leaderboard, attack displays, etc.) are HUD, not graphics — the actual graphics is in client/render/.
42 lines
1.7 KiB
TypeScript
42 lines
1.7 KiB
TypeScript
import { computeAllianceClipPath } from "../src/client/hud/PlayerIcons";
|
|
|
|
describe("PlayerIcons", () => {
|
|
describe("computeAllianceClipPath", () => {
|
|
test("returns full visibility (20% top cut) when alliance time is at 100%", () => {
|
|
const result = computeAllianceClipPath(1.0);
|
|
// topCut = 20 + (1 - 1.0) * 80 * 0.78 = 20 + 0 = 20.00
|
|
expect(result).toBe("inset(20.00% -2px 0 -2px)");
|
|
});
|
|
|
|
test("returns maximum cut (82.40% top cut) when alliance time is at 0%", () => {
|
|
const result = computeAllianceClipPath(0.0);
|
|
// topCut = 20 + (1 - 0.0) * 80 * 0.78 = 20 + 62.4 = 82.40
|
|
expect(result).toBe("inset(82.40% -2px 0 -2px)");
|
|
});
|
|
|
|
test("returns 51.20% top cut when alliance time is at 50%", () => {
|
|
const result = computeAllianceClipPath(0.5);
|
|
// topCut = 20 + (1 - 0.5) * 80 * 0.78 = 20 + 31.2 = 51.20
|
|
expect(result).toBe("inset(51.20% -2px 0 -2px)");
|
|
});
|
|
|
|
test("returns 27.80% top cut when alliance time is at 87.5%", () => {
|
|
const result = computeAllianceClipPath(0.875);
|
|
// topCut = 20 + (1 - 0.875) * 80 * 0.78 = 20 + 7.8 = 27.80
|
|
expect(result).toBe("inset(27.80% -2px 0 -2px)");
|
|
});
|
|
|
|
test("returns 74.60% top cut when alliance time is at 12.5%", () => {
|
|
const result = computeAllianceClipPath(0.125);
|
|
// topCut = 20 + (1 - 0.125) * 80 * 0.78 = 20 + 54.6 = 74.60
|
|
expect(result).toBe("inset(74.60% -2px 0 -2px)");
|
|
});
|
|
|
|
test("includes -2px horizontal overscan to prevent subpixel gaps", () => {
|
|
const result = computeAllianceClipPath(0.5);
|
|
expect(result).toContain("-2px");
|
|
expect(result.match(/-2px/g)).toHaveLength(2); // Should appear twice (left and right)
|
|
});
|
|
});
|
|
});
|