first attempt at creating room
This commit is contained in:
parent
63cb971aca
commit
512f386c25
|
@ -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"
|
||||
|
|
1
TODO.md
1
TODO.md
|
@ -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
|
||||
|
|
58
src/lib.rs
58
src/lib.rs
|
@ -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_index += 1;
|
||||
}
|
||||
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())
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// 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]
|
||||
|
|
Loading…
Reference in New Issue