Plusieurs ajouts :
Some checks failed
Build & Push Images / build (brain) (push) Has been cancelled
Build & Push Images / build (core) (push) Has been cancelled
Build & Push Images / build (web) (push) Has been cancelled
Build & Push Images / build-switcher (push) Has been cancelled

- 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
This commit is contained in:
2026-06-03 15:44:48 +02:00
parent e3fc96a1bc
commit 504c4b7b6c
147 changed files with 5347 additions and 392 deletions

View File

@@ -17,6 +17,22 @@
/>
</div>
<div class="field">
<label>Structure de l'arc</label>
<div class="arc-type-choice">
<label class="arc-type-option" [class.selected]="form.get('type')?.value === 'LINEAR'">
<input type="radio" formControlName="type" value="LINEAR" />
<span class="arc-type-title">Linéaire</span>
<span class="arc-type-desc">Chapitres joués dans l'ordre — narration séquentielle classique.</span>
</label>
<label class="arc-type-option" [class.selected]="form.get('type')?.value === 'HUB'">
<input type="radio" formControlName="type" value="HUB" />
<span class="arc-type-title">Hub</span>
<span class="arc-type-desc">Quêtes parallèles débloquées par des conditions — type sandbox (ex : Phandalin / Icespire Peak).</span>
</label>
</div>
</div>
<div class="field">
<label for="arc-create-description">Description</label>
<textarea

View File

@@ -3,6 +3,44 @@
max-width: 640px;
}
.arc-type-choice {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 0.75rem;
}
.arc-type-option {
display: flex;
flex-direction: column;
gap: 0.25rem;
padding: 0.85rem 0.95rem;
border: 1px solid var(--color-border, #e2e2e2);
border-radius: 10px;
cursor: pointer;
background: var(--color-surface, #fff);
transition: border-color 120ms ease, background 120ms ease;
&:hover { border-color: var(--color-primary, #2c6cd6); }
&.selected {
border-color: var(--color-primary, #2c6cd6);
background: rgba(66, 133, 244, 0.06);
}
input[type="radio"] { display: none; }
}
.arc-type-title {
font-weight: 600;
font-size: 0.95rem;
}
.arc-type-desc {
font-size: 0.78rem;
color: var(--color-text-muted, #666);
line-height: 1.3;
}
// Override local : titre en violet (pas en blanc comme le .page-header global).
.page-header h1 { color: #a5b4fc; }

View File

@@ -44,7 +44,9 @@ export class ArcCreateComponent implements OnInit, OnDestroy {
) {
this.form = this.fb.group({
name: ['', Validators.required],
description: ['']
description: [''],
// Type structurel : LINEAR (séquentiel) par défaut, HUB (sandbox/quêtes parallèles).
type: ['LINEAR', Validators.required]
});
}
@@ -72,6 +74,7 @@ export class ArcCreateComponent implements OnInit, OnDestroy {
description: this.form.value.description,
campaignId: this.campaignId,
order: this.existingArcCount + 1,
type: this.form.value.type,
icon: this.selectedIcon
}).subscribe({
next: (created) => this.router.navigate(['/campaigns', this.campaignId, 'arcs', created.id]),