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