game to string function; example game function
This commit is contained in:
parent
2e4d9fd36e
commit
fb0fac0665
|
@ -4,10 +4,6 @@ a library for parsing Bitsy game data.
|
|||
|
||||
## todo
|
||||
|
||||
### functions
|
||||
|
||||
* game to
|
||||
|
||||
### tidy up
|
||||
|
||||
split into multiple files
|
||||
|
@ -24,5 +20,3 @@ e.g. "DLG SPR_1..." instead of just "SPR_1..."
|
|||
examples of use cases (dedupe tiles, merge games, etc.)
|
||||
|
||||
### publish to crates.io
|
||||
|
||||
(not much point until it's feature-complete, I think)
|
||||
|
|
344
src/main.rs
344
src/main.rs
|
@ -280,6 +280,150 @@ fn example_room_string() -> String {
|
|||
include_str!("../test/resources/room").to_string()
|
||||
}
|
||||
|
||||
fn example_game_default() -> Game {
|
||||
Game {
|
||||
name: "Write your game's title here".to_string(),
|
||||
version: 6.5,
|
||||
room_format: 1,
|
||||
palettes: vec![
|
||||
Palette {
|
||||
id: "0".to_string(),
|
||||
name: None,
|
||||
colours: vec![
|
||||
Colour {red: 0, green: 82, blue: 204 },
|
||||
Colour {red: 128, green: 159, blue: 255 },
|
||||
Colour {red: 255, green: 255, blue: 255 },
|
||||
]
|
||||
}
|
||||
],
|
||||
rooms: vec![
|
||||
Room {
|
||||
id: "0".to_string(),
|
||||
palette: "0".to_string(),
|
||||
name: None,
|
||||
tiles: vec![
|
||||
"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),
|
||||
"0".to_string(),"a".to_string(),"a".to_string(),"a".to_string(),"a".to_string(),"a".to_string(),"a".to_string(),"a".to_string(),"a".to_string(),"a".to_string(),"a".to_string(),"a".to_string(),"a".to_string(),"a".to_string(),"a".to_string(),"0".to_string(),
|
||||
"0".to_string(),"a".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"a".to_string(),"0".to_string(),
|
||||
"0".to_string(),"a".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"a".to_string(),"0".to_string(),
|
||||
"0".to_string(),"a".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"a".to_string(),"0".to_string(),
|
||||
"0".to_string(),"a".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"a".to_string(),"0".to_string(),
|
||||
"0".to_string(),"a".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"a".to_string(),"0".to_string(),
|
||||
"0".to_string(),"a".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"a".to_string(),"0".to_string(),
|
||||
"0".to_string(),"a".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"a".to_string(),"0".to_string(),
|
||||
"0".to_string(),"a".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"a".to_string(),"0".to_string(),
|
||||
"0".to_string(),"a".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"a".to_string(),"0".to_string(),
|
||||
"0".to_string(),"a".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"a".to_string(),"0".to_string(),
|
||||
"0".to_string(),"a".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"a".to_string(),"0".to_string(),
|
||||
"0".to_string(),"a".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"a".to_string(),"0".to_string(),
|
||||
"0".to_string(),"a".to_string(),"a".to_string(),"a".to_string(),"a".to_string(),"a".to_string(),"a".to_string(),"a".to_string(),"a".to_string(),"a".to_string(),"a".to_string(),"a".to_string(),"a".to_string(),"a".to_string(),"a".to_string(),"0".to_string(),
|
||||
"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),
|
||||
],
|
||||
items: vec![],
|
||||
exits: vec![],
|
||||
endings: vec![]
|
||||
}
|
||||
],
|
||||
tiles: vec![
|
||||
Tile {
|
||||
id: "a".to_string(),
|
||||
name: None,
|
||||
wall: false,
|
||||
animation_frames: vec![
|
||||
Image {
|
||||
pixels: vec![
|
||||
1,1,1,1,1,1,1,1,
|
||||
1,0,0,0,0,0,0,1,
|
||||
1,0,0,0,0,0,0,1,
|
||||
1,0,0,1,1,0,0,1,
|
||||
1,0,0,1,1,0,0,1,
|
||||
1,0,0,0,0,0,0,1,
|
||||
1,0,0,0,0,0,0,1,
|
||||
1,1,1,1,1,1,1,1,
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
avatar: Avatar {
|
||||
animation_frames: vec![
|
||||
Image {
|
||||
pixels: vec![
|
||||
0,0,0,1,1,0,0,0,
|
||||
0,0,0,1,1,0,0,0,
|
||||
0,0,0,1,1,0,0,0,
|
||||
0,0,1,1,1,1,0,0,
|
||||
0,1,1,1,1,1,1,0,
|
||||
1,0,1,1,1,1,0,1,
|
||||
0,0,1,0,0,1,0,0,
|
||||
0,0,1,0,0,1,0,0,
|
||||
]
|
||||
}
|
||||
],
|
||||
room: "0".to_string(),
|
||||
position: Position { x: 4, y: 4 }
|
||||
},
|
||||
sprites: vec![
|
||||
Sprite {
|
||||
id: "a".to_string(),
|
||||
name: None,
|
||||
animation_frames: vec![
|
||||
Image {
|
||||
pixels: vec![
|
||||
0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,
|
||||
0,1,0,1,0,0,0,1,
|
||||
0,1,1,1,0,0,0,1,
|
||||
0,1,1,1,0,0,1,0,
|
||||
0,1,1,1,1,1,0,0,
|
||||
0,0,1,1,1,1,0,0,
|
||||
0,0,1,0,0,1,0,0,
|
||||
]
|
||||
}
|
||||
],
|
||||
dialogue: Some("SPR_0".to_string()),
|
||||
room: "0".to_string(),
|
||||
position: Position { x: 8, y: 12 }
|
||||
}
|
||||
],
|
||||
items: vec![
|
||||
Item {
|
||||
id: "0".to_string(),
|
||||
animation_frames: vec![
|
||||
Image {
|
||||
pixels: vec![
|
||||
0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,
|
||||
0,0,1,1,1,1,0,0,
|
||||
0,1,1,0,0,1,0,0,
|
||||
0,0,1,0,0,1,0,0,
|
||||
0,0,0,1,1,0,0,0,
|
||||
0,0,0,0,0,0,0,0,
|
||||
]
|
||||
},
|
||||
],
|
||||
name: Some("tea".to_string()),
|
||||
dialogue: Some("ITM_0".to_string())
|
||||
},
|
||||
],
|
||||
dialogues: vec![
|
||||
Dialogue {
|
||||
id: "SPR_0".to_string(),
|
||||
contents: "I'm a cat".to_string(),
|
||||
},
|
||||
Dialogue {
|
||||
id: "ITM_0".to_string(),
|
||||
contents: "You found a nice warm cup of tea".to_string(),
|
||||
},
|
||||
],
|
||||
endings: vec![],
|
||||
variables: vec![
|
||||
Variable { id: "a".to_string(), initial_value: "42".to_string() }
|
||||
],
|
||||
}
|
||||
}
|
||||
|
||||
fn image_from_string(string: String) -> Image {
|
||||
let string = string.replace("\n", "");
|
||||
let pixels: Vec<&str> = string.split("").collect();
|
||||
|
@ -1083,155 +1227,65 @@ fn test_game_from_string() {
|
|||
let output = game_from_string(
|
||||
include_str!["../test/resources/default.bitsy"].to_string()
|
||||
);
|
||||
|
||||
let expected = Game {
|
||||
name: "Write your game's title here".to_string(),
|
||||
version: 6.5,
|
||||
room_format: 1,
|
||||
palettes: vec![
|
||||
Palette {
|
||||
id: "0".to_string(),
|
||||
name: None,
|
||||
colours: vec![
|
||||
Colour {red: 0, green: 82, blue: 204 },
|
||||
Colour {red: 128, green: 159, blue: 255 },
|
||||
Colour {red: 255, green: 255, blue: 255 },
|
||||
]
|
||||
}
|
||||
],
|
||||
rooms: vec![
|
||||
Room {
|
||||
id: "0".to_string(),
|
||||
palette: "0".to_string(),
|
||||
name: None,
|
||||
tiles: vec![
|
||||
"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),
|
||||
"0".to_string(),"a".to_string(),"a".to_string(),"a".to_string(),"a".to_string(),"a".to_string(),"a".to_string(),"a".to_string(),"a".to_string(),"a".to_string(),"a".to_string(),"a".to_string(),"a".to_string(),"a".to_string(),"a".to_string(),"0".to_string(),
|
||||
"0".to_string(),"a".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"a".to_string(),"0".to_string(),
|
||||
"0".to_string(),"a".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"a".to_string(),"0".to_string(),
|
||||
"0".to_string(),"a".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"a".to_string(),"0".to_string(),
|
||||
"0".to_string(),"a".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"a".to_string(),"0".to_string(),
|
||||
"0".to_string(),"a".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"a".to_string(),"0".to_string(),
|
||||
"0".to_string(),"a".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"a".to_string(),"0".to_string(),
|
||||
"0".to_string(),"a".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"a".to_string(),"0".to_string(),
|
||||
"0".to_string(),"a".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"a".to_string(),"0".to_string(),
|
||||
"0".to_string(),"a".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"a".to_string(),"0".to_string(),
|
||||
"0".to_string(),"a".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"a".to_string(),"0".to_string(),
|
||||
"0".to_string(),"a".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"a".to_string(),"0".to_string(),
|
||||
"0".to_string(),"a".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"a".to_string(),"0".to_string(),
|
||||
"0".to_string(),"a".to_string(),"a".to_string(),"a".to_string(),"a".to_string(),"a".to_string(),"a".to_string(),"a".to_string(),"a".to_string(),"a".to_string(),"a".to_string(),"a".to_string(),"a".to_string(),"a".to_string(),"a".to_string(),"0".to_string(),
|
||||
"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),"0".to_string(),
|
||||
],
|
||||
items: vec![],
|
||||
exits: vec![],
|
||||
endings: vec![]
|
||||
}
|
||||
],
|
||||
tiles: vec![
|
||||
Tile {
|
||||
id: "a".to_string(),
|
||||
name: None,
|
||||
wall: false,
|
||||
animation_frames: vec![
|
||||
Image {
|
||||
pixels: vec![
|
||||
1,1,1,1,1,1,1,1,
|
||||
1,0,0,0,0,0,0,1,
|
||||
1,0,0,0,0,0,0,1,
|
||||
1,0,0,1,1,0,0,1,
|
||||
1,0,0,1,1,0,0,1,
|
||||
1,0,0,0,0,0,0,1,
|
||||
1,0,0,0,0,0,0,1,
|
||||
1,1,1,1,1,1,1,1,
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
avatar: Avatar {
|
||||
animation_frames: vec![
|
||||
Image {
|
||||
pixels: vec![
|
||||
0,0,0,1,1,0,0,0,
|
||||
0,0,0,1,1,0,0,0,
|
||||
0,0,0,1,1,0,0,0,
|
||||
0,0,1,1,1,1,0,0,
|
||||
0,1,1,1,1,1,1,0,
|
||||
1,0,1,1,1,1,0,1,
|
||||
0,0,1,0,0,1,0,0,
|
||||
0,0,1,0,0,1,0,0,
|
||||
]
|
||||
}
|
||||
],
|
||||
room: "0".to_string(),
|
||||
position: Position { x: 4, y: 4 }
|
||||
},
|
||||
sprites: vec![
|
||||
Sprite {
|
||||
id: "a".to_string(),
|
||||
name: None,
|
||||
animation_frames: vec![
|
||||
Image {
|
||||
pixels: vec![
|
||||
0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,
|
||||
0,1,0,1,0,0,0,1,
|
||||
0,1,1,1,0,0,0,1,
|
||||
0,1,1,1,0,0,1,0,
|
||||
0,1,1,1,1,1,0,0,
|
||||
0,0,1,1,1,1,0,0,
|
||||
0,0,1,0,0,1,0,0,
|
||||
]
|
||||
}
|
||||
],
|
||||
dialogue: Some("SPR_0".to_string()),
|
||||
room: "0".to_string(),
|
||||
position: Position { x: 8, y: 12 }
|
||||
}
|
||||
],
|
||||
items: vec![
|
||||
Item {
|
||||
id: "0".to_string(),
|
||||
animation_frames: vec![
|
||||
Image {
|
||||
pixels: vec![
|
||||
0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,
|
||||
0,0,1,1,1,1,0,0,
|
||||
0,1,1,0,0,1,0,0,
|
||||
0,0,1,0,0,1,0,0,
|
||||
0,0,0,1,1,0,0,0,
|
||||
0,0,0,0,0,0,0,0,
|
||||
]
|
||||
},
|
||||
],
|
||||
name: Some("tea".to_string()),
|
||||
dialogue: Some("ITM_0".to_string())
|
||||
},
|
||||
],
|
||||
dialogues: vec![
|
||||
Dialogue {
|
||||
id: "SPR_0".to_string(),
|
||||
contents: "I'm a cat".to_string(),
|
||||
},
|
||||
Dialogue {
|
||||
id: "ITM_0".to_string(),
|
||||
contents: "You found a nice warm cup of tea".to_string(),
|
||||
},
|
||||
],
|
||||
endings: vec![],
|
||||
variables: vec![
|
||||
Variable { id: "a".to_string(), initial_value: "42".to_string() }
|
||||
],
|
||||
};
|
||||
let expected = example_game_default();
|
||||
|
||||
assert_eq!(output, expected);
|
||||
}
|
||||
|
||||
// fn game_to_string(game: Game) -> String {
|
||||
//
|
||||
// }
|
||||
fn game_to_string(game: Game) -> String {
|
||||
let mut segments : Vec<String> = Vec::new();
|
||||
|
||||
// todo refactor
|
||||
|
||||
for palette in game.palettes {
|
||||
segments.push(palette_to_string(palette));
|
||||
}
|
||||
|
||||
for room in game.rooms {
|
||||
segments.push(room_to_string(room));
|
||||
}
|
||||
|
||||
for tile in game.tiles {
|
||||
segments.push(tile_to_string(tile));
|
||||
}
|
||||
|
||||
segments.push(avatar_to_string(game.avatar));
|
||||
|
||||
for sprite in game.sprites {
|
||||
segments.push(sprite_to_string(sprite));
|
||||
}
|
||||
|
||||
for item in game.items {
|
||||
segments.push(item_to_string(item));
|
||||
}
|
||||
|
||||
for dialogue in game.dialogues {
|
||||
segments.push(dialogue_to_string(dialogue));
|
||||
}
|
||||
|
||||
for ending in game.endings {
|
||||
segments.push(ending_to_string(ending));
|
||||
}
|
||||
|
||||
for variable in game.variables {
|
||||
segments.push(variable_to_string(variable));
|
||||
}
|
||||
|
||||
format!(
|
||||
"{}\n\n# BITSY VERSION {}\n\n! ROOM_FORMAT {}\n\n{}\n\n",
|
||||
game.name,
|
||||
game.version,
|
||||
game.room_format,
|
||||
segments.join("\n\n"),
|
||||
)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_game_to_string() {
|
||||
let output = game_to_string(example_game_default());
|
||||
let expected = include_str!["../test/resources/default.bitsy"].to_string();
|
||||
assert_eq!(output, expected);
|
||||
}
|
||||
|
||||
fn main() {
|
||||
println!("why does a crate need a main function?");
|
||||
|
|
Loading…
Reference in New Issue