112 lines
3.5 KiB
JavaScript
112 lines
3.5 KiB
JavaScript
/**
|
|
* Extends the actor to process special things from L5R.
|
|
*/
|
|
export class ActorL5r5e extends Actor {
|
|
/**
|
|
* Create a new entity using provided input data
|
|
* @override
|
|
*/
|
|
static async create(data, options = {}) {
|
|
// if (!Object.keys(data).includes("type")) {
|
|
// data.type = "character";
|
|
// }
|
|
|
|
// Replace default image
|
|
if (data.img === undefined) {
|
|
data.img = `${CONFIG.l5r5e.paths.assets}icons/actors/${data.type}.svg`;
|
|
}
|
|
|
|
// Some tweak on actors token
|
|
data.token = data.token || {};
|
|
switch (data.type) {
|
|
case "character":
|
|
foundry.utils.mergeObject(
|
|
data.token,
|
|
{
|
|
// vision: true,
|
|
// dimSight: 30,
|
|
// brightSight: 0,
|
|
actorLink: true,
|
|
disposition: 1, // friendly
|
|
bar1: {
|
|
attribute: "fatigue",
|
|
},
|
|
bar2: {
|
|
attribute: "strife",
|
|
},
|
|
},
|
|
{ overwrite: false }
|
|
);
|
|
break;
|
|
|
|
case "npc":
|
|
foundry.utils.mergeObject(
|
|
data.token,
|
|
{
|
|
actorLink: false,
|
|
disposition: 0, // neutral
|
|
bar1: {
|
|
attribute: "fatigue",
|
|
},
|
|
bar2: {
|
|
attribute: "strife",
|
|
},
|
|
},
|
|
{ overwrite: false }
|
|
);
|
|
break;
|
|
}
|
|
await super.create(data, options);
|
|
}
|
|
|
|
/**
|
|
* Entity-specific actions that should occur when the Entity is updated
|
|
* @override
|
|
*/
|
|
async update(data = {}, context = {}) {
|
|
// Need a _id
|
|
if (!data["_id"]) {
|
|
data["_id"] = this.id;
|
|
}
|
|
|
|
// Fix for token image unliked from character... dunno why
|
|
if (data.img) {
|
|
data["token.img"] = data.img;
|
|
}
|
|
|
|
// Now using updateDocuments
|
|
data = data instanceof Array ? data : [data];
|
|
return Actor.updateDocuments(data, context);
|
|
}
|
|
|
|
/** @override */
|
|
prepareData() {
|
|
super.prepareData();
|
|
|
|
if (["character", "npc"].includes(this.data.type)) {
|
|
const data = this.data.data;
|
|
|
|
// No automation for npc as they cheat in stats
|
|
if (this.data.type === "character") {
|
|
data.endurance = (Number(data.rings.earth) + Number(data.rings.fire)) * 2;
|
|
data.composure = (Number(data.rings.earth) + Number(data.rings.water)) * 2;
|
|
data.focus = Number(data.rings.air) + Number(data.rings.fire);
|
|
data.vigilance = Math.ceil((Number(data.rings.air) + Number(data.rings.water)) / 2);
|
|
}
|
|
|
|
// Attributes bars
|
|
data.fatigue.max = data.endurance;
|
|
data.strife.max = data.composure;
|
|
data.void_points.max = data.rings.void;
|
|
|
|
// if compromise, vigilance = 1
|
|
data.is_compromised = data.strife.value > data.strife.max;
|
|
|
|
// Make sure void points are never greater than max
|
|
if (data.void_points.value > data.void_points.max) {
|
|
data.void_points.value = data.void_points.max;
|
|
}
|
|
}
|
|
}
|
|
}
|