This repository has been archived by the owner on Apr 30, 2021. It is now read-only.
-
-
Notifications
You must be signed in to change notification settings - Fork 9
/
turnmarker.js
125 lines (114 loc) · 4.83 KB
/
turnmarker.js
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
import { Chatter } from './chatter.js';
import { Marker } from './marker.js';
import { MarkerAnimation } from './markeranimation.js';
import { Settings } from './settings.js';
import { renderUpdateWindow } from './updateWindow.js';
import { firstGM, Flags, FlagScope, socketAction, socketName } from './utils.js';
let animator;
let markerId;
let lastTurn = '';
Hooks.on('ready', async () => {
Settings.registerSettings();
let marker = canvas.tiles.placeables.find(t => t.data.flags.turnMarker == true);
if (marker && marker.id) {
markerId = marker.id;
let tile = canvas.tiles.placeables.find(t => t.data.flags.turnMarker == true);
tile.zIndex = Math.max(...canvas.tiles.placeables.map(o => o.zIndex)) + 1;
tile.parent.sortChildren();
if (!game.paused && Settings.getShouldAnimate()) {
animator = MarkerAnimation.startAnimation(animator, markerId);
}
}
if (game.user.isGM) {
if (isNewerVersion(game.modules.get("turnmarker").data.version, Settings.getVersion())) {
renderUpdateWindow();
}
}
game.socket.on(socketName, async (data) => {
if (game.user.isGM) {
switch (data.mode) {
case socketAction.placeStartMarker:
await canvas.scene.createEmbeddedEntity('Tile', data.tileData);
canvas.scene.setFlag(FlagScope, Flags.startMarkerPlaced, true);
}
}
});
});
Hooks.on('createTile', (scene, tile) => {
if (tile.flags.turnMarker == true) {
markerId = tile._id;
tile = canvas.tiles.placeables.find(t => t.data.flags.turnMarker == true);
tile.zIndex = Math.max(...canvas.tiles.placeables.map(o => o.zIndex)) + 1;
tile.parent.sortChildren();
if (Settings.getShouldAnimate()) {
animator = MarkerAnimation.startAnimation(animator, markerId);
}
}
});
Hooks.on('preUpdateToken', async (scene, token) => {
if (game.combat) {
if (token._id == game.combat.combatant.token._id && !canvas.scene.getFlag(FlagScope, Flags.startMarkerPlaced)) {
await Marker.placeStartMarker(game.combat.combatant.token._id);
}
}
});
Hooks.on('updateCombat', async (combat, update) => {
if (combat.combatant) {
if (update && lastTurn != combat.combatant._id && game.user.isGM && game.userId == firstGM()) {
lastTurn = combat.combatant._id;
if (combat && combat.combatant) {
let tile = canvas.tiles.placeables.find(t => t.data.flags.turnMarker == true);
let result = await Marker.placeTurnMarker(combat.combatant.token._id, (tile && tile.id) || undefined);
if (result) {
markerId = result.markerId;
animator = result.animator;
}
if (Settings.getTurnMarkerEnabled()) {
Marker.deleteStartMarker();
canvas.scene.unsetFlag(FlagScope, Flags.startMarkerPlaced);
}
if (Settings.shouldAnnounceTurns() && !combat.combatant.hidden) {
Chatter.sendTurnMessage(combat.combatant);
}
}
}
}
});
Hooks.on('deleteCombat', async () => {
if (game.user.isGM) {
Marker.clearAllMarkers();
}
MarkerAnimation.stopAnimation(animator);
});
Hooks.on('updateToken', (scene, updateToken, updateData) => {
let tile = canvas.tiles.placeables.find(t => t.data.flags.turnMarker == true);
if (tile) {
if ((updateData.x || updateData.y || updateData.width || updateData.height || updateData.hidden) &&
(game && game.combat && game.combat.combatant && game.combat.combatant.tokenId == updateToken._id) &&
game.user.isGM && game.combat) {
Marker.moveMarkerToToken(updateToken._id, tile.id);
tile.zIndex = Math.max(...canvas.tiles.placeables.map(o => o.zIndex)) + 1;
tile.parent.sortChildren();
}
}
});
Hooks.on('updateTile', () => {
if (canvas.scene.data.tokenVision) {
let tile = canvas.tiles.placeables.find(t => t.data.flags.turnMarker == true);
if (tile) {
let combatant = canvas.tokens.placeables.find(x => x.id == game.combat.combatant.tokenId);
if (combatant && !combatant.data.hidden) {
tile.visible = canvas.sight.testVisibility(combatant.center, { tolerance: canvas.dimensions.size / 4 });
}
}
}
});
Hooks.on('pauseGame', async (isPaused) => {
if (markerId && Settings.getShouldAnimate()) {
if (isPaused) {
MarkerAnimation.stopAnimation(animator);
} else {
animator = MarkerAnimation.startAnimation(animator, markerId);
}
}
});