Files
ashen-realms/apps/web/src/app/features/hunting/encounter-card/encounter-card.component.html
Bastian Wagner 3c59603efb 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>
2026-08-20 10:34:46 +02:00

44 lines
1.1 KiB
HTML

<article class="encounter-card" [class.encounter-card--settled]="settled">
<div class="encounter-card__crest">
@if (iconPath(); as icon) {
<img class="encounter-card__crest-icon" [src]="icon" alt="" loading="lazy" decoding="async" />
}
</div>
<div class="encounter-card__artwork-frame">
<img
class="encounter-card__artwork"
[src]="artworkPath()"
[alt]="encounter.monster.name"
loading="lazy"
decoding="async"
/>
@if (defeated) {
<img
class="encounter-card__defeated-mark"
[src]="defeatedMark"
alt="Besiegt"
loading="lazy"
decoding="async"
/>
}
</div>
<h3 class="encounter-card__name">{{ encounter.monster.name }}</h3>
<div class="encounter-card__meta">
<span class="encounter-card__level">Stufe {{ encounter.monster.level }}</span>
<app-danger-badge class="encounter-card__danger" [rating]="encounter.dangerRating" />
</div>
<button
type="button"
class="encounter-card__attack"
[disabled]="settled"
(click)="onAttack()"
>
{{ actionLabel }}
</button>
</article>