implements simple filter method for group member' skills and advantages
parent
faa3bc1328
commit
169e41d2c8
|
|
@ -1,5 +1,12 @@
|
||||||
const {
|
const {
|
||||||
SchemaField, NumberField, StringField, EmbeddedDocumentField, DocumentIdField, ArrayField, ForeignDocumentField
|
SchemaField,
|
||||||
|
ObjectField,
|
||||||
|
NumberField,
|
||||||
|
StringField,
|
||||||
|
EmbeddedDocumentField,
|
||||||
|
DocumentIdField,
|
||||||
|
ArrayField,
|
||||||
|
ForeignDocumentField
|
||||||
} = foundry.data.fields;
|
} = foundry.data.fields;
|
||||||
|
|
||||||
export class GroupDataModel extends foundry.abstract.TypeDataModel {
|
export class GroupDataModel extends foundry.abstract.TypeDataModel {
|
||||||
|
|
@ -13,7 +20,8 @@ export class GroupDataModel extends foundry.abstract.TypeDataModel {
|
||||||
}),
|
}),
|
||||||
characters: new ArrayField(
|
characters: new ArrayField(
|
||||||
new DocumentIdField(Actor)
|
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 */
|
/** @override */
|
||||||
async getData() {
|
async getData() {
|
||||||
const context = super.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.
|
// Add the actor's data to context.data for easier access, as well as flags.
|
||||||
context.system = groupData.system;
|
context.system = groupData.system;
|
||||||
context.flags = groupData.flags;
|
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) {
|
for (const characterId of groupData.system.characters) {
|
||||||
const character = await game.actors.get(characterId)
|
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: "KO", value: character.system.attribute.ko.aktuell},
|
||||||
{name: "KK", value: character.system.attribute.kk.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 {
|
return {
|
||||||
name: advantage.name,
|
name: advantage.name,
|
||||||
id: advantage._id,
|
id: advantage._id,
|
||||||
value: advantage.system.value,
|
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 {
|
return {
|
||||||
name: skill.name,
|
name: skill.name,
|
||||||
taw: skill.system.taw,
|
taw: skill.system.taw,
|
||||||
|
|
@ -66,7 +117,6 @@ export class GroupSheet extends ActorSheet {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
context.equipments = [];
|
context.equipments = [];
|
||||||
const actorData = context.data;
|
const actorData = context.data;
|
||||||
Object.values(actorData.items).forEach((item, index) => {
|
Object.values(actorData.items).forEach((item, index) => {
|
||||||
|
|
@ -84,41 +134,6 @@ export class GroupSheet extends ActorSheet {
|
||||||
return await context;
|
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) {
|
openEmbeddedDocument(documentId) {
|
||||||
this.object.items.get(documentId).sheet.render(true)
|
this.object.items.get(documentId).sheet.render(true)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -49,7 +49,9 @@ export class VornachteilSheet extends ItemSheet {
|
||||||
super.activateListeners(html);
|
super.activateListeners(html);
|
||||||
|
|
||||||
// Everything below here is only needed if the sheet is editable
|
// 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">
|
<nav class="sheet-tabs tabs" data-group="primary">
|
||||||
<a class="item" data-tab="characters">Charaktere</a>
|
<a class="item" data-tab="characters">Charaktere</a>
|
||||||
<a class="item" data-tab="inventory">Inventar</a>
|
<a class="item" data-tab="inventory">Inventar</a>
|
||||||
|
{{#if owner}}<a class="item" data-tab="settings">Sichtbarkeiten</a>{{/if}}
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
{{!-- Sheet Body --}}
|
{{!-- Sheet Body --}}
|
||||||
|
|
@ -80,6 +81,16 @@
|
||||||
<div class="tab inventory" data-group="primary" data-tab="inventory">
|
<div class="tab inventory" data-group="primary" data-tab="inventory">
|
||||||
{{> 'systems/DSA_4-1/templates/ui/partial-equipment-group-button.hbs' equipments}}
|
{{> 'systems/DSA_4-1/templates/ui/partial-equipment-group-button.hbs' equipments}}
|
||||||
</div>
|
</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>
|
</section>
|
||||||
|
|
||||||
</form>
|
</form>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue