diff --git a/src/module/data/group.mjs b/src/module/data/group.mjs index 8bcbf8af..9786dd34 100644 --- a/src/module/data/group.mjs +++ b/src/module/data/group.mjs @@ -1,5 +1,12 @@ const { - SchemaField, NumberField, StringField, EmbeddedDocumentField, DocumentIdField, ArrayField, ForeignDocumentField + SchemaField, + ObjectField, + NumberField, + StringField, + EmbeddedDocumentField, + DocumentIdField, + ArrayField, + ForeignDocumentField } = foundry.data.fields; export class GroupDataModel extends foundry.abstract.TypeDataModel { @@ -13,7 +20,8 @@ export class GroupDataModel extends foundry.abstract.TypeDataModel { }), characters: new ArrayField( new DocumentIdField(Actor) - ) + ), + settings: new ObjectField(), } } diff --git a/src/module/sheets/groupSheet.mjs b/src/module/sheets/groupSheet.mjs index 11a42caa..6536d933 100644 --- a/src/module/sheets/groupSheet.mjs +++ b/src/module/sheets/groupSheet.mjs @@ -15,6 +15,54 @@ export class GroupSheet extends ActorSheet { }); } + static async onDroppedData(group, sheet, data) { + if (data.type === "Actor") { + const uuid = await foundry.utils.parseUuid(data.uuid); + const character = await (game.actors.get(uuid.id)) + + // check if character already is part of the group + if (group.system.characters.includes(character._id)) { + ui.notifications.warn(`${character.name} befindet sich bereits in der Heldengruppe ${group.name}`) + return false; + } + + + // update group + const settings = {...group.system.settings} + character.items.filter((i) => i.type === "Advantage").forEach((advantage) => { + settings[this.#stringToKeyFieldName(advantage.name)] = false + }) + character.items.filter((i) => i.type === "Skill").forEach((skill) => { + settings[this.#stringToKeyFieldName(skill.name)] = false + }), + await group.update({ + system: { + characters: [ + ...group.system.characters, + character._id + ], + settings: settings + } + }) + ui.notifications.info(`${character.name} ist der Heldengruppe ${group.name} beigetreten`) + } + if (data.type === "Equipment") { + const uuid = await foundry.utils.parseUuid(data.uuid); + const equipment = await (game.actors.get(uuid.id)) + ui.notifications.info(`${equipment.name} befindet sich nun im Inventar der Heldengruppe ${group.name}`) + return true; + } + } + + #stringToKeyFieldName(s) { + return s.replace(/[ \[\]:]/g, "_").toLowerCase() + } + + /** @override */ + get template() { + return `systems/DSA_4-1/templates/actor/group-sheet.hbs`; + } + /** @override */ async getData() { const context = super.getData(); @@ -25,8 +73,11 @@ export class GroupSheet extends ActorSheet { // Add the actor's data to context.data for easier access, as well as flags. context.system = groupData.system; context.flags = groupData.flags; + context.characters = [] - context.characters = []; + context.fields = []; + + const hiddenFields = Object.entries(groupData.system.settings).filter(([key, value]) => value === true).map(([key, value]) => key) for (const characterId of groupData.system.characters) { const character = await game.actors.get(characterId) @@ -45,14 +96,14 @@ export class GroupSheet extends ActorSheet { {name: "KO", value: character.system.attribute.ko.aktuell}, {name: "KK", value: character.system.attribute.kk.aktuell}, ], - advantages: character.items.filter((i) => i.type === "Advantage").map((advantage) => { + advantages: character.items.filter((i) => i.type === "Advantage").filter((i) => hiddenFields.includes(this.#stringToKeyFieldName(i.name))).map((advantage) => { return { name: advantage.name, id: advantage._id, value: advantage.system.value, } }), - skills: character.items.filter((i) => i.type === "Skill").map((skill) => { + skills: character.items.filter((i) => i.type === "Skill").filter((i) => hiddenFields.includes(this.#stringToKeyFieldName(i.name))).map((skill) => { return { name: skill.name, taw: skill.system.taw, @@ -66,7 +117,6 @@ export class GroupSheet extends ActorSheet { ) } - context.equipments = []; const actorData = context.data; Object.values(actorData.items).forEach((item, index) => { @@ -84,41 +134,6 @@ export class GroupSheet extends ActorSheet { return await context; } - /** @override */ - get template() { - return `systems/DSA_4-1/templates/actor/group-sheet.hbs`; - } - - static async onDroppedData(group, sheet, data) { - if (data.type === "Actor") { - const uuid = await foundry.utils.parseUuid(data.uuid); - const character = await (game.actors.get(uuid.id)) - // check if character already is part of the group - if (group.system.characters.includes(character._id)) { - ui.notifications.warn(`${character.name} befindet sich bereits in der Heldengruppe ${group.name}`) - return false; - } - - - // update group - await group.update({ - system: { - characters: [ - ...group.system.characters, - character._id - ] - } - }) - ui.notifications.info(`${character.name} ist der Heldengruppe ${group.name} beigetreten`) - } - if (data.type === "Equipment") { - const uuid = await foundry.utils.parseUuid(data.uuid); - const equipment = await (game.actors.get(uuid.id)) - ui.notifications.info(`${equipment.name} befindet sich nun im Inventar der Heldengruppe ${group.name}`) - return true; - } - } - openEmbeddedDocument(documentId) { this.object.items.get(documentId).sheet.render(true) } diff --git a/src/module/sheets/vornachteilSheet.mjs b/src/module/sheets/vornachteilSheet.mjs index aec033b9..bfc5ad0d 100644 --- a/src/module/sheets/vornachteilSheet.mjs +++ b/src/module/sheets/vornachteilSheet.mjs @@ -49,7 +49,9 @@ export class VornachteilSheet extends ItemSheet { super.activateListeners(html); // Everything below here is only needed if the sheet is editable - if (!this.isEditable) + if (!this.isEditable) { + + } } } diff --git a/src/templates/actor/group-sheet.hbs b/src/templates/actor/group-sheet.hbs index 7ef59b1c..52327def 100644 --- a/src/templates/actor/group-sheet.hbs +++ b/src/templates/actor/group-sheet.hbs @@ -11,6 +11,7 @@ {{!-- Sheet Body --}} @@ -80,6 +81,16 @@
{{> 'systems/DSA_4-1/templates/ui/partial-equipment-group-button.hbs' equipments}}
+ {{#if owner}} +
+ {{#each actor.system.settings}} +
+ +
+ {{/each}} +
+ {{/if}} +