feat(hunting): show cleared encounters and resume interrupted fights
The hunt screen kept whatever roll was last in memory, so a player coming back from a fight saw every encounter as fresh. Encounters now carry their own status, which the combat module advances as fights start and end. - hunt_encounters.status replaces consumed_at, which only recorded that a fight had begun and could not distinguish a win from a loss - a lost fight hands the encounter back as AVAILABLE, so it can be retried; the unique index tying one combat to one encounter goes with it - GET /hunts/active serves the resumable hunt, which the hunt page adopts on entry rather than trusting its in-memory roll - defeated encounters are crossed out and lose their hover and attack action - a fresh page load rejoins a combat the server still holds open Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -21,6 +21,16 @@
|
||||
background-size: 100% 100%;
|
||||
}
|
||||
|
||||
/* A settled encounter is out of play, so the card recedes: the artwork loses
|
||||
its colour and the whole frame dims. */
|
||||
.encounter-card--settled .encounter-card__artwork {
|
||||
filter: grayscale(0.85) brightness(0.6);
|
||||
}
|
||||
|
||||
.encounter-card--settled {
|
||||
opacity: 0.78;
|
||||
}
|
||||
|
||||
/* ---------- crest ---------- */
|
||||
|
||||
.encounter-card__crest {
|
||||
@@ -54,6 +64,17 @@
|
||||
place-items: end center;
|
||||
}
|
||||
|
||||
/* Sits over the artwork panel rather than the whole card, so the name and
|
||||
the danger badge stay readable under it. */
|
||||
.encounter-card__defeated-mark {
|
||||
position: absolute;
|
||||
inset: 6%;
|
||||
inline-size: 88%;
|
||||
block-size: 88%;
|
||||
object-fit: contain;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.encounter-card__artwork {
|
||||
inline-size: 100%;
|
||||
block-size: 100%;
|
||||
@@ -126,15 +147,20 @@
|
||||
text-shadow: 0 0.1rem 0.35rem rgb(0 0 0 / 0.85);
|
||||
}
|
||||
|
||||
.encounter-card__attack:hover {
|
||||
.encounter-card__attack:enabled:hover {
|
||||
color: #f4ecda;
|
||||
box-shadow: inset 0 0 1.1rem rgb(150 200 245 / 0.5);
|
||||
}
|
||||
|
||||
.encounter-card__attack:active {
|
||||
.encounter-card__attack:enabled:active {
|
||||
box-shadow: inset 0 0.15rem 0.7rem rgb(0 0 0 / 0.6);
|
||||
}
|
||||
|
||||
.encounter-card__attack:disabled {
|
||||
color: rgb(214 206 190 / 0.45);
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
.encounter-card__attack:focus-visible {
|
||||
outline: 2px solid var(--ar-blue);
|
||||
outline-offset: -3px;
|
||||
@@ -145,7 +171,7 @@
|
||||
transition: filter var(--ar-motion-base);
|
||||
}
|
||||
|
||||
.encounter-card:hover {
|
||||
.encounter-card:not(.encounter-card--settled):hover {
|
||||
filter: drop-shadow(0 0 0.9rem rgb(214 178 107 / 0.3));
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user