- Possibilité de configurer des lieux dans une scène : permet de configurer un donjon par exemple avec les pièces, les trésors par pièce, la narration..... Mise en place également de conditions permettant de conditionner le déblocage des quêtes. - Possibilité de transformé un arc en instance non linéaire afin de faire un hub. Permet de jouer de préparer des campagnes type Dragon of Icespire peak plus facilement. - Configuration de partie : chaque partie va contenir les séances, ce qui permettra de suivre le déblocage des conditions pour les quêtes. Passage en 0.9.1-beta
104 lines
4.6 KiB
HTML
104 lines
4.6 KiB
HTML
<div class="view-page" *ngIf="chapter">
|
|
|
|
<header class="view-header">
|
|
<div>
|
|
<h1>
|
|
<lucide-icon *ngIf="chapter.icon" [img]="resolveCampaignIcon(chapter.icon)" [size]="22" class="title-icon"></lucide-icon>
|
|
{{ chapter.name }}
|
|
</h1>
|
|
<p class="view-subtitle">{{ parentArc?.type === 'HUB' ? 'Quête (Hub)' : 'Chapitre' }}</p>
|
|
</div>
|
|
<div class="view-actions">
|
|
<button type="button" class="btn-secondary" (click)="openGraph()"
|
|
title="Voir l'organigramme des scènes et de leurs branches">
|
|
<lucide-icon [img]="Network" [size]="14"></lucide-icon>
|
|
Carte du chapitre
|
|
</button>
|
|
<button type="button" class="btn-primary" (click)="editMode()">
|
|
<lucide-icon [img]="Pencil" [size]="14"></lucide-icon>
|
|
Modifier
|
|
</button>
|
|
<button type="button" class="btn-danger" (click)="deleteChapter()" title="Supprimer le chapitre et ses scènes">
|
|
<lucide-icon [img]="Trash2" [size]="14"></lucide-icon>
|
|
Supprimer
|
|
</button>
|
|
</div>
|
|
</header>
|
|
|
|
<!-- Conditions de déblocage (donnée de scénario, read-only). Toujours visible si Arc HUB. -->
|
|
<section class="view-section" *ngIf="parentArc?.type === 'HUB'">
|
|
<h2 class="view-section-title"><span class="view-section-icon">🔒</span> Conditions de déblocage</h2>
|
|
|
|
<ng-container *ngIf="(chapter.prerequisites?.length ?? 0) > 0; else noPrereqs">
|
|
<ul class="view-section-body">
|
|
<li *ngFor="let p of chapter.prerequisites">{{ describePrerequisite(p) }}</li>
|
|
</ul>
|
|
<small class="view-section-empty">
|
|
Pendant une partie, la quête se débloque dès que toutes ces conditions sont remplies.
|
|
Le toggle des faits se fait dans l'écran « Faits » de la Partie.
|
|
</small>
|
|
</ng-container>
|
|
|
|
<ng-template #noPrereqs>
|
|
<p class="view-section-empty">
|
|
Aucune condition — cette quête est disponible dès le début dans chaque Partie.
|
|
</p>
|
|
<p class="view-section-empty">
|
|
Cliquez sur <strong>Modifier</strong> pour ajouter des conditions
|
|
(« quête précédente terminée », « à partir de la session N », « quand un fait est vrai »).
|
|
</p>
|
|
</ng-template>
|
|
</section>
|
|
|
|
<!-- Illustrations (rendu editorial magazine) -->
|
|
<section class="view-section" *ngIf="(chapter.illustrationImageIds?.length ?? 0) > 0">
|
|
<app-image-gallery [imageIds]="chapter.illustrationImageIds ?? []" [layout]="'EDITORIAL'"></app-image-gallery>
|
|
</section>
|
|
|
|
<!-- Cartes & plans -->
|
|
<section class="view-section" *ngIf="(chapter.mapImageIds?.length ?? 0) > 0">
|
|
<h2 class="view-section-title"><span class="view-section-icon">🗺️</span> Cartes & plans</h2>
|
|
<app-image-gallery [imageIds]="chapter.mapImageIds ?? []" [layout]="'MAPS'"></app-image-gallery>
|
|
</section>
|
|
|
|
<section class="view-section">
|
|
<h2 class="view-section-title"><span class="view-section-icon">📖</span> Synopsis</h2>
|
|
<p class="view-section-body" *ngIf="chapter.description?.trim(); else emptyDesc">{{ chapter.description }}</p>
|
|
<ng-template #emptyDesc><p class="view-section-empty">Non renseigné</p></ng-template>
|
|
</section>
|
|
|
|
<div class="view-row">
|
|
<section class="view-section">
|
|
<h2 class="view-section-title"><span class="view-section-icon">🎯</span> Objectifs des joueurs</h2>
|
|
<p class="view-section-body" *ngIf="chapter.playerObjectives?.trim(); else emptyObj">{{ chapter.playerObjectives }}</p>
|
|
<ng-template #emptyObj><p class="view-section-empty">Non renseigné</p></ng-template>
|
|
</section>
|
|
|
|
<section class="view-section">
|
|
<h2 class="view-section-title"><span class="view-section-icon">⚡</span> Enjeux narratifs</h2>
|
|
<p class="view-section-body" *ngIf="chapter.narrativeStakes?.trim(); else emptyNs">{{ chapter.narrativeStakes }}</p>
|
|
<ng-template #emptyNs><p class="view-section-empty">Non renseigné</p></ng-template>
|
|
</section>
|
|
</div>
|
|
|
|
<section class="view-section view-section--private" *ngIf="chapter.gmNotes?.trim()">
|
|
<h2 class="view-section-title">
|
|
<span class="view-section-icon">🔒</span>
|
|
Notes du Maître de Jeu
|
|
</h2>
|
|
<p class="view-section-body">{{ chapter.gmNotes }}</p>
|
|
</section>
|
|
|
|
<section class="view-section" *ngIf="loreId && (chapter.relatedPageIds?.length ?? 0) > 0">
|
|
<h2 class="view-section-title"><span class="view-section-icon">🔗</span> Pages Lore associées</h2>
|
|
<div class="view-chips">
|
|
<a class="view-chip"
|
|
*ngFor="let relId of chapter.relatedPageIds"
|
|
[routerLink]="['/lore', loreId, 'pages', relId]">
|
|
{{ titleOfRelated(relId) }}
|
|
</a>
|
|
</div>
|
|
</section>
|
|
|
|
</div>
|