référencement des ennemis dans les lieux d'une quête ou d'un chapitre
This commit is contained in:
@@ -258,6 +258,8 @@
|
|||||||
</small>
|
</small>
|
||||||
<app-rooms-editor
|
<app-rooms-editor
|
||||||
[rooms]="rooms"
|
[rooms]="rooms"
|
||||||
|
[availableEnemies]="availableEnemies"
|
||||||
|
[campaignId]="campaignId"
|
||||||
(roomsChange)="onRoomsChange($event)">
|
(roomsChange)="onRoomsChange($event)">
|
||||||
</app-rooms-editor>
|
</app-rooms-editor>
|
||||||
</app-expandable-section>
|
</app-expandable-section>
|
||||||
|
|||||||
@@ -151,10 +151,22 @@
|
|||||||
<p class="room-readonly-desc">{{ r.description }}</p>
|
<p class="room-readonly-desc">{{ r.description }}</p>
|
||||||
}
|
}
|
||||||
<div class="room-readonly-grid">
|
<div class="room-readonly-grid">
|
||||||
@if (r.enemies?.trim()) {
|
@if (r.enemies?.trim() || roomLinkedEnemies(r).length > 0) {
|
||||||
<div>
|
<div>
|
||||||
<strong>⚔️ Ennemis</strong>
|
<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>
|
<p>{{ r.enemies }}</p>
|
||||||
|
}
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
@if (r.loot?.trim()) {
|
@if (r.loot?.trim()) {
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import { EnemyService } from '../../../services/enemy.service';
|
|||||||
import { PageService } from '../../../services/page.service';
|
import { PageService } from '../../../services/page.service';
|
||||||
import { LayoutService } from '../../../services/layout.service';
|
import { LayoutService } from '../../../services/layout.service';
|
||||||
import { PageTitleService } from '../../../services/page-title.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 { Page } from '../../../services/page.model';
|
||||||
import { Enemy } from '../../../services/enemy.model';
|
import { Enemy } from '../../../services/enemy.model';
|
||||||
import { loadCampaignTreeData, buildCampaignSidebarConfig } from '../../campaign-tree.helper';
|
import { loadCampaignTreeData, buildCampaignSidebarConfig } from '../../campaign-tree.helper';
|
||||||
@@ -119,6 +119,13 @@ export class SceneViewComponent implements OnInit, OnDestroy {
|
|||||||
return level ? `${enemy.name} (${level})` : enemy.name;
|
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). */
|
/** Résout le nom d'une pièce cible (pour afficher les sorties inter-pièces). */
|
||||||
roomNameById(scene: Scene | null, roomId: string): string {
|
roomNameById(scene: Scene | null, roomId: string): string {
|
||||||
return scene?.rooms?.find(r => r.id === roomId)?.name ?? '(pièce supprimée)';
|
return scene?.rooms?.find(r => r.id === roomId)?.name ?? '(pièce supprimée)';
|
||||||
|
|||||||
Reference in New Issue
Block a user