Files
OpenFrontIO/tests/UserSettings.test.ts
T
Zixer1andevanpelle 81d701adc4 feat(highlight): replace the small-player highlight toggle with a strength slider (#4588)
Replaces the "Highlight small players" on/off toggle with a **0-500%
Strength slider** controlling the glow's **width** (0 = off, 100% = the
previous default).

- `UserSettings`: `highlightSmallPlayers()`/toggle →
`highlightGlowStrength()`/set, float-backed, clamped to [0, 5].
- `SmallPlayerGlowPass` takes the strength via a setter (pushed by
`ClientGameRunner` on the settings-changed event), so it stays a pure
consumer and the slider still updates live while the settings modal has
the sim paused. Width = a non-linear blur-iteration count; intensity
compensated so wider stays about as bright.
- `MapRenderer` persists the strength across a WebGL context restore.
- `SettingsModal`: the toggle row becomes a range input.

Behavior note: with the toggle gone the glow **defaults ON at 100%**
(old toggle defaulted OFF); can default to 0 (opt-in) if preferred.

- [x] I have added screenshots for all UI updates
- [x] I process any text displayed to the user through translateText()
and I've added it to the en.json file
- [x] I have added relevant tests to the test directory
2026-07-16 10:38:50 -07:00

32 lines
1.1 KiB
TypeScript

import { UserSettings } from "../src/core/game/UserSettings";
describe("UserSettings highlight glow strength", () => {
beforeEach(() => {
localStorage.clear();
// UserSettings keeps a static in-memory cache; reset it too so each test
// reads fresh from the (cleared) localStorage.
(
UserSettings as unknown as { cache: Map<string, string | null> }
).cache.clear();
});
it("defaults to 1 (100%, on)", () => {
expect(new UserSettings().highlightGlowStrength()).toBe(1);
});
it("persists a set value, including 0 (off)", () => {
const s = new UserSettings();
s.setHighlightGlowStrength(2.5);
expect(s.highlightGlowStrength()).toBe(2.5);
s.setHighlightGlowStrength(0);
expect(s.highlightGlowStrength()).toBe(0);
});
it("shares state across instances via the static cache", () => {
// The settings modal and the renderer's frame builder each hold their own
// UserSettings; a change in one must be visible to the other.
new UserSettings().setHighlightGlowStrength(3);
expect(new UserSettings().highlightGlowStrength()).toBe(3);
});
});