Phase 6 : son (musique de fond par écran + action "Jouer un son")
Ajoute deux mécanismes distincts, à la demande de l'utilisateur qui a précisé qu'un son doit pouvoir être attaché à une SCÈNE (pas seulement joué ponctuellement par une action de flow, comme prévu initialement) : - Musique de fond par écran (nouveau champ background_music_url sur _screens, ALTER TABLE nullable) : réglée dans le panneau gauche de l'éditeur (URL ou envoi de fichier, réutilise la route d'upload générique existante), enregistrée en AJAX au même patron que le format d'aperçu (screen_set_aspect.py). Démarrée en boucle à l'affichage de l'écran et arrêtée au changement d'écran (runScreenBackgroundMusic(), appelée depuis showScreen() dans static/js/play/screens.js) — un seul Audio actif à la fois, jamais cumulé avec une musique restée d'un écran précédent. - Action de flow "jouer_son" (aux côtés des actions existantes) : effet sonore ponctuel, non bouclé, déclenchable sur n'importe quel nœud Déclencheur. Réutilise data_value (déjà un champ texte générique sur le nœud action, comme pour "attendre") plutôt qu'une nouvelle colonne dédiée — fire-and-forget côté client (runActionNode), ne bloque jamais la suite du graphe. Les deux réutilisent le même mécanisme d'upload de fichier déjà en place ailleurs dans l'éditeur (ex. source d'une vidéo), sans nouvelle route. Ceci complète les 6 phases du plan d'extension du moteur (état par joueur, hasard/maths, clavier/minuteur, ajout de ligne, position/ collision, son) : Forge Engine peut désormais couvrir des jeux bien au-delà du narratif/puzzle/quiz (action, arcade, jeux à contrainte de temps). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
9e263435e6
commit
76331f9285
@@ -70,6 +70,22 @@
|
||||
<button type="button" class="button smallBtn aspectBtn {{ 'active' if current_aspect == '16/9' else '' }}" data-aspect="16/9">🖥️ Paysage</button>
|
||||
<button type="button" class="button smallBtn aspectBtn {{ 'active' if current_aspect == '1/1' else '' }}" data-aspect="1/1">◻️ Carré</button>
|
||||
</div>
|
||||
<!-- Phase 6 — musique de fond de cet écran : démarrée en boucle à
|
||||
l'affichage, arrêtée au changement d'écran (voir
|
||||
runScreenBackgroundMusic() dans static/js/play/screens.js).
|
||||
Enregistrement en AJAX au blur/changement, même patron que le
|
||||
format d'aperçu ci-dessus. -->
|
||||
<div class="field" style="margin-bottom:8px;">
|
||||
<label class="label is-small" for="screen-bg-music-url">🎵 Musique de fond</label>
|
||||
<div class="control">
|
||||
<input type="text" class="input is-small" id="screen-bg-music-url" placeholder="URL du fichier audio" value="{{ screen.background_music_url or '' }}">
|
||||
</div>
|
||||
<div class="control" style="margin-top:4px;">
|
||||
<label for="screen-bg-music-upload" style="font-size:12px;">Envoyer un fichier :</label>
|
||||
<input type="file" class="screenUploadInput" id="screen-bg-music-upload" data-target="screen-bg-music-url" accept="audio/*" style="font-size:12px;">
|
||||
<span class="uploadStatus" style="font-size:12px; color:var(--muted);"></span>
|
||||
</div>
|
||||
</div>
|
||||
<hr style="border-color:var(--border); margin:10px 0;">
|
||||
<h2 class="subtitle is-6">Éléments de cet écran</h2>
|
||||
{% if top_level_elements %}
|
||||
@@ -469,6 +485,21 @@
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
<!-- Phase 6 — effet sonore ponctuel (non bouclé, joué une seule
|
||||
fois), sur n'importe quel déclencheur. Indépendant de la
|
||||
musique de fond par écran (voir screen_edit.html, panneau
|
||||
gauche) qui, elle, boucle et suit le cycle de vie de l'écran. -->
|
||||
<div id="nf-action-sound-fields" style="display:none;">
|
||||
<label>URL du son
|
||||
<input type="text" id="nf-action-sound-url" placeholder="URL du fichier audio">
|
||||
</label>
|
||||
<div style="margin-top:6px;">
|
||||
<label for="nf-action-sound-upload" style="font-size:12px;">Envoyer un fichier :</label>
|
||||
<input type="file" class="nodeFormUploadInput" id="nf-action-sound-upload" data-target="nf-action-sound-url" accept="audio/*" style="font-size:12px;">
|
||||
<span class="uploadStatus" style="font-size:12px; color:var(--text-dim);"></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="nf-action-variable-fields" style="display:none;">
|
||||
{% if not global_variables %}
|
||||
<p class="hint">Aucune variable globale pour l'instant — crées-en une depuis "Condition de visibilité" dans les propriétés d'un élément.</p>
|
||||
|
||||
Reference in New Issue
Block a user