Get the weapons block implemented
This commit is contained in:
parent
a8619246fe
commit
f68e7161df
4 changed files with 149 additions and 27 deletions
|
|
@ -12,6 +12,7 @@ export async function registerHandlebarsHelpers() {
|
||||||
"dotdungeon-toFriendlyDuration": toFriendlyDuration,
|
"dotdungeon-toFriendlyDuration": toFriendlyDuration,
|
||||||
"dotdungeon-objectValue": objectValue,
|
"dotdungeon-objectValue": objectValue,
|
||||||
"dotdungeon-stringify": v => JSON.stringify(v, null, ` `),
|
"dotdungeon-stringify": v => JSON.stringify(v, null, ` `),
|
||||||
|
"dotdungeon-expanded": detailsExpanded,
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -74,3 +75,15 @@ function toFriendlyDuration(duration) {
|
||||||
};
|
};
|
||||||
return friendly;
|
return friendly;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If the argument is truthy, it returns HTML data to indicate the collapse is
|
||||||
|
* open
|
||||||
|
*
|
||||||
|
* @param {Set<string>} expanded A set indicating what collapseIds are expanded
|
||||||
|
* @param {string} collapseId The collapseId to check for
|
||||||
|
* @returns {"open"|null} The HTML insertion indicating the details is expanded
|
||||||
|
*/
|
||||||
|
function detailsExpanded(expanded, collapseId) {
|
||||||
|
return expanded.has(collapseId) ? "open" : null;
|
||||||
|
};
|
||||||
|
|
@ -18,6 +18,22 @@ function trainingLevelField() {
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
function weaponDamageTypeField() {
|
||||||
|
return new foundry.data.fields.StringField({
|
||||||
|
initial: ``,
|
||||||
|
blank: true,
|
||||||
|
options: [ ``, `slashing`, `piercing`, `smashing`, `gun`, `neon`, `shadow`, `solar` ],
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
function ammoTypeField() {
|
||||||
|
return new foundry.data.fields.StringField({
|
||||||
|
initial: ``,
|
||||||
|
blank: true,
|
||||||
|
options: [ ``, `quivers`, `mags`, `cells` ],
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
export class PlayerData extends foundry.abstract.DataModel {
|
export class PlayerData extends foundry.abstract.DataModel {
|
||||||
static defineSchema() {
|
static defineSchema() {
|
||||||
const fields = foundry.data.fields;
|
const fields = foundry.data.fields;
|
||||||
|
|
@ -78,12 +94,24 @@ export class PlayerData extends foundry.abstract.DataModel {
|
||||||
r4: new fields.StringField({ blank: true, trim: true }),
|
r4: new fields.StringField({ blank: true, trim: true }),
|
||||||
}),
|
}),
|
||||||
weapon: new fields.SchemaField({
|
weapon: new fields.SchemaField({
|
||||||
name: new fields.StringField(),
|
mainHand: new fields.SchemaField({
|
||||||
damage: new fields.StringField(),
|
name: new fields.StringField({ blank: true, trim: true }),
|
||||||
|
damage: weaponDamageTypeField(),
|
||||||
|
ranged: new fields.BooleanField({ initial: false }),
|
||||||
|
scope: new fields.BooleanField({ initial: false }),
|
||||||
|
ammo: ammoTypeField(),
|
||||||
|
}),
|
||||||
|
offHand: new fields.SchemaField({
|
||||||
|
name: new fields.StringField({ blank: true, trim: true }),
|
||||||
|
damage: weaponDamageTypeField(),
|
||||||
|
ranged: new fields.BooleanField({ initial: false }),
|
||||||
|
scope: new fields.BooleanField({ initial: false }),
|
||||||
|
ammo: ammoTypeField(),
|
||||||
|
}),
|
||||||
ammo: new fields.SchemaField({
|
ammo: new fields.SchemaField({
|
||||||
quivers: new fields.NumberField({ min: 0, max: 5, integer: true }),
|
quivers: new fields.NumberField({ min: 0, max: 10, integer: true }),
|
||||||
mags: new fields.NumberField({ min: 0, max: 5, integer: true }),
|
mags: new fields.NumberField({ min: 0, max: 10, integer: true }),
|
||||||
cells: new fields.NumberField({ min: 0, max: 5, integer: true }),
|
cells: new fields.NumberField({ min: 0, max: 10, integer: true }),
|
||||||
}),
|
}),
|
||||||
}),
|
}),
|
||||||
supplies: new fields.NumberField({
|
supplies: new fields.NumberField({
|
||||||
|
|
|
||||||
|
|
@ -19,28 +19,26 @@ export class PlayerSheet extends GenericSheet {
|
||||||
if (!this.isEditable) return;
|
if (!this.isEditable) return;
|
||||||
console.debug(`.dungeon | Adding event listeners for Actor: ${this.id}`);
|
console.debug(`.dungeon | Adding event listeners for Actor: ${this.id}`);
|
||||||
|
|
||||||
// html.find(`input.sync__input`).on("blur", ($e) => {
|
/*
|
||||||
// console.debug(`.dungeon | input.sync__input blur event`);
|
Toggles the expanded state for the detail elements in the sheet.
|
||||||
|
*/
|
||||||
// let value = parseInt($e.target.value);
|
html.find(`summary`).on(`click`, ($e) => {
|
||||||
// if (!value) {
|
console.debug(`.dungeon | summary[data-collapse-id="${$e.target.dataset.collapseId}"] click event`);
|
||||||
// ui.notifications.error(
|
/*
|
||||||
// `dotdungeon.notification.error.invalid-integer`,
|
This seeming inversion of logic is due to the fact that this handler
|
||||||
// { localize: true }
|
gets called before the element is updated to include/reflect the
|
||||||
// );
|
change, so if the parentNode doesn't actually have it, then we're
|
||||||
// return;
|
opening it and vice-versa.
|
||||||
// };
|
*/
|
||||||
// let delta = value - this.#syncValue();
|
if (!$e.target.parentNode.open) {
|
||||||
// this.actor.system.syncDelta += delta;
|
this._expanded.add($e.target.dataset.collapseId);
|
||||||
// for (const actor of game.actors) {
|
} else {
|
||||||
// if (actor._sheet)
|
this._expanded.delete($e.target.dataset.collapseId);
|
||||||
// }
|
|
||||||
// game.socket.emit(`system.dotdungeon`, {
|
|
||||||
// type: "reload",
|
|
||||||
|
|
||||||
// })
|
|
||||||
// });
|
|
||||||
};
|
};
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
_expanded = new Set();
|
||||||
|
|
||||||
#syncValue() {
|
#syncValue() {
|
||||||
let delta = 0;
|
let delta = 0;
|
||||||
|
|
@ -62,6 +60,10 @@ export class PlayerSheet extends GenericSheet {
|
||||||
canChangeGroup: ctx.settings.playersCanChangeGroup || ctx.isGM,
|
canChangeGroup: ctx.settings.playersCanChangeGroup || ctx.isGM,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
ctx.meta = {
|
||||||
|
expanded: this._expanded,
|
||||||
|
};
|
||||||
|
|
||||||
console.groupCollapsed(`PlayerSheet.getData`);
|
console.groupCollapsed(`PlayerSheet.getData`);
|
||||||
console.log(`ctx`, ctx);
|
console.log(`ctx`, ctx);
|
||||||
console.log(`actor`, actor);
|
console.log(`actor`, actor);
|
||||||
|
|
|
||||||
|
|
@ -205,7 +205,82 @@
|
||||||
|
|
||||||
|
|
||||||
{{#> dotdungeon.panel class="weapons" title="dotdungeon.actor.pc.panel.weapons"}}
|
{{#> dotdungeon.panel class="weapons" title="dotdungeon.actor.pc.panel.weapons"}}
|
||||||
Weapons
|
<details class="main-hand" {{dotdungeon-expanded meta.expanded "weapons.main-hand"}}>
|
||||||
|
<summary data-collapse-id="weapons.main-hand">
|
||||||
|
Main-Hand
|
||||||
|
</summary>
|
||||||
|
<label>
|
||||||
|
Name
|
||||||
|
<input
|
||||||
|
type="text"
|
||||||
|
name=""
|
||||||
|
>
|
||||||
|
</label>
|
||||||
|
<label>
|
||||||
|
Damage
|
||||||
|
<select name="system.weapon.mainHand.damage"></select>
|
||||||
|
</label>
|
||||||
|
<label>
|
||||||
|
Ranged
|
||||||
|
<input
|
||||||
|
type="checkbox"
|
||||||
|
name="system.weapon.mainHand.ranged"
|
||||||
|
{{checked system.weapon.mainHand.ranged}}
|
||||||
|
>
|
||||||
|
</label>
|
||||||
|
{{#if system.weapon.mainHand.ranged}}
|
||||||
|
<label>
|
||||||
|
Scope
|
||||||
|
<input
|
||||||
|
type="checkbox"
|
||||||
|
name="system.weapon.mainHand.scope"
|
||||||
|
{{checked system.weapon.mainHand.scope}}
|
||||||
|
>
|
||||||
|
</label>
|
||||||
|
<label>
|
||||||
|
Ammo
|
||||||
|
<select name=""></select>
|
||||||
|
</label>
|
||||||
|
{{/if}}
|
||||||
|
</details>
|
||||||
|
<details {{dotdungeon-expanded meta.expanded "weapons.off-hand"}}>
|
||||||
|
<summary data-collapse-id="weapons.off-hand">
|
||||||
|
Off-Hand
|
||||||
|
</summary>
|
||||||
|
<label>
|
||||||
|
Name
|
||||||
|
<input
|
||||||
|
type="text"
|
||||||
|
name=""
|
||||||
|
>
|
||||||
|
</label>
|
||||||
|
<label>
|
||||||
|
Damage
|
||||||
|
<select name="system.weapon.offHand.damage"></select>
|
||||||
|
</label>
|
||||||
|
<label>
|
||||||
|
Ranged
|
||||||
|
<input
|
||||||
|
type="checkbox"
|
||||||
|
name="system.weapon.offHand.ranged"
|
||||||
|
{{checked system.weapon.offHand.ranged}}
|
||||||
|
>
|
||||||
|
</label>
|
||||||
|
{{#if system.weapon.offHand.ranged}}
|
||||||
|
<label>
|
||||||
|
Scope
|
||||||
|
<input
|
||||||
|
type="checkbox"
|
||||||
|
name="system.weapon.offHand.scope"
|
||||||
|
{{checked system.weapon.offHand.scope}}
|
||||||
|
>
|
||||||
|
</label>
|
||||||
|
<label>
|
||||||
|
Ammo
|
||||||
|
<select name=""></select>
|
||||||
|
</label>
|
||||||
|
{{/if}}
|
||||||
|
</details>
|
||||||
{{/ dotdungeon.panel}}
|
{{/ dotdungeon.panel}}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -244,6 +319,10 @@
|
||||||
<pre><code>{{dotdungeon-stringify settings}}</code></pre>
|
<pre><code>{{dotdungeon-stringify settings}}</code></pre>
|
||||||
</div>
|
</div>
|
||||||
<hr>
|
<hr>
|
||||||
|
<div>
|
||||||
|
Expanded: {{dotdungeon-stringify expanded}}
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
<div>
|
<div>
|
||||||
System:
|
System:
|
||||||
<pre><code>{{dotdungeon-stringify system}}</code></pre>
|
<pre><code>{{dotdungeon-stringify system}}</code></pre>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue