2 Commits

Author SHA1 Message Date
CDeenen
91e07e79c5 changelog fix 2020-12-09 03:32:32 +01:00
CDeenen
fc471ce400 v1.1.0 2020-12-09 03:22:22 +01:00
104 changed files with 586 additions and 528 deletions

View File

@@ -51,7 +51,7 @@ async function analyzeWSmessage(msg){
} }
if (data == undefined || data.payload == undefined) return; if (data == undefined || data.payload == undefined) return;
//console.log("Received",data);
const action = data.action; const action = data.action;
const event = data.event; const event = data.event;
const context = data.context; const context = data.context;
@@ -70,6 +70,8 @@ async function analyzeWSmessage(msg){
tokenControl.active = true; tokenControl.active = true;
tokenControl.update(selectedTokenId); tokenControl.update(selectedTokenId);
} }
else if (action == 'move')
move.update(settings,context);
else if (action == 'macro') else if (action == 'macro')
macroControl.update(settings,context); macroControl.update(settings,context);
else if (action == 'combattracker') else if (action == 'combattracker')

View File

@@ -1,4 +1,24 @@
# Changelog Material Deck Module # Changelog Material Deck Module
### v1.1.0 - 09-12-2020
Fixes
<ul>
<li>Settings would not show for Combat Tracker action</li>
<li>Macro Action => Macro Board default settings fixed</li>
</ul>
Additions/changes:
<ul>
<li>Added support for Pathfinder 1e and Shadow of the Demon Lord</li>
<li>All dialogs that are openable using the SD can now be closed by pressing the button while the dialog is open</li>
<li>Playlist Action & Soundboard Action => Stop All now indicates if there are tracks/playlists/sounds playing</li>
<li>Confirmed Foundry 0.7.8 compatibility</li>
<li>API has been improved, making integration with other hardware/software easier, and making future changes/additions easier</li>
<li>Moved default images to Foundry module side instead of Stream Deck plugin</li>
</ul>
<b>Compatible server app and SD plugin:</b><br>
Material Server v1.0.2 (unchanged): https://github.com/CDeenen/MaterialServer/releases <br>
SD plugin v1.1.0: https://github.com/CDeenen/MaterialDeck_SD/releases<br>
### V1.0.1 - 26-11-2020 ### V1.0.1 - 26-11-2020
<ul> <ul>
<li>Fixed issue where macro from macroboard wouldn't execute if furnace arguments were not defined</li> <li>Fixed issue where macro from macroboard wouldn't execute if furnace arguments were not defined</li>

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

View File

@@ -0,0 +1,5 @@
combattracker.png: Edited from https://fontawesome.com/icons/fist-raised?style=solid
nextturn.png, previousturn.png: Edited from https://fontawesome.com/icons/arrow-right?style=solid
nextround.png, previousround.png: Edited from https://fontawesome.com/icons/step-forward?style=solid
startcombat.png: Edited from https://fontawesome.com/icons/play?style=solid
stopcombat.png: Edited from https://fontawesome.com/icons/stop?style=solid

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

1
img/macro/SOURCES.txt Normal file
View File

@@ -0,0 +1 @@
macro.png: Foundry's icon folder, converted from .svg, original name: dice-target.svg

BIN
img/macro/macro.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

BIN
img/macro/macro@2x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

BIN
img/move/.thumb/up.png.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

2
img/move/SOURCES.txt Normal file
View File

@@ -0,0 +1,2 @@
center.png: made by me
All other images taken from freepngimg.com, iverted color and rotated. Source: https://freepngimg.com/png/24691-right-arrow-hd

BIN
img/move/center.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

BIN
img/move/center@2x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

BIN
img/move/down.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

BIN
img/move/downleft.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

BIN
img/move/downright.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

BIN
img/move/left.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.0 KiB

BIN
img/move/right.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

BIN
img/move/up.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

BIN
img/move/upleft.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

BIN
img/move/upright.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

BIN
img/move/zoomin.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

BIN
img/move/zoomout.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

1
img/other/SOURCES.txt Normal file
View File

@@ -0,0 +1 @@
other.png: Made using https://www.elgato.com/en/gaming/keycreator

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

View File

@@ -0,0 +1,2 @@
decreasedarkness.png: Made using https://www.elgato.com/en/gaming/keycreator
increasedarkness.png: Made using https://www.elgato.com/en/gaming/keycreator

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

BIN
img/other/other.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

BIN
img/other/other@2x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

View File

@@ -0,0 +1,3 @@
resume.png: Edited from https://fontawesome.com/icons/play?style=solid
pause.png: Edited from https://fontawesome.com/icons/pause?style=solid
playpause.png: Combined resume.png and pause.png

BIN
img/other/pause/pause.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

BIN
img/other/pause/resume.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

2
img/playlist/SOURCES.txt Normal file
View File

@@ -0,0 +1,2 @@
play.png: Edited from https://fontawesome.com/icons/play?style=solid
stop.png: Edited from https://fontawesome.com/icons/stop?style=solid

BIN
img/playlist/play.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

BIN
img/playlist/play@2x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

BIN
img/playlist/stop.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

View File

@@ -0,0 +1,2 @@
soundboard.png: Edited from https://fontawesome.com/icons/music?style=solid
play.png: Edited from https://fontawesome.com/icons/play?style=solid

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

BIN
img/soundboard/stop.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

BIN
img/token/.thumb/hp.png.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

5
img/token/SOURCES.txt Normal file
View File

@@ -0,0 +1,5 @@
ac.webp: Foundry's icon folder, original name: heater-steel-worn.webp
hp.png: made using Elgato's key creator: https://www.elgato.com/en/gaming/keycreator
init.png: freepngimg.com, color inverted, from: https://freepngimg.com/png/81025-art-dice-dungeons-system-dragons-d20-triangle/icon
speed.webp: Foundry's icon folder, original name: shoes-collared-leather-blue.webp
mystery-man.png: Foundry's icon folder, converted from .svg

BIN
img/token/ac.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

BIN
img/token/hp.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

BIN
img/token/init.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB

BIN
img/token/mystery-man.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

BIN
img/token/speed.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

View File

