forked from public/foundryvtt-reve-de-dragon
		
	
		
			
				
	
	
		
			98 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			98 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| import { TokenActor } from "../technical/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.getTokenActor(rollData)
 | |
|     rollData.opponent = RollBasicParts.getTokenActorOpponent(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) {
 | |
|     const isOpposed = rollData.type.opposed && rollData.opponent
 | |
|     return {
 | |
|       selected: {},
 | |
|       type: rollData.type,
 | |
|       ids: {
 | |
|         sceneId: rollData.ids.sceneId,
 | |
|         actorId: rollData.active.id,
 | |
|         actorTokenId: rollData.active.tokenId,
 | |
|         opponentId: isOpposed ? rollData.opponent.id : undefined,
 | |
|         opponentTokenId: isOpposed ? 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 getTokenActor(rollData) {
 | |
|     if (rollData.ids.actorTokenId) {
 | |
|       return TokenActor.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 TokenActor.fromActorId(actorId, () => { throw new Error("Pas d'acteur sélectionné") })
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   static getTokenActorOpponent(rollData) {
 | |
|     if (rollData.ids.opponentTokenId) {
 | |
|       return TokenActor.fromTokenId(rollData.ids.opponentTokenId, rollData.ids.sceneId)
 | |
|     }
 | |
|     else if (rollData.ids.opponentId) {
 | |
|       return TokenActor.fromActorId(rollData.ids.opponentId)
 | |
|     }
 | |
|     else {
 | |
|       const targets = Array.from(game.user.targets)
 | |
|       if (targets.length == 1) {
 | |
|         return TokenActor.fromToken(targets[0])
 | |
|       }
 | |
|       else {
 | |
|         return undefined
 | |
|       }
 | |
|     }
 | |
|   }
 | |
| }
 |