Files
MaterialDeck/src/combattracker.js
CDeenen 0ae6336f52 v1.0.0
2020-11-24 18:48:25 +01:00

194 lines
7.3 KiB
JavaScript

import * as MODULE from "../MaterialDeck.js";
import {streamDeck, tokenControl} from "../MaterialDeck.js";
export class CombatTracker{
constructor(){
this.active = false;
this.combatantLength = 0;
}
async updateAll(){
if (this.active == false) return;
for (let i=0; i<32; i++){
let data = streamDeck.buttonContext[i];
if (data == undefined || data.action != 'combattracker') continue;
await this.update(data.settings,data.context);
}
}
update(settings,context){
this.active = true;
let ctFunction = settings.combatTrackerFunction;
if (ctFunction == undefined) ctFunction == 0;
let combat = game.combat;
let src = "action/images/black.png";
let txt = "";
let background = "#000000";
let mode = settings.combatTrackerMode;
if (mode == undefined) mode = 0;
if (mode == 0){
if (combat != null && combat != undefined && combat.turns.length != 0){
let initiativeOrder = combat.turns;
let nr = settings.combatantNr - 1;
if (nr == undefined || nr < 1) nr = 0;
let combatantState = 1;
if (nr == combat.turn) combatantState = 2;
let combatant = initiativeOrder[nr]
if (combatant != undefined){
let tokenId = combatant.tokenId;
tokenControl.pushData(tokenId,settings,context,combatantState,'#cccc00');
return;
}
else {
streamDeck.setIcon(0,context,src,background);
streamDeck.setTitle(txt,context);
}
}
else {
streamDeck.setIcon(0,context,src,background);
streamDeck.setTitle(txt,context);
}
}
else if (mode == 1){
if (combat != null && combat != undefined && combat.started){
let tokenId = combat.combatant.tokenId;
tokenControl.pushData(tokenId,settings,context);
}
else {
streamDeck.setIcon(0,context,src,background);
streamDeck.setTitle(txt,context);
}
}
else if (mode == 2){
if (ctFunction == 0) {
if (combat == null || combat == undefined || combat.combatants.length == 0) {
src = "action/images/combattracker/startcombat.png";
background = "#000000";
}
else {
if (combat.started == false) {
src = "action/images/combattracker/startcombat.png";
background = "#008000";
}
else {
src = "action/images/combattracker/stopcombat.png";
background = "#FF0000";
}
}
}
else if (ctFunction == 1) {
src = "action/images/combattracker/nextturn.png";
}
else if (ctFunction == 2) {
src = "action/images/combattracker/previousturn.png";
}
else if (ctFunction == 3) {
src = "action/images/combattracker/nextround.png";
}
else if (ctFunction == 4) {
src = "action/images/combattracker/previousround.png";
}
else if (ctFunction == 5){
src = "action/images/black.png";
let round = 0;
let turn = 0;
if (combat != null && combat != undefined && combat.started != false){
round = combat.round;
turn = combat.turn+1;
}
if (settings.displayRound) txt += "Round\n"+round;
if (txt != "") txt += "\n";
if (settings.displayTurn) txt += "Turn\n"+turn;
}
streamDeck.setIcon(0,context,src,background);
streamDeck.setTitle(txt,context);
}
}
keyPress(settings,context){
let mode = parseInt(settings.combatTrackerMode);
if (isNaN(mode)) mode = 0;
if (mode < 2) {
let onClick = settings.onClick;
if (onClick == undefined) onClick = 0;
let tokenId;
let combat = game.combat;
if (mode == 0) {
if (combat != null && combat != undefined && combat.turns.length != 0){
let initiativeOrder = combat.turns;
let nr = settings.combatantNr - 1;
if (nr == undefined || nr < 1) nr = 0;
let combatantState = 1;
if (nr == combat.turn) combatantState = 2;
let combatant = initiativeOrder[nr]
if (combatant == undefined) return;
tokenId = combatant.tokenId;
}
}
else if (mode == 1)
if (combat != null && combat != undefined && combat.started)
tokenId = combat.combatant.tokenId;
let token
if (canvas.tokens.children[0] != undefined) token = canvas.tokens.children[0].children.find(p => p.id == tokenId);
if (token == undefined) return;
if (onClick == 0) //Do nothing
return;
else if (onClick == 1){ //select token
token.control();
}
else if (onClick == 2){ //center on token
let location = token.getCenter(token.x,token.y);
canvas.animatePan(location);
}
else if (onClick == 3){ //center on token and select
let location = token.getCenter(token.x,token.y);
canvas.animatePan(location);
token.control();
}
else if (onClick == 4){ //Open character sheet
token.actor.sheet.render(true);
}
else { //Open token config
token.sheet._render(true);
}
}
else if (mode == 2){
let combat = game.combat;
if (combat == null || combat == undefined) return;
let ctFunction = settings.combatTrackerFunction;
if (ctFunction == undefined) ctFunction == 0;
if (ctFunction == 0){
let src;
let background;
if (game.combat.started){
game.combat.endCombat();
src = "action/images/combattracker/startcombat.png";
background = "#000000";
}
else {
game.combat.startCombat();
src = "action/images/combattracker/stopcombat.png";
background = "#FF0000";
}
streamDeck.setIcon(context,src,background);
return;
}
if (game.combat.started == false) return;
if (ctFunction == 1) game.combat.nextTurn();
else if (ctFunction == 2) game.combat.previousTurn();
else if (ctFunction == 3) game.combat.nextRound();
else if (ctFunction == 4) game.combat.previousRound();
}
}
}