@@ -2,14 +2,14 @@
"name": "MaterialDeck", "name": "MaterialDeck",
"title": "Material Deck", "title": "Material Deck",
"description": "Material Deck allows you to control Foundry using an Elgato Stream Deck", "description": "Material Deck allows you to control Foundry using an Elgato Stream Deck",
"version": "1.0.1", "version": "1.1.0",
"author": "CDeenen", "author": "CDeenen",
"esmodules": [ "esmodules": [
"./MaterialDeck.js" "./MaterialDeck.js"
], ],
"socket": true, "socket": true,
"minimumCoreVersion": "0.7.5", "minimumCoreVersion": "0.7.5",
"compatibleCoreVersion": "0.7.7", "compatibleCoreVersion": "0.7.8",
"languages": [ "languages": [
{ {
"lang": "en", "lang": "en",

View File

@@ -19,17 +19,17 @@ export class CombatTracker{
update(settings,context){ update(settings,context){
this.active = true; this.active = true;
let ctFunction = settings.combatTrackerFunction; let ctFunction = settings.combatTrackerFunction;
if (ctFunction == undefined) ctFunction == 0; if (ctFunction == undefined) ctFunction == 'startStop';
let combat = game.combat; let combat = game.combat;
let src = "action/images/black.png"; let src = "modules/MaterialDeck/img/black.png";
let txt = ""; let txt = "";
let background = "#000000"; let background = "#000000";
let mode = settings.combatTrackerMode; let mode = settings.combatTrackerMode;
if (mode == undefined) mode = 0; if (mode == undefined) mode = 'combatants';
if (mode == 0){ if (mode == 'combatants'){
if (combat != null && combat != undefined && combat.turns.length != 0){ if (combat != null && combat != undefined && combat.turns.length != 0){
let initiativeOrder = combat.turns; let initiativeOrder = combat.turns;
let nr = settings.combatantNr - 1; let nr = settings.combatantNr - 1;
@@ -44,57 +44,57 @@ export class CombatTracker{
return; return;
} }
else { else {
streamDeck.setIcon(0,context,src,background); streamDeck.setIcon(context,src,background);
streamDeck.setTitle(txt,context); streamDeck.setTitle(txt,context);
} }
} }
else { else {
streamDeck.setIcon(0,context,src,background); streamDeck.setIcon(context,src,background);
streamDeck.setTitle(txt,context); streamDeck.setTitle(txt,context);
} }
} }
else if (mode == 1){ else if (mode == 'currentCombatant'){
if (combat != null && combat != undefined && combat.started){ if (combat != null && combat != undefined && combat.started){
let tokenId = combat.combatant.tokenId; let tokenId = combat.combatant.tokenId;
tokenControl.pushData(tokenId,settings,context); tokenControl.pushData(tokenId,settings,context);
} }
else { else {
streamDeck.setIcon(0,context,src,background); streamDeck.setIcon(context,src,background);
streamDeck.setTitle(txt,context); streamDeck.setTitle(txt,context);
} }
} }
else if (mode == 2){ else if (mode == 'function'){
if (ctFunction == 0) { if (ctFunction == 'startStop') {
if (combat == null || combat == undefined || combat.combatants.length == 0) { if (combat == null || combat == undefined || combat.combatants.length == 0) {
src = "action/images/combattracker/startcombat.png"; src = "modules/MaterialDeck/img/combattracker/startcombat.png";
background = "#000000"; background = "#000000";
} }
else { else {
if (combat.started == false) { if (combat.started == false) {
src = "action/images/combattracker/startcombat.png"; src = "modules/MaterialDeck/img/combattracker/startcombat.png";
background = "#008000"; background = "#008000";
} }
else { else {
src = "action/images/combattracker/stopcombat.png"; src = "modules/MaterialDeck/img/combattracker/stopcombat.png";
background = "#FF0000"; background = "#FF0000";
} }
} }
} }
else if (ctFunction == 1) { else if (ctFunction == 'nextTurn') {
src = "action/images/combattracker/nextturn.png"; src = "modules/MaterialDeck/img/combattracker/nextturn.png";
} }
else if (ctFunction == 2) { else if (ctFunction == 'prevTurn') {
src = "action/images/combattracker/previousturn.png"; src = "modules/MaterialDeck/img/combattracker/previousturn.png";
} }
else if (ctFunction == 3) { else if (ctFunction == 'nextRound') {
src = "action/images/combattracker/nextround.png"; src = "modules/MaterialDeck/img/combattracker/nextround.png";
} }
else if (ctFunction == 4) { else if (ctFunction == 'prevRound') {
src = "action/images/combattracker/previousround.png"; src = "modules/MaterialDeck/img/combattracker/previousround.png";
} }
else if (ctFunction == 5){ else if (ctFunction == 'turnDisplay'){
src = "action/images/black.png"; src = "modules/MaterialDeck/img/black.png";
let round = 0; let round = 0;
let turn = 0; let turn = 0;
if (combat != null && combat != undefined && combat.started != false){ if (combat != null && combat != undefined && combat.started != false){
@@ -105,21 +105,50 @@ export class CombatTracker{
if (txt != "") txt += "\n"; if (txt != "") txt += "\n";
if (settings.displayTurn) txt += "Turn\n"+turn; if (settings.displayTurn) txt += "Turn\n"+turn;
} }
streamDeck.setIcon(0,context,src,background); streamDeck.setIcon(context,src,background);
streamDeck.setTitle(txt,context); streamDeck.setTitle(txt,context);
} }
} }
keyPress(settings,context){ keyPress(settings,context){
let mode = parseInt(settings.combatTrackerMode); let mode = settings.combatTrackerMode;
if (isNaN(mode)) mode = 0; if (mode == undefined) mode = 'combatants';
if (mode < 2) { if (mode == 'function'){
let combat = game.combat;
if (combat == null || combat == undefined) return;
let ctFunction = settings.combatTrackerFunction;
if (ctFunction == undefined) ctFunction == 'startStop';
if (ctFunction == 'startStop'){
let src;
let background;
if (game.combat.started){
game.combat.endCombat();
src = "modules/MaterialDeck/img/combattracker/startcombat.png";
background = "#000000";
}
else {
game.combat.startCombat();
src = "modules/MaterialDeck/img/combattracker/stopcombat.png";
background = "#FF0000";
}
streamDeck.setIcon(context,src,background);
return;
}
if (game.combat.started == false) return;
if (ctFunction == 'nextTurn') game.combat.nextTurn();
else if (ctFunction == 'prevTurn') game.combat.previousTurn();
else if (ctFunction == 'nextRound') game.combat.nextRound();
else if (ctFunction == 'prevRound') game.combat.previousRound();
}
else {
let onClick = settings.onClick; let onClick = settings.onClick;
if (onClick == undefined) onClick = 0; if (onClick == undefined) onClick = 'doNothing';
let tokenId; let tokenId;
let combat = game.combat; let combat = game.combat;
if (mode == 0) { if (mode == 'combatants') {
if (combat != null && combat != undefined && combat.turns.length != 0){ if (combat != null && combat != undefined && combat.turns.length != 0){
let initiativeOrder = combat.turns; let initiativeOrder = combat.turns;
let nr = settings.combatantNr - 1; let nr = settings.combatantNr - 1;
@@ -132,63 +161,38 @@ export class CombatTracker{
tokenId = combatant.tokenId; tokenId = combatant.tokenId;
} }
} }
else if (mode == 1) else if (mode == 'currentCombatant')
if (combat != null && combat != undefined && combat.started) if (combat != null && combat != undefined && combat.started)
tokenId = combat.combatant.tokenId; tokenId = combat.combatant.tokenId;
let token let token
if (canvas.tokens.children[0] != undefined) token = canvas.tokens.children[0].children.find(p => p.id == tokenId); if (canvas.tokens.children[0] != undefined) token = canvas.tokens.children[0].children.find(p => p.id == tokenId);
if (token == undefined) return; if (token == undefined) return;
if (onClick == 0) //Do nothing if (onClick == 'doNothing') //Do nothing
return; return;
else if (onClick == 1){ //select token else if (onClick == 'select'){ //select token
token.control(); token.control();
} }
else if (onClick == 2){ //center on token else if (onClick == 'center'){ //center on token
let location = token.getCenter(token.x,token.y); let location = token.getCenter(token.x,token.y);
canvas.animatePan(location); canvas.animatePan(location);
} }
else if (onClick == 3){ //center on token and select else if (onClick == 'centerSelect'){ //center on token and select
let location = token.getCenter(token.x,token.y); let location = token.getCenter(token.x,token.y);
canvas.animatePan(location); canvas.animatePan(location);
token.control(); token.control();
} }
else if (onClick == 4){ //Open character sheet else if (onClick == 'charSheet'){ //Open character sheet
token.actor.sheet.render(true); const element = document.getElementById(token.actor.sheet.id);
if (element == null) token.actor.sheet.render(true);
else token.actor.sheet.close();
} }
else { //Open token config else if (onClick == 'tokenConfig'){ //Open token config
token.sheet._render(true); const element = document.getElementById(token.sheet.id);
if (element == null) token.sheet.render(true);
else token.sheet.close();
} }
} }
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();
}
} }
} }

