référencement des ennemis dans les lieux d'une quête ou d'un chapitre
All checks were successful
Build & Push Images / build (brain) (push) Successful in 1m33s
Build & Push Images / build (core) (push) Successful in 1m58s
Build & Push Images / build-switcher (push) Successful in 17s
Build & Push Images / build (web) (push) Successful in 1m53s

This commit is contained in:
2026-06-13 11:08:16 +02:00
parent 6035df262d
commit c77c0bc994
3 changed files with 24 additions and 3 deletions

View File

@@ -258,6 +258,8 @@
</small>
<app-rooms-editor
[rooms]="rooms"
[availableEnemies]="availableEnemies"
[campaignId]="campaignId"
(roomsChange)="onRoomsChange($event)">
</app-rooms-editor>
</app-expandable-section>

View File

@@ -151,10 +151,22 @@
<p class="room-readonly-desc">{{ r.description }}</p>
}
<div class="room-readonly-grid">
@if (r.enemies?.trim()) {
@if (r.enemies?.trim() || roomLinkedEnemies(r).length > 0) {
<div>
<strong>⚔️ Ennemis</strong>
@if (roomLinkedEnemies(r).length > 0) {
<div class="view-chips">
@for (e of roomLinkedEnemies(r); track e.id) {
<a class="view-chip"
[routerLink]="['/campaigns', campaignId, 'enemies', e.id]">
{{ enemyLabel(e) }}
</a>
}
</div>
}
@if (r.enemies?.trim()) {
<p>{{ r.enemies }}</p>
}
</div>
}
@if (r.loot?.trim()) {

View File

@@ -13,7 +13,7 @@ import { EnemyService } from '../../../services/enemy.service';
import { PageService } from '../../../services/page.service';
import { LayoutService } from '../../../services/layout.service';
import { PageTitleService } from '../../../services/page-title.service';
import { Scene } from '../../../services/campaign.model';
import { Scene, Room } from '../../../services/campaign.model';
import { Page } from '../../../services/page.model';
import { Enemy } from '../../../services/enemy.model';
import { loadCampaignTreeData, buildCampaignSidebarConfig } from '../../campaign-tree.helper';
@@ -119,6 +119,13 @@ export class SceneViewComponent implements OnInit, OnDestroy {
return level ? `${enemy.name} (${level})` : enemy.name;
}
/** Fiches du bestiaire liées à une pièce (IDs orphelins ignorés). */
roomLinkedEnemies(room: Room): Enemy[] {
return (room.enemyIds ?? [])
.map(id => this.availableEnemies.find(e => e.id === id))
.filter((e): e is Enemy => !!e);
}
/** Résout le nom d'une pièce cible (pour afficher les sorties inter-pièces). */
roomNameById(scene: Scene | null, roomId: string): string {
return scene?.rooms?.find(r => r.id === roomId)?.name ?? '(pièce supprimée)';