Actions statt Effects

This commit is contained in:
2026-06-13 02:30:16 +02:00
parent 1af93c897c
commit de853c22bb
3 changed files with 36 additions and 40 deletions
+14 -15
View File
@@ -4,7 +4,7 @@
//! Ink-Stories) laufen headless; diese REPL ist ihr erstes Frontend.
//! Der Renderer kommt später dazu (siehe notes/renderer-plan.md) und
//! konsumiert dieselben Schnittstellen — insbesondere `StoryState` und
//! die `Effect`-Queue.
//! die `Action`-Queue.
use std::io::{self, Write};
@@ -15,15 +15,15 @@ mod kv;
mod signals;
mod story_ctrl;
use game::{Effect, Game};
use game::{Action, Game};
use ink::StoryState;
fn main() {
let signals_path = assets::path("assets/signals.toml");
let table = signals::load_signals(&signals_path);
let signal_table = signals::load_signals(&signals_path);
println!("wds-Konsole — {} Signale aus {}. `help` für Befehle.",
table.len(), signals_path);
let mut game = Game::new(table);
signal_table.len(), signals_path);
let mut game = Game::new(signal_table);
// Reserviertes `[init]`-Signal: KV-Defaults setzen, bevor Stories laufen.
fire(&mut game, "init", None);
@@ -66,14 +66,14 @@ fn print_help() {
println!(" quit beenden");
}
/// Signal dispatchen, Effects ausgeben und — falls eine Action eine Story
/// gestartet hat — den Dialog-Loop fahren.
/// Signal dispatchen, deferred Actions ausgeben und — falls eine Action
/// eine Story gestartet hat — den Dialog-Loop fahren.
fn fire(game: &mut Game, signal: &str, instance: Option<String>) {
{
let mut ctx = game.action_ctx(instance);
signals::dispatch(signal, &mut ctx);
}
drain_effects(game);
drain_actions(game);
if game.story.is_some() {
run_story(game);
}
@@ -90,7 +90,7 @@ fn run_story(game: &mut Game) {
for t in &tags { signals::dispatch(t, &mut ctx); }
state
};
drain_effects(game);
drain_actions(game);
match state {
None | Some(StoryState::End) => break,
Some(StoryState::Text(text)) => {
@@ -115,12 +115,11 @@ fn run_story(game: &mut Game) {
}
}
fn drain_effects(game: &mut Game) {
for e in game.effects.drain(..) {
match e {
Effect::HideObject(n) => println!("[effect] hide_object {n}"),
Effect::PlaySound(n) => println!("[effect] play_sound {n}"),
Effect::LoadPalette(n) => println!("[effect] load_palette {n}"),
fn drain_actions(game: &mut Game) {
for a in game.actions.drain(..) {
match a {
Action::HideObject(n) => println!("[action] hide_object {n}"),
Action::PlaySound(n) => println!("[action] play_sound {n}"),
}
}
}