Compare commits
5 commits
main
...
feature/re
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
245dc1f7e1 | ||
|
|
9336e3465c | ||
|
|
85d820a9de | ||
|
|
f74c22c510 | ||
|
|
690eff8e46 |
4 changed files with 89 additions and 0 deletions
|
|
@ -11,6 +11,9 @@
|
||||||
"shield": "Shield",
|
"shield": "Shield",
|
||||||
"skill": "Skill",
|
"skill": "Skill",
|
||||||
"weapon": "Weapon"
|
"weapon": "Weapon"
|
||||||
|
},
|
||||||
|
"RegionBehavior": {
|
||||||
|
"difficultyDelta": "Condition Delta"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"RipCrypt": {
|
"RipCrypt": {
|
||||||
|
|
@ -189,6 +192,16 @@
|
||||||
"current-tour": "Current Delve Tour",
|
"current-tour": "Current Delve Tour",
|
||||||
"next-tour": "Next Delve Tour",
|
"next-tour": "Next Delve Tour",
|
||||||
"prev-tour": "Previous 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."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
71
module/data/Behavior/DifficultyDelta.mjs
Normal file
71
module/data/Behavior/DifficultyDelta.mjs
Normal 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`,
|
||||||
|
// }
|
||||||
|
// );
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
@ -10,6 +10,7 @@ import { RipCryptCombatTracker } from "../Apps/sidebar/CombatTracker.mjs";
|
||||||
import { AmmoData } from "../data/Item/Ammo.mjs";
|
import { AmmoData } from "../data/Item/Ammo.mjs";
|
||||||
import { ArmourData } from "../data/Item/Armour.mjs";
|
import { ArmourData } from "../data/Item/Armour.mjs";
|
||||||
import { CraftData } from "../data/Item/Craft.mjs";
|
import { CraftData } from "../data/Item/Craft.mjs";
|
||||||
|
import { DifficultyDeltaBehaviorData } from "../data/Behavior/DifficultyDelta.mjs";
|
||||||
import { GoodData } from "../data/Item/Good.mjs";
|
import { GoodData } from "../data/Item/Good.mjs";
|
||||||
import { HeroData } from "../data/Actor/Hero.mjs";
|
import { HeroData } from "../data/Actor/Hero.mjs";
|
||||||
import { ShieldData } from "../data/Item/Shield.mjs";
|
import { ShieldData } from "../data/Item/Shield.mjs";
|
||||||
|
|
@ -56,6 +57,7 @@ Hooks.once(`init`, () => {
|
||||||
CONFIG.Item.dataModels.shield = ShieldData;
|
CONFIG.Item.dataModels.shield = ShieldData;
|
||||||
CONFIG.Item.dataModels.skill = SkillData;
|
CONFIG.Item.dataModels.skill = SkillData;
|
||||||
CONFIG.Item.dataModels.weapon = WeaponData;
|
CONFIG.Item.dataModels.weapon = WeaponData;
|
||||||
|
CONFIG.RegionBehavior.dataModels.difficultyDelta = DifficultyDeltaBehaviorData;
|
||||||
// #endregion
|
// #endregion
|
||||||
|
|
||||||
// #region Class Changes
|
// #region Class Changes
|
||||||
|
|
|
||||||
|
|
@ -51,6 +51,9 @@
|
||||||
"shield": {},
|
"shield": {},
|
||||||
"skill": {},
|
"skill": {},
|
||||||
"weapon": {}
|
"weapon": {}
|
||||||
|
},
|
||||||
|
"RegionBehavior": {
|
||||||
|
"difficultyDelta": {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue