Gestion défense à distance
This commit is contained in:
@@ -1,22 +1,39 @@
|
||||
import { ITEM_TYPES } from "../constants.js"
|
||||
import { Grammar } from "../grammar.js"
|
||||
import { ATTAQUE_TYPE } from "../item/arme.js"
|
||||
import { Misc } from "../misc.js"
|
||||
|
||||
export class Distance {
|
||||
|
||||
static ajustements(token, defenderToken, arme){
|
||||
static typeAttaqueDistance(attaque) {
|
||||
function mapTypeAttaque(value) {
|
||||
switch (value) {
|
||||
case ATTAQUE_TYPE.LANCER: case 'lancer': return ATTAQUE_TYPE.LANCER
|
||||
case ATTAQUE_TYPE.TIR: case 'tir': return ATTAQUE_TYPE.TIR
|
||||
}
|
||||
return undefined
|
||||
}
|
||||
switch (attaque.comp.type) {
|
||||
case ITEM_TYPES.competence: return mapTypeAttaque(attaque.main)
|
||||
case ITEM_TYPES.competencecreature: return mapTypeAttaque(attaque.arme.system.categorie)
|
||||
}
|
||||
return undefined
|
||||
}
|
||||
|
||||
static ajustements(token, defenderToken, attaque) {
|
||||
const typeAttaque = Distance.typeAttaqueDistance(attaque)
|
||||
if (typeAttaque) {
|
||||
|
||||
const distance = Distance.distance(token, defenderToken)
|
||||
const isVisible = Distance.isVisible(token, defenderToken)
|
||||
const portee = Distance.ajustementPortee(distance, arme)
|
||||
const portee = Distance.ajustementPortee(distance, attaque.arme)
|
||||
const taille = Distance.ajustementTaille(defenderToken.actor)
|
||||
const activite = Distance.ajustementMouvement(defenderToken)
|
||||
const total = Distance.diff(portee, taille, activite)
|
||||
return {
|
||||
isVisible: isVisible,
|
||||
distance: distance,
|
||||
portee: portee,
|
||||
taille: taille,
|
||||
activite: activite,
|
||||
total: total
|
||||
}
|
||||
const diffDefense = Distance.ajustementDefense(attaque)
|
||||
return { typeAttaque, isVisible, distance, portee, taille, activite, total, diffDefense }
|
||||
}
|
||||
return undefined
|
||||
}
|
||||
|
||||
static distance(token, defenderToken) {
|
||||
@@ -56,8 +73,34 @@ export class Distance {
|
||||
return { msg: "à déterminer (0 immobile, -3 actif, -4 en mouvement, -5 en zig-zag)", diff: -3 };
|
||||
}
|
||||
|
||||
static diff(...ajustements){
|
||||
return ajustements.map(it => it.diff).filter(d => !Number.isNaN(d)).reduce(Misc.sum(), 0)
|
||||
static diff(...ajustements) {
|
||||
return ajustements.map(it => it.diff).filter(d => !Number.isNaN(d)).reduce(Misc.sum(), 0)
|
||||
}
|
||||
|
||||
static ajustementDefense(attaque) {
|
||||
switch (Grammar.toLowerCaseNoAccentNoSpace(attaque.comp.name)) {
|
||||
case 'arbalete': return { label: 'Parade carreau', value: -5 }
|
||||
case 'arc': return { label: 'Parade flêche', value: -5 }
|
||||
case 'fronde': return { label: 'Parade bille de fronde', value: -4 }
|
||||
case 'daguedejet': return { label: 'Parade/Esquive dague lancée', value: -2 }
|
||||
case 'javelot': return { label: 'Parade/Esquive javelot lancé', value: -2 }
|
||||
case 'fouet': return { label: 'Parade/Esquive fouet', value: 0 }
|
||||
}
|
||||
return { label: 'Parade/esquive projectile', value: 0 }
|
||||
}
|
||||
|
||||
static ajustementBouclier(bouclier) {
|
||||
if (bouclier?.system.categorie_parade == 'boucliers') {
|
||||
if (bouclier.system.force < 10) {
|
||||
return { label: 'Bouclier léger', value: -3 }
|
||||
}
|
||||
if (bouclier.system.force < 12) {
|
||||
return { label: 'Bouclier moyen', value: 0 }
|
||||
}
|
||||
return { label: 'Bouclier lourd', value: 3 }
|
||||
}
|
||||
/* esquive */
|
||||
return undefined
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user