add 'cheat' command for quicker testing

main
_ 2021-10-29 11:32:20 -05:00
parent 28f11e74c5
commit 42567278d3
2 changed files with 18 additions and 3 deletions

View File

@ -150,6 +150,7 @@ enum RoomName {
Room1,
/// Duplicate of starting room so I can change things around a little.
_Room2,
SortingPuzzle,
}
impl Default for RoomName {
@ -213,10 +214,16 @@ pub struct State {
}
impl State {
pub fn cheat (&mut self) {
self.current_room = RoomName::SortingPuzzle;
}
/// Send a line of player input (e.g. "look table") into the game and return
/// a Vec of Responses. The runtime should process these responses in order.
pub fn step (&mut self, input: &str) -> Vec <Response> {
use RoomName::*;
match self.intro_state {
IntroState::Stage1 => {
self.intro_state = IntroState::Stage2;
@ -259,7 +266,10 @@ impl State {
line_response ("`hint` may contain spoilers. `help` will not."),
Response::Nonsense,
],
PlayerAction::RoomSpecific (x) => self.room_1 (x),
PlayerAction::RoomSpecific (x) => match self.current_room {
Room1 => self.room_1 (x),
_ => just (line_response ("ERR: Invalid current room")),
}
}
}

View File

@ -51,8 +51,12 @@ fn read_input () -> Result <String> {
Ok (buffer)
}
fn game () -> Result <()> {
fn game (args: &[String]) -> Result <()> {
let mut state = State::default ();
if args.get (1) == Some (&"cheat".to_string ()) {
state.cheat ();
}
let responses = state.step ("");
for response in responses.into_iter () {
@ -91,7 +95,8 @@ fn game () -> Result <()> {
}
fn main () -> Result <()> {
game ()?;
let args: Vec <_> = std::env::args ().collect ();
game (&args [..])?;
Ok (())
}