System development, WIP
This commit is contained in:
@@ -0,0 +1,156 @@
|
||||
import { SYSTEM } from "../../config/system.mjs"
|
||||
import { buildSharedSelectOptions } from "./select-options.mjs"
|
||||
import { enrichHTMLFields } from "./rich-text.mjs"
|
||||
|
||||
const { HandlebarsApplicationMixin } = foundry.applications.api
|
||||
|
||||
export default class MGNEActorSheet extends HandlebarsApplicationMixin(foundry.applications.sheets.ActorSheetV2) {
|
||||
static DEFAULT_OPTIONS = {
|
||||
classes: ["mgne", "actor-sheet"],
|
||||
position: {
|
||||
width: 900,
|
||||
height: "auto",
|
||||
},
|
||||
window: {
|
||||
resizable: true,
|
||||
},
|
||||
form: {
|
||||
submitOnChange: true,
|
||||
},
|
||||
actions: {
|
||||
editImage: MGNEActorSheet.onEditImage,
|
||||
changeTab: MGNEActorSheet.onChangeTab,
|
||||
createItem: MGNEActorSheet.onCreateItem,
|
||||
editItem: MGNEActorSheet.onEditItem,
|
||||
deleteItem: MGNEActorSheet.onDeleteItem,
|
||||
toggleEquipped: MGNEActorSheet.onToggleEquipped,
|
||||
syncArtifact: MGNEActorSheet.onSyncArtifact,
|
||||
resetDaily: MGNEActorSheet.onResetDaily,
|
||||
rollResonancePerDay: MGNEActorSheet.onRollResonancePerDay,
|
||||
quickRest: MGNEActorSheet.onQuickRest,
|
||||
fullRest: MGNEActorSheet.onFullRest,
|
||||
},
|
||||
}
|
||||
|
||||
async _prepareContext() {
|
||||
const systemFields = this.document.system.schema.fields
|
||||
|
||||
return {
|
||||
fields: this.document.schema.fields,
|
||||
systemFields,
|
||||
actor: this.document,
|
||||
system: this.document.system,
|
||||
source: this.document.toObject(),
|
||||
config: SYSTEM,
|
||||
enrichedFields: await enrichHTMLFields(this.document.system, systemFields),
|
||||
isEditable: this.isEditable,
|
||||
selectOptions: buildSharedSelectOptions(),
|
||||
}
|
||||
}
|
||||
|
||||
_onRender(context, options) {
|
||||
super._onRender?.(context, options)
|
||||
this.element.querySelectorAll(".rollable").forEach(element => {
|
||||
element.addEventListener("click", this._onRoll.bind(this))
|
||||
})
|
||||
}
|
||||
|
||||
async _onRoll(event) {
|
||||
const target = event.currentTarget
|
||||
const itemId = target.closest("[data-item-id]")?.dataset.itemId
|
||||
const rollType = target.dataset.rollType
|
||||
|
||||
switch (rollType) {
|
||||
case "ability":
|
||||
return this.document.rollAbility(target.dataset.abilityId)
|
||||
case "defense":
|
||||
return this.document.rollDefense()
|
||||
case "weapon":
|
||||
return this.document.rollWeapon(itemId)
|
||||
case "profile-attack":
|
||||
return this.document.rollProfileAttack()
|
||||
case "profile-damage":
|
||||
return this.document.rollProfileDamage()
|
||||
case "damage":
|
||||
return this.document.rollDamage(itemId)
|
||||
case "resonation":
|
||||
return this.document.rollResonation(itemId)
|
||||
case "morale":
|
||||
return this.document.rollMorale()
|
||||
case "usage":
|
||||
return this.document.rollUsage(itemId)
|
||||
default:
|
||||
return null
|
||||
}
|
||||
}
|
||||
|
||||
static async onEditImage(_event, target) {
|
||||
const attr = target.dataset.edit
|
||||
const current = foundry.utils.getProperty(this.document, attr)
|
||||
const picker = new FilePicker({
|
||||
current,
|
||||
type: "image",
|
||||
callback: path => this.document.update({ [attr]: path }),
|
||||
top: this.position.top + 40,
|
||||
left: this.position.left + 10,
|
||||
})
|
||||
return picker.browse()
|
||||
}
|
||||
|
||||
static onChangeTab(_event, target) {
|
||||
const group = target.dataset.group
|
||||
const tab = target.dataset.tab
|
||||
this.tabGroups[group] = tab
|
||||
this.render()
|
||||
}
|
||||
|
||||
static async onCreateItem(_event, target) {
|
||||
const itemType = target.dataset.itemType
|
||||
const typeLabel = SYSTEM.itemTypes[itemType]?.label ?? itemType
|
||||
const [created] = await this.document.createEmbeddedDocuments("Item", [{
|
||||
name: game.i18n.format("MGNE.Common.NewItem", { type: typeLabel }),
|
||||
type: itemType,
|
||||
img: SYSTEM.itemTypes[itemType]?.icon,
|
||||
}])
|
||||
created?.sheet?.render(true)
|
||||
}
|
||||
|
||||
static async onEditItem(_event, target) {
|
||||
const itemId = target.closest("[data-item-id]")?.dataset.itemId
|
||||
const item = this.document.items.get(itemId)
|
||||
return item?.sheet?.render(true)
|
||||
}
|
||||
|
||||
static async onDeleteItem(_event, target) {
|
||||
const itemId = target.closest("[data-item-id]")?.dataset.itemId
|
||||
const item = this.document.items.get(itemId)
|
||||
if (!item) return null
|
||||
return item.delete()
|
||||
}
|
||||
|
||||
static async onToggleEquipped(_event, target) {
|
||||
const itemId = target.closest("[data-item-id]")?.dataset.itemId
|
||||
return this.document.toggleItemEquipped(itemId)
|
||||
}
|
||||
|
||||
static async onSyncArtifact(_event, target) {
|
||||
const itemId = target.closest("[data-item-id]")?.dataset.itemId
|
||||
return this.document.syncArtifact(itemId)
|
||||
}
|
||||
|
||||
static async onResetDaily() {
|
||||
return this.document.resetDaily()
|
||||
}
|
||||
|
||||
static async onRollResonancePerDay() {
|
||||
return this.document.rollResonancePerDay()
|
||||
}
|
||||
|
||||
static async onQuickRest() {
|
||||
return this.document.quickRest()
|
||||
}
|
||||
|
||||
static async onFullRest() {
|
||||
return this.document.fullRest()
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user