forked from public/foundryvtt-reve-de-dragon
97 lines
3.0 KiB
JavaScript
97 lines
3.0 KiB
JavaScript
import { ActorToken } from "../actor-token.mjs"
|
|
import { StatusEffects } from "../settings/status-effects.js"
|
|
import { ROLL_TYPE_ATTAQUE, ROLL_TYPE_DEFENSE } from "./roll-constants.mjs"
|
|
import { PART_ATTAQUE } from "./roll-part-attaque.mjs"
|
|
import { PART_DEFENSE } from "./roll-part-defense.mjs"
|
|
|
|
|
|
export class RollBasicParts {
|
|
|
|
static restore(rollData) {
|
|
rollData.ids.sceneId = rollData.ids.sceneId ?? canvas.scene.id
|
|
rollData.active = RollBasicParts.$getActor(rollData)
|
|
rollData.opponent = RollBasicParts.$getOpponent(rollData)
|
|
if (rollData.type.opposed == undefined) {
|
|
rollData.type.opposed = rollData.opponent != null
|
|
}
|
|
}
|
|
|
|
static loadSurprises(rollData, type = rollData.type.current) {
|
|
if (!rollData.type.passif) {
|
|
RollBasicParts.loadSurprise(rollData.active, RollBasicParts.getForceRequiseActiveActor(rollData, type))
|
|
RollBasicParts.loadSurprise(rollData.opponent, 0)
|
|
}
|
|
}
|
|
|
|
static loadSurprise(who, forceRequise) {
|
|
if (who?.actor) {
|
|
foundry.utils.mergeObject(who,
|
|
StatusEffects.getActorEffetSurprise(who.actor, forceRequise),
|
|
{ overwrite: true, inPlace: true })
|
|
}
|
|
}
|
|
|
|
static getForceRequiseActiveActor(rollData, type) {
|
|
switch (type) {
|
|
case ROLL_TYPE_ATTAQUE: return rollData.current[PART_ATTAQUE].forceRequise
|
|
case ROLL_TYPE_DEFENSE: return rollData.current[PART_DEFENSE].forceRequise
|
|
default: return 0
|
|
}
|
|
}
|
|
|
|
static initFrom(rollData) {
|
|
return {
|
|
selected: {},
|
|
type: rollData.type,
|
|
ids: {
|
|
sceneId: rollData.ids.sceneId,
|
|
actorId: rollData.active.id,
|
|
actorTokenId: rollData.active.tokenId,
|
|
opponentId: rollData.type.opposed ? rollData.opponent.id : undefined,
|
|
opponentTokenId: rollData.type.opposed ? rollData.opponent.tokenId : undefined,
|
|
}
|
|
}
|
|
}
|
|
|
|
static reverseIds(rollData) {
|
|
return {
|
|
sceneId: rollData.ids.sceneId,
|
|
actorId: rollData.ids.opponentId,
|
|
actorTokenId: rollData.ids.opponentTokenId,
|
|
opponentId: rollData.ids.actorId,
|
|
opponentTokenId: rollData.actorTokenId
|
|
}
|
|
}
|
|
|
|
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
|
|
}
|
|
}
|
|
}
|
|
}
|