Actions statt Effects
This commit is contained in:
+14
-15
@@ -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}"),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user