Skip to content

Commit

Permalink
Merge pull request #85 from napolitanod/1.7.1
Browse files Browse the repository at this point in the history
1.7.1
  • Loading branch information
napolitanod committed May 30, 2023
2 parents 872fd28 + fdc75de commit ed4d974
Show file tree
Hide file tree
Showing 12 changed files with 221 additions and 121 deletions.
31 changes: 19 additions & 12 deletions languages/en.json
Expand Up @@ -573,24 +573,31 @@
"confirm": "Are you sure you want to delete this danger's",
"dimensions.label": "Dimensions",
"dimensions.description": "Width and height dimensions are measured in scene grids.\nIf the width or height = 0 then that dimension will default to the zone's dimension.\nFor depth, specify the difference in grid units between the top and bottom elevations.\nA depth of 0 will default to the zone's depth.",
"fluidCanvas": {
"canvas": {
"active.label": "Pan to Targeted Location",
"delay.label":"Delay Start",
"description": "Invoke canvas wide effects at the start of the danger effect using Kandashi's Fluid Canvas module.",
"description": "Invoke canvas-wide effects and panning.",
"duration.label":"Duration",
"effect.label": "Effect",
"intensity.label":"Intensity",
"iteration.label":"Number of Repeats",
"iteration.label":"Frequency",
"label":"Canvas",
"lock.label": "Lock View After Pan For",
"pan.label": "Pan",
"scale.label": "Scale",
"speed.label": "Speed",
"type.label":"Effect Type",
"types":{
"black":"Black",
"blur":"Blur",
"drug":"Drug",
"earthquake":"Earthquake",
"fade":"Fade",
"heartbeat":"Heart Beat",
"negative":"Negative",
"sepia":"Sepia",
"spin":"Spin"
"shake": "Canvas Shake",
"fluid-canvas-black":"Fluid Canvas: Black",
"fluid-canvas-blur":"Fluid Canvas: Blur",
"fluid-canvas-drug":"Fluid Canvas: Drug",
"fluid-canvas-earthquake":"Fluid Canvas: Earthquake",
"fluid-canvas-fade":"Fluid Canvas: Fade",
"fluid-canvas-heartbeat":"Fluid Canvas: Heart Beat",
"fluid-canvas-negative":"Fluid Canvas: Negative",
"fluid-canvas-sepia":"Fluid Canvas: Sepia",
"fluid-canvas-spin":"Fluid Canvas: Spin"
}
},
"foregroundEffect":{
Expand Down
4 changes: 2 additions & 2 deletions languages/fr.json
Expand Up @@ -201,12 +201,12 @@
},
"dimensions.label": "Dimensions",
"dimensions.notes": "Pour la profondeur, spécifiez la différence d'unités de grille entre les élévations du haut et du bas. Une profondeur de 0 correspondra par défaut à la profondeur de la zone.",
"fluidCanvas": {
"canvas": {
"delay.label":"Délai",
"duration.label":"Durée",
"intensity.label":"Intensité",
"iteration.label":"Itération",
"label":"Kandashi's Fluid Canvas",
"label":"Canvas",
"type.label":"Type",
"notes": "Invoque les effets Fluid Canvas au début de l'effet de danger."
},
Expand Down
4 changes: 2 additions & 2 deletions module.json
Expand Up @@ -34,8 +34,8 @@
"styles/danger-zone.css"
],
"title": "Danger Zone",
"version": "1.7.0",
"version": "1.7.1",
"url": "https://github.com/napolitanod/Danger-Zone",
"manifest": "https://raw.githubusercontent.com/napolitanod/Danger-Zone/master/module.json",
"download": "https://github.com/napolitanod/Danger-Zone/releases/download/1.7.0/module.zip"
"download": "https://github.com/napolitanod/Danger-Zone/releases/download/1.7.1/module.zip"
}
30 changes: 19 additions & 11 deletions scripts/apps/constants.js
Expand Up @@ -214,16 +214,21 @@ export const SCENEGLOBALILLUMINATION = {
"N": "DANGERZONE.type-form.scene.globalLight.options.N.label"
}

