145 lines
5.2 KiB
JavaScript
145 lines
5.2 KiB
JavaScript
import BoLBaseActorSheet from "./base-actor-sheet.mjs"
|
|
import { BoLUtility } from "../../system/bol-utility.js"
|
|
|
|
/**
|
|
* Actor Sheet for BoL characters and encounters using AppV2
|
|
*/
|
|
export default class BoLActorSheet extends BoLBaseActorSheet {
|
|
/** @override */
|
|
static DEFAULT_OPTIONS = {
|
|
...super.DEFAULT_OPTIONS,
|
|
classes: [...super.DEFAULT_OPTIONS.classes],
|
|
actions: {
|
|
...super.DEFAULT_OPTIONS.actions,
|
|
},
|
|
}
|
|
|
|
/** @override */
|
|
static PARTS = {
|
|
sheet: {
|
|
template: "systems/bol/templates/actor/actor-sheet.hbs",
|
|
},
|
|
}
|
|
|
|
/** @override */
|
|
tabGroups = { primary: "stats" }
|
|
|
|
/** @override */
|
|
async _prepareContext() {
|
|
const context = await super._prepareContext()
|
|
const actor = this.document
|
|
|
|
context.data = actor.toObject()
|
|
context.details = actor.details
|
|
context.attributes = actor.attributes
|
|
context.aptitudes = actor.aptitudes
|
|
context.resources = actor.getResourcesFromType()
|
|
context.xp = actor.system.xp
|
|
context.equipment = actor.equipment
|
|
context.equipmentCreature = actor.equipmentCreature
|
|
context.weapons = actor.weapons
|
|
context.protections = actor.protections
|
|
context.spells = actor.spells
|
|
context.alchemy = actor.alchemy
|
|
context.containers = actor.containers
|
|
context.treasure = actor.treasure
|
|
context.boleffects = actor.boleffects
|
|
context.alchemyrecipe = actor.alchemyrecipe
|
|
context.horoscopes = actor.horoscopes
|
|
context.vehicles = actor.vehicles
|
|
context.fightoptions = actor.fightoptions
|
|
context.ammos = actor.ammos
|
|
context.misc = actor.misc
|
|
context.xplog = actor.xplog
|
|
context.combat = actor.buildCombat()
|
|
context.initiativeRank = actor.getInitiativeRank()
|
|
context.features = actor.buildFeatures()
|
|
context.options = this.options
|
|
context.editScore = this.options.editScore
|
|
context.useBougette = (actor.type === "character" && BoLUtility.getUseBougette()) || false
|
|
context.bougette = actor.getBougette()
|
|
context.charType = actor.getCharType()
|
|
context.villainy = actor.getVillainy()
|
|
context.isUndead = actor.isUndead()
|
|
context.biography = await foundry.applications.ux.TextEditor.implementation.enrichHTML(
|
|
actor.system.details?.biography || "", { async: true }
|
|
)
|
|
context.notes = await foundry.applications.ux.TextEditor.implementation.enrichHTML(
|
|
actor.system.details?.notes || "", { async: true }
|
|
)
|
|
context.isSorcerer = actor.isSorcerer()
|
|
context.isAlchemist = actor.isAlchemist()
|
|
context.isAstrologer = actor.isAstrologer()
|
|
context.isMysteries = context.isSorcerer || context.isAlchemist || context.isAstrologer
|
|
context.isPriest = actor.isPriest()
|
|
context.horoscopeGroupList = game.settings.get("bol", "horoscope-group")
|
|
|
|
console.log("ACTORDATA (AppV2)", context)
|
|
return context
|
|
}
|
|
|
|
/** @override */
|
|
_activateListeners() {
|
|
super._activateListeners()
|
|
if (!this.isEditable) return
|
|
|
|
// Create generic item
|
|
this.element.querySelectorAll(".create-item").forEach((el) => {
|
|
el.addEventListener("click", () => {
|
|
this.actor.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("BOL.ui.newEquipment"), type: "item" }], { renderSheet: true })
|
|
})
|
|
})
|
|
|
|
// Create natural weapon
|
|
this.element.querySelectorAll(".create-natural-weapon").forEach((el) => {
|
|
el.addEventListener("click", () => {
|
|
const system = foundry.utils.duplicate(game.bol.config.defaultNaturalWeapon)
|
|
this.actor.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("BOL.ui.newNaturalWeapon"), type: "item", system }], { renderSheet: true })
|
|
})
|
|
})
|
|
|
|
// Create natural protection
|
|
this.element.querySelectorAll(".create-natural-protection").forEach((el) => {
|
|
el.addEventListener("click", () => {
|
|
const system = foundry.utils.duplicate(game.bol.config.defaultNaturalProtection)
|
|
this.actor.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("BOL.ui.newNaturalProtection"), type: "item", system }], { renderSheet: true })
|
|
})
|
|
})
|
|
|
|
// Item create via header dataset (type-based creation)
|
|
this.element.querySelectorAll(".item-create").forEach((el) => {
|
|
el.addEventListener("click", (ev) => {
|
|
ev.preventDefault()
|
|
const header = ev.currentTarget
|
|
const type = header.dataset.type
|
|
const data = foundry.utils.duplicate(header.dataset)
|
|
const name = `New ${type}`
|
|
delete data.type
|
|
this.actor.createEmbeddedDocuments("Item", [{ name, type, data }])
|
|
})
|
|
})
|
|
|
|
// Add XP Log entry
|
|
this.element.querySelectorAll(".xplog-add").forEach((el) => {
|
|
el.addEventListener("click", (ev) => {
|
|
ev.preventDefault()
|
|
this.actor.addXPLog("other", "Nouveau", 0, 0)
|
|
})
|
|
})
|
|
|
|
// Add item by category/subtype (equipment tab headers)
|
|
this.element.querySelectorAll(".item-add").forEach((el) => {
|
|
el.addEventListener("click", (ev) => {
|
|
ev.preventDefault()
|
|
const { itemType, category, subtype } = ev.currentTarget.dataset
|
|
const system = { category, subtype }
|
|
this.actor.createEmbeddedDocuments("Item", [{
|
|
name: game.i18n.localize("BOL.ui.newEquipment"),
|
|
type: itemType || "item",
|
|
system,
|
|
}], { renderSheet: true })
|
|
})
|
|
})
|
|
}
|
|
}
|