cc50e64e21
Add Hostile/Neutral/Friendly ring types with session-only inactive overrides on control, plus launch-with-players flow and live player tokens on the map. Co-authored-by: Cursor <cursoragent@cursor.com>
40 lines
1.6 KiB
TypeScript
40 lines
1.6 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, {});
|
|
});
|