-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmacro-utils.js
More file actions
71 lines (69 loc) · 2.6 KB
/
macro-utils.js
File metadata and controls
71 lines (69 loc) · 2.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
export function MacroUtils () {
//takes two tokens of any size and calculates the distance between them
function getDistance (t1, t2, wallblocking = false) {
//Log("get distance callsed");
var x, x1, y, y1, d, r, segments=[], rdistance, distance;
for (x = 0; x < t1.data.width; x++) {
for (y = 0; y < t1.data.height; y++) {
const origin = new PIXI.Point(...canvas.grid.getCenter(t1.data.x + (canvas.dimensions.size * x), t1.data.y + (canvas.dimensions.size * y)));
for (x1 = 0; x1 < t2.data.width; x1++) {
for (y1 = 0; y1 < t2.data.height; y1++){
const dest = new PIXI.Point(...canvas.grid.getCenter(t2.data.x + (canvas.dimensions.size * x1), t2.data.y + (canvas.dimensions.size * y1)));
const r = new Ray(origin, dest)
if (wallblocking && canvas.walls.checkCollision(r)) {
//Log(`ray ${r} blocked due to walls`);
continue;
}
segments.push({ray: r});
}
}
}
}
console.log(segments);
if (segments.length == 0) {
Log(`${t2.data.name} full blocked by walls`);
return -1;
}
rdistance = canvas.grid.measureDistances(segments, {gridSpaces:true});
distance = rdistance[0];
rdistance.forEach(d=> {if (d < distance) distance = d;});
return distance;
};
/**
*** The below functions are modified versions from Minor Quality of Life Module by tposney
***/
function getTraitMult(actor, dmgTypeString) {
if (dmgTypeString !== "") {
if (actor.data.data.traits.di.value.includes(dmgTypeString)) return 0;
if (actor.data.data.traits.dr.value.includes(dmgTypeString)) return 0.5;
if (actor.data.data.traits.dv.value.includes(dmgTypeString)) return 2;
}
if (dmgTypeString === "healing" || dmgTypeString === "temphp") return -1;
return 1;
};
// Calculate the hp/tempHP lost for an amount of damage of type
function calculateDamage(a, appliedDamage) {
let value = Math.floor(appliedDamage);
var hp = a.data.data.attributes.hp, tmp = parseInt(hp.temp) || 0, dt = value > 0 ? Math.min(tmp, value) : 0;
var newTemp = tmp - dt;
var oldHP = hp.value;
var newHP = Math.clamped(hp.value - (value - dt), 0, hp.max);
return { tempDamage: dt, hpDamage: oldHP - newHP, oldTempHP: tmp, newTempHP: newTemp,
oldHP: oldHP, newHP: newHP};
}
/**
*** end MQoL functions
**/
return {
getDistance:getDistance,
getTraitMult:getTraitMult,
calculateDamage:calculateDamage,
};
};
Hooks.once("init", async function() {
Log("Module Initialize");
window.MacroUtils = MacroUtils();
});
function Log(s){
console.log("%cMacro-Utils" + `%c | ${s}`, "color:Teal", "color:black")
}