exit functions; ending and room stub functions

This commit is contained in:
Max Bradbury 2020-04-06 13:21:59 +01:00
parent 6c79de15e7
commit e86625bbc8
2 changed files with 86 additions and 0 deletions

View File

@ -20,6 +20,8 @@ a library for parsing Bitsy game data.
* sprite to
* item from
* item to
* exit from
* exit to
## todo

View File

@ -569,6 +569,90 @@ fn test_item_to_string() {
assert_eq!(output, expected);
}
fn exit_from_string(string: String) -> Exit {
// e.g. "4 3,3"
let room_position: Vec<&str> = string.split(' ').collect();
let room = room_position[0].to_string();
let position = position_from_string(room_position[1].to_string());
Exit { room, position }
}
#[test]
fn test_exit_from_string() {
assert_eq!(
exit_from_string("a 12,13".to_string()),
Exit { room: "a".to_string(), position: Position { x: 12, y: 13}}
);
}
fn exit_to_string(exit: Exit) -> String {
format!("{} {}", exit.room, position_to_string(exit.position))
}
#[test]
fn test_exit_to_string() {
assert_eq!(
exit_to_string(Exit { room: "8".to_string(), position: Position { x: 5, y: 6 }}),
"8 5,6".to_string()
);
}
fn ending_from_string(string: String) -> Ending {
Ending { contents: "".to_string() }
}
fn ending_to_string(ending: Ending) -> String {
"".to_string()
}
fn room_from_string(string: String) -> Room {
// todo handle room_format?
let mut lines: Vec<&str> = string.split("\n").collect();
let id = lines[0].replace("ROOM ", "");
let mut name = None;
let mut palette = "0".to_string();
let mut items: HashMap<Position, String> = HashMap::new();
let exits: HashMap<Position, Exit> = HashMap::new();
let endings: HashMap<Position, Ending> = HashMap::new();
loop {
let last_line = lines.pop().unwrap();
if last_line.starts_with("NAME") {
name = Some(last_line.replace("NAME ", "").to_string());
} else if last_line.starts_with("PAL") {
palette = last_line.replace("PAL ", "").to_string();
} else if last_line.starts_with("ITM") {
let last_line = last_line.replace("ITM ", "");
let item_pos: Vec<&str> = last_line.split(' ').collect();
let item_id = item_pos[0];
let pos = item_pos[1];
items.insert(
position_from_string(pos.to_string()),
item_id.to_string()
);
} else if last_line.starts_with("EXT") {
} else if last_line.starts_with("END") {
} else {
lines.push(last_line); break;
}
}
Room {
id,
palette,
name,
tiles: vec![],
items: Default::default(),
exits: Default::default(),
endings: Default::default()
}
}
// fn game_from_string(game: String ) -> Game {
// // probably needs to split the game data into different segments starting from the end
// // e.g. VAR... then END... then DLG...