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]
name = "pixsy"
version = "0.72.5"
version = "0.72.6"
description = "convert images to Bitsy rooms"
authors = ["Max Bradbury <max@tinybird.info>"]
edition = "2018"

View File

@ -8,3 +8,4 @@
* if "create new bitsy game", add new room as room 0
* actually create room
* 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();
}
match &state.palette {
SelectedPalette::None => { return "No palette selected".to_string(); },
_ => {}
};
let mut game = state.game.clone().unwrap();
if state.image.is_none() {
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 height = state.image.as_ref().unwrap().height();
let columns = (width 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 row in 0..rows {
@ -271,25 +293,45 @@ pub fn add_room() -> String {
let tile = Tile {
// "0" will get overwritten to a new, safe tile ID
id: "0".to_string(),
name: tile_name(&state.room_name, &tile_index),
name: tile_name(&state.room_name, &new_tile_count),
wall: None,
animation_frames: vec![Image { pixels }],
colour_id: None
};
if !game.tiles.contains(&tile) {
game.add_tile(tile.clone());
tile_ids.push(
if game.tiles.contains(&tile) {
game.tiles.iter().find(|&t| t == &tile).unwrap().id.clone()
} else {
new_tile_count += 1;
game.add_tile(tile.clone())
}
);
}
}
tile_index += 1;
}
}
}
// 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();
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]