feat(effects): add Darkness action effect like freeze

Adds a fullscreen darkness vignette on click and a permanent shadow spot with a black radial gradient (40% edge, 100% center). Includes control panel UI, i18n, eraser support, and tests.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Ivan Fontosh
2026-07-02 16:37:06 +08:00
parent 97c77a025a
commit 657e3c862e
8 changed files with 286 additions and 10 deletions
+27
View File
@@ -34,6 +34,33 @@ void test('pickEraseTargetId: вода по штриху как туман', ()
assert.equal(id, 'w1');
});
void test('pickEraseTargetId: тьма как заморозка — точка удара', () => {
const darkness: EffectInstance = {
...base,
id: 'd1',
type: 'darkness',
at: { x: 0.4, y: 0.55 },
intensity: 1,
lifetimeMs: 820,
};
const id = pickEraseTargetId([darkness], { x: 0.41, y: 0.55 }, 0.05);
assert.equal(id, 'd1');
});
void test('pickEraseTargetId: shadow с учётом inst.radiusN', () => {
const shadow: EffectInstance = {
...base,
id: 's1',
type: 'shadow',
at: { x: 0.5, y: 0.5 },
radiusN: 0.08,
opacity: 1,
lifetimeMs: null,
};
const id = pickEraseTargetId([shadow], { x: 0.59, y: 0.5 }, 0.02);
assert.equal(id, 's1');
});
void test('minDistSqEffectToPoint: молния — расстояние до отрезка', () => {
const bolt: EffectInstance = {
...base,