Skip to content

Commit

Permalink
add player name and manual xp fields (#410)
Browse files Browse the repository at this point in the history
Fixes: #400
Fixes: #329
  • Loading branch information
zkat authored Jul 13, 2024
1 parent 5613a29 commit 7631263
Show file tree
Hide file tree
Showing 4 changed files with 111 additions and 18 deletions.
36 changes: 33 additions & 3 deletions src/characters/character-block.ts
Original file line number Diff line number Diff line change
Expand Up @@ -210,7 +210,13 @@ class CharacterRenderer extends TrackedEntityRenderer<
</option>
</select>
<dl>
<dt>${this.plugin.settings.enableIronsworn ? "Alias" : "Callsign"}</dt>
<dt>
${this.plugin.settings.enableIronsworn
? "Alias"
: this.plugin.settings.enableSunderedIsles
? "Moniker"
: "Callsign"}
</dt>
<dd class="callsign">
<input
type="text"
Expand Down Expand Up @@ -241,12 +247,36 @@ class CharacterRenderer extends TrackedEntityRenderer<
>
</textarea>
</dd>
<dt>XP earned</dt>
<dd class="xp-earned">
<dt>Player</dt>
<dd class="player">
<input
type="text"
placeholder="You"
.value=${lens.player.get(raw) || ""}
@change=${charFieldUpdater(lens.player)}
/>
</dd>
<dt>XP From Tracks</dt>
<dd class="xp-from-tracks">
${Object.values(lens.special_tracks).reduce((acc, track) => {
return acc + legacyTrackXpEarned(track.get(raw));
}, 0)}
</dd>
<dt>XP added</dt>
<dd class="xp-added">
<input
type="number"
.value=${lens.xp_added.get(raw) ?? ""}
@change=${charNumFieldUpdater(lens.xp_added)}
/>
</dd>
<dt>Total XP earned</dt>
<dd class="xp-earned">
${(lens.xp_added.get(raw) ?? 0) +
Object.values(lens.special_tracks).reduce((acc, track) => {
return acc + legacyTrackXpEarned(track.get(raw));
}, 0)}
</dd>
<dt>XP spent</dt>
<dd class="xp-spent">
<input
Expand Down
76 changes: 61 additions & 15 deletions src/characters/css/character-info.css
Original file line number Diff line number Diff line change
Expand Up @@ -40,20 +40,74 @@
display: grid;
max-width: 460px;
grid-template-columns: 1fr 1fr;
grid-template-rows: 1fr auto 1fr;
grid-template-areas: "name pronouns" "description description" "xp-earned xp-spent";
grid-template-rows: 1fr 1fr 1fr auto 1fr 1fr 1fr 1fr 1fr;
grid-template-areas:
"callsign pronouns"
"callsign-txt pronouns-txt"
"description description"
"description-txt description-txt"
"player player"
"player-txt player-txt"
"xp-from-tracks xp-added"
"xp-from-tracks-txt xp-added-txt"
"total-xp xp-spent"
"total-xp-txt xp-spent-txt";
column-gap: 0.2em;
align-items: end;
& dt:has(+ .callsign) {
grid-area: callsign;
}
& dd.callsign {
grid-area: callsign-txt;
}
& dt:has(+ .pronouns) {
grid-area: pronouns;
}
& dd.pronouns {
grid-area: pronouns-txt;
}
& dt:has(+ .description) {
grid-area: description;
}
& dd.description {
grid-area: description-txt;
}
& dt:has(+ .player) {
grid-area: player;
}
& dd.player {
grid-area: player-txt;
}
& dt:has(+ .xp-from-tracks) {
grid-area: xp-from-tracks;
}
& dd.xp-from-tracks {
grid-area: xp-from-tracks-txt;
}
& dt:has(+ .xp-added) {
grid-area: xp-added;
}
& dd.xp-added {
grid-area: xp-added-txt;
}
& dt:has(+ .total-xp) {
grid-area: total-xp;
}
& dd.total-xp {
grid-area: total-xp-txt;
}
& dt:has(+ .xp-spent) {
grid-area: xp-spent;
}
& dd.xp-spent {
grid-area: xp-spent-txt;
}
& dt {
vertical-align: bottom;
font-weight: var(--font-semibold);
font-size: 0.8em;
text-transform: uppercase;
color: var(--text-faint);
grid-row-start: 5;
&:has(~ .description) {
grid-row-start: 1;
}
}
& dd input, & dd textarea, & dd:has(textarea) {
padding: 0.4em;
Expand Down Expand Up @@ -85,15 +139,7 @@
grid-area: 1 / 1 / 2 / 2;
}
}
& dt:has(+ .description) {
grid-column: 1 / span 2;
grid-row-start: 3;
}
& dd.description {
grid-column: 1 / span 2;
grid-row-start: 4;
}
& dd.xp-earned {
& dd.xp-earned, & dd.xp-from-tracks {
padding-left: 0.4em;
}
}
Expand Down
1 change: 1 addition & 0 deletions src/characters/lens.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -482,6 +482,7 @@ describe("createValidCharacter", () => {
shadow: 0,
heart: 0,
edge: 0,
xp_added: 0,
xp_spent: 0,
Bonds_Progress: 0,
Bonds_XPEarned: 0,
Expand Down
16 changes: 16 additions & 0 deletions src/characters/lens.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,9 @@ export const baseIronVaultSchema = z
callsign: z.string().optional(),
pronouns: z.string().optional(),
description: z.string().optional(),
player: z.string().optional(),
xp_spent: z.number().int().nonnegative().default(0),
xp_added: z.number().int().nonnegative().default(0),

// Starting momentum is 2 according to Starforged p111
momentum: z.number().int().gte(-10).lte(10).default(2),
Expand All @@ -74,7 +76,9 @@ export interface CharacterLens {
callsign: Lens<ValidatedCharacter, string | undefined>;
pronouns: Lens<ValidatedCharacter, string | undefined>;
description: Lens<ValidatedCharacter, string | undefined>;
player: Lens<ValidatedCharacter, string | undefined>;
xp_spent: Lens<ValidatedCharacter, number>;
xp_added: Lens<ValidatedCharacter, number>;
momentum: Lens<ValidatedCharacter, number>;
stats: Record<string, Lens<ValidatedCharacter, number>>;
condition_meters: Record<string, Lens<ValidatedCharacter, number>>;
Expand Down Expand Up @@ -520,12 +524,24 @@ export function characterLens(ruleset: Ruleset): {
schema: baseIronVaultSchema.shape.description,
}),
),
player: v(
lensForSchemaProp({
path: "player",
schema: baseIronVaultSchema.shape.player,
}),
),
xp_spent: v(
lensForSchemaProp({
path: "xp_spent",
schema: baseIronVaultSchema.shape.xp_spent,
}),
),
xp_added: v(
lensForSchemaProp({
path: "xp_added",
schema: baseIronVaultSchema.shape.xp_added,
}),
),
momentum: v(
lensForSchemaProp({
path: "momentum",
Expand Down

0 comments on commit 7631263

Please sign in to comment.