Compare commits

...
Sign in to create a new pull request.

5 commits

Author SHA1 Message Date
Oliver-Akins
245dc1f7e1 Rename folder 2025-03-07 19:42:07 -07:00
Oliver-Akins
9336e3465c Get the deltas stacking properly 2025-03-06 21:22:14 -07:00
Oliver-Akins
85d820a9de Merge remote-tracking branch 'origin/dev' into feature/region-behaviours 2025-03-06 18:50:50 -07:00
Oliver-Akins
f74c22c510 Fix import order 2025-03-02 21:21:44 -07:00
Oliver-Akins
690eff8e46 Add the most basic form of a difficulty delta region behaviour 2025-03-02 21:19:12 -07:00
4 changed files with 89 additions and 0 deletions

View file

@ -11,6 +11,9 @@
"shield": "Shield",
"skill": "Skill",
"weapon": "Weapon"
},
"RegionBehavior": {
"difficultyDelta": "Condition Delta"
}
},
"RipCrypt": {
@ -189,6 +192,16 @@
"current-tour": "Current Delve Tour",
"next-tour": "Next Delve Tour",
"prev-tour": "Previous Delve Tour"
},
"region": {
"difficultyDelta": {
"FIELDS": {
"delta": {
"label": "Delta",
"hint": "How much should actors in this area have their difficulty changed from the global value."
}
}
}
}
}
}

View file

@ -0,0 +1,71 @@
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;
// const token = event.data.token.object;
// Logger.debug(token.center, token.h)
if (!actor) { return };
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 };
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`,
// }
// );
};
};

View file

@ -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/Behavior/DifficultyDelta.mjs";
import { GoodData } from "../data/Item/Good.mjs";
import { HeroData } from "../data/Actor/Hero.mjs";
import { ShieldData } from "../data/Item/Shield.mjs";
@ -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

View file

@ -51,6 +51,9 @@
"shield": {},
"skill": {},
"weapon": {}
},
"RegionBehavior": {
"difficultyDelta": {}
}
}
}