This commit is contained in:
CDeenen
2021-02-27 05:07:47 +01:00
parent 7e2796316e
commit 64983ca0cb
8 changed files with 156 additions and 61 deletions

View File

@@ -23,38 +23,30 @@ export class PlaylistControl{
return;
}
this.active = true;
if (settings.playlistMode == undefined) settings.playlistMode = 'playlist';
if (settings.playlistMode == 'playlist'){
const mode = settings.playlistMode ? settings.playlistMode : 'playlist';
if (mode == 'playlist'){
this.updatePlaylist(settings,context);
}
else if (settings.playlistMode == 'track'){
else if (mode == 'track'){
this.updateTrack(settings,context);
}
else {
let src = 'modules/MaterialDeck/img/playlist/stop.png';
if (game.playlists.playing.length > 0)
streamDeck.setIcon(context,src,settings.background,2,'#00FF00',true);
else
streamDeck.setIcon(context,src,settings.background,1,'#000000',true);
const src = 'modules/MaterialDeck/img/playlist/stop.png';
const ringColor = (game.playlists.playing.length > 0) ? '#00FF00' : '#000000';
const ring = (game.playlists.playing.length > 0) ? 2 : 1;
const txt = settings.displayPlaylistName ? this.getPlaylist(this.playlistOffset).name : '';
streamDeck.setIcon(context,src,settings.background,ring,ringColor,true);
streamDeck.setTitle(txt,context);
}
}
updatePlaylist(settings,context){
let name = "";
let background = settings.background;
if(background == undefined) background = '#000000';
let ringColor = "#000000"
let ringOffColor = settings.offRing;
if (ringOffColor == undefined) ringOffColor = '#FF0000';
let ringOnColor = settings.onRing;
if (ringOnColor == undefined) ringOnColor = '#00FF00';
let playlistType = settings.playlistType;
if (playlistType == undefined) playlistType = 'playStop';
const background = settings.background ? settings.background : '#000000';
const ringOffColor = settings.offRing ? settings.offRing : '#FF0000';
const ringOnColor = settings.onRing ? settings.onRing : '#00FF00';
const playlistType = settings.playlistType ? settings.playlistType : 'playStop';
//Play/Stop
if (playlistType == 'playStop'){
@@ -79,26 +71,28 @@ export class PlaylistControl{
if (isNaN(playlistOffset)) playlistOffset = 0;
if (playlistOffset == this.playlistOffset) ringColor = ringOnColor;
}
//Relative Offset
else if (playlistType == 'relativeOffset') {
let playlistOffset = parseInt(settings.offset);
if (isNaN(playlistOffset)) playlistOffset = 0;
let number = parseInt(this.playlistOffset + playlistOffset);
const nrOfPlaylists = parseInt(game.settings.get(MODULE.moduleName,'playlists').playlistNumber);
if (number < 0) number += nrOfPlaylists;
else if (number > nrOfPlaylists) number -= nrOfPlaylists;
const targetPlaylist = this.getPlaylist(number);
if (targetPlaylist != undefined) name = targetPlaylist.name;
}
streamDeck.setIcon(context,"",background,2,ringColor);
streamDeck.setTitle(name,context);
}
updateTrack(settings,context){
let name = "";
let background = settings.background;
if(background == undefined) background = '#000000';
let ringColor = "#000000"
let ringOffColor = settings.offRing;
if (ringOffColor == undefined) ringOffColor = '#FF0000';
let ringOnColor = settings.onRing;
if (ringOnColor == undefined) ringOnColor = '#00FF00';
let playlistType = settings.playlistType;
if (playlistType == undefined) playlistType = 'playStop';
const background = settings.background ? settings.background : '#000000';
const ringOffColor = settings.offRing ? settings.offRing : '#FF0000';
const ringOnColor = settings.onRing ? settings.onRing : '#00FF00';
const playlistType = settings.playlistType ? settings.playlistType : 'playStop';
//Play/Stop
if (playlistType == 'playStop'){
@@ -125,11 +119,14 @@ export class PlaylistControl{
}
}
//Offset
else {
else if (playlistType == 'offset') {
let trackOffset = parseInt(settings.offset);
if (isNaN(trackOffset)) trackOffset = 0;
if (trackOffset == this.trackOffset) ringColor = ringOnColor;
}
//Relative Offset
else if (playlistType == 'relativeOffset') {
}
streamDeck.setIcon(context,"",background,2,ringColor);
streamDeck.setTitle(name,context);
}
@@ -179,16 +176,17 @@ export class PlaylistControl{
trackNr--;
trackNr += this.trackOffset;
if (settings.playlistMode == undefined) settings.playlistMode = 'playlist';
if (settings.playlistType == undefined) settings.playlistType = 'playStop';
if (settings.playlistMode == 'stopAll') {
const playlistMode = settings.playlistMode ? settings.playlistMode : 'playlist';
const playlistType = settings.playlistType ? settings.playlistType : 'playStop';
if (playlistMode == 'stopAll') {
this.stopAll(true);
}
else {
if (settings.playlistType == 'playStop') {
if (playlistType == 'playStop') {
let playlist = this.getPlaylist(playlistNr);
if (playlist != undefined){
if (settings.playlistMode == 'playlist')
if (playlistMode == 'playlist')
this.playPlaylist(playlist,playlistNr);
else {
let track = playlist.data.sounds[trackNr];
@@ -198,17 +196,34 @@ export class PlaylistControl{
}
}
}
else {
if (settings.playlistMode == 'playlist') {
else if (playlistType == 'offset'){
if (playlistMode == 'playlist') {
this.playlistOffset = parseInt(settings.offset);
if (isNaN(this.playlistOffset)) this.playlistOffset = 0;
}
else {
else {
this.trackOffset = parseInt(settings.offset);
if (isNaN(this.trackOffset)) this.trackOffset = 0;
}
this.updateAll();
}
else if (playlistType == 'relativeOffset'){
if (playlistMode == 'playlist') {
let playlistOffset = parseInt(settings.offset);
if (isNaN(playlistOffset)) playlistOffset = 0;
let number = parseInt(this.playlistOffset + playlistOffset);
const nrOfPlaylists = parseInt(game.settings.get(MODULE.moduleName,'playlists').playlistNumber);
if (number < 0) number += nrOfPlaylists;
else if (number > nrOfPlaylists) number -= nrOfPlaylists;
this.playlistOffset = number;
}
else {
let value = parseInt(settings.offset);
if (isNaN(value)) return;
this.trackOffset += value;
}
this.updateAll();
}
}
}

View File

@@ -60,11 +60,13 @@ const defaultUserPermissions = {
VISION: [false,true,true,true],
WILDCARD: [false,true,true,true],
CONDITIONS: [false,true,true,true],
CUSTOM: [false,false,true,true]
CUSTOM: [false,false,true,true],
NON_OWNED: [false,false,true,true],
OBSERVER: [false,true,true,true]
}
}
export const registerSettings = function() {
export const registerSettings = async function() {
/**
* Main settings
*/
@@ -75,7 +77,7 @@ export const registerSettings = function() {
name: "MaterialDeck.Sett.Enable",
scope: "client",
config: true,
default: true,
default: false,
type: Boolean,
onChange: x => window.location.reload()
});
@@ -195,6 +197,21 @@ export const registerSettings = function() {
type: soundboardConfigForm,
restricted: false
});
let permissionSettings = game.settings.get(MODULE.moduleName,'userPermission');
if (permissionSettings == undefined || permissionSettings == null || MODULE.isEmpty(permissionSettings)) {
permissionSettings = {
enable: defaultEnable,
permissions: defaultUserPermissions
}
}
else {
if (permissionSettings.permissions.TOKEN.NON_OWNED == undefined) permissionSettings.permissions.TOKEN.NON_OWNED = [false,false,true,true];
if (permissionSettings.permissions.TOKEN.OBSERVER == undefined) permissionSettings.permissions.TOKEN.OBSERVER = [false,true,true,true];
}
game.settings.set(MODULE.moduleName,'userPermission',permissionSettings);
}
export class helpMenu extends FormApplication {

View File

@@ -7,7 +7,7 @@ export class TokenControl{
this.wildcardOffset = 0;
}
async update(tokenId){
async update(tokenId=null){
if (this.active == false) return;
for (let i=0; i<32; i++){
const data = streamDeck.buttonContext[i];
@@ -21,14 +21,35 @@ export class TokenControl{
const icon = settings.displayIcon ? settings.displayIcon : false;
const background = settings.background ? settings.background : "#000000";
let stats = settings.stats ? settings.stats : 'none';
const selection = settings.selection ? settings.selection : 'selected';
const tokenIdentifier = settings.tokenName ? settings.tokenName : '';
let validToken = false;
let token;
if (selection == 'selected') token = canvas.tokens.children[0].children.find(p => p.id == tokenId);
else if (selection != 'selected' && tokenIdentifier == '') {}
else if (selection == 'tokenName') token = canvas.tokens.children[0].children.find(p => p.name == tokenIdentifier);
else if (selection == 'actorName') token = canvas.tokens.children[0].children.find(p => p.actor.name == tokenIdentifier);
else if (selection == 'tokenId') token = canvas.tokens.children[0].children.find(p => p.id == tokenIdentifier);
else if (selection == 'actorId') token = canvas.tokens.children[0].children.find(p => p.actor.id == tokenIdentifier);
if (token != undefined) validToken = true;
let tokenName = "";
let txt = "";
let iconSrc = "";
let overlay = false;
let statsOld;
if (tokenId != undefined) {
const token = canvas.tokens.children[0].children.find(p => p.id == tokenId);
if (validToken) {
if (token.owner == false && token.observer == true && MODULE.getPermission('TOKEN','OBSERVER') == false ) {
streamDeck.noPermission(context);
return;
}
if (token.owner == false && token.observer == false && MODULE.getPermission('TOKEN','NON_OWNED') == false ) {
streamDeck.noPermission(context);
return;
}
tokenName = token.data.name;
if (name) txt += tokenName;
if (name && stats != 'none') txt += "\n";
@@ -49,7 +70,7 @@ export class TokenControl{
stats = 'none';
}
iconSrc = token.data.img;
if (icon) iconSrc = token.data.img;
if (stats == 'custom'){
const custom = settings.custom ? settings.custom : '';
@@ -432,20 +453,39 @@ export class TokenControl{
}
async keyPress(settings){
if (MODULE.selectedTokenId == undefined) return;
const tokenId = MODULE.selectedTokenId;
const token = canvas.tokens.children[0].children.find(p => p.id == tokenId);
const selection = settings.selection ? settings.selection : 'selected';
const tokenIdentifier = settings.tokenName ? settings.tokenName : '';
let token;
if (selection == 'selected') token = canvas.tokens.children[0].children.find(p => p.id == tokenId);
else if (selection != 'selected' && tokenIdentifier == '') {}
else if (selection == 'tokenName') token = canvas.tokens.children[0].children.find(p => p.name == tokenIdentifier);
else if (selection == 'actorName') token = canvas.tokens.children[0].children.find(p => p.actor.name == tokenIdentifier);
else if (selection == 'tokenId') token = canvas.tokens.children[0].children.find(p => p.id == tokenIdentifier);
else if (selection == 'actorId') token = canvas.tokens.children[0].children.find(p => p.actor.id == tokenIdentifier);
if (token == undefined) return;
if (token.owner == false && token.observer == true && MODULE.getPermission('TOKEN','OBSERVER') == false ) return;
if (token.owner == false && token.observer == false && MODULE.getPermission('TOKEN','NON_OWNED') == false ) return;
const onClick = settings.onClick ? settings.onClick : 'doNothing';
if (onClick == 'doNothing') //Do nothing
return;
else if (onClick == 'select'){ //select token
token.control();
}
else if (onClick == 'center'){ //center on token
let location = token.getCenter(token.x,token.y);
canvas.animatePan(location);
}
else if (onClick == 'centerSelect'){ //center on token and select
const location = token.getCenter(token.x,token.y);
canvas.animatePan(location);
token.control();
}
else if (onClick == 'charSheet'){ //Open character sheet
const element = document.getElementById(token.actor.sheet.id);
if (element == null) token.actor.sheet.render(true);