Files
noname-shuying/mengsan/battle/status-sources.js
T
2026-10-23 00:38:05 +08:00

27 lines
955 B
JavaScript

// Display-only readers. Entries belong to a battle session, never to the run/save.
const sources = new WeakMap();
export function bindCombatStatusSource(player, session, id, read) {
if (!player || !session?.active || typeof read !== 'function') return;
let group = sources.get(player);
if (!group) sources.set(player, group = new Map());
const entry = { session, read };
group.set(id, entry);
session.ownResource(entry, () => {
if (group.get(id) !== entry) return;
group.delete(id);
if (!group.size && sources.get(player) === group) sources.delete(player);
});
}
export function readCombatStatusSources(player, session) {
if (!session?.active) return [];
const result = [];
for (const [id, entry] of sources.get(player) || []) {
if (entry.session !== session) continue;
const state = entry.read();
if (state) result.push({ id, state });
}
return result;
}