export const CANVASTYPES = {
"": "",
"shake": "DANGERZONE.type-form.canvas.types.shake"
}

export const FLUIDCANVASTYPES = {
"black": "DANGERZONE.type-form.fluidCanvas.types.black",
"blur": "DANGERZONE.type-form.fluidCanvas.types.blur",
"drug": "DANGERZONE.type-form.fluidCanvas.types.drug",
"earthquake": "DANGERZONE.type-form.fluidCanvas.types.earthquake",
"fade": "DANGERZONE.type-form.fluidCanvas.types.fade",
"heartbeat": "DANGERZONE.type-form.fluidCanvas.types.heartbeat",
"negative": "DANGERZONE.type-form.fluidCanvas.types.negative",
"sepia": "DANGERZONE.type-form.fluidCanvas.types.sepia",
"spin": "DANGERZONE.type-form.fluidCanvas.types.spin"
"black": "DANGERZONE.type-form.canvas.types.fluid-canvas-black",
"blur": "DANGERZONE.type-form.canvas.types.fluid-canvas-blur",
"drug": "DANGERZONE.type-form.canvas.types.fluid-canvas-drug",
"earthquake": "DANGERZONE.type-form.canvas.types.fluid-canvas-earthquake",
"fade": "DANGERZONE.type-form.canvas.types.fluid-canvas-fade",
"heartbeat": "DANGERZONE.type-form.canvas.types.fluid-canvas-heartbeat",
"negative": "DANGERZONE.type-form.canvas.types.fluid-canvas-negative",
"sepia": "DANGERZONE.type-form.canvas.types.fluid-canvas-sepia",
"spin": "DANGERZONE.type-form.canvas.types.fluid-canvas-spin"
}