View File

@@ -29,16 +29,57 @@ export class MacroControl{
if(macroNumber == undefined || isNaN(parseInt(macroNumber))){ if(macroNumber == undefined || isNaN(parseInt(macroNumber))){
macroNumber = 0; macroNumber = 0;
} }
if (mode == undefined) mode = 0; if (mode == undefined) mode = 'hotbar';
if (displayName == undefined) displayName = false; if (displayName == undefined) displayName = false;
if (background == undefined) background = '#000000'; if (background == undefined) background = '#000000';
macroNumber = parseInt(macroNumber); macroNumber = parseInt(macroNumber);
if (mode == 'macroBoard') { //Macro board
let name = "";
let src = '';
if (settings.macroBoardMode == 'offset') { //Offset
let ringOffColor = settings.offRing;
if (ringOffColor == undefined) ringOffColor = '#000000';
//Macro Hotbar let ringOnColor = settings.onRing;
if (mode < 2){ if (ringOnColor == undefined) ringOnColor = '#00FF00';
let macroOffset = parseInt(settings.macroOffset);
if (macroOffset == undefined || isNaN(macroOffset)) macroOffset = 0;
if (macroOffset == parseInt(this.offset)) ringColor = ringOnColor;
else ringColor = ringOffColor;
ring = 2;
//streamDeck.setIcon(context, "", background,ring,ringColor);
}
else { //Execute macro
macroNumber += this.offset - 1;
if (macroNumber < 0) macroNumber = 0;
var macroId = game.settings.get(MODULE.moduleName,'macroSettings').macros[macroNumber];
background = game.settings.get(MODULE.moduleName,'macroSettings').color[macroNumber];
if (background == undefined) background = '#000000';
src = "";
if (macroId != undefined){
let macro = game.macros._source.find(p => p._id == macroId);
if (macro != undefined) {
name += macro.name;
src += macro.img;
}
}
ring = 0;
}
if (icon) streamDeck.setIcon(context,src,background,ring,ringColor);
else streamDeck.setIcon(context, "", background,ring,ringColor);
if (displayName == 0) name = "";
streamDeck.setTitle(name,context);
}
else { //Macro Hotbar
let macroId let macroId
if (mode == 0) macroId = game.user.data.hotbar[macroNumber]; if (mode == 'hotbar') macroId = game.user.data.hotbar[macroNumber];
else { else {
let macros = game.macros.apps[0].macros; let macros = game.macros.apps[0].macros;
for (let j=0; j<10; j++){ for (let j=0; j<10; j++){
@@ -58,56 +99,18 @@ export class MacroControl{
src += macro.img; src += macro.img;
} }
} }
if (icon) streamDeck.setIcon(1,context,src,background); if (icon) streamDeck.setIcon(context,src,background);
else streamDeck.setIcon(0, context, "", background); else streamDeck.setIcon(context, "", background);
if (displayName == 0) name = "";
streamDeck.setTitle(name,context);
}
else { //Macro board
let name = "";
let src = '';
if (settings.macroBoardMode == 0) { //Execute macro
macroNumber += this.offset - 1;
if (macroNumber < 0) macroNumber = 0;
var macroId = game.settings.get(MODULE.moduleName,'macroSettings').macros[macroNumber];
background = game.settings.get(MODULE.moduleName,'macroSettings').color[macroNumber];
if (background == undefined) background = '#000000';
src = "";
if (macroId != undefined){
let macro = game.macros._source.find(p => p._id == macroId);
if (macro != undefined) {
name += macro.name;
src += macro.img;
}
}
}
else { //Offset
let ringOffColor = settings.offRing;
if (ringOffColor == undefined) ringOffColor = '#000000';
let ringOnColor = settings.onRing;
if (ringOnColor == undefined) ringOnColor = '#00FF00';
let macroOffset = parseInt(settings.macroOffset);
if (macroOffset == undefined || isNaN(macroOffset)) macroOffset = 0;
if (macroOffset == parseInt(this.offset)) ringColor = ringOnColor;
else ringColor = ringOffColor;
ring = 2;
}
if (icon) streamDeck.setIcon(1, context,src,background,ring,ringColor);
else streamDeck.setIcon(0, context, "", background,ring,ringColor);
if (displayName == 0) name = ""; if (displayName == 0) name = "";
streamDeck.setTitle(name,context); streamDeck.setTitle(name,context);
} }
} }
hotbar(macros){ hotbar(macros){
for (let i=0; i<32; i++){ for (let i=0; i<32; i++){
let data = streamDeck.buttonContext[i]; let data = streamDeck.buttonContext[i];
if (data == undefined || data.action != 'macro') continue; if (data == undefined || data.action != 'macro' || data.settings.macroMode == 'macroBoard') continue;
let context = data.context; let context = data.context;
let mode = data.settings.macroMode; let mode = data.settings.macroMode;
let displayName = data.settings.displayName; let displayName = data.settings.displayName;
@@ -141,7 +144,7 @@ export class MacroControl{
name += macro.name; name += macro.name;
src += macro.img; src += macro.img;
} }
streamDeck.setIcon(1,context,src,background); streamDeck.setIcon(context,src,background);
if (displayName == 0) name = ""; if (displayName == 0) name = "";
streamDeck.setTitle(name,context); streamDeck.setTitle(name,context);
} }
@@ -149,24 +152,24 @@ export class MacroControl{
keyPress(settings){ keyPress(settings){
let mode = settings.macroMode; let mode = settings.macroMode;
if (mode == undefined) mode = 0; if (mode == undefined) mode = 'hotbar';
let macroNumber = settings.macroNumber; let macroNumber = settings.macroNumber;
if(macroNumber == undefined || isNaN(parseInt(macroNumber))){ if(macroNumber == undefined || isNaN(parseInt(macroNumber))){
macroNumber = 0; macroNumber = 0;
} }
if (mode == 0 || mode == 1) if (mode == 'hotbar' || mode == 'visibleHotbar')
this.executeHotbar(macroNumber,mode); this.executeHotbar(macroNumber,mode);
else { else {
if (settings.macroBoardMode == 0) if (settings.macroBoardMode == 'offset') {
this.executeBoard(macroNumber);
else {
let macroOffset = settings.macroOffset; let macroOffset = settings.macroOffset;
if (macroOffset == undefined) macroOffset = 0; if (macroOffset == undefined) macroOffset = 0;
this.offset = macroOffset; this.offset = macroOffset;
this.updateAll(); this.updateAll();
} }
else
this.executeBoard(macroNumber);
} }
} }
@@ -200,7 +203,7 @@ export class MacroControl{
let furnaceEnabled = false; let furnaceEnabled = false;
let furnace = game.modules.get("furnace"); let furnace = game.modules.get("furnace");
if (furnace != undefined && furnace.active) furnaceEnabled = true; if (furnace != undefined && furnace.active) furnaceEnabled = true;
if (args == undefined || args[number] == undefined || args[macroNumber] == "") furnaceEnabled = false; if (args == undefined || args[macroNumber] == undefined || args[macroNumber] == "") furnaceEnabled = false;
if (furnaceEnabled == false) macro.execute(); if (furnaceEnabled == false) macro.execute();
else { else {
let chatData = { let chatData = {

View File

@@ -1,34 +1,66 @@
import * as MODULE from "../MaterialDeck.js"; import * as MODULE from "../MaterialDeck.js";
import {streamDeck} from "../MaterialDeck.js";
export class Move{ export class Move{
constructor(){ constructor(){
this.active = false; this.active = false;
} }
update(settings,context){
let background;
if (settings.background) background = settings.background;
else background = '#000000';
let url = '';
if (settings.dir == 'center') //center
url = "modules/MaterialDeck/img/move/center.png";
else if (settings.dir == 'up') //up
url = "modules/MaterialDeck/img/move/up.png";
else if (settings.dir == 'down') //down
url = "modules/MaterialDeck/img/move/down.png";
else if (settings.dir == 'right') //right
url = "modules/MaterialDeck/img/move/right.png";
else if (settings.dir == 'left') //left
url = "modules/MaterialDeck/img/move/left.png";
else if (settings.dir == 'upRight')
url = "modules/MaterialDeck/img/move/upright.png";
else if (settings.dir == 'upLeft')
url = "modules/MaterialDeck/img/move/upleft.png";
else if (settings.dir == 'downRight')
url = "modules/MaterialDeck/img/move/downright.png";
else if (settings.dir == 'downLeft')
url = "modules/MaterialDeck/img/move/downleft.png";
else if (settings.dir == 'zoomIn')
url = "modules/MaterialDeck/img/move/zoomin.png";
else if (settings.dir == 'zoomOut')
url = "modules/MaterialDeck/img/move/zoomout.png";
streamDeck.setIcon(context,url,background);
}
keyPress(settings){ keyPress(settings){
if (canvas.scene == null) return; if (canvas.scene == null) return;
let dir = settings.dir; let dir = settings.dir;
let mode = settings.mode; let mode = settings.mode;
if (mode == undefined) mode = 0; if (mode == undefined) mode = 'canvas';
if (dir == undefined) dir = 0; if (dir == undefined) dir = 'center';
if (dir < 9){
if (settings.mode == '1') if (dir == 'zoomIn') {//zoom in
this.moveToken(MODULE.selectedTokenId,dir);
else
this.moveCanvas(dir);
}
else if (dir == 9) {//zoom in
let viewPosition = canvas.scene._viewPosition; let viewPosition = canvas.scene._viewPosition;
viewPosition.scale = viewPosition.scale*1.05; viewPosition.scale = viewPosition.scale*1.05;
viewPosition.duration = 100; viewPosition.duration = 100;
canvas.animatePan(viewPosition); canvas.animatePan(viewPosition);
} }
else if (dir == 10) {//zoom out else if (dir == 'zoomOut') {//zoom out
let viewPosition = canvas.scene._viewPosition; let viewPosition = canvas.scene._viewPosition;
viewPosition.scale = viewPosition.scale*0.95; viewPosition.scale = viewPosition.scale*0.95;
viewPosition.duration = 100; viewPosition.duration = 100;
canvas.animatePan(viewPosition); canvas.animatePan(viewPosition);
} }
else {
if (settings.mode == 'selectedToken')
this.moveToken(MODULE.selectedTokenId,dir);
else
this.moveCanvas(dir);
}
} }
async moveToken(tokenId,dir){ async moveToken(tokenId,dir){
@@ -38,27 +70,27 @@ export class Move{
let x = token.x; let x = token.x;
let y = token.y; let y = token.y;
if (dir == '1') y -= gridSize; if (dir == 'up') y -= gridSize;
else if (dir == '2') y += gridSize; else if (dir == 'down') y += gridSize;
else if (dir == '3') x += gridSize; else if (dir == 'right') x += gridSize;
else if (dir == '4') x -= gridSize; else if (dir == 'left') x -= gridSize;
else if (dir == '5') { else if (dir == 'upRight') {
x += gridSize; x += gridSize;
y -= gridSize; y -= gridSize;
} }
else if (dir == '6') { else if (dir == 'upLeft') {
x -= gridSize; x -= gridSize;
y -= gridSize; y -= gridSize;
} }
else if (dir == '7') { else if (dir == 'downRight') {
x += gridSize; x += gridSize;
y += gridSize; y += gridSize;
} }
else if (dir == '8') { else if (dir == 'downLeft') {
x -= gridSize; x -= gridSize;
y += gridSize; y += gridSize;
} }
else if (dir == '0') { else if (dir == 'center') {
let location = token.getCenter(x,y); let location = token.getCenter(x,y);
canvas.animatePan(location); canvas.animatePan(location);
} }
@@ -71,27 +103,27 @@ export class Move{
const gridSize = canvas.scene.data.grid; const gridSize = canvas.scene.data.grid;
viewPosition.duration = 100; viewPosition.duration = 100;
if (dir == '1') viewPosition.y -= gridSize; if (dir == 'up') viewPosition.y -= gridSize;
else if (dir == '2') viewPosition.y += gridSize; else if (dir == 'down') viewPosition.y += gridSize;
else if (dir == '3') viewPosition.x += gridSize; else if (dir == 'right') viewPosition.x += gridSize;
else if (dir == '4') viewPosition.x -= gridSize; else if (dir == 'left') viewPosition.x -= gridSize;
else if (dir == '5') { else if (dir == 'upRight') {
viewPosition.x += gridSize; viewPosition.x += gridSize;
viewPosition.y -= gridSize; viewPosition.y -= gridSize;
} }
else if (dir == '6') { else if (dir == 'upLeft') {
viewPosition.x -= gridSize; viewPosition.x -= gridSize;
viewPosition.y -= gridSize; viewPosition.y -= gridSize;
} }
else if (dir == '7') { else if (dir == 'downRight') {
viewPosition.x += gridSize; viewPosition.x += gridSize;
viewPosition.y += gridSize; viewPosition.y += gridSize;
} }
else if (dir == '8') { else if (dir == 'downLeft') {
viewPosition.x -= gridSize; viewPosition.x -= gridSize;
viewPosition.y += gridSize; viewPosition.y += gridSize;
} }
else if (dir == '0') { else if (dir == 'center') {
viewPosition.x = (canvas.dimensions.sceneWidth+window.innerWidth)/2; viewPosition.x = (canvas.dimensions.sceneWidth+window.innerWidth)/2;
viewPosition.y = (canvas.dimensions.sceneHeight+window.innerHeight)/2; viewPosition.y = (canvas.dimensions.sceneHeight+window.innerHeight)/2;
} }

View File

@@ -19,60 +19,60 @@ export class OtherControls{
update(settings,context){ update(settings,context){
this.active = true; this.active = true;
let mode = settings.otherMode; let mode = settings.otherMode;
if (mode == undefined) mode = 0; if (mode == undefined) mode = 'pause';
if (mode == 0) { //pause if (mode == 'pause') { //pause
this.updatePause(settings.pauseFunction,context); this.updatePause(settings.pauseFunction,context);
} }
else if (mode == 1) { //scene selection else if (mode == 'sceneSelect') { //scene selection
this.updateScene(settings,context); this.updateScene(settings,context);
} }
else if (mode == 2){ //control buttons else if (mode == 'controlButtons'){ //control buttons
this.updateControl(settings,context); this.updateControl(settings,context);
} }
else if (mode == 3){ //darkness else if (mode == 'darkness'){ //darkness
this.updateDarkness(settings,context); this.updateDarkness(settings,context);
} }
else if (mode == 4){ //roll tables else if (mode == 'rollTables'){ //roll tables
this.updateRollTable(settings,context); this.updateRollTable(settings,context);
} }
else if (mode == 5) { //open sidebar tab else if (mode == 'sidebarTab') { //open sidebar tab
this.updateSidebar(settings,context); this.updateSidebar(settings,context);
} }
else if (mode == 6) { //open compendium else if (mode == 'compendium') { //open compendium
this.updateCompendium(settings,context); this.updateCompendium(settings,context);
} }
else if (mode == 7) { //open journal else if (mode == 'journal') { //open journal
this.updateJournal(settings,context); this.updateJournal(settings,context);
} }
} }
keyPress(settings){ keyPress(settings){
let mode = settings.otherMode; let mode = settings.otherMode;
if (mode == undefined) mode = 0; if (mode == undefined) mode = 'pause';
if (mode == 0) { //pause if (mode == 'pause') { //pause
this.keyPressPause(settings.pauseFunction); this.keyPressPause(settings.pauseFunction);
} }
else if (mode == 1) { //scene else if (mode == 'sceneSelect') { //scene
this.keyPressScene(settings); this.keyPressScene(settings);
} }
else if (mode == 2) { //control buttons else if (mode == 'controlButtons') { //control buttons
this.keyPressControl(settings); this.keyPressControl(settings);
} }
else if (mode == 3) { //darkness controll else if (mode == 'darkness') { //darkness controll
this.keyPressDarkness(settings); this.keyPressDarkness(settings);
} }
else if (mode == 4) { //roll tables else if (mode == 'rollTables') { //roll tables
this.keyPressRollTable(settings); this.keyPressRollTable(settings);
} }
else if (mode == 5) { //sidebar else if (mode == 'sidebarTab') { //sidebar
this.keyPressSidebar(settings); this.keyPressSidebar(settings);
} }
else if (mode == 6) { //open compendium else if (mode == 'compendium') { //open compendium
this.keyPressCompendium(settings); this.keyPressCompendium(settings);
} }
else if (mode == 7) { //open journal else if (mode == 'journal') { //open journal
this.keyPressJournal(settings); this.keyPressJournal(settings);
} }
} }
@@ -81,7 +81,7 @@ export class OtherControls{
updatePause(pauseFunction,context){ updatePause(pauseFunction,context){
let src = ""; let src = "";
if (pauseFunction == undefined) pauseFunction = 0; if (pauseFunction == undefined) pauseFunction = 'pause';
let background = settings.background; let background = settings.background;
if(background == undefined) background = '#000000'; if(background == undefined) background = '#000000';
@@ -97,35 +97,38 @@ export class OtherControls{
let playlistType = settings.playlistType; let playlistType = settings.playlistType;
if (playlistType == undefined) playlistType = 0; if (playlistType == undefined) playlistType = 0;
if (pauseFunction == 0){ //Pause game if (pauseFunction == 'pause'){ //Pause game
if (game.paused) ringColor = ringOnColor; if (game.paused) ringColor = ringOnColor;
else ringColor = ringOffColor; else ringColor = ringOffColor;
src = 'action/images/other/pause/pause.png'; src = 'modules/MaterialDeck/img/other/pause/pause.png';
//src = 'action/images/other/pause/pause.png';
} }
else if (pauseFunction == 1){ //Resume game else if (pauseFunction == 'resume'){ //Resume game
if (game.paused == false) ringColor = ringOnColor; if (game.paused == false) ringColor = ringOnColor;
else ringColor = ringOffColor; else ringColor = ringOffColor;
src = 'action/images/other/pause/resume.png'; src = 'modules/MaterialDeck/img/other/pause/resume.png';
//src = 'action/images/other/pause/resume.png';
} }
else if (pauseFunction == 2) { //toggle else if (pauseFunction == 'toggle') { //toggle
if (game.paused == false) ringColor = ringOnColor; if (game.paused == false) ringColor = ringOnColor;
else ringColor = ringOffColor; else ringColor = ringOffColor;
src = 'action/images/other/pause/playpause.png'; src = 'modules/MaterialDeck/img/other/pause/playpause.png';
//src = 'action/images/other/pause/playpause.png';
} }
streamDeck.setIcon(0,context,src,background,2,ringColor); streamDeck.setIcon(context,src,background,2,ringColor,true);
} }
keyPressPause(pauseFunction){ keyPressPause(pauseFunction){
if (pauseFunction == undefined) pauseFunction = 0; if (pauseFunction == undefined) pauseFunction = 'pause';
if (pauseFunction == 0){ //Pause game if (pauseFunction == 'pause'){ //Pause game
if (game.paused) return; if (game.paused) return;
game.togglePause(); game.togglePause();
} }
else if (pauseFunction == 1){ //Resume game else if (pauseFunction == 'resume'){ //Resume game
if (game.paused == false) return; if (game.paused == false) return;
game.togglePause(); game.togglePause();
} }
else if (pauseFunction == 2) { //toggle else if (pauseFunction == 'toggle') { //toggle
game.togglePause(); game.togglePause();
} }
} }
@@ -135,7 +138,7 @@ export class OtherControls{
updateScene(settings,context){ updateScene(settings,context){
if (canvas.scene == null) return; if (canvas.scene == null) return;
let func = settings.sceneFunction; let func = settings.sceneFunction;
if (func == undefined) func = 0; if (func == undefined) func = 'visible';
let background = settings.background; let background = settings.background;
if(background == undefined) background = '#000000'; if(background == undefined) background = '#000000';
@@ -148,12 +151,9 @@ export class OtherControls{
let ringOnColor = settings.onRing; let ringOnColor = settings.onRing;
if (ringOnColor == undefined) ringOnColor = '#00FF00'; if (ringOnColor == undefined) ringOnColor = '#00FF00';
let playlistType = settings.playlistType;
if (playlistType == undefined) playlistType = 0;
let src = ""; let src = "";
let name = ""; let name = "";
if (func == 0){ //visible scenes if (func == 'visible'){ //visible scenes
let nr = parseInt(settings.sceneNr); let nr = parseInt(settings.sceneNr);
if (isNaN(nr)) nr = 1; if (isNaN(nr)) nr = 1;
nr--; nr--;
@@ -170,7 +170,7 @@ export class OtherControls{
if (scene.active) name += "\n(Active)"; if (scene.active) name += "\n(Active)";
} }
} }
else if (func == 1) { //all scenes else if (func == 'any') { //all scenes
let scene = game.scenes.apps[1].entities.find(p=>p.data.name == name); let scene = game.scenes.apps[1].entities.find(p=>p.data.name == name);
if (scene != undefined){ if (scene != undefined){
if (scene.isView) if (scene.isView)
@@ -183,15 +183,15 @@ export class OtherControls{
} }
} }
streamDeck.setTitle(name,context); streamDeck.setTitle(name,context);
streamDeck.setIcon(1, context,src,background,2,ringColor); streamDeck.setIcon(context,src,background,2,ringColor);
} }
keyPressScene(settings){ keyPressScene(settings){
let func = settings.sceneFunction; let func = settings.sceneFunction;
if (func == undefined) func = 0; if (func == undefined) func = 'visible';
if (func == 0){ //visible scenes if (func == 'visible'){ //visible scenes
let viewFunc = settings.sceneViewFunction; let viewFunc = settings.sceneViewFunction;
if (viewFunc == undefined) viewFunc = 0; if (viewFunc == undefined) viewFunc = 'view';
let nr = parseInt(settings.sceneNr); let nr = parseInt(settings.sceneNr);
if (isNaN(nr)) nr = 1; if (isNaN(nr)) nr = 1;
@@ -199,10 +199,10 @@ export class OtherControls{
let scene = game.scenes.apps[0].scenes[nr]; let scene = game.scenes.apps[0].scenes[nr];
if (scene != undefined){ if (scene != undefined){
if (viewFunc == 0){ if (viewFunc == 'view'){
scene.view(); scene.view();
} }
else if (viewFunc == 1){ else if (viewFunc == 'activate'){
scene.activate(); scene.activate();
} }
else { else {
@@ -217,32 +217,29 @@ export class OtherControls{
updateControl(settings,context){ updateControl(settings,context){
let control = settings.control; let control = settings.control;
if (control == undefined) control = 0; if (control == undefined) control = 'dispControls';
let tool = settings.tool; let tool = settings.tool;
if (tool == undefined) tool = 0; if (tool == undefined) tool = 'open';
let background = settings.background; let background = settings.background;
if (background == undefined) background = '#000000'; if (background == undefined) background = '#000000';
let ringColor = '#000000' let ringColor = '#000000'
const controlName = this.getControlName(control);
const toolName = this.getToolName(control,tool);
let txt = ""; let txt = "";
let src = ""; let src = "";
const activeControl = ui.controls.activeControl; const activeControl = ui.controls.activeControl;
const activeTool = ui.controls.activeTool; const activeTool = ui.controls.activeTool;
if (control == 0) { //displayed controls if (control == 'dispControls') { //displayed controls
let controlNr = parseInt(settings.controlNr); let controlNr = parseInt(settings.controlNr);
if (isNaN(controlNr)) controlNr = 1; if (isNaN(controlNr)) controlNr = 1;
controlNr--; controlNr--;
const selectedControl = ui.controls.controls[controlNr]; const selectedControl = ui.controls.controls[controlNr];
if (selectedControl != undefined){ if (selectedControl != undefined){
if (tool == 0){ //open category if (tool == 'open'){ //open category
txt = game.i18n.localize(selectedControl.title); txt = game.i18n.localize(selectedControl.title);
src = selectedControl.icon; src = selectedControl.icon;
if (activeControl == selectedControl.name) if (activeControl == selectedControl.name)
@@ -250,7 +247,7 @@ export class OtherControls{
} }
} }
} }
else if (control == 1){ //displayed tools else if (control == 'dispTools'){ //displayed tools
let controlNr = parseInt(settings.controlNr); let controlNr = parseInt(settings.controlNr);
if (isNaN(controlNr)) controlNr = 1; if (isNaN(controlNr)) controlNr = 1;
controlNr--; controlNr--;
@@ -274,16 +271,16 @@ export class OtherControls{
} }
} }
else { // specific control/tool else { // specific control/tool
const selectedControl = ui.controls.controls.find(c => c.name == controlName); const selectedControl = ui.controls.controls.find(c => c.name == control);
if (selectedControl != undefined){ if (selectedControl != undefined){
if (tool == 0){ //open category if (tool == 'open'){ //open category
txt = game.i18n.localize(selectedControl.title); txt = game.i18n.localize(selectedControl.title);
src = selectedControl.icon; src = selectedControl.icon;
if (activeControl == selectedControl.name) if (activeControl == selectedControl.name)
ringColor = "#FF7B00"; ringColor = "#FF7B00";
} }
else { else {
const selectedTool = selectedControl.tools.find(t => t.name == toolName); const selectedTool = selectedControl.tools.find(t => t.name == tool);
if (selectedTool != undefined){ if (selectedTool != undefined){
txt = game.i18n.localize(selectedTool.title); txt = game.i18n.localize(selectedTool.title);
src = selectedTool.icon; src = selectedTool.icon;
@@ -300,33 +297,30 @@ export class OtherControls{
} }
} }
} }
streamDeck.setIcon(1,context,src,background,2,ringColor); streamDeck.setIcon(context,src,background,2,ringColor);
streamDeck.setTitle(txt,context); streamDeck.setTitle(txt,context);
} }
keyPressControl(settings){ keyPressControl(settings){
if (canvas.scene == null) return; if (canvas.scene == null) return;
let control = settings.control; let control = settings.control;
if (control == undefined) control = 0; if (control == undefined) control = 'dispControls';
let tool = settings.tool; let tool = settings.tool;
if (tool == undefined) tool = 0; if (tool == undefined) tool = 'open';
const controlName = this.getControlName(control);
const toolName = this.getToolName(control,tool);
if (control == 0){ //displayed controls if (control == 'dispControls'){ //displayed controls
let controlNr = parseInt(settings.controlNr); let controlNr = parseInt(settings.controlNr);
if (isNaN(controlNr)) controlNr = 1; if (isNaN(controlNr)) controlNr = 1;
controlNr--; controlNr--;
const selectedControl = ui.controls.controls[controlNr]; const selectedControl = ui.controls.controls[controlNr];
if (selectedControl != undefined){ if (selectedControl != undefined){
ui.controls.activeControl = controlName; ui.controls.activeControl = 'token';
selectedControl.activeTool = selectedControl.activeTool; selectedControl.activeTool = selectedControl.activeTool;
canvas.getLayer(selectedControl.layer).activate(); canvas.getLayer(selectedControl.layer).activate();
} }
} }
else if (control == 1){ //displayed tools else if (control == 'dispTools'){ //displayed tools
let controlNr = parseInt(settings.controlNr); let controlNr = parseInt(settings.controlNr);
if (isNaN(controlNr)) controlNr = 1; if (isNaN(controlNr)) controlNr = 1;
controlNr--; controlNr--;
@@ -347,17 +341,17 @@ export class OtherControls{
} }
} }
else { //select control else { //select control
const selectedControl = ui.controls.controls.find(c => c.name == controlName); const selectedControl = ui.controls.controls.find(c => c.name == control);
if (selectedControl != undefined){ if (selectedControl != undefined){
if (tool == 0){ //open category if (tool == 'open'){ //open category
ui.controls.activeControl = controlName; ui.controls.activeControl = 'token';
selectedControl.activeTool = selectedControl.activeTool; selectedControl.activeTool = selectedControl.activeTool;
canvas.getLayer(selectedControl.layer).activate(); canvas.getLayer(selectedControl.layer).activate();
} }
else { else {
const selectedTool = selectedControl.tools.find(t => t.name == toolName); const selectedTool = selectedControl.tools.find(t => t.name == tool);
if (selectedTool != undefined){ if (selectedTool != undefined){
ui.controls.activeControl = controlName; ui.controls.activeControl = control;
canvas.getLayer(selectedControl.layer).activate(); canvas.getLayer(selectedControl.layer).activate();
if (selectedTool.toggle) { if (selectedTool.toggle) {
selectedTool.active = !selectedTool.active; selectedTool.active = !selectedTool.active;
@@ -367,7 +361,7 @@ export class OtherControls{
selectedTool.onClick(); selectedTool.onClick();
} }
else else
selectedControl.activeTool = toolName; selectedControl.activeTool = tool;
} }
} }
} }
@@ -375,87 +369,11 @@ export class OtherControls{
ui.controls.render(); ui.controls.render();
} }
getControlName(control){
control -= 2;
let name;
if (control == 0) name = 'token';
else if (control == 1) name = 'measure';
else if (control == 2) name = 'tiles';
else if (control == 3) name = 'drawings';
else if (control == 4) name = 'walls';
else if (control == 5) name = 'lighting';
else if (control == 6) name = 'sounds';
else if (control == 7) name = 'notes';
return name;
}
getToolName(control,tool){
control -= 2;
tool--;
let name;
if (control == 0){ //basic controls
if (tool == 0) name = 'select';
else if (tool == 1) name = 'target';
else if (tool == 2) name = 'ruler';
}
else if (control == 1){ //measurement controls
if (tool == 0) name = 'circle';
else if (tool == 1) name = 'cone';
else if (tool == 2) name = 'rect';
else if (tool == 3) name = 'ray';
else if (tool == 4) name = 'clear';
}
else if (control == 2){ //tile controls
if (tool == 0) name = 'select';
else if (tool == 1) name = 'tile';
else if (tool == 2) name = 'browse';
}
else if (control == 3){ //drawing tools
if (tool == 0) name = 'select';
else if (tool == 1) name = 'rect';
else if (tool == 2) name = 'ellipse';
else if (tool == 3) name = 'polygon';
else if (tool == 4) name = 'freehand';
else if (tool == 5) name = 'text';
else if (tool == 6) name = 'configure';
else if (tool == 7) name = 'clear';
}
else if (control == 4){ //wall controls
if (tool == 0) name = 'select';
else if (tool == 1) name = 'walls';
else if (tool == 2) name = 'terrain';
else if (tool == 3) name = 'invisible';
else if (tool == 4) name = 'ethereal';
else if (tool == 5) name = 'doors';
else if (tool == 6) name = 'secret';
else if (tool == 7) name = 'clone';
else if (tool == 8) name = 'snap';
else if (tool == 9) name = 'clear';
}
else if (control == 5){ //lighting controls
if (tool == 0) name = 'light';
else if (tool == 1) name = 'day';
else if (tool == 2) name = 'night';
else if (tool == 3) name = 'reset';
else if (tool == 4) name = 'clear';
}
else if (control == 6){ //ambient sound controls
if (tool == 0) name = 'sound';
else if (tool == 1) name = 'clear';
}
else if (control == 7){ //journal notes
if (tool == 0) name = 'select';
else if (tool == 1) name = 'toggle';
else if (tool == 2) name = 'clear';
}
return name;
}
////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////
updateDarkness(settings,context){ updateDarkness(settings,context){
let func = settings.darknessFunction; let func = settings.darknessFunction;
if (func == undefined) func = 0; if (func == undefined) func = 'value';
let value = settings.darknessValue; let value = settings.darknessValue;
if (value == undefined) value = 0; if (value == undefined) value = 0;
@@ -466,35 +384,34 @@ export class OtherControls{
let src = ""; let src = "";
let txt = ""; let txt = "";
if (func == 0){ //value if (func == 'value'){ //value
src = 'action/images/other/darkness/darkness.png'; src = 'modules/MaterialDeck/img/other/darkness/darkness.png';
} }
else if (func == 1){ //increase/decrease else if (func == 'incDec'){ //increase/decrease
if (value < 0) src = 'action/images/other/darkness/decreasedarkness.png'; if (value < 0) src = 'modules/MaterialDeck/img/other/darkness/decreasedarkness.png';
else src = 'action/images/other/darkness/increasedarkness.png'; else src = 'modules/MaterialDeck/img/other/darkness/increasedarkness.png';
} }
else if (func == 2){ //display darkness else if (func == 'display'){ //display darkness
src = 'action/images/other/darkness/darkness.png'; src = 'modules/MaterialDeck/img/other/darkness/darkness.png';
let darkness = ''; let darkness = '';
if (canvas.scene != null) darkness = Math.floor(canvas.scene.data.darkness*100)/100; if (canvas.scene != null) darkness = Math.floor(canvas.scene.data.darkness*100)/100;
txt += darkness; txt += darkness;
} }
streamDeck.setTitle(txt,context); streamDeck.setTitle(txt,context);
streamDeck.setIcon(0, context,src,background); streamDeck.setIcon(context,src,background);
} }
keyPressDarkness(settings) { keyPressDarkness(settings) {
if (canvas.scene == null) return; if (canvas.scene == null) return;
let func = settings.darknessFunction; let func = settings.darknessFunction;
if (func == undefined) func = 0; if (func == undefined) func = 'value';
let value = parseFloat(settings.darknessValue); let value = parseFloat(settings.darknessValue);
if (value == undefined) value = 0; if (value == undefined) value = 0;
if (func == 0){ //value if (func == 'value') //value
canvas.scene.update({darkness: value}); canvas.scene.update({darkness: value});
} else if (func == 'incDec'){ //increase/decrease
else if (func == 1){ //increase/decrease
let darkness = canvas.scene.data.darkness; let darkness = canvas.scene.data.darkness;
darkness += -1*value; darkness += -1*value;
if (darkness > 1) darkness = 1; if (darkness > 1) darkness = 1;
@@ -522,12 +439,12 @@ export class OtherControls{
if (settings.displayRollName) txt = table.name; if (settings.displayRollName) txt = table.name;
} }
streamDeck.setTitle(txt,context); streamDeck.setTitle(txt,context);
streamDeck.setIcon(1, context,src,background); streamDeck.setIcon(context,src,background);
} }
keyPressRollTable(settings){ keyPressRollTable(settings){
let func = settings.rolltableFunction; let func = settings.rolltableFunction;
if (func == undefined) func = 0; if (func == undefined) func = 'open';
let name = settings.rollTableName; let name = settings.rollTableName;
if (name == undefined) return; if (name == undefined) return;
@@ -538,71 +455,55 @@ export class OtherControls{
let table = game.tables.entities.find(p=>p.name == name); let table = game.tables.entities.find(p=>p.name == name);
if (table != undefined) { if (table != undefined) {
if (func == 0){ //open if (func == 'open'){ //open
table.sheet.render(true); const element = document.getElementById(table.sheet.id);
if (element == null) table.sheet.render(true);
else table.sheet.close();
} }
else if (func == 1) {//Public roll else if (func == 'public') //Public roll
table.draw({rollMode:"roll"}); table.draw({rollMode:"roll"});
} else if (func == 'private') //private roll
else if (func == 2) {//private roll
table.draw({rollMode:"selfroll"}); table.draw({rollMode:"selfroll"});
}
} }
} }
////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////
getSidebarId(nr){
let id;
if (nr == 0) id = 'chat';
else if (nr == 1) id = 'combat';
else if (nr == 2) id = 'scenes';
else if (nr == 3) id = 'actors';
else if (nr == 4) id = 'items';
else if (nr == 5) id = 'journal';
else if (nr == 6) id = 'tables';
else if (nr == 7) id = 'playlists';
else if (nr == 8) id = 'compendium';
else if (nr == 9) id = 'settings';
else id = '';
return id;
}
getSidebarName(nr){ getSidebarName(nr){
let name; let name;
if (nr == 0) name = game.i18n.localize("SIDEBAR.TabChat"); if (nr == 'chat') name = game.i18n.localize("SIDEBAR.TabChat");
else if (nr == 1) name = game.i18n.localize("SIDEBAR.TabCombat"); else if (nr == 'combat') name = game.i18n.localize("SIDEBAR.TabCombat");
else if (nr == 2) name = game.i18n.localize("SIDEBAR.TabScenes"); else if (nr == 'scenes') name = game.i18n.localize("SIDEBAR.TabScenes");
else if (nr == 3) name = game.i18n.localize("SIDEBAR.TabActors"); else if (nr == 'actors') name = game.i18n.localize("SIDEBAR.TabActors");
else if (nr == 4) name = game.i18n.localize("SIDEBAR.TabItems"); else if (nr == 'items') name = game.i18n.localize("SIDEBAR.TabItems");
else if (nr == 5) name = game.i18n.localize("SIDEBAR.TabJournal"); else if (nr == 'journal') name = game.i18n.localize("SIDEBAR.TabJournal");
else if (nr == 6) name = game.i18n.localize("SIDEBAR.TabTables"); else if (nr == 'tables') name = game.i18n.localize("SIDEBAR.TabTables");
else if (nr == 7) name = game.i18n.localize("SIDEBAR.TabPlaylists"); else if (nr == 'playlists') name = game.i18n.localize("SIDEBAR.TabPlaylists");
else if (nr == 8) name = game.i18n.localize("SIDEBAR.TabCompendium"); else if (nr == 'compendium') name = game.i18n.localize("SIDEBAR.TabCompendium");
else if (nr == 9) name = game.i18n.localize("SIDEBAR.TabSettings"); else if (nr == 'settings') name = game.i18n.localize("SIDEBAR.TabSettings");
else if (nr == 10) name = game.i18n.localize("SIDEBAR.CollapseToggle"); else if (nr == 'collapse') name = game.i18n.localize("SIDEBAR.CollapseToggle");
return name; return name;
} }
getSidebarIcon(nr){ getSidebarIcon(nr){
let icon; let icon;
if (nr == 0) icon = window.CONFIG.ChatMessage.sidebarIcon; if (nr == 'chat') icon = window.CONFIG.ChatMessage.sidebarIcon;
else if (nr == 1) icon = window.CONFIG.Combat.sidebarIcon; else if (nr == 'combat') icon = window.CONFIG.Combat.sidebarIcon;
else if (nr == 2) icon = window.CONFIG.Scene.sidebarIcon; else if (nr == 'scenes') icon = window.CONFIG.Scene.sidebarIcon;
else if (nr == 3) icon = window.CONFIG.Actor.sidebarIcon; else if (nr == 'actors') icon = window.CONFIG.Actor.sidebarIcon;
else if (nr == 4) icon = window.CONFIG.Item.sidebarIcon; else if (nr == 'items') icon = window.CONFIG.Item.sidebarIcon;
else if (nr == 5) icon = window.CONFIG.JournalEntry.sidebarIcon; else if (nr == 'journal') icon = window.CONFIG.JournalEntry.sidebarIcon;
else if (nr == 6) icon = window.CONFIG.RollTable.sidebarIcon; else if (nr == 'tables') icon = window.CONFIG.RollTable.sidebarIcon;
else if (nr == 7) icon = window.CONFIG.Playlist.sidebarIcon; else if (nr == 'playlists') icon = window.CONFIG.Playlist.sidebarIcon;
else if (nr == 8) icon = "fas fa-atlas"; else if (nr == 'compendium') icon = "fas fa-atlas";
else if (nr == 9) icon = "fas fa-cogs"; else if (nr == 'settings') icon = "fas fa-cogs";
else if (nr == 10) icon = "fas fa-caret-right"; else if (nr == 'collapse') icon = "fas fa-caret-right";
return icon; return icon;
} }
updateSidebar(settings,context){ updateSidebar(settings,context){
let sidebarTab = settings.sidebarTab; let sidebarTab = settings.sidebarTab;
if (sidebarTab == undefined) sidebarTab = 0; if (sidebarTab == undefined) sidebarTab = 'chat';
let activeTab = ui.sidebar.activeTab; let activeTab = ui.sidebar.activeTab;
let collapsed = ui.sidebar._collapsed; let collapsed = ui.sidebar._collapsed;
@@ -624,22 +525,24 @@ export class OtherControls{
if (settings.displaySidebarName) name = this.getSidebarName(sidebarTab); if (settings.displaySidebarName) name = this.getSidebarName(sidebarTab);
if (settings.displaySidebarIcon) icon = this.getSidebarIcon(sidebarTab); if (settings.displaySidebarIcon) icon = this.getSidebarIcon(sidebarTab);
if ((sidebarTab == 10 && collapsed)) if ((sidebarTab == 'collapse' && collapsed))
ringColor = ringOnColor; ringColor = ringOnColor;
else else
ringColor = ringOffColor; ringColor = ringOffColor;
streamDeck.setTitle(name,context); streamDeck.setTitle(name,context);
streamDeck.setIcon(1,context,icon,background,2,ringColor); streamDeck.setIcon(context,icon,background,2,ringColor);
} }
keyPressSidebar(settings){ keyPressSidebar(settings){
let sidebarTab = settings.sidebarTab; let sidebarTab = settings.sidebarTab;
if (sidebarTab == undefined) sidebarTab = 0; if (sidebarTab == undefined) sidebarTab = 'chat';
let collapsed = ui.sidebar._collapsed; let collapsed = ui.sidebar._collapsed;
if (sidebarTab < 10) ui.sidebar.activateTab(this.getSidebarId(sidebarTab)); if (sidebarTab == 'collapse'){
else if (collapsed) ui.sidebar.expand(); if (collapsed) ui.sidebar.expand();
else if (collapsed == false) ui.sidebar.collapse(); else if (collapsed == false) ui.sidebar.collapse();
}
else ui.sidebar.activateTab(sidebarTab);
} }
////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////
@@ -666,7 +569,7 @@ export class OtherControls{
else ringColor = ringOffColor; else ringColor = ringOffColor;
if (settings.displayCompendiumName) streamDeck.setTitle(name,context); if (settings.displayCompendiumName) streamDeck.setTitle(name,context);
streamDeck.setIcon(0,context,"",background,2,ringColor); streamDeck.setIcon(context,"",background,2,ringColor);
} }
keyPressCompendium(settings){ keyPressCompendium(settings){
@@ -705,7 +608,7 @@ export class OtherControls{
else ringColor = ringOffColor; else ringColor = ringOffColor;
if (settings.displayCompendiumName) streamDeck.setTitle(name,context); if (settings.displayCompendiumName) streamDeck.setTitle(name,context);
streamDeck.setIcon(0,context,"",background,2,ringColor); streamDeck.setIcon(context,"",background,2,ringColor);
} }
keyPressJournal(settings){ keyPressJournal(settings){
@@ -714,7 +617,8 @@ export class OtherControls{
const journal = game.journal.entries.find(p=>p.name == name); const journal = game.journal.entries.find(p=>p.name == name);
if (journal == undefined) return; if (journal == undefined) return;
const element = document.getElementById("journal-"+journal.id);
journal.render(true); if (element == null) journal.render(true);
else journal.sheet.close();
} }
} }

Some files were not shown because too many files have changed in this diff Show More