first attempt at creating room

This commit is contained in:
Max Bradbury 2020-11-08 12:30:46 +00:00
parent 63cb971aca
commit 512f386c25
3 changed files with 52 additions and 9 deletions

View File

@ -1,6 +1,6 @@
[package] [package]
name = "pixsy" name = "pixsy"
version = "0.72.5" version = "0.72.6"
description = "convert images to Bitsy rooms" description = "convert images to Bitsy rooms"
authors = ["Max Bradbury <max@tinybird.info>"] authors = ["Max Bradbury <max@tinybird.info>"]
edition = "2018" edition = "2018"

View File

@ -8,3 +8,4 @@
* if "create new bitsy game", add new room as room 0 * if "create new bitsy game", add new room as room 0
* actually create room * actually create room
* stats for added room (number of tiles) * stats for added room (number of tiles)
* dedupe "palette from custom colours" functionality

View File

@ -242,18 +242,40 @@ pub fn add_room() -> String {
return "No game data loaded".to_string(); return "No game data loaded".to_string();
} }
match &state.palette {
SelectedPalette::None => { return "No palette selected".to_string(); },
_ => {}
};
let mut game = state.game.clone().unwrap(); let mut game = state.game.clone().unwrap();
if state.image.is_none() { if state.image.is_none() {
return "No image loaded".to_string(); return "No image loaded".to_string();
} }
let palette_id = Some(match &state.palette {
SelectedPalette::None => bitsy_parser::mock::game_default().palettes[0].id.clone(),
SelectedPalette::Existing { id } => id.clone(),
SelectedPalette::New { background, foreground } => {
game.add_palette(bitsy_parser::Palette {
id: "0".to_string(),
name: None,
colours: vec![
background.clone(),
foreground.clone(),
bitsy_parser::Colour { red: 0, green: 0, blue: 0 }
],
})
},
});
let width = state.image.as_ref().unwrap().width(); let width = state.image.as_ref().unwrap().width();
let height = state.image.as_ref().unwrap().height(); let height = state.image.as_ref().unwrap().height();
let columns = (width as f64 / SD as f64).floor() as u32; let columns = (width as f64 / SD as f64).floor() as u32;
let rows = (height as f64 / SD as f64).floor() as u32; let rows = (height as f64 / SD as f64).floor() as u32;
let mut tile_index = 1; let mut tile_ids = Vec::new();
let mut new_tile_count: u32 = 0;
for column in 0..columns { for column in 0..columns {
for row in 0..rows { for row in 0..rows {
@ -271,25 +293,45 @@ pub fn add_room() -> String {
let tile = Tile { let tile = Tile {
// "0" will get overwritten to a new, safe tile ID // "0" will get overwritten to a new, safe tile ID
id: "0".to_string(), id: "0".to_string(),
name: tile_name(&state.room_name, &tile_index), name: tile_name(&state.room_name, &new_tile_count),
wall: None, wall: None,
animation_frames: vec![Image { pixels }], animation_frames: vec![Image { pixels }],
colour_id: None colour_id: None
}; };
if !game.tiles.contains(&tile) { tile_ids.push(
game.add_tile(tile.clone()); if game.tiles.contains(&tile) {
game.tiles.iter().find(|&t| t == &tile).unwrap().id.clone()
tile_index += 1; } else {
} new_tile_count += 1;
game.add_tile(tile.clone())
}
);
} }
} }
// todo if player selected "create new game", delete room 0 here
game.add_room(bitsy_parser::Room {
id: "0".to_string(),
palette_id,
name: None,
tiles: tile_ids,
items: vec![],
exits: vec![],
endings: vec![],
walls: None
});
game.dedupe_tiles(); game.dedupe_tiles();
state.game = Some(game.to_owned()); state.game = Some(game.to_owned());
"OK".to_string() format!(
"Added room \"{}\" with {} new tiles",
&state.room_name.as_ref().unwrap_or(&"untitled".to_string()),
new_tile_count
)
} }
#[wasm_bindgen] #[wasm_bindgen]