Item ehnance, fixes on acto sheet
This commit is contained in:
@@ -9,3 +9,5 @@ export { default as OathHammerMiracleSheet } from "./sheets/miracle-sheet.mjs"
|
||||
export { default as OathHammerMagicItemSheet } from "./sheets/magic-item-sheet.mjs"
|
||||
export { default as OathHammerAbilitySheet } from "./sheets/ability-sheet.mjs"
|
||||
export { default as OathHammerOathSheet } from "./sheets/oath-sheet.mjs"
|
||||
export { default as OathHammerLineageSheet } from "./sheets/lineage-sheet.mjs"
|
||||
export { default as OathHammerClassSheet } from "./sheets/class-sheet.mjs"
|
||||
|
||||
@@ -95,6 +95,13 @@ export default class OathHammerActorSheet extends HandlebarsApplicationMixin(fou
|
||||
|
||||
async _onDropItem(item) {
|
||||
const itemData = item.toObject()
|
||||
// Lineage and class are unique: replace any existing item of the same type
|
||||
if (item.type === "lineage" || item.type === "class") {
|
||||
const existing = this.document.itemTypes[item.type]
|
||||
if (existing.length > 0) {
|
||||
await this.document.deleteEmbeddedDocuments("Item", existing.map(i => i.id))
|
||||
}
|
||||
}
|
||||
await this.document.createEmbeddedDocuments("Item", [itemData], { renderSheet: false })
|
||||
}
|
||||
|
||||
|
||||
@@ -68,6 +68,8 @@ export default class OathHammerCharacterSheet extends OathHammerActorSheet {
|
||||
break
|
||||
case "identity":
|
||||
context.tab = context.tabs.identity
|
||||
context.lineage = doc.itemTypes.lineage?.[0] ?? null
|
||||
context.characterClass = doc.itemTypes["class"]?.[0] ?? null
|
||||
context.abilities = doc.itemTypes.ability
|
||||
context.oaths = doc.itemTypes.oath
|
||||
break
|
||||
@@ -124,7 +126,7 @@ export default class OathHammerCharacterSheet extends OathHammerActorSheet {
|
||||
}
|
||||
|
||||
async _onDrop(event) {
|
||||
if (!this.isEditable || !this.isEditMode) return
|
||||
if (!this.isEditable) return
|
||||
const data = foundry.applications.ux.TextEditor.implementation.getDragEventData(event)
|
||||
if (data.type === "Item") {
|
||||
const item = await fromUuid(data.uuid)
|
||||
|
||||
30
module/applications/sheets/class-sheet.mjs
Normal file
30
module/applications/sheets/class-sheet.mjs
Normal file
@@ -0,0 +1,30 @@
|
||||
import OathHammerItemSheet from "./base-item-sheet.mjs"
|
||||
|
||||
export default class OathHammerClassSheet extends OathHammerItemSheet {
|
||||
/** @override */
|
||||
static DEFAULT_OPTIONS = {
|
||||
classes: ["class"],
|
||||
position: {
|
||||
width: 640,
|
||||
},
|
||||
window: {
|
||||
contentClasses: ["class-content"],
|
||||
},
|
||||
}
|
||||
|
||||
/** @override */
|
||||
static PARTS = {
|
||||
main: {
|
||||
template: "systems/fvtt-oath-hammer/templates/item/class-sheet.hbs",
|
||||
},
|
||||
}
|
||||
|
||||
/** @override */
|
||||
async _prepareContext() {
|
||||
const context = await super._prepareContext()
|
||||
context.enrichedFeatures = await foundry.applications.ux.TextEditor.implementation.enrichHTML(
|
||||
this.document.system.features ?? "", { async: true }
|
||||
)
|
||||
return context
|
||||
}
|
||||
}
|
||||
30
module/applications/sheets/lineage-sheet.mjs
Normal file
30
module/applications/sheets/lineage-sheet.mjs
Normal file
@@ -0,0 +1,30 @@
|
||||
import OathHammerItemSheet from "./base-item-sheet.mjs"
|
||||
|
||||
export default class OathHammerLineageSheet extends OathHammerItemSheet {
|
||||
/** @override */
|
||||
static DEFAULT_OPTIONS = {
|
||||
classes: ["lineage"],
|
||||
position: {
|
||||
width: 640,
|
||||
},
|
||||
window: {
|
||||
contentClasses: ["lineage-content"],
|
||||
},
|
||||
}
|
||||
|
||||
/** @override */
|
||||
static PARTS = {
|
||||
main: {
|
||||
template: "systems/fvtt-oath-hammer/templates/item/lineage-sheet.hbs",
|
||||
},
|
||||
}
|
||||
|
||||
/** @override */
|
||||
async _prepareContext() {
|
||||
const context = await super._prepareContext()
|
||||
context.enrichedTraits = await foundry.applications.ux.TextEditor.implementation.enrichHTML(
|
||||
this.document.system.traits ?? "", { async: true }
|
||||
)
|
||||
return context
|
||||
}
|
||||
}
|
||||
@@ -9,3 +9,5 @@ export { default as OathHammerMiracle } from "./miracle.mjs"
|
||||
export { default as OathHammerMagicItem } from "./magic-item.mjs"
|
||||
export { default as OathHammerAbility } from "./ability.mjs"
|
||||
export { default as OathHammerOath } from "./oath.mjs"
|
||||
export { default as OathHammerLineage } from "./lineage.mjs"
|
||||
export { default as OathHammerClass } from "./class.mjs"
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
import { SYSTEM } from "../config/system.mjs"
|
||||
|
||||
export default class OathHammerCharacter extends foundry.abstract.TypeDataModel {
|
||||
static defineSchema() {
|
||||
@@ -88,8 +87,6 @@ export default class OathHammerCharacter extends foundry.abstract.TypeDataModel
|
||||
})
|
||||
|
||||
schema.biodata = new fields.SchemaField({
|
||||
lineage: new fields.StringField({ required: true, initial: "dwarf", choices: SYSTEM.LINEAGE_CHOICES }),
|
||||
class: new fields.StringField({ required: true, initial: "soldier", choices: SYSTEM.CLASS_CHOICES }),
|
||||
age: new fields.StringField({ required: true, nullable: false, initial: "" }),
|
||||
gender: new fields.StringField({ required: true, nullable: false, initial: "" }),
|
||||
height: new fields.StringField({ required: true, nullable: false, initial: "" }),
|
||||
|
||||
21
module/models/class.mjs
Normal file
21
module/models/class.mjs
Normal file
@@ -0,0 +1,21 @@
|
||||
export default class OathHammerClass extends foundry.abstract.TypeDataModel {
|
||||
static defineSchema() {
|
||||
const fields = foundry.data.fields
|
||||
const schema = {}
|
||||
|
||||
schema.description = new fields.HTMLField({ required: true, textSearch: true })
|
||||
|
||||
// Class features, starting abilities, advancement options (rich text)
|
||||
schema.features = new fields.HTMLField({ required: true, textSearch: true })
|
||||
|
||||
// Armor proficiencies (e.g. "Light, Medium, Heavy")
|
||||
schema.armorProficiency = new fields.StringField({ required: true, nullable: false, initial: "" })
|
||||
|
||||
// Weapon proficiencies (e.g. "Common, Dueling, Heavy, Throwing")
|
||||
schema.weaponProficiency = new fields.StringField({ required: true, nullable: false, initial: "" })
|
||||
|
||||
return schema
|
||||
}
|
||||
|
||||
static LOCALIZATION_PREFIXES = ["OATHHAMMER.Class"]
|
||||
}
|
||||
21
module/models/lineage.mjs
Normal file
21
module/models/lineage.mjs
Normal file
@@ -0,0 +1,21 @@
|
||||
export default class OathHammerLineage extends foundry.abstract.TypeDataModel {
|
||||
static defineSchema() {
|
||||
const fields = foundry.data.fields
|
||||
const schema = {}
|
||||
|
||||
schema.description = new fields.HTMLField({ required: true, textSearch: true })
|
||||
|
||||
// Racial traits and special abilities (rich text)
|
||||
schema.traits = new fields.HTMLField({ required: true, textSearch: true })
|
||||
|
||||
// Base movement speed in feet
|
||||
schema.movement = new fields.NumberField({ required: true, nullable: false, integer: true, initial: 30, min: 0 })
|
||||
|
||||
// Modifier to max Grit Points (e.g. -1 for High Elf, Wood Elf)
|
||||
schema.gritModifier = new fields.NumberField({ required: true, nullable: false, integer: true, initial: 0 })
|
||||
|
||||
return schema
|
||||
}
|
||||
|
||||
static LOCALIZATION_PREFIXES = ["OATHHAMMER.Lineage"]
|
||||
}
|
||||
Reference in New Issue
Block a user