46bec1a86a
When previewRotationDeg changes, remap non-player, NPC and trap markers (plus live session token overrides) so they stay on the art. Co-authored-by: Cursor <cursoragent@cursor.com>
50 lines
2.0 KiB
TypeScript
50 lines
2.0 KiB
TypeScript
import assert from 'node:assert/strict';
|
|
import test from 'node:test';
|
|
|
|
import { ScenePlayerTokensSessionStore } from './scenePlayerTokensSessionStore';
|
|
|
|
void test('ScenePlayerTokensSessionStore selection and show/hide', () => {
|
|
const store = new ScenePlayerTokensSessionStore();
|
|
store.dispatch({ kind: 'setSelection', playerIds: ['a', 'b', 'a'] });
|
|
assert.deepEqual(store.getState().selectedPlayerIds, ['a', 'b']);
|
|
assert.equal(store.getState().visible, false);
|
|
|
|
store.dispatch({ kind: 'show', sizeN: 0.08 });
|
|
assert.equal(store.getState().visible, true);
|
|
assert.equal(Object.keys(store.getState().byPlayerId).length, 2);
|
|
assert.ok(store.getState().byPlayerId.a);
|
|
assert.equal(store.getState().byPlayerId.a?.ny, 0.88);
|
|
|
|
store.dispatch({ kind: 'setVisible', visible: false });
|
|
assert.equal(store.getState().visible, false);
|
|
assert.ok(store.getState().byPlayerId.a);
|
|
|
|
store.dispatch({ kind: 'clearPlacements' });
|
|
assert.equal(store.getState().visible, false);
|
|
assert.deepEqual(store.getState().byPlayerId, {});
|
|
assert.deepEqual(store.getState().selectedPlayerIds, ['a', 'b']);
|
|
});
|
|
|
|
void test('ScenePlayerTokensSessionStore move and reset', () => {
|
|
const store = new ScenePlayerTokensSessionStore();
|
|
store.dispatch({ kind: 'setSelection', playerIds: ['p1'] });
|
|
store.dispatch({ kind: 'show', sizeN: 0.1 });
|
|
const s1 = store.dispatch({ kind: 'move', playerId: 'p1', nx: 0.3, ny: 0.4 });
|
|
assert.equal(s1.byPlayerId.p1?.nx, 0.3);
|
|
assert.equal(s1.byPlayerId.p1?.ny, 0.4);
|
|
const s2 = store.reset();
|
|
assert.deepEqual(s2.selectedPlayerIds, []);
|
|
assert.equal(s2.visible, false);
|
|
assert.deepEqual(s2.byPlayerId, {});
|
|
});
|
|
|
|
void test('ScenePlayerTokensSessionStore rotateMapCwSteps', () => {
|
|
const store = new ScenePlayerTokensSessionStore();
|
|
store.dispatch({ kind: 'setSelection', playerIds: ['p1'] });
|
|
store.dispatch({ kind: 'show', sizeN: 0.1 });
|
|
store.dispatch({ kind: 'move', playerId: 'p1', nx: 0.2, ny: 0.1 });
|
|
const s = store.rotateMapCwSteps(1);
|
|
assert.equal(s.byPlayerId.p1?.nx, 0.9);
|
|
assert.equal(s.byPlayerId.p1?.ny, 0.2);
|
|
});
|