export const SOURCETRIGGERS = {
Expand Down Expand Up @@ -465,10 +470,13 @@ export function setExecutableOptions(){
],
scope: "boundary"
},
'fluidCanvas': {
'canvas': {
title: "Canvas",
icon: "fas fa-wind",
modules: [{active: fluidCanvasOn, name: "kandashis-fluid-canvas", dependent: true}],
modules: [
{active: fluidCanvasOn, name: "kandashis-fluid-canvas", dependent: false},
{active: sequencerOn, name: "sequencer", dependent: true}
],
scope: "scene"
},
'damage': {
Expand Down
41 changes: 23 additions & 18 deletions scripts/apps/danger-form.js
@@ -1,7 +1,7 @@
import {dangerZone} from "../danger-zone.js";
import {dangerZoneType} from './zone-type.js';
import {activeEffectOn, daeOn, fluidCanvasOn, fxMasterOn, itemPileOn, midiQolOn, monksActiveTilesOn, perfectVisionOn, sequencerOn, socketLibOn, taggerOn, timesUpOn, tokenSaysOn, warpgateOn} from '../index.js';
import {actorOps, AMBIENTLIGHTCLEAROPS, animationTypes, COMBATINITIATIVE, DAMAGEONSAVE, damageTypes, DANGERZONELIGHTREPLACE, DANGERZONEREPLACE, DANGERZONESOUNDREPLACE, DANGERZONEWEATHERREPLACE, DOORSTATES, ITEMTARGET, TRIGGEROPERATION, DANGERZONEWALLREPLACE, determineMacroList, dirTypes, doorTypes, ELEVATIONMOVEMENT, FLUIDCANVASTYPES, getCompendiumOps, HORIZONTALMOVEMENT, MOVETYPES, SAVERESULT, saveTypes, SCENEFOREGROUNDELEVATIONMOVEMENT, SCENEGLOBALILLUMINATION, SENSETYPES, SOURCEDANGERLOCATION, SOURCETREATMENT, STRETCH, TILESBLOCK, TILEOCCLUSIONMODES, TIMESUPMACROREPEAT, TOKENDISPOSITION, TOKENSAYSTYPES, VERTICALMOVEMENT, WALLSBLOCK, weatherTypes, weatherParameters} from './constants.js';
import {actorOps, AMBIENTLIGHTCLEAROPS, animationTypes, CANVASTYPES, COMBATINITIATIVE, DAMAGEONSAVE, damageTypes, DANGERZONELIGHTREPLACE, DANGERZONEREPLACE, DANGERZONESOUNDREPLACE, DANGERZONEWEATHERREPLACE, DOORSTATES, ITEMTARGET, TRIGGEROPERATION, DANGERZONEWALLREPLACE, determineMacroList, dirTypes, doorTypes, ELEVATIONMOVEMENT, FLUIDCANVASTYPES, getCompendiumOps, HORIZONTALMOVEMENT, MOVETYPES, SAVERESULT, saveTypes, SCENEFOREGROUNDELEVATIONMOVEMENT, SCENEGLOBALILLUMINATION, SENSETYPES, SOURCEDANGERLOCATION, SOURCETREATMENT, STRETCH, TILESBLOCK, TILEOCCLUSIONMODES, TIMESUPMACROREPEAT, TOKENDISPOSITION, TOKENSAYSTYPES, VERTICALMOVEMENT, WALLSBLOCK, weatherTypes, weatherParameters} from './constants.js';
import {stringToObj} from './helpers.js';

export class DangerForm extends FormApplication {
Expand All @@ -13,7 +13,7 @@ export class DangerForm extends FormApplication {
this.effect,
this.backgroundEffect,
this.system,
this.fluidCanvas = {},
this.canvas = {},
this.foregroundEffect,
this.globalZone = {},
this.item = {},
Expand Down Expand Up @@ -114,8 +114,8 @@ export class DangerForm extends FormApplication {
case 'combat':
new DangerZoneDangerFormCombat(this, eventParent, this.combat).render(true);
break;
case 'fluid-canvas':
new DangerZoneDangerFormFluidCanvas(this, eventParent, this.fluidCanvas).render(true);
case 'canvas':
new DangerZoneDangerFormCanvas(this, eventParent, this.canvas).render(true);
break;
case 'foreground-effect':
new DangerZoneDangerFormForegroundEffect(this, eventParent, this.foregroundEffect).render(true);
Expand Down Expand Up @@ -184,8 +184,8 @@ export class DangerForm extends FormApplication {
case 'combat':
this.combat = Object.assign(this.combat, danger.options.combat)
break;
case 'fluid-canvas':
this.fluidCanvas = {};
case 'canvas':
this.canvas = Object.assign(this.canvas, danger.options.canvas);
break;
case 'foreground-effect':
this.foregroundEffect = Object.assign(this.foregroundEffect, danger.options.foregroundEffect);
Expand Down Expand Up @@ -254,9 +254,9 @@ export class DangerForm extends FormApplication {
this.audio = instance.options.audio;
this.backgroundEffect = instance.options.backgroundEffect;
this.combat = instance.options.combat;
this.fluidCanvas = instance.options.flags.fluidCanvas ? instance.options.flags.fluidCanvas : {};
this.canvas = instance.options.canvas;
this.foregroundEffect = instance.options.foregroundEffect;
this.globalZone = instance.options.globalZone ? instance.options.globalZone : {};
this.globalZone = instance.options.globalZone ?? {};
this.item = instance.options.item;
this.lastingEffect = instance.options.lastingEffect;
this.light = instance.options.ambientLight;
Expand All @@ -281,7 +281,7 @@ export class DangerForm extends FormApplication {
hasAudio: this.audio?.file ? true : false,
hasBackgroundEffect: this.backgroundEffect?.file ? true : false,
hasCombat: instance.hasCombat ? true : false,
hasFluidCanvas: this.fluidCanvas?.type ? true : false,
hasCanvas: (this.canvas.effect.type || this.canvas.pan.active) ? true : false,
hasForegroundEffect: this.foregroundEffect?.file ? true : false,
hasGlobalZone: Object.keys(this.globalZone).length ? true : false,
hasItem: this.item?.name ? true : false,
Expand All @@ -302,11 +302,13 @@ export class DangerForm extends FormApplication {
tokenSaysOnNot: !tokenSaysOn,
sequencerOnNot: !sequencerOn,
warpgateOnNot: !warpgateOn,
fluidCanvasOnNot: !fluidCanvasOn,
canvasOnNot: !fluidCanvasOn && !sequencerOn,
fxMasterOnNot: !fxMasterOn,
taggerOnNot: !taggerOn,
tokenResponseOnNot: Object.keys(saveTypes()).length ? false : true
}

dangerZone.log(false, 'Danger Form Rendered', this);
return dataToSend
}

Expand All @@ -316,6 +318,7 @@ export class DangerForm extends FormApplication {
expandedData.options.audio = this.audio;
expandedData.options.effect = this.effect;
expandedData.options.backgroundEffect = this.backgroundEffect;
expandedData.options.canvas = this.canvas;
expandedData.options.combat = this.combat;
expandedData.options.foregroundEffect = this.foregroundEffect;
expandedData.options.globalZone = this.globalZone;
Expand All @@ -330,7 +333,6 @@ export class DangerForm extends FormApplication {
expandedData.options.wall = this.wall;
//set integrations
expandedData.options['flags']={};
if(Object.keys(this.fluidCanvas).length) {expandedData.options.flags['fluidCanvas'] = this.fluidCanvas}
if(Object.keys(this.monksActiveTiles).length) {expandedData.options.flags['monks-active-tiles'] = this.monksActiveTiles}
if(Object.keys(this.tokenResponse).length) {expandedData.options.flags['tokenResponse'] = this.tokenResponse}
if(Object.keys(this.tokenSays).length) {expandedData.options.flags['tokenSays'] = this.tokenSays}
Expand Down Expand Up @@ -704,7 +706,7 @@ class DangerZoneDangerFormBackgroundEffect extends FormApplication {
}
}

class DangerZoneDangerFormFluidCanvas extends FormApplication {
class DangerZoneDangerFormCanvas extends FormApplication {
constructor(app, eventParent, data, ...args) {
super(...args);
this.data = data,
Expand All @@ -716,20 +718,23 @@ class DangerZoneDangerFormFluidCanvas extends FormApplication {
const defaults = super.defaultOptions;

return foundry.utils.mergeObject(defaults, {
title : game.i18n.localize("DANGERZONE.type-form.fluidCanvas.label"),
id : "danger-zone-danger-fluid-canvas",
title : game.i18n.localize("DANGERZONE.type-form.canvas.label"),
id : "danger-zone-danger-canvas",
classes: ["sheet","danger-part-form"],
template : dangerZone.TEMPLATES.DANGERZONEDANGERFLUIDCANVAS,
template : dangerZone.TEMPLATES.DANGERZONEDANGERCANVAS,
height : "auto",
width: 425,
closeOnSubmit: true
});
}

getData(options) {
const types = CANVASTYPES;
if(fluidCanvasOn) Object.assign(types, FLUIDCANVASTYPES)
return {
data: this.data,
fluidCanvasOps: FLUIDCANVASTYPES
canvasOps: CANVASTYPES,
hasSequencer: sequencerOn
}
}

Expand All @@ -739,8 +744,8 @@ class DangerZoneDangerFormFluidCanvas extends FormApplication {

async _updateObject(event, formData) {
const expandedData = foundry.utils.expandObject(formData);
this.parent.fluidCanvas = expandedData;
expandedData.type ? this.eventParent.addClass('active') : this.eventParent.removeClass('active');
this.parent.canvas = expandedData;
(expandedData.effect.type || expandedData.pan.active) ? this.eventParent.addClass('active') : this.eventParent.removeClass('active');
}
}

Expand Down
82 changes: 52 additions & 30 deletions scripts/apps/workflow.js
@@ -1,6 +1,6 @@
import {dangerZone, zone} from '../danger-zone.js';
import {point, boundary} from './dimensions.js';
import {dangerZoneSocket, monksActiveTilesOn, sequencerOn, socketLibOn, betterRoofsOn, fxMasterOn, levelsOn, perfectVisionOn, taggerOn, warpgateOn, wallHeightOn, itemPileOn} from '../index.js';
import {dangerZoneSocket, monksActiveTilesOn, sequencerOn, socketLibOn, betterRoofsOn, fxMasterOn, levelsOn, perfectVisionOn, taggerOn, warpgateOn, wallHeightOn, itemPileOn, fluidCanvasOn} from '../index.js';
import {damageTypes, EXECUTABLEOPTIONS, FVTTMOVETYPES, FVTTSENSETYPES, WORKFLOWSTATES} from './constants.js';
import {furthestShiftPosition, getActorOwner, getFilesFromPattern, getTagEntities, limitArray, shuffleArray, stringToObj, wait, maybe, joinWithAnd} from './helpers.js';

Expand Down Expand Up @@ -564,8 +564,8 @@ export class executor {
case 'ambientLight':
be = new ambientLight(this.danger.ambientLight, this.data, name, EXECUTABLEOPTIONS[name]);
break;
case 'fluidCanvas':
be = new fluidCanvas(this.danger.canvas, this.data, name, EXECUTABLEOPTIONS[name]);
case 'canvas':
be = new Canvas(this.danger.canvas, this.data, name, EXECUTABLEOPTIONS[name]);
break;
case 'damage':
be = new damageToken(this.danger.damage, this.data, name, EXECUTABLEOPTIONS[name]);
Expand Down Expand Up @@ -1676,26 +1676,30 @@ class flavor extends executable{

}

class fluidCanvas extends executable{
class Canvas extends executable{

get duration(){
return this._part.duration ? this._part.duration : 500
return this._part.effect.duration ?? 500
}

get has(){
return (super.has && this.type) ? true : false
}

get intensity(){
return this._part.intensity ? this._part.intensity : 1
return this._part.effect.intensity ?? 1
}

get iteration(){
return this._part.iteration ? this._part.iteration : 3
return this._part.effect.iteration ?? 3
}

get pan(){
return this._part.pan ?? {}
}

get type(){
return this._part.type
return this._part.effect.type
}

get isToggle(){
Expand All @@ -1713,29 +1717,47 @@ class fluidCanvas extends executable{
async play(){
await super.play()
if(this._cancel) return
switch(this.type){
case 'blur':
await KFC.executeAsGM(this.type, this.users, this.intensity);
break;
case 'drug':
await KFC.executeAsGM(this.type, this.users, this.intensity, this.duration, this.iteration);
break;
case 'black':
case 'negative':
case 'sepia':
await KFC.executeAsGM(this.type, this.users);
break;
case 'fade':
await KFC.executeAsGM(this.type);
break;
case 'spin':
case 'earthquake':
case 'heartbeat':
await KFC.executeForEveryone(this.type, this.intensity, this.duration, this.iteration);
break;
if(sequencerOn && (this.type === 'shake' || this.pan.active)){
let s = new Sequence().canvasPan()
if(this.pan.active){
s = s.atLocation(this.data.boundary.center)
if(this.pan.speed) s = s.speed(this.pan.speed)
if(this.pan.scale) s = s.scale(this.pan.scale)
if(this.pan.lock) s = s.lockView(this.pan.lock)
}
if(this.type ==='shake')
s = s.shake({
duration: this.duration,
strength: this.intensity,
frequency: this.iteration
})
return s.play()
}
if(fluidCanvasOn){
switch(this.type){
case 'blur':
await KFC.executeAsGM(this.type, this.users, this.intensity);
break;
case 'drug':
await KFC.executeAsGM(this.type, this.users, this.intensity, this.duration, this.iteration);
break;
case 'black':
case 'negative':
case 'sepia':
await KFC.executeAsGM(this.type, this.users);
break;
case 'fade':
await KFC.executeAsGM(this.type);
break;
case 'spin':
case 'earthquake':
case 'heartbeat':
await KFC.executeForEveryone(this.type, this.intensity, this.duration, this.iteration);
break;
}
await this._for();
await this.off();
}
await this._for();
await this.off();
}

async _for(){
Expand Down

0 comments on commit ed4d974

Please sign in to comment.