From 690eff8e460150c26cc4be89a26936c9abae4adb Mon Sep 17 00:00:00 2001 From: Oliver-Akins Date: Sun, 2 Mar 2025 21:19:12 -0700 Subject: [PATCH 1/4] Add the most basic form of a difficulty delta region behaviour --- langs/en-ca.json | 13 +++++++ .../data/region-behaviors/DifficultyDelta.mjs | 36 +++++++++++++++++++ module/hooks/init.mjs | 2 ++ system.json | 3 ++ 4 files changed, 54 insertions(+) create mode 100644 module/data/region-behaviors/DifficultyDelta.mjs diff --git a/langs/en-ca.json b/langs/en-ca.json index a91a488..9d24b68 100644 --- a/langs/en-ca.json +++ b/langs/en-ca.json @@ -11,6 +11,9 @@ "shield": "Shield", "skill": "Skill", "weapon": "Weapon" + }, + "RegionBehavior": { + "difficultyDelta": "Condition Delta" } }, "RipCrypt": { @@ -154,6 +157,16 @@ }, "tooltips": { "shield-bonus": "Shield Bonus: {value}" + }, + "region": { + "difficultyDelta": { + "FIELDS": { + "delta": { + "label": "Delta", + "hint": "How much should actors in this area have their difficulty changed from the global value." + } + } + } } } } diff --git a/module/data/region-behaviors/DifficultyDelta.mjs b/module/data/region-behaviors/DifficultyDelta.mjs new file mode 100644 index 0000000..5558c9d --- /dev/null +++ b/module/data/region-behaviors/DifficultyDelta.mjs @@ -0,0 +1,36 @@ +import { Logger } from "../../utils/Logger.mjs"; + +const { fields } = foundry.data; +const { RegionBehaviorType } = foundry.data.regionBehaviors; + +export class DifficultyDeltaBehaviorData extends RegionBehaviorType { + static LOCALIZATION_PREFIXES = [`RipCrypt.region.difficultyDelta`]; + + static defineSchema() { + return { + delta: new fields.NumberField({ + required: true, + initial: 1, + }), + }; + }; + + static events = { + [CONST.REGION_EVENTS.TOKEN_ENTER]: this.#onTokenEnter, + [CONST.REGION_EVENTS.TOKEN_EXIT]: this.#onTokenExit, + }; + + static async #onTokenEnter(event) { + Logger.debug(`token enter`, event, this); + const actor = event.data.token.actor; + if (!actor) { return }; + actor.setFlag(`ripcrypt`, `dcDelta`, this.delta); + }; + + static async #onTokenExit(event) { + Logger.debug(`token exit`, event, this); + const actor = event.data.token.actor; + if (!actor) { return }; + actor.unsetFlag(`ripcrypt`, `dcDelta`); + }; +}; diff --git a/module/hooks/init.mjs b/module/hooks/init.mjs index 812c6e2..f295ef3 100644 --- a/module/hooks/init.mjs +++ b/module/hooks/init.mjs @@ -33,6 +33,7 @@ import { registerDevSettings } from "../settings/devSettings.mjs"; import { registerMetaSettings } from "../settings/metaSettings.mjs"; import { registerUserSettings } from "../settings/userSettings.mjs"; import { registerWorldSettings } from "../settings/worldSettings.mjs"; +import { DifficultyDeltaBehaviorData } from "../data/region-behaviors/DifficultyDelta.mjs"; Hooks.once(`init`, () => { Logger.log(`Initializing`); @@ -56,6 +57,7 @@ Hooks.once(`init`, () => { CONFIG.Item.dataModels.shield = ShieldData; CONFIG.Item.dataModels.skill = SkillData; CONFIG.Item.dataModels.weapon = WeaponData; + CONFIG.RegionBehavior.dataModels.difficultyDelta = DifficultyDeltaBehaviorData; // #endregion // #region Class Changes diff --git a/system.json b/system.json index 9924bfe..0adbd73 100644 --- a/system.json +++ b/system.json @@ -51,6 +51,9 @@ "shield": {}, "skill": {}, "weapon": {} + }, + "RegionBehavior": { + "difficultyDelta": {} } } } \ No newline at end of file From f74c22c510e446f93de1eb4a510172b37fbf487e Mon Sep 17 00:00:00 2001 From: Oliver-Akins Date: Sun, 2 Mar 2025 21:21:44 -0700 Subject: [PATCH 2/4] Fix import order --- module/hooks/init.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/hooks/init.mjs b/module/hooks/init.mjs index f295ef3..70f81ff 100644 --- a/module/hooks/init.mjs +++ b/module/hooks/init.mjs @@ -10,6 +10,7 @@ import { RipCryptCombatTracker } from "../Apps/sidebar/CombatTracker.mjs"; import { AmmoData } from "../data/Item/Ammo.mjs"; import { ArmourData } from "../data/Item/Armour.mjs"; import { CraftData } from "../data/Item/Craft.mjs"; +import { DifficultyDeltaBehaviorData } from "../data/region-behaviors/DifficultyDelta.mjs"; import { GoodData } from "../data/Item/Good.mjs"; import { HeroData } from "../data/Actor/Hero.mjs"; import { ShieldData } from "../data/Item/Shield.mjs"; @@ -33,7 +34,6 @@ import { registerDevSettings } from "../settings/devSettings.mjs"; import { registerMetaSettings } from "../settings/metaSettings.mjs"; import { registerUserSettings } from "../settings/userSettings.mjs"; import { registerWorldSettings } from "../settings/worldSettings.mjs"; -import { DifficultyDeltaBehaviorData } from "../data/region-behaviors/DifficultyDelta.mjs"; Hooks.once(`init`, () => { Logger.log(`Initializing`); From 9336e3465c639c3023429c7ff76871617d9ef3e7 Mon Sep 17 00:00:00 2001 From: Oliver-Akins Date: Thu, 6 Mar 2025 21:22:14 -0700 Subject: [PATCH 3/4] Get the deltas stacking properly --- .../data/region-behaviors/DifficultyDelta.mjs | 39 ++++++++++++++++++- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/module/data/region-behaviors/DifficultyDelta.mjs b/module/data/region-behaviors/DifficultyDelta.mjs index 5558c9d..3a6691f 100644 --- a/module/data/region-behaviors/DifficultyDelta.mjs +++ b/module/data/region-behaviors/DifficultyDelta.mjs @@ -23,14 +23,49 @@ export class DifficultyDeltaBehaviorData extends RegionBehaviorType { static async #onTokenEnter(event) { Logger.debug(`token enter`, event, this); const actor = event.data.token.actor; + // const token = event.data.token.object; + // Logger.debug(token.center, token.h) if (!actor) { return }; - actor.setFlag(`ripcrypt`, `dcDelta`, this.delta); + + let delta = actor.getFlag(game.system.id, `dcDelta`) ?? 0; + delta += this.delta; + actor.setFlag(game.system.id, `dcDelta`, delta); + ui.notifications.info(`Updated delta to: ${delta}`); + Logger.debug(`Updated delta to:`, delta); + // await canvas.interface.createScrollingText( + // token.center, + // delta, + // { + // distance: 2 * token.h, + // fontSize: 40, + // fill: `#aa0000`, + // } + // ); }; static async #onTokenExit(event) { Logger.debug(`token exit`, event, this); const actor = event.data.token.actor; + // const token = event.data.token.object; if (!actor) { return }; - actor.unsetFlag(`ripcrypt`, `dcDelta`); + + let delta = actor.getFlag(game.system.id, `dcDelta`) ?? 0; + delta -= this.delta; + if (delta === 0) { + actor.unsetFlag(game.system.id, `dcDelta`); + } else { + actor.setFlag(game.system.id, `dcDelta`, delta); + }; + ui.notifications.info(`Updated delta to: ${delta}`); + Logger.debug(`Updated delta to:`, delta); + // await canvas.interface.createScrollingText( + // token.center, + // delta, + // { + // distance: 2 * token.h, + // fontSize: 40, + // fill: `#00aa00`, + // } + // ); }; }; From 245dc1f7e15d1d05e9b5cf99e14818a4b2ea334a Mon Sep 17 00:00:00 2001 From: Oliver-Akins Date: Fri, 7 Mar 2025 19:42:07 -0700 Subject: [PATCH 4/4] Rename folder --- module/data/{region-behaviors => Behavior}/DifficultyDelta.mjs | 0 module/hooks/init.mjs | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename module/data/{region-behaviors => Behavior}/DifficultyDelta.mjs (100%) diff --git a/module/data/region-behaviors/DifficultyDelta.mjs b/module/data/Behavior/DifficultyDelta.mjs similarity index 100% rename from module/data/region-behaviors/DifficultyDelta.mjs rename to module/data/Behavior/DifficultyDelta.mjs diff --git a/module/hooks/init.mjs b/module/hooks/init.mjs index b7dda31..41b6476 100644 --- a/module/hooks/init.mjs +++ b/module/hooks/init.mjs @@ -10,7 +10,7 @@ import { RipCryptCombatTracker } from "../Apps/sidebar/CombatTracker.mjs"; import { AmmoData } from "../data/Item/Ammo.mjs"; import { ArmourData } from "../data/Item/Armour.mjs"; import { CraftData } from "../data/Item/Craft.mjs"; -import { DifficultyDeltaBehaviorData } from "../data/region-behaviors/DifficultyDelta.mjs"; +import { DifficultyDeltaBehaviorData } from "../data/Behavior/DifficultyDelta.mjs"; import { GoodData } from "../data/Item/Good.mjs"; import { HeroData } from "../data/Actor/Hero.mjs"; import { ShieldData } from "../data/Item/Shield.mjs";