|
|
- /** Equivalent to the VisionLevel enum in the Pathfinder 2e system */
- class VisionLevelPF2e {
- static BLINDED = 0;
- static NORMAL = 1;
- static LOW_LIGHT_VISION = 2;
- static DARKVISION = 3;
- }
-
- Hooks.on(
- "init",
- () => {
- // Calculate the NPCs vision level from its sense field. The field is a free-text string, so we have to do a bit of
- // maniplulation and make some assumptions about the data.
- libWrapper.register(
- "pf2e-rules-based-npc-vision",
- "CONFIG.PF2E.Actor.documentClasses.npc.prototype.visionLevel",
- function npcVisionLevel() {
- const senses = (this.system.traits.senses.value ?? "").split(",").map(s => s.replace(/[\s-]+/g, '').toLowerCase());
- return this.getCondition("blinded") ? VisionLevelPF2e.BLINDED
- : senses.some(sense => ["darkvision", "greaterdarkvision"].includes(sense))
- ? VisionLevelPF2e.DARKVISION
- : senses.includes("lowlightvision")
- ? VisionLevelPF2e.LOW_LIGHT_VISION
- : VisionLevelPF2e.NORMAL;
- },
- "OVERRIDE"
- );
-
- libWrapper.register(
- "pf2e-rules-based-npc-vision",
- "CONFIG.Token.documentClass.prototype.rulesBasedVision",
- function npcRulesBasedVision() {
- return !!(this.sight.enabled && this.actor?.isOfType("character", "familiar", "npc") && this.scene?.rulesBasedVision);
- },
- "OVERRIDE"
- );
- }
- );
|