import { ActorToken } from "../actor-token.mjs" export class RollBasicParts { restore(rollData) { rollData.ids.sceneId = rollData.ids.sceneId ?? canvas.scene.id rollData.active = RollBasicParts.$getActor(rollData) rollData.opponent = RollBasicParts.$getOpponent(rollData) if (rollData.mode.opposed == undefined) { rollData.mode.opposed = rollData.opponent != null } } initFrom(rollData) { return { selected: {}, mode: { current: rollData.mode.current }, ids: { sceneId: rollData.ids.sceneId, actorId: rollData.active.id, actorTokenId: rollData.active.tokenId, opponentId: rollData.mode.opposed ? rollData.opponent.id : undefined, opponentTokenId: rollData.mode.opposed ? rollData.opponent.tokenId : undefined, } } } static $getActor(rollData) { if (rollData.ids.actorTokenId) { return ActorToken.fromTokenId(rollData.ids.actorTokenId, rollData.ids.sceneId) } else { const actorId = rollData.ids.actorId ?? (canvas.tokens.controlled.length == 1 /** TODO: jets de plusieurs personnages??? */ ? canvas.tokens.controlled[0] : undefined) return ActorToken.fromActorId(actorId, () => { throw new Error("Pas d'acteur sélectionné") }) } } static $getOpponent(rollData) { if (rollData.ids.opponentTokenId) { return ActorToken.fromTokenId(rollData.ids.opponentTokenId, rollData.ids.sceneId) } else if (rollData.ids.opponentId) { return ActorToken.fromActorId(rollData.ids.opponentId) } else { const targets = Array.from(game.user.targets) if (targets.length == 1) { return ActorToken.fromToken(targets[0]) } else { return undefined } } } }