Import initial
This commit is contained in:
@@ -0,0 +1,10 @@
|
||||
export { default as LesOubliesPersonnageSheet } from "./personnage-sheet.mjs"
|
||||
export { default as LesOubliesCompagnieSheet } from "./compagnie-sheet.mjs"
|
||||
export { default as LesOubliesCreatureSheet } from "./creature-sheet.mjs"
|
||||
export { default as LesOubliesReferenceItemSheet } from "./reference-item-sheet.mjs"
|
||||
export { default as LesOubliesCompetenceSheet } from "./competence-sheet.mjs"
|
||||
export { default as LesOubliesSortilegeSheet } from "./sortilege-sheet.mjs"
|
||||
export { default as LesOubliesArmeSheet } from "./arme-sheet.mjs"
|
||||
export { default as LesOubliesArmureSheet } from "./armure-sheet.mjs"
|
||||
export { default as LesOubliesEquipementSheet } from "./equipement-sheet.mjs"
|
||||
export { default as LesOubliesPouvoirCompagnieSheet } from "./pouvoir-compagnie-sheet.mjs"
|
||||
@@ -0,0 +1,9 @@
|
||||
import LesOubliesItemSheet from "./base-item-sheet.mjs"
|
||||
|
||||
export default class LesOubliesArmeSheet extends LesOubliesItemSheet {
|
||||
static PARTS = {
|
||||
sheet: {
|
||||
template: "systems/fvtt-les-oublies/templates/item-arme-sheet.hbs",
|
||||
},
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
import LesOubliesItemSheet from "./base-item-sheet.mjs"
|
||||
|
||||
export default class LesOubliesArmureSheet extends LesOubliesItemSheet {
|
||||
static PARTS = {
|
||||
sheet: {
|
||||
template: "systems/fvtt-les-oublies/templates/item-armure-sheet.hbs",
|
||||
},
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,186 @@
|
||||
const { HandlebarsApplicationMixin } = foundry.applications.api
|
||||
|
||||
import { LesOubliesUtility } from "../../les-oublies-utility.js"
|
||||
|
||||
export default class LesOubliesActorSheet extends HandlebarsApplicationMixin(foundry.applications.sheets.ActorSheetV2) {
|
||||
static SHEET_MODES = { EDIT: 0, PLAY: 1 }
|
||||
|
||||
static DEFAULT_OPTIONS = {
|
||||
classes: ["fvtt-les-oublies", "sheet", "actor"],
|
||||
position: {
|
||||
width: 980,
|
||||
height: 860,
|
||||
},
|
||||
window: {
|
||||
resizable: true,
|
||||
},
|
||||
form: {
|
||||
submitOnChange: true,
|
||||
closeOnSubmit: false,
|
||||
},
|
||||
dragDrop: [{ dragSelector: ".item-card", dropSelector: "form" }],
|
||||
actions: {
|
||||
toggleSheet: LesOubliesActorSheet.#onToggleSheet,
|
||||
editImage: LesOubliesActorSheet.#onEditImage,
|
||||
createItem: LesOubliesActorSheet.#onCreateItem,
|
||||
editItem: LesOubliesActorSheet.#onEditItem,
|
||||
deleteItem: LesOubliesActorSheet.#onDeleteItem,
|
||||
openRoll: LesOubliesActorSheet.#onOpenRoll,
|
||||
openConfrontation: LesOubliesActorSheet.#onOpenConfrontation,
|
||||
openInitiative: LesOubliesActorSheet.#onOpenInitiative,
|
||||
rollProfile: LesOubliesActorSheet.#onRollProfile,
|
||||
rollSkill: LesOubliesActorSheet.#onRollSkill,
|
||||
useWeapon: LesOubliesActorSheet.#onUseWeapon,
|
||||
resolveWeaponDamage: LesOubliesActorSheet.#onResolveWeaponDamage,
|
||||
useSpell: LesOubliesActorSheet.#onUseSpell,
|
||||
openCombatPreset: LesOubliesActorSheet.#onOpenCombatPreset,
|
||||
openThreadHarvest: LesOubliesActorSheet.#onOpenThreadHarvest,
|
||||
},
|
||||
}
|
||||
|
||||
_sheetMode = this.constructor.SHEET_MODES.EDIT
|
||||
|
||||
get isEditMode() {
|
||||
return this._sheetMode === this.constructor.SHEET_MODES.EDIT
|
||||
}
|
||||
|
||||
get isPlayMode() {
|
||||
return this._sheetMode === this.constructor.SHEET_MODES.PLAY
|
||||
}
|
||||
|
||||
async _prepareContext() {
|
||||
return {
|
||||
actor: this.document,
|
||||
system: this.document.system,
|
||||
source: this.document.toObject(),
|
||||
fields: this.document.schema.fields,
|
||||
systemFields: this.document.system.schema.fields,
|
||||
isEditable: this.isEditable,
|
||||
isEditMode: this.isEditMode,
|
||||
isPlayMode: this.isPlayMode,
|
||||
isGM: game.user.isGM,
|
||||
config: CONFIG.LESOUBLIES,
|
||||
enrichedDescription: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.biodata?.description ?? this.document.system.description ?? "", { async: true }),
|
||||
}
|
||||
}
|
||||
|
||||
_onRender(context, options) {
|
||||
super._onRender(context, options)
|
||||
}
|
||||
|
||||
_canDragStart() {
|
||||
return this.isEditable
|
||||
}
|
||||
|
||||
_canDragDrop() {
|
||||
return this.isEditable
|
||||
}
|
||||
|
||||
async _onDrop(event) {
|
||||
const data = TextEditor.getDragEventData(event)
|
||||
if (data.type !== "Item" || !data.uuid) return
|
||||
const item = await fromUuid(data.uuid)
|
||||
if (!item) return
|
||||
return this._onDropItem(item)
|
||||
}
|
||||
|
||||
async _onDropItem(item) {
|
||||
const itemData = item.toObject()
|
||||
delete itemData._id
|
||||
return this.document.createEmbeddedDocuments("Item", [itemData], { renderSheet: false })
|
||||
}
|
||||
|
||||
static #onToggleSheet() {
|
||||
const modes = this.constructor.SHEET_MODES
|
||||
this._sheetMode = this.isEditMode ? modes.PLAY : modes.EDIT
|
||||
this.render()
|
||||
}
|
||||
|
||||
static async #onEditImage(event, target) {
|
||||
const attr = target.dataset.edit
|
||||
const current = foundry.utils.getProperty(this.document, attr)
|
||||
const fp = new FilePicker({
|
||||
current,
|
||||
type: "image",
|
||||
callback: (path) => this.document.update({ [attr]: path }),
|
||||
top: this.position.top + 40,
|
||||
left: this.position.left + 10,
|
||||
})
|
||||
return fp.browse()
|
||||
}
|
||||
|
||||
static async #onCreateItem(event, target) {
|
||||
const type = target.dataset.type
|
||||
if (!type) return
|
||||
const label = game.i18n.localize(`TYPES.Item.${type}`)
|
||||
return this.document.createEmbeddedDocuments("Item", [{
|
||||
name: label,
|
||||
type,
|
||||
img: LesOubliesUtility.getDefaultItemImage(type),
|
||||
}])
|
||||
}
|
||||
|
||||
static async #onEditItem(event, target) {
|
||||
const itemId = target.dataset.itemId
|
||||
const item = this.document.items.get(itemId)
|
||||
if (item) item.sheet.render(true)
|
||||
}
|
||||
|
||||
static async #onDeleteItem(event, target) {
|
||||
const itemId = target.dataset.itemId
|
||||
const item = this.document.items.get(itemId)
|
||||
if (item) await item.delete()
|
||||
}
|
||||
|
||||
static async #onOpenRoll() {
|
||||
await this.document.openTestRollDialog()
|
||||
}
|
||||
|
||||
static async #onOpenConfrontation() {
|
||||
await this.document.openConfrontationRollDialog()
|
||||
}
|
||||
|
||||
static async #onOpenInitiative() {
|
||||
await this.document.openInitiativeRollDialog()
|
||||
}
|
||||
|
||||
static async #onRollProfile(event, target) {
|
||||
const profileKey = target.dataset.profileKey
|
||||
if (!profileKey) return
|
||||
await this.document.rollProfile(profileKey)
|
||||
}
|
||||
|
||||
static async #onRollSkill(event, target) {
|
||||
const itemId = target.dataset.itemId
|
||||
if (!itemId) return
|
||||
await this.document.rollCompetence(itemId)
|
||||
}
|
||||
|
||||
static async #onUseWeapon(event, target) {
|
||||
const itemId = target.dataset.itemId
|
||||
if (!itemId) return
|
||||
await this.document.openAttackRollDialog({ itemId })
|
||||
}
|
||||
|
||||
static async #onResolveWeaponDamage(event, target) {
|
||||
const itemId = target.dataset.itemId
|
||||
if (!itemId) return
|
||||
await this.document.openDamageDialog({ itemId })
|
||||
}
|
||||
|
||||
static async #onUseSpell(event, target) {
|
||||
const itemId = target.dataset.itemId
|
||||
if (!itemId) return
|
||||
await this.document.openSpellActivationDialog(itemId)
|
||||
}
|
||||
|
||||
static async #onOpenCombatPreset(event, target) {
|
||||
const actionKey = target.dataset.preset
|
||||
if (!actionKey) return
|
||||
await this.document.openCombatPresetDialog(actionKey)
|
||||
}
|
||||
|
||||
static async #onOpenThreadHarvest() {
|
||||
await this.document.openThreadHarvestDialog()
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
const { HandlebarsApplicationMixin } = foundry.applications.api
|
||||
|
||||
export default class LesOubliesItemSheet extends HandlebarsApplicationMixin(foundry.applications.sheets.ItemSheetV2) {
|
||||
static SHEET_MODES = { EDIT: 0, PLAY: 1 }
|
||||
|
||||
static DEFAULT_OPTIONS = {
|
||||
classes: ["fvtt-les-oublies", "sheet", "item"],
|
||||
position: {
|
||||
width: 760,
|
||||
height: 720,
|
||||
},
|
||||
window: {
|
||||
resizable: true,
|
||||
},
|
||||
form: {
|
||||
submitOnChange: true,
|
||||
closeOnSubmit: false,
|
||||
},
|
||||
actions: {
|
||||
toggleSheet: LesOubliesItemSheet.#onToggleSheet,
|
||||
editImage: LesOubliesItemSheet.#onEditImage,
|
||||
},
|
||||
}
|
||||
|
||||
_sheetMode = this.constructor.SHEET_MODES.EDIT
|
||||
|
||||
get isEditMode() {
|
||||
return this._sheetMode === this.constructor.SHEET_MODES.EDIT
|
||||
}
|
||||
|
||||
get isPlayMode() {
|
||||
return this._sheetMode === this.constructor.SHEET_MODES.PLAY
|
||||
}
|
||||
|
||||
async _prepareContext() {
|
||||
return {
|
||||
item: this.document,
|
||||
system: this.document.system,
|
||||
source: this.document.toObject(),
|
||||
fields: this.document.schema.fields,
|
||||
systemFields: this.document.system.schema.fields,
|
||||
isEditable: this.isEditable,
|
||||
isEditMode: this.isEditMode,
|
||||
isPlayMode: this.isPlayMode,
|
||||
isGM: game.user.isGM,
|
||||
config: CONFIG.LESOUBLIES,
|
||||
enrichedDescription: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.description ?? "", { async: true }),
|
||||
}
|
||||
}
|
||||
|
||||
static #onToggleSheet() {
|
||||
const modes = this.constructor.SHEET_MODES
|
||||
this._sheetMode = this.isEditMode ? modes.PLAY : modes.EDIT
|
||||
this.render()
|
||||
}
|
||||
|
||||
static async #onEditImage(event, target) {
|
||||
const attr = target.dataset.edit
|
||||
const current = foundry.utils.getProperty(this.document, attr)
|
||||
const fp = new FilePicker({
|
||||
current,
|
||||
type: "image",
|
||||
callback: (path) => this.document.update({ [attr]: path }),
|
||||
top: this.position.top + 40,
|
||||
left: this.position.left + 10,
|
||||
})
|
||||
return fp.browse()
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
import LesOubliesActorSheet from "./base-actor-sheet.mjs"
|
||||
|
||||
export default class LesOubliesCompagnieSheet extends LesOubliesActorSheet {
|
||||
static DEFAULT_OPTIONS = {
|
||||
...super.DEFAULT_OPTIONS,
|
||||
classes: [...super.DEFAULT_OPTIONS.classes, "compagnie"],
|
||||
window: {
|
||||
...super.DEFAULT_OPTIONS.window,
|
||||
title: "TYPES.Actor.compagnie",
|
||||
},
|
||||
}
|
||||
|
||||
static PARTS = {
|
||||
sheet: {
|
||||
template: "systems/fvtt-les-oublies/templates/actor-compagnie-sheet.hbs",
|
||||
},
|
||||
}
|
||||
|
||||
async _prepareContext() {
|
||||
const context = await super._prepareContext()
|
||||
context.members = (this.document.system.memberIds ?? []).map((id) => game.actors.get(id)).filter(Boolean)
|
||||
context.captain = this.document.system.captainId ? game.actors.get(this.document.system.captainId) : null
|
||||
context.shadow = this.document.system.ombreDuTourmentId ? game.actors.get(this.document.system.ombreDuTourmentId) : null
|
||||
context.powers = this.document.getEmbeddedItems("pouvoircompagnie")
|
||||
context.primaryPower = context.powers[0] ?? null
|
||||
context.links = (this.document.system.links ?? []).map((link) => ({
|
||||
...link,
|
||||
sourceLabel: game.actors.get(link.sourceId)?.name ?? link.sourceId,
|
||||
targetLabel: game.actors.get(link.targetId)?.name ?? link.targetId,
|
||||
}))
|
||||
return context
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
import LesOubliesItemSheet from "./base-item-sheet.mjs"
|
||||
|
||||
export default class LesOubliesCompetenceSheet extends LesOubliesItemSheet {
|
||||
static PARTS = {
|
||||
sheet: {
|
||||
template: "systems/fvtt-les-oublies/templates/item-competence-sheet.hbs",
|
||||
},
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
import LesOubliesActorSheet from "./base-actor-sheet.mjs"
|
||||
|
||||
export default class LesOubliesCreatureSheet extends LesOubliesActorSheet {
|
||||
static DEFAULT_OPTIONS = {
|
||||
...super.DEFAULT_OPTIONS,
|
||||
classes: [...super.DEFAULT_OPTIONS.classes, "creature"],
|
||||
window: {
|
||||
...super.DEFAULT_OPTIONS.window,
|
||||
title: "TYPES.Actor.creature",
|
||||
},
|
||||
}
|
||||
|
||||
static PARTS = {
|
||||
sheet: {
|
||||
template: "systems/fvtt-les-oublies/templates/actor-creature-sheet.hbs",
|
||||
},
|
||||
}
|
||||
|
||||
async _prepareContext() {
|
||||
const context = await super._prepareContext()
|
||||
context.derived = this.document.getDerivedOverview()
|
||||
context.skillGroups = this.document.getGroupedCompetences()
|
||||
context.spells = this.document.getEmbeddedItems("sortilege")
|
||||
context.weapons = this.document.getEmbeddedItems("arme")
|
||||
context.armors = this.document.getEmbeddedItems("armure")
|
||||
context.equipment = this.document.getEmbeddedItems("equipement")
|
||||
return context
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
import LesOubliesItemSheet from "./base-item-sheet.mjs"
|
||||
|
||||
export default class LesOubliesEquipementSheet extends LesOubliesItemSheet {
|
||||
static PARTS = {
|
||||
sheet: {
|
||||
template: "systems/fvtt-les-oublies/templates/item-equipement-sheet.hbs",
|
||||
},
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
import LesOubliesActorSheet from "./base-actor-sheet.mjs"
|
||||
|
||||
export default class LesOubliesPersonnageSheet extends LesOubliesActorSheet {
|
||||
static DEFAULT_OPTIONS = {
|
||||
...super.DEFAULT_OPTIONS,
|
||||
classes: [...super.DEFAULT_OPTIONS.classes, "personnage"],
|
||||
window: {
|
||||
...super.DEFAULT_OPTIONS.window,
|
||||
title: "TYPES.Actor.personnage",
|
||||
},
|
||||
}
|
||||
|
||||
static PARTS = {
|
||||
sheet: {
|
||||
template: "systems/fvtt-les-oublies/templates/actor-personnage-sheet.hbs",
|
||||
},
|
||||
}
|
||||
|
||||
async _prepareContext() {
|
||||
const context = await super._prepareContext()
|
||||
context.derived = this.document.getDerivedOverview()
|
||||
context.creation = {
|
||||
race: this.document.getCreationItem("race"),
|
||||
tribu: this.document.getCreationItem("tribu"),
|
||||
metier: this.document.getCreationItem("metier"),
|
||||
}
|
||||
context.profileEntries = this.document.system.profils
|
||||
context.skillGroups = this.document.getGroupedCompetences()
|
||||
context.spells = this.document.getEmbeddedItems("sortilege")
|
||||
context.weapons = this.document.getEmbeddedItems("arme")
|
||||
context.armors = this.document.getEmbeddedItems("armure")
|
||||
context.equipment = this.document.getEmbeddedItems("equipement")
|
||||
context.companyPowers = this.document.getEmbeddedItems("pouvoircompagnie")
|
||||
context.activeCompanyPower = context.derived.compagnie?.getEmbeddedItems?.("pouvoircompagnie")?.[0] ?? null
|
||||
return context
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
import LesOubliesItemSheet from "./base-item-sheet.mjs"
|
||||
|
||||
export default class LesOubliesPouvoirCompagnieSheet extends LesOubliesItemSheet {
|
||||
static PARTS = {
|
||||
sheet: {
|
||||
template: "systems/fvtt-les-oublies/templates/item-pouvoir-compagnie-sheet.hbs",
|
||||
},
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
import LesOubliesItemSheet from "./base-item-sheet.mjs"
|
||||
|
||||
export default class LesOubliesReferenceItemSheet extends LesOubliesItemSheet {
|
||||
static PARTS = {
|
||||
sheet: {
|
||||
template: "systems/fvtt-les-oublies/templates/item-reference-sheet.hbs",
|
||||
},
|
||||
}
|
||||
|
||||
async _prepareContext() {
|
||||
const context = await super._prepareContext()
|
||||
context.isRace = this.document.type === "race"
|
||||
context.isTribu = this.document.type === "tribu"
|
||||
context.isMetier = this.document.type === "metier"
|
||||
return context
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
import LesOubliesItemSheet from "./base-item-sheet.mjs"
|
||||
|
||||
export default class LesOubliesSortilegeSheet extends LesOubliesItemSheet {
|
||||
static PARTS = {
|
||||
sheet: {
|
||||
template: "systems/fvtt-les-oublies/templates/item-sortilege-sheet.hbs",
|
||||
},
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user