actor classes

This commit is contained in:
François-Xavier Guillois
2023-05-17 15:32:15 +02:00
parent fefc96ffa0
commit afdc5e2c3b
22 changed files with 1020 additions and 165 deletions
+76
View File
@@ -0,0 +1,76 @@
import { TotemActor } from "./actor.mjs";
/**
* Extend the base Actor document by defining a custom roll data structure which is ideal for the Simple system.
* @extends {TotemActor}
*/
export class TotemNpc extends TotemActor {
/** @override */
prepareData() {
// Prepare data for the actor. Calling the super version of this executes
// the following, in order: data reset (to clear active effects),
// prepareBaseData(), prepareEmbeddedDocuments() (including active effects),
// prepareDerivedData().
super.prepareData();
}
/** @override */
prepareBaseData() {
// Data modifications in this step occur before processing embedded
// documents or derived data.
}
/**
* @override
* Augment the basic actor data with additional dynamic data. Typically,
* you'll want to handle most of your calculated/derived data in this step.
* Data calculated in this step should generally not exist in template.json
* (such as ability modifiers rather than ability scores) and should be
* available both inside and outside of character sheets (such as if an actor
* is queried and has a roll executed directly from it).
*/
prepareDerivedData() {
const actorData = this;
const systemData = actorData.system;
const flags = actorData.flags.totem || {};
// Make separate methods for each Actor type (character, npc, etc.) to keep
// things organized.
this._prepareNpcData(actorData);
}
/**
* Prepare NPC type specific data.
*/
_prepareNpcData(actorData) {
if (actorData.type !== 'npc') return;
// Make modifications to data here. For example:
const systemData = actorData.system;
systemData.xp = (systemData.cr * systemData.cr) * 100;
}
/**
* Override getRollData() that's supplied to rolls.
*/
getRollData() {
const data = super.getRollData();
// Prepare character roll data.
this._getNpcRollData(data);
return data;
}
/**
* Prepare NPC roll data.
*/
_getNpcRollData(data) {
if (this.type !== 'npc') return;
// Process additional NPC data here.
}
}