61 lines
1.8 KiB
JavaScript
61 lines
1.8 KiB
JavaScript
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
|
|
}
|
|
}
|
|
}
|
|
}
|