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