v0.9.0
This commit is contained in:
198
src/misc.js
198
src/misc.js
@@ -5,6 +5,8 @@ export class playlistConfigForm extends FormApplication {
|
||||
constructor(data, options) {
|
||||
super(data, options);
|
||||
this.data = data;
|
||||
this.playlistNr;
|
||||
this.updatePlaylistNr = false;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -24,26 +26,31 @@ export class playlistConfigForm extends FormApplication {
|
||||
* Provide data to the template
|
||||
*/
|
||||
getData() {
|
||||
const selectedPlaylists = game.settings.get(MODULE.moduleName,'selectedPlaylists');
|
||||
let playlistData = {};
|
||||
|
||||
for (let i=0; i<9; i++){
|
||||
let playlist;
|
||||
playlist = MODULE.getFromJSONArray(selectedPlaylists,i);
|
||||
|
||||
let selectedPlaylists = game.settings.get(MODULE.moduleName,'selectedPlaylists');
|
||||
if (selectedPlaylists == undefined) selectedPlaylists = [];
|
||||
let selectedPlaylistMethod = game.settings.get(MODULE.moduleName, 'selectedPlaylistMethod');
|
||||
if (selectedPlaylistMethod == undefined) selectedPlaylistMethod = [];
|
||||
let playlistData = [];
|
||||
let numberOfPlaylists = game.settings.get(MODULE.moduleName,'numberOfPlaylists');
|
||||
if (this.updatePlaylistNr) numberOfPlaylists = this.playlistNr;
|
||||
this.updatePlaylistNr = false;
|
||||
for (let i=0; i<numberOfPlaylists; i++){
|
||||
if (selectedPlaylists[i] == undefined) selectedPlaylists[i] = 'none';
|
||||
if (selectedPlaylistMethod[i] == undefined) selectedPlaylistMethod[i] = 0;
|
||||
let dataThis = {
|
||||
iteration: i+1,
|
||||
playlist: selectedPlaylists[i],
|
||||
playlistMethod: selectedPlaylistMethod[i],
|
||||
playlists: game.playlists.entities
|
||||
}
|
||||
MODULE.setToJSONArray(playlistData,i,dataThis);
|
||||
playlistData.push(dataThis);
|
||||
}
|
||||
|
||||
if (!this.data && selectedPlaylists) {
|
||||
this.data = selectedPlaylists;
|
||||
}
|
||||
return {
|
||||
playlists: game.playlists.entities,
|
||||
numberOfPlaylists: numberOfPlaylists,
|
||||
playlistData: playlistData,
|
||||
playMethod: game.settings.get(MODULE.moduleName,'playlistMethod')
|
||||
}
|
||||
@@ -57,14 +64,19 @@ export class playlistConfigForm extends FormApplication {
|
||||
async _updateObject(event, formData) {
|
||||
await game.settings.set(MODULE.moduleName,'selectedPlaylists', formData["selectedPlaylist"]);
|
||||
await game.settings.set(MODULE.moduleName,'playlistMethod',formData["playMethod"]);
|
||||
|
||||
await game.settings.set(MODULE.moduleName,'numberOfPlaylists',formData["plNum"]);
|
||||
await game.settings.set(MODULE.moduleName,'selectedPlaylistMethod',formData["playlistMethod"]);
|
||||
|
||||
}
|
||||
|
||||
activateListeners(html) {
|
||||
super.activateListeners(html);
|
||||
|
||||
|
||||
const numberOfPlaylists = html.find("input[name='plNum']");
|
||||
numberOfPlaylists.on("change", event => {
|
||||
this.playlistNr = event.target.value;
|
||||
this.updatePlaylistNr = true;
|
||||
this.render();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -80,21 +92,21 @@ export class macroConfigForm extends FormApplication {
|
||||
* Default Options for this FormApplication
|
||||
*/
|
||||
static get defaultOptions() {
|
||||
/*
|
||||
let streamDeckModel = game.settings.get(MODULE.moduleName,'streamDeckModel');
|
||||
let width;
|
||||
if (streamDeckModel == 0)
|
||||
width = 500;
|
||||
width = 550;
|
||||
else if (streamDeckModel == 1)
|
||||
width= 800;
|
||||
width= 885;
|
||||
else
|
||||
width = 1400;
|
||||
|
||||
*/
|
||||
return mergeObject(super.defaultOptions, {
|
||||
id: "macro-config",
|
||||
title: "Material Deck: "+game.i18n.localize("MaterialDeck.Sett.MacroConfig"),
|
||||
template: "./modules/MaterialDeck/templates/macroConfig.html",
|
||||
classes: ["sheet"],
|
||||
width: width
|
||||
classes: ["sheet"]
|
||||
});
|
||||
}
|
||||
|
||||
@@ -108,7 +120,7 @@ export class macroConfigForm extends FormApplication {
|
||||
if (selectedMacros == undefined) selectedMacros = [];
|
||||
if (color == undefined) color = [];
|
||||
if (args == undefined) args = [];
|
||||
let macroData = {};
|
||||
let macroData = [];
|
||||
let furnaceEnabled = false;
|
||||
let furnace = game.modules.get("furnace");
|
||||
if (furnace != undefined && furnace.active) furnaceEnabled = true;
|
||||
@@ -132,7 +144,7 @@ export class macroConfigForm extends FormApplication {
|
||||
|
||||
let iteration = 0;
|
||||
for (let j=0; j<jMax; j++){
|
||||
let macroThis = {};
|
||||
let macroThis = [];
|
||||
|
||||
for (let i=0; i<iMax; i++){
|
||||
let colorThis = color[iteration];
|
||||
@@ -156,13 +168,13 @@ export class macroConfigForm extends FormApplication {
|
||||
args: args[iteration],
|
||||
furnace: furnaceEnabled
|
||||
}
|
||||
MODULE.setToJSONArray(macroThis,i,dataThis);
|
||||
macroThis.push(dataThis);
|
||||
iteration++;
|
||||
}
|
||||
let data = {
|
||||
dataThis: macroThis,
|
||||
};
|
||||
MODULE.setToJSONArray(macroData,j,data);
|
||||
macroData.push(data);
|
||||
}
|
||||
|
||||
return {
|
||||
@@ -187,7 +199,8 @@ export class macroConfigForm extends FormApplication {
|
||||
let furnace = game.modules.get("furnace");
|
||||
if (furnace != undefined && furnace.active)
|
||||
await game.settings.set(MODULE.moduleName,'macroArgs', formData["args"]);
|
||||
macroControl.updateAll();
|
||||
if (MODULE.enableModule)
|
||||
macroControl.updateAll();
|
||||
}
|
||||
|
||||
activateListeners(html) {
|
||||
@@ -202,7 +215,7 @@ export class soundboardConfigForm extends FormApplication {
|
||||
super(data, options);
|
||||
this.data = data;
|
||||
//this.soundData = {};
|
||||
this.playlist;
|
||||
this.playlists = [];
|
||||
this.updatePlaylist = false;
|
||||
}
|
||||
|
||||
@@ -210,21 +223,21 @@ export class soundboardConfigForm extends FormApplication {
|
||||
* Default Options for this FormApplication
|
||||
*/
|
||||
static get defaultOptions() {
|
||||
/*
|
||||
let streamDeckModel = game.settings.get(MODULE.moduleName,'streamDeckModel');
|
||||
let width;
|
||||
if (streamDeckModel == 0)
|
||||
width = 500;
|
||||
width = 550;
|
||||
else if (streamDeckModel == 1)
|
||||
width= 800;
|
||||
width= 885;
|
||||
else
|
||||
width = 1400;
|
||||
|
||||
*/
|
||||
return mergeObject(super.defaultOptions, {
|
||||
id: "soundboard-config",
|
||||
title: "Material Deck: "+game.i18n.localize("MaterialDeck.Sett.SoundboardConfig"),
|
||||
template: "./modules/MaterialDeck/templates/soundboardConfig.html",
|
||||
classes: ["sheet"],
|
||||
width: width,
|
||||
height: 720
|
||||
});
|
||||
}
|
||||
@@ -237,17 +250,7 @@ export class soundboardConfigForm extends FormApplication {
|
||||
/**
|
||||
* Provide data to the template
|
||||
*/
|
||||
getData() {
|
||||
let playlistId = game.settings.get(MODULE.moduleName,'soundboardSettings').playlist;
|
||||
if (this.updatePlaylist) playlistId = this.playlist;
|
||||
this.updatePlaylist = false;
|
||||
let playlist = 'none';
|
||||
let sounds = [];
|
||||
if (playlistId != undefined){
|
||||
playlist = game.playlists.entities.find(p => p._id == playlistId);
|
||||
if (playlist != undefined) sounds = playlist.sounds;
|
||||
else playlist = 'none';
|
||||
}
|
||||
getData() {
|
||||
let selectedSounds = game.settings.get(MODULE.moduleName,'soundboardSettings').sounds;
|
||||
let colorOn = game.settings.get(MODULE.moduleName,'soundboardSettings').colorOn;
|
||||
let colorOff = game.settings.get(MODULE.moduleName,'soundboardSettings').colorOff;
|
||||
@@ -255,6 +258,15 @@ export class soundboardConfigForm extends FormApplication {
|
||||
let volume = game.settings.get(MODULE.moduleName,'soundboardSettings').volume;
|
||||
let img = game.settings.get(MODULE.moduleName,'soundboardSettings').img;
|
||||
let name = game.settings.get(MODULE.moduleName,'soundboardSettings').name;
|
||||
let selectedPlaylists = game.settings.get(MODULE.moduleName,'soundboardSettings').selectedPlaylists;
|
||||
let src = game.settings.get(MODULE.moduleName,'soundboardSettings').src;
|
||||
|
||||
let playlists = [];
|
||||
playlists.push({id:"none",name:game.i18n.localize("MaterialDeck.None")});
|
||||
playlists.push({id:"FP",name:game.i18n.localize("MaterialDeck.FilePicker")})
|
||||
for (let i=0; i<game.playlists.entities.length; i++){
|
||||
playlists.push({id:game.playlists.entities[i]._id,name:game.playlists.entities[i].name});
|
||||
}
|
||||
|
||||
if (selectedSounds == undefined) selectedSounds = [];
|
||||
if (colorOn == undefined) colorOn = [];
|
||||
@@ -262,7 +274,9 @@ export class soundboardConfigForm extends FormApplication {
|
||||
if (mode == undefined) mode = [];
|
||||
if (img == undefined) img = [];
|
||||
if (name == undefined) name = [];
|
||||
let soundData = {};
|
||||
if (selectedPlaylists == undefined) selectedPlaylists = [];
|
||||
if (src == undefined) src = [];
|
||||
let soundData = [];
|
||||
|
||||
let streamDeckModel = game.settings.get(MODULE.moduleName,'streamDeckModel');
|
||||
let iMax,jMax;
|
||||
@@ -279,40 +293,58 @@ export class soundboardConfigForm extends FormApplication {
|
||||
iMax = 8;
|
||||
}
|
||||
|
||||
if (this.updatePlaylist) selectedPlaylists = this.playlists;
|
||||
else this.playlists = selectedPlaylists;
|
||||
this.updatePlaylist = false;
|
||||
|
||||
let iteration = 0;
|
||||
|
||||
for (let j=0; j<jMax; j++){
|
||||
let soundsThis = {};
|
||||
let soundsThis = [];
|
||||
for (let i=0; i<iMax; i++){
|
||||
let selectedPlaylist;
|
||||
let sounds = [];
|
||||
if (volume == undefined) volume = 50;
|
||||
|
||||
|
||||
if (selectedPlaylists[iteration]==undefined) selectedPlaylist = 'none';
|
||||
else if (selectedPlaylists[iteration] == 'none') selectedPlaylist = 'none';
|
||||
else if (selectedPlaylists[iteration] == 'FP') selectedPlaylist = 'FP';
|
||||
else {
|
||||
const pl = game.playlists.entities.find(p => p._id == selectedPlaylists[iteration]);
|
||||
selectedPlaylist = pl._id;
|
||||
sounds = pl.sounds;
|
||||
}
|
||||
let styleSS = "";
|
||||
let styleFP ="display:none";
|
||||
if (selectedPlaylist == 'FP') {
|
||||
styleSS = 'display:none';
|
||||
styleFP = ''
|
||||
}
|
||||
let dataThis = {
|
||||
iteration: iteration+1,
|
||||
playlists: playlists,
|
||||
selectedPlaylist: selectedPlaylist,
|
||||
sound: selectedSounds[iteration],
|
||||
sounds: sounds,
|
||||
srcPath: src[iteration],
|
||||
colorOn: colorOn[iteration],
|
||||
colorOff: colorOff[iteration],
|
||||
mode: mode[iteration],
|
||||
volume: volume[iteration],
|
||||
imgPath: img[iteration],
|
||||
name: name[iteration]
|
||||
name: name[iteration],
|
||||
styleSS: styleSS,
|
||||
styleFP: styleFP
|
||||
}
|
||||
MODULE.setToJSONArray(soundsThis,i,dataThis);
|
||||
soundsThis.push(dataThis);
|
||||
iteration++;
|
||||
}
|
||||
let data = {
|
||||
dataThis: soundsThis,
|
||||
};
|
||||
MODULE.setToJSONArray(soundData,j,data);
|
||||
|
||||
soundData.push(data);
|
||||
}
|
||||
return {
|
||||
playlists: game.playlists.entities,
|
||||
playlist: playlistId,
|
||||
sounds: sounds,
|
||||
selectedSound81: selectedSounds.a,
|
||||
soundData: soundData,
|
||||
soundData: soundData
|
||||
}
|
||||
}
|
||||
|
||||
@@ -324,86 +356,42 @@ export class soundboardConfigForm extends FormApplication {
|
||||
async _updateObject(event, formData) {
|
||||
let length = formData["sounds"].length;
|
||||
let img = [];
|
||||
let soundSrc = []
|
||||
for (let i=0; i<length; i++){
|
||||
let name = "img"+(i+1);
|
||||
let src = formData[name];
|
||||
img[i] = src;
|
||||
|
||||
name = "src"+(i+1);
|
||||
src = formData[name];
|
||||
soundSrc[i] = src;
|
||||
}
|
||||
|
||||
await game.settings.set(MODULE.moduleName,'soundboardSettings',{
|
||||
playlist: formData["playlist"],
|
||||
selectedPlaylists: formData["playlist"],
|
||||
sounds: formData["sounds"],
|
||||
colorOn: formData["colorOn"],
|
||||
colorOff: formData["colorOff"],
|
||||
mode: formData["mode"],
|
||||
img: img,
|
||||
volume: formData["volume"],
|
||||
name: formData["name"]
|
||||
name: formData["name"],
|
||||
src: soundSrc
|
||||
});
|
||||
//MODULE.launchpad.audioSoundboardUpdate();
|
||||
}
|
||||
|
||||
async activateListeners(html) {
|
||||
super.activateListeners(html);
|
||||
const colorPickerOn = html.find("button[name='colorPickerOn']");
|
||||
const colorPickerOff = html.find("button[name='colorPickerOff']");
|
||||
const playlistSelect = html.find("select[name='playlist']");
|
||||
const volumeSlider = html.find("input[name='volume']");
|
||||
const soundSelect = html.find("select[name='sounds']");
|
||||
|
||||
/*
|
||||
colorPickerOn.on('click',(event) => {
|
||||
let target = event.currentTarget.value;
|
||||
let color = document.getElementById("colorOn"+target).value;
|
||||
if ((color < 0 && color > 127) || color == "") color = 0;
|
||||
MODULE.launchpad.colorPicker(target,1,color);
|
||||
|
||||
});
|
||||
colorPickerOff.on('click',(event) => {
|
||||
let target = event.currentTarget.value;
|
||||
let color = document.getElementById("colorOff"+target).value;
|
||||
if ((color < 0 && color > 127) || color == "") color = 0;
|
||||
MODULE.launchpad.colorPicker(target,0,color);
|
||||
|
||||
});
|
||||
if (playlistSelect.length > 0) {
|
||||
playlistSelect.on("change", event => {
|
||||
this.playlist = event.target.value;
|
||||
let id = event.target.id.replace('playlists','');
|
||||
this.playlists[id-1] = event.target.value;
|
||||
this.updatePlaylist = true;
|
||||
this.render();
|
||||
});
|
||||
}
|
||||
volumeSlider.on('change', event => {
|
||||
let id = event.target.id.replace('volume','');
|
||||
let column = id%10-1;
|
||||
let row = 8-Math.floor(id/10);
|
||||
id = row*8+column;
|
||||
let settings = game.settings.get(MODULE.moduleName,'soundboardSettings');
|
||||
settings.volume[id] = event.target.value;
|
||||
game.settings.set(MODULE.moduleName,'soundboardSettings',settings);
|
||||
if (MODULE.launchpad.activeSounds[id] != false){
|
||||
let volume = AudioHelper.inputToVolume(event.target.value/100) * game.settings.get("core", "globalInterfaceVolume");
|
||||
MODULE.launchpad.activeSounds[id].volume(volume);
|
||||
}
|
||||
});
|
||||
if (soundSelect.length > 0) {
|
||||
soundSelect.on("change",event => {
|
||||
let id = event.target.id.replace('soundSelect','');
|
||||
let column = id%10-1;
|
||||
let row = 8-Math.floor(id/10);
|
||||
id = row*8+column;
|
||||
let settings = game.settings.get(MODULE.moduleName,'soundboardSettings');
|
||||
settings.sounds[id] = event.target.value;
|
||||
game.settings.set(MODULE.moduleName,'soundboardSettings',settings);
|
||||
if (MODULE.launchpad.activeSounds[id] != false){
|
||||
let mode = settings.mode[id];
|
||||
let repeat = false;
|
||||
if (mode == 1) repeat = true;
|
||||
MODULE.launchpad.playSound(id,repeat,false);
|
||||
}
|
||||
});
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
}
|
||||
@@ -36,6 +36,15 @@ export class OtherControls{
|
||||
else if (mode == 4){ //roll tables
|
||||
this.updateRollTable(settings,context);
|
||||
}
|
||||
else if (mode == 5) { //open sidebar tab
|
||||
this.updateSidebar(settings,context);
|
||||
}
|
||||
else if (mode == 6) { //open compendium
|
||||
this.updateCompendium(settings,context);
|
||||
}
|
||||
else if (mode == 7) { //open journal
|
||||
this.updateJournal(settings,context);
|
||||
}
|
||||
}
|
||||
|
||||
keyPress(settings){
|
||||
@@ -57,6 +66,15 @@ export class OtherControls{
|
||||
else if (mode == 4) { //roll tables
|
||||
this.keyPressRollTable(settings);
|
||||
}
|
||||
else if (mode == 5) { //sidebar
|
||||
this.keyPressSidebar(settings);
|
||||
}
|
||||
else if (mode == 6) { //open compendium
|
||||
this.keyPressCompendium(settings);
|
||||
}
|
||||
else if (mode == 7) { //open journal
|
||||
this.keyPressJournal(settings);
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
@@ -528,4 +546,175 @@ export class OtherControls{
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
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){
|
||||
let name;
|
||||
if (nr == 0) name = game.i18n.localize("SIDEBAR.TabChat");
|
||||
else if (nr == 1) name = game.i18n.localize("SIDEBAR.TabCombat");
|
||||
else if (nr == 2) name = game.i18n.localize("SIDEBAR.TabScenes");
|
||||
else if (nr == 3) name = game.i18n.localize("SIDEBAR.TabActors");
|
||||
else if (nr == 4) name = game.i18n.localize("SIDEBAR.TabItems");
|
||||
else if (nr == 5) name = game.i18n.localize("SIDEBAR.TabJournal");
|
||||
else if (nr == 6) name = game.i18n.localize("SIDEBAR.TabTables");
|
||||
else if (nr == 7) name = game.i18n.localize("SIDEBAR.TabPlaylists");
|
||||
else if (nr == 8) name = game.i18n.localize("SIDEBAR.TabCompendium");
|
||||
else if (nr == 9) name = game.i18n.localize("SIDEBAR.TabSettings");
|
||||
else if (nr == 10) name = game.i18n.localize("SIDEBAR.CollapseToggle");
|
||||
return name;
|
||||
}
|
||||
|
||||
getSidebarIcon(nr){
|
||||
let icon;
|
||||
if (nr == 0) icon = window.CONFIG.ChatMessage.sidebarIcon;
|
||||
else if (nr == 1) icon = window.CONFIG.Combat.sidebarIcon;
|
||||
else if (nr == 2) icon = window.CONFIG.Scene.sidebarIcon;
|
||||
else if (nr == 3) icon = window.CONFIG.Actor.sidebarIcon;
|
||||
else if (nr == 4) icon = window.CONFIG.Item.sidebarIcon;
|
||||
else if (nr == 5) icon = window.CONFIG.JournalEntry.sidebarIcon;
|
||||
else if (nr == 6) icon = window.CONFIG.RollTable.sidebarIcon;
|
||||
else if (nr == 7) icon = window.CONFIG.Playlist.sidebarIcon;
|
||||
else if (nr == 8) icon = "fas fa-atlas";
|
||||
else if (nr == 9) icon = "fas fa-cogs";
|
||||
else if (nr == 10) icon = "fas fa-caret-right";
|
||||
return icon;
|
||||
}
|
||||
|
||||
updateSidebar(settings,context){
|
||||
let sidebarTab = settings.sidebarTab;
|
||||
if (sidebarTab == undefined) sidebarTab = 0;
|
||||
|
||||
let activeTab = ui.sidebar.activeTab;
|
||||
let collapsed = ui.sidebar._collapsed;
|
||||
|
||||
let name = "";
|
||||
let icon = "";
|
||||
|
||||
let background = settings.background;
|
||||
if(background == undefined) background = '#000000';
|
||||
|
||||
let ringColor = "#000000";
|
||||
|
||||
let ringOffColor = settings.offRing;
|
||||
if (ringOffColor == undefined) ringOffColor = '#000000';
|
||||
|
||||
let ringOnColor = settings.onRing;
|
||||
if (ringOnColor == undefined) ringOnColor = '#00FF00';
|
||||
|
||||
if (settings.displaySidebarName) name = this.getSidebarName(sidebarTab);
|
||||
if (settings.displaySidebarIcon) icon = this.getSidebarIcon(sidebarTab);
|
||||
|
||||
if ((sidebarTab == 10 && collapsed))
|
||||
ringColor = ringOnColor;
|
||||
else
|
||||
ringColor = ringOffColor;
|
||||
streamDeck.setTitle(name,context);
|
||||
streamDeck.setIcon(1,context,icon,background,2,ringColor);
|
||||
}
|
||||
|
||||
keyPressSidebar(settings){
|
||||
let sidebarTab = settings.sidebarTab;
|
||||
if (sidebarTab == undefined) sidebarTab = 0;
|
||||
let collapsed = ui.sidebar._collapsed;
|
||||
|
||||
if (sidebarTab < 10) ui.sidebar.activateTab(this.getSidebarId(sidebarTab));
|
||||
else if (collapsed) ui.sidebar.expand();
|
||||
else if (collapsed == false) ui.sidebar.collapse();
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
updateCompendium(settings,context){
|
||||
let background = settings.background;
|
||||
if(background == undefined) background = '#000000';
|
||||
|
||||
let name = settings.compendiumName;
|
||||
if (name == undefined) return;
|
||||
|
||||
const compendium = game.packs.entries.find(p=>p.metadata.label == name);
|
||||
if (compendium == undefined) return;
|
||||
|
||||
let ringColor = "#000000";
|
||||
|
||||
let ringOffColor = settings.offRing;
|
||||
if (ringOffColor == undefined) ringOffColor = '#000000';
|
||||
|
||||
let ringOnColor = settings.onRing;
|
||||
if (ringOnColor == undefined) ringOnColor = '#00FF00';
|
||||
|
||||
|
||||
if (compendium.rendered) ringColor = ringOnColor;
|
||||
else ringColor = ringOffColor;
|
||||
|
||||
if (settings.displayCompendiumName) streamDeck.setTitle(name,context);
|
||||
streamDeck.setIcon(0,context,"",background,2,ringColor);
|
||||
}
|
||||
|
||||
keyPressCompendium(settings){
|
||||
let name = settings.compendiumName;
|
||||
if (name == undefined) return;
|
||||
|
||||
const compendium = game.packs.entries.find(p=>p.metadata.label == name);
|
||||
if (compendium == undefined) return;
|
||||
if (compendium.rendered) compendium.close();
|
||||
else compendium.render(true);
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
//Journals
|
||||
//game.journal.entries[0].render(true)
|
||||
|
||||
updateJournal(settings,context){
|
||||
let background = settings.background;
|
||||
if(background == undefined) background = '#000000';
|
||||
|
||||
let name = settings.compendiumName;
|
||||
if (name == undefined) return;
|
||||
const journal = game.journal.entries.find(p=>p.name == name);
|
||||
if (journal == undefined) return;
|
||||
|
||||
let ringColor = "#000000";
|
||||
|
||||
let ringOffColor = settings.offRing;
|
||||
if (ringOffColor == undefined) ringOffColor = '#000000';
|
||||
|
||||
let ringOnColor = settings.onRing;
|
||||
if (ringOnColor == undefined) ringOnColor = '#00FF00';
|
||||
|
||||
|
||||
|
||||
if (journal.sheet.rendered) ringColor = ringOnColor;
|
||||
else ringColor = ringOffColor;
|
||||
|
||||
if (settings.displayCompendiumName) streamDeck.setTitle(name,context);
|
||||
streamDeck.setIcon(0,context,"",background,2,ringColor);
|
||||
}
|
||||
|
||||
keyPressJournal(settings){
|
||||
let name = settings.compendiumName;
|
||||
if (name == undefined) return;
|
||||
|
||||
const journal = game.journal.entries.find(p=>p.name == name);
|
||||
if (journal == undefined) return;
|
||||
//if (journal.sheet.rendered) journal.close();
|
||||
journal.render(true);
|
||||
}
|
||||
}
|
||||
@@ -127,10 +127,25 @@ export class PlaylistControl{
|
||||
streamDeck.setTitle(name,context);
|
||||
}
|
||||
|
||||
stopAll(){
|
||||
let playing = game.playlists.playing;
|
||||
for (let i=0; i<playing.length; i++){
|
||||
playing[i].stopAll();
|
||||
stopAll(force=false){
|
||||
if (force){
|
||||
let playing = game.playlists.playing;
|
||||
for (let i=0; i<playing.length; i++){
|
||||
playing[i].stopAll();
|
||||
}
|
||||
}
|
||||
else {
|
||||
let playing = game.playlists.playing;
|
||||
console.log(playing);
|
||||
let selectedPlaylists = game.settings.get(MODULE.moduleName,'selectedPlaylists');
|
||||
console.log(selectedPlaylists);
|
||||
for (let i=0; i<playing.length; i++){
|
||||
const playlistNr = selectedPlaylists.findIndex(p => p == playing[i]._id);
|
||||
const mode = game.settings.get(MODULE.moduleName,'selectedPlaylistMethod')[playlistNr];
|
||||
if (mode == 0) playing[i].stopAll();
|
||||
console.log(playlistNr,mode);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -156,11 +171,11 @@ export class PlaylistControl{
|
||||
let playlist = this.getPlaylist(playlistNr);
|
||||
if (playlist != undefined){
|
||||
if (settings.playlistMode == 0)
|
||||
this.playPlaylist(playlist);
|
||||
this.playPlaylist(playlist,playlistNr);
|
||||
else {
|
||||
let track = playlist.data.sounds[trackNr];
|
||||
if (track != undefined){
|
||||
this.playTrack(track,playlist);
|
||||
this.playTrack(track,playlist,playlistNr);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -178,29 +193,37 @@ export class PlaylistControl{
|
||||
}
|
||||
}
|
||||
else {
|
||||
this.stopAll();
|
||||
this.stopAll(true);
|
||||
}
|
||||
}
|
||||
|
||||
async playPlaylist(playlist){
|
||||
async playPlaylist(playlist,playlistNr){
|
||||
if (playlist.playing) {
|
||||
playlist.stopAll();
|
||||
return;
|
||||
}
|
||||
let mode = game.settings.get(MODULE.moduleName,'playlistMethod');
|
||||
if (mode == 2) await this.stopAll();
|
||||
let mode = game.settings.get(MODULE.moduleName,'selectedPlaylistMethod')[playlistNr];
|
||||
if (mode == 0) {
|
||||
mode = game.settings.get(MODULE.moduleName,'playlistMethod');
|
||||
if (mode == 2) await this.stopAll();
|
||||
}
|
||||
playlist.playAll();
|
||||
}
|
||||
|
||||
async playTrack(track,playlist){
|
||||
async playTrack(track,playlist,playlistNr){
|
||||
let play;
|
||||
if (track.playing)
|
||||
play = false;
|
||||
else {
|
||||
play = true;
|
||||
let mode = game.settings.get(MODULE.moduleName,'playlistMethod');
|
||||
if (mode == 1) await playlist.stopAll();
|
||||
else if (mode == 2) await this.stopAll();
|
||||
let mode = game.settings.get(MODULE.moduleName,'selectedPlaylistMethod')[playlistNr];
|
||||
console.log('mode',mode);
|
||||
if (mode == 0) {
|
||||
mode = game.settings.get(MODULE.moduleName,'playlistMethod');
|
||||
if (mode == 1) await playlist.stopAll();
|
||||
else if (mode == 2) await this.stopAll();
|
||||
}
|
||||
else if (mode == 2) await playlist.stopAll();
|
||||
}
|
||||
await playlist.updateEmbeddedEntity("PlaylistSound", {_id: track._id, playing: play});
|
||||
playlist.update({playing: play});
|
||||
|
||||
@@ -9,9 +9,9 @@ export const registerSettings = function() {
|
||||
//Enabled the module
|
||||
game.settings.register(MODULE.moduleName,'Enable', {
|
||||
name: "MaterialDeck.Sett.Enable",
|
||||
scope: "world",
|
||||
scope: "global",
|
||||
config: true,
|
||||
default: true,
|
||||
default: false,
|
||||
type: Boolean,
|
||||
onChange: x => window.location.reload()
|
||||
});
|
||||
@@ -26,6 +26,19 @@ export const registerSettings = function() {
|
||||
choices:["MaterialDeck.Sett.Model_Mini","MaterialDeck.Sett.Model_Normal","MaterialDeck.Sett.Model_XL"],
|
||||
});
|
||||
|
||||
/**
|
||||
* Sets the ip address of the server
|
||||
*/
|
||||
game.settings.register(MODULE.moduleName,'address', {
|
||||
name: "MaterialDeck.Sett.ServerAddr",
|
||||
hint: "MaterialDeck.Sett.ServerAddrHint",
|
||||
scope: "world",
|
||||
config: true,
|
||||
default: "localhost:3001",
|
||||
type: String,
|
||||
onChange: x => window.location.reload()
|
||||
});
|
||||
|
||||
/**
|
||||
* Playlist soundboard
|
||||
*/
|
||||
@@ -49,7 +62,23 @@ export const registerSettings = function() {
|
||||
name: "selectedPlaylists",
|
||||
scope: "world",
|
||||
type: Object,
|
||||
default: {a: "None",b: "None",c: "none",d: "none",e: "none",f: "none",g: "none",h: "none",i: "none"},
|
||||
default: {},
|
||||
config: false
|
||||
});
|
||||
|
||||
game.settings.register(MODULE.moduleName, 'selectedPlaylistMethod', {
|
||||
name: "selectedPlaylistMethod",
|
||||
scope: "world",
|
||||
type: Object,
|
||||
default: {},
|
||||
config: false
|
||||
});
|
||||
|
||||
game.settings.register(MODULE.moduleName, 'numberOfPlaylists', {
|
||||
name: "numberOfPlaylists",
|
||||
scope: "world",
|
||||
type: Number,
|
||||
default: 9,
|
||||
config: false
|
||||
});
|
||||
|
||||
|
||||
@@ -117,30 +117,46 @@ export class SoundboardControl{
|
||||
this.playSound(soundNr,false,false);
|
||||
}
|
||||
|
||||
playSound(soundNr,repeat,play){
|
||||
let trackId = game.settings.get(MODULE.moduleName,'soundboardSettings').sounds[soundNr];
|
||||
async playSound(soundNr,repeat,play){
|
||||
const soundBoardSettings = game.settings.get(MODULE.moduleName,'soundboardSettings');
|
||||
const playlistId = soundBoardSettings.selectedPlaylists[soundNr];
|
||||
let src;
|
||||
if (playlistId == "" || playlistId == undefined) return;
|
||||
if (playlistId == 'none') return;
|
||||
else if (playlistId == 'FP') {
|
||||
src = soundBoardSettings.src[soundNr];
|
||||
const ret = await FilePicker.browse("data", src, {wildcard:true});
|
||||
const files = ret.files;
|
||||
if (files.length == 1) src = files;
|
||||
else {
|
||||
let value = Math.floor(Math.random() * Math.floor(files.length));
|
||||
src = files[value];
|
||||
}
|
||||
}
|
||||
else {
|
||||
const soundId = soundBoardSettings.sounds[soundNr];
|
||||
const sounds = game.playlists.entities.find(p => p._id == playlistId).data.sounds;
|
||||
if (sounds == undefined) return;
|
||||
const sound = sounds.find(p => p._id == soundId);
|
||||
if (sound == undefined) return;
|
||||
src = sound.path;
|
||||
}
|
||||
|
||||
let volume = game.settings.get(MODULE.moduleName,'soundboardSettings').volume[soundNr]/100;
|
||||
volume = AudioHelper.inputToVolume(volume);
|
||||
if (trackId == "" || trackId == undefined) return;
|
||||
|
||||
let payload = {
|
||||
"msgType": "playSound",
|
||||
"trackNr": soundNr,
|
||||
"src": src,
|
||||
"repeat": repeat,
|
||||
"play": play,
|
||||
"volume": volume
|
||||
};
|
||||
game.socket.emit(`module.MaterialDeck`, payload);
|
||||
|
||||
if (play){
|
||||
let trackId = game.settings.get(MODULE.moduleName,'soundboardSettings').sounds[soundNr];
|
||||
let playlistId = game.settings.get(MODULE.moduleName,'soundboardSettings').playlist;
|
||||
let sounds = game.playlists.entities.find(p => p._id == playlistId).data.sounds;
|
||||
let sound = sounds.find(p => p._id == trackId);
|
||||
if (sound == undefined){
|
||||
this.activeSounds[soundNr] = false;
|
||||
return;
|
||||
}
|
||||
volume *= game.settings.get("core", "globalInterfaceVolume");
|
||||
let src = sound.path;
|
||||
|
||||
let howl = new Howl({src, volume, loop: repeat, onend: (id)=>{
|
||||
if (repeat == false){
|
||||
@@ -160,5 +176,6 @@ export class SoundboardControl{
|
||||
this.activeSounds[soundNr] = false;
|
||||
}
|
||||
this.updateAll();
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user