implements simple filter method for group member' skills and advantages
parent
faa3bc1328
commit
169e41d2c8
|
|
@ -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(),
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@
|
|||
<nav class="sheet-tabs tabs" data-group="primary">
|
||||
<a class="item" data-tab="characters">Charaktere</a>
|
||||
<a class="item" data-tab="inventory">Inventar</a>
|
||||
{{#if owner}}<a class="item" data-tab="settings">Sichtbarkeiten</a>{{/if}}
|
||||
</nav>
|
||||
|
||||
{{!-- Sheet Body --}}
|
||||
|
|
@ -80,6 +81,16 @@
|
|||
<div class="tab inventory" data-group="primary" data-tab="inventory">
|
||||
{{> 'systems/DSA_4-1/templates/ui/partial-equipment-group-button.hbs' equipments}}
|
||||
</div>
|
||||
{{#if owner}}
|
||||
<div class="tab settings" data-group="primary" data-tab="settings">
|
||||
{{#each actor.system.settings}}
|
||||
<div>
|
||||
<label><input name="system.settings.{{@key}}" type="checkbox" {{checked this}}> {{@key}}</label>
|
||||
</div>
|
||||
{{/each}}
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
</section>
|
||||
|
||||
</form>
|
||||
|
|
|
|||
Loading…
Reference in New Issue