Skip to main content

small_dungeon/
small_dungeon.rs

1use ::serde::{Deserialize, Serialize};
2use pasaka::*;
3
4#[derive(Serialize, Deserialize)]
5struct State {
6    gold: i32,
7    left_gold: i32,
8}
9
10#[passage]
11fn MainHall(mut h: PassageHandle, state: State) -> PassageResult {
12    h.text(format!("You have {} gold.", state.gold));
13
14    h.choice()
15        .option("Go left", |h, state| h.passage(Left, state))
16        .option("Go right", |h, _| h.passage(Right, ()))
17        .build(state)
18}
19
20#[passage]
21fn Left(mut h: PassageHandle, mut state: State) -> PassageResult {
22    if state.left_gold > 0 {
23        h.text(format!("You find {} gold!", state.left_gold));
24        state.gold += state.left_gold;
25        state.left_gold = 0;
26    } else {
27        h.text("The room is empty now...");
28    }
29
30    h.choice()
31        .option("Return", |h, state| h.passage(MainHall, state))
32        .build(state)
33}
34
35#[passage]
36fn Right(mut h: PassageHandle, _: ()) -> PassageResult {
37    h.text("Rocks fall on you, and you die.");
38
39    h.choice().build(())
40}
41
42pub fn main() {
43    CliRunner::run(MainHall.with_state(State {
44        gold: 0,
45        left_gold: 5,
46    }));
47}