Merge pull request 'Fix: attaques à distance' (#792) from feature/v13-corrections into v13

Reviewed-on: https, #792
This commit was merged in pull request #792.
This commit is contained in:
2026-01-07 14:44:21 +01:00
3 changed files with 22 additions and 18 deletions

View File

@@ -1,5 +1,9 @@
# 13.0
## 13.0.28 - La quadrature d'Illysis
- Les ajustements de portée sont calculés pour les attaques à distance
## 13.0.27 - Les lunettes d'Illysis
- Les heures ne sont plus affichées en doublon sur les messages

View File

@@ -36,19 +36,18 @@ export class Distance {
}
static distance(token, defenderToken) {
if (token instanceof Token && defenderToken instanceof Token) {
const ray = new foundry.canvas.geometry.Ray(
token.getCenterPoint(),
defenderToken.getCenterPoint()
)
return Number(canvas.grid.measureDistances([{ ray }], { gridSpaces: false }))
if (Distance.$isToken(token) && Distance.$isToken(defenderToken)) {
const source = token.getCenterPoint()
const target = defenderToken.getCenterPoint()
const measure = canvas.grid.measurePath([ source, target])
return measure.distance
}
return -1 /* distance indéterminée */
}
static isVisible(token, defenderToken) {
// TODO: regarder les StatusEffect aveuglé?
if (token instanceof Token && defenderToken instanceof Token) {
if (Distance.$isToken(token) && Distance.$isToken(defenderToken)) {
return canvas.effects.visibility.testVisibility(defenderToken.getCenterPoint(), { object: token })
}
return true
@@ -79,11 +78,11 @@ export class Distance {
}
static ajustementMouvement(defenderToken) {
if (defenderToken instanceof Token) {
if (Distance.$isToken(defenderToken)) {
if (defenderToken.actor?.getSurprise(true) != '') return { msg: "immobile (surprise)", diff: 0 };
if (defenderToken.inCombat) return { msg: "en mouvement (combat)", diff: -4 };
if (defenderToken.inCombat) return { msg: "en combat", diff: -4 };
}
return { msg: "à déterminer (0 immobile, -3 actif, -4 en mouvement, -5 en zig-zag)", diff: -3 };
return { msg: "à déterminer", diff: -3 };
}
static diff(...ajustements) {
@@ -116,4 +115,8 @@ export class Distance {
return undefined
}
static $isToken(token) {
return token instanceof Token || token instanceof TokenDocument
}
}

View File

@@ -70,19 +70,16 @@
<subline><hr></subline>
<subline>
<span>
<strong>Attaque à distance</strong> {{current.main}} difficulté proposée de <strong>{{current.distance.total}}</strong> à valider par le Gardien
<strong>Attaque à distance</strong> {{current.main}} difficulté proposée de <strong>{{plusMoins current.distance.total}}</strong> à valider par le Gardien
</span>
</subline>
<subline></subline>
<subline>
<ul>
<li>Avec les murs et la lumière, la cible
{{#if current.distance.isVisible}}est{{else}}n'est pas{{/if}} visible.
</li>
<li>La cible est à une distance {{#if (lt current.distance.distance 0)}}indéterminée{{else}}indicative de {{numberFormat current.distance.distance decimals=1}} mètres{{/if}}.</li>
<li>Portée {{current.distance.portee.msg}} : {{current.distance.portee.diff}}</li>
<li>Taille {{current.distance.taille.msg}}: {{current.distance.taille.diff}}</li>
<li>Mouvement {{current.distance.activite.msg}}: {{current.distance.activite.diff}}</li>
{{#unless current.distance.isVisible}}<li>Avec les murs et la lumière, la cible n'est pas visible.</li>{{/unless}}
<li>Taille {{current.distance.taille.msg}}: {{plusMoins current.distance.taille.diff}}</li>
<li>Portée {{current.distance.portee.msg}}: {{plusMoins current.distance.portee.diff}} (distance {{#if (lt current.distance.distance 0)}}indéterminée{{else}}indicative de {{numberFormat current.distance.distance decimals=1}} mètres{{/if}}). </li>
<li>Mouvement {{current.distance.activite.msg}}: {{plusMoins current.distance.activite.diff}} (0 immobile, -3 actif, -4 en mouvement, -5 en zig-zag)</li>
</ul>
</subline>
{{/if}}