RC-30 | Weapons | Table Setup

This commit is contained in:
Oliver-Akins 2024-12-28 17:14:43 -07:00
parent 941c5f885f
commit bf8440e53d
5 changed files with 97 additions and 13 deletions

View file

@ -33,6 +33,30 @@
</div> </div>
{{!-- * Weapons --}} {{!-- * Weapons --}}
<table class="weapons">
<thead>
<tr>
<th class="label col-header">{{ rc-i18n "RipCrypt.common.weapon.plural" }}</th>
<th class="label col-header">{{ rc-i18n "RipCrypt.Apps.traits-range" }}</th>
<th class="label col-header">{{ rc-i18n "RipCrypt.common.wear" }}</th>
<th class="label col-header">{{ rc-i18n "RipCrypt.common.damage" }}</th>
</tr>
</thead>
<tbody>
{{#each weapons as | slot |}}
{{#if slot.empty}}
<tr data-row="{{slot.index}}" class="{{slot.class}}">
<td>---</td>
<td></td>
<td></td>
<td></td>
</tr>
{{else}}
<tr data-row="index"></tr>
{{/if}}
{{/each}}
</tbody>
</table>
{{!-- * Abilities --}} {{!-- * Abilities --}}
<div class="abilities"> <div class="abilities">
@ -77,7 +101,7 @@
<span class="max">{{speed.run}}</span> <span class="max">{{speed.run}}</span>
</div> </div>
<div aria-hidden="true" class="col-header label"> <div aria-hidden="true" class="col-header label">
{{rc-i18n "RipCrypt.Apps.HeroSummaryCardV1.move-run"}} {{rc-i18n "RipCrypt.Apps.move-run"}}
</div> </div>
</div> </div>
</div> </div>

View file

@ -4,7 +4,7 @@
--input-height: 1rem; --input-height: 1rem;
display: grid; display: grid;
grid-template-columns: minmax(0, 3fr) minmax(0, 2fr) minmax(0, 2fr) minmax(0, 1fr) minmax(0, 2.5fr); grid-template-columns: minmax(0, 3fr) minmax(0, 2fr) minmax(0, 2fr) minmax(0, 1.25fr) minmax(0, 2.5fr);
grid-template-rows: repeat(15, minmax(0, 1fr)); grid-template-rows: repeat(15, minmax(0, 1fr));
column-gap: var(--col-gap); column-gap: var(--col-gap);
@ -23,6 +23,10 @@
box-sizing: border-box; box-sizing: border-box;
padding: 2px 4px; padding: 2px 4px;
text-transform: uppercase; text-transform: uppercase;
font-size: var(--font-size-14);
overflow: hidden;
text-overflow: ellipsis;
font-weight: bold;
} }
.header { .header {
@ -53,6 +57,24 @@
grid-template-rows: subgrid; grid-template-rows: subgrid;
} }
.weapons {
grid-column: 1 / span 4;
grid-row: 7 / span 5;
display: grid;
grid-template-columns: subgrid;
grid-auto-rows: min-content;
overflow-y: auto;
thead,
tbody,
tr {
display: contents;
}
.row-alt > * {
background: inherit;
}
}
.abilities { .abilities {
grid-column: 1 / span 4; grid-column: 1 / span 4;
grid-row: 12 / span 4; grid-row: 12 / span 4;

View file

@ -10,6 +10,22 @@
--col-gap: 2px; --col-gap: 2px;
} }
table {
all: revert;
box-sizing: border-box;
border-collapse: collapse;
thead, tbody, tr {
all: revert;
}
td, th {
all: revert;
padding: 2px 4px;
font-weight: initial;
text-align: left;
}
}
input { input {
all: revert; all: revert;
box-sizing: border-box; box-sizing: border-box;

View file

@ -26,7 +26,15 @@
"gait": "Gait", "gait": "Gait",
"grip": "Grip", "grip": "Grip",
"glim": "Glim" "glim": "Glim"
} },
"traits": "Traits",
"range": "Range",
"weapon": {
"singular": "Weapon",
"plural": "Weapons"
},
"wear": "Wear",
"damage": "Damage"
}, },
"setting": { "setting": {
"abbrAccess": { "abbrAccess": {
@ -35,9 +43,8 @@
} }
}, },
"Apps": { "Apps": {
"HeroSummaryCardV1": { "move-run": "@RipCrypt.common.move • @RipCrypt.common.run",
"move-run": "@RipCrypt.common.move • @RipCrypt.common.run" "traits-range": "@RipCrypt.common.traits • @RipCrypt.common.range"
}
} }
} }
} }

View file

@ -46,9 +46,10 @@ export class HeroSummaryCardV1 extends HandlebarsApplicationMixin(ActorSheetV2)
ctx.actor = this.document; ctx.actor = this.document;
ctx = await this.prepareFatePath(ctx); ctx = await HeroSummaryCardV1.prepareWeapons(ctx);
ctx = await this.prepareAbilityRow(ctx); ctx = await HeroSummaryCardV1.prepareFatePath(ctx);
ctx = await this.prepareSpeed(ctx); ctx = await HeroSummaryCardV1.prepareAbilityRow(ctx);
ctx = await HeroSummaryCardV1.prepareSpeed(ctx);
partId = partId.slice(0,1).toUpperCase() + partId.slice(1); partId = partId.slice(0,1).toUpperCase() + partId.slice(1);
if (this[`_prepare${partId}Context`] != null) { if (this[`_prepare${partId}Context`] != null) {
@ -59,7 +60,7 @@ export class HeroSummaryCardV1 extends HandlebarsApplicationMixin(ActorSheetV2)
return ctx; return ctx;
}; };
async prepareFatePath(ctx) { static async prepareFatePath(ctx) {
ctx.fate = {}; ctx.fate = {};
ctx.fate.selected = ctx.actor.system.fate; ctx.fate.selected = ctx.actor.system.fate;
ctx.fate.options = [ ctx.fate.options = [
@ -70,7 +71,7 @@ export class HeroSummaryCardV1 extends HandlebarsApplicationMixin(ActorSheetV2)
return ctx; return ctx;
}; };
async prepareAbilityRow(ctx) { static async prepareAbilityRow(ctx) {
ctx.abilities = []; ctx.abilities = [];
for (const key in ctx.actor.system.ability) { for (const key in ctx.actor.system.ability) {
ctx.abilities.push({ ctx.abilities.push({
@ -80,16 +81,30 @@ export class HeroSummaryCardV1 extends HandlebarsApplicationMixin(ActorSheetV2)
{ value: ctx.actor.system.ability[key] }, { value: ctx.actor.system.ability[key] },
), ),
value: ctx.actor.system.ability[key], value: ctx.actor.system.ability[key],
readonly: !this.isEditable, readonly: !ctx.editable,
}); });
}; };
return ctx; return ctx;
}; };
async prepareSpeed(ctx) { static async prepareSpeed(ctx) {
ctx.speed = ctx.actor.system.speed; ctx.speed = ctx.actor.system.speed;
return ctx; return ctx;
}; };
static async prepareWeapons(ctx) {
const limit = ctx.actor.system.limit.weapons;
ctx.weapons = [];
for (let i = 0; i < limit; i++) {
ctx.weapons.push({
data: null,
empty: true,
index: i + 1,
class: i % 2 === 1 ? `row-alt` : ``,
});
};
return ctx;
}
// #endregion // #endregion
// #region Actions // #region Actions