diff --git a/Cargo.lock b/Cargo.lock index 011fb35..a8dcf80 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2004,6 +2004,7 @@ version = "0.1.0" dependencies = [ "bevy", "bevy_ecs_tilemap", + "rand", ] [[package]] @@ -2418,6 +2419,12 @@ dependencies = [ "unicode-xid", ] +[[package]] +name = "ppv-lite86" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" + [[package]] name = "proc-macro-crate" version = "1.1.3" @@ -2458,6 +2465,36 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "17fd96390ed3feda12e1dfe2645ed587e0bea749e319333f104a33ff62f77a0b" +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" +dependencies = [ + "getrandom", +] + [[package]] name = "range-alloc" version = "0.1.2" @@ -3009,7 +3046,7 @@ dependencies = [ "js-sys", "log", "naga", - "parking_lot 0.11.2", + "parking_lot 0.12.1", "raw-window-handle", "smallvec", "wasm-bindgen", @@ -3035,7 +3072,7 @@ dependencies = [ "fxhash", "log", "naga", - "parking_lot 0.11.2", + "parking_lot 0.12.1", "profiling", "raw-window-handle", "smallvec", @@ -3072,7 +3109,7 @@ dependencies = [ "metal", "naga", "objc", - "parking_lot 0.11.2", + "parking_lot 0.12.1", "profiling", "range-alloc", "raw-window-handle", diff --git a/Cargo.toml b/Cargo.toml index ece539b..b0057ba 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,3 +9,4 @@ license = "AGPL-3.0-or-later" [dependencies] bevy = "0.8.0" bevy_ecs_tilemap = "0.7.0" +rand = "0.8.5" \ No newline at end of file diff --git a/assets/tileset.aseprite b/assets/tileset.aseprite index aff703d..e614085 100644 Binary files a/assets/tileset.aseprite and b/assets/tileset.aseprite differ diff --git a/assets/tileset.png b/assets/tileset.png index a082b44..5812f51 100644 Binary files a/assets/tileset.png and b/assets/tileset.png differ diff --git a/src/main.rs b/src/main.rs index e1dcca9..f8fa41f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,11 +2,101 @@ // SPDX-License-Identifier: AGPL-3.0-or-later use bevy::{ + diagnostic::{FrameTimeDiagnosticsPlugin, LogDiagnosticsPlugin}, input::mouse::MouseMotion, prelude::*, - render::texture::ImageSettings, diagnostic::{FrameTimeDiagnosticsPlugin, LogDiagnosticsPlugin}, + render::texture::ImageSettings, }; use bevy_ecs_tilemap::prelude::*; +use rand::{thread_rng, Rng}; + +fn make_ground_layer( + commands: &mut Commands, + tilemap_size: TilemapSize, + texture_handle: Handle, + tile_size: TilemapTileSize, +) { + let mut tile_storage = TileStorage::empty(tilemap_size); + let tilemap_entity = commands.spawn().id(); + let mut random = thread_rng(); + + for x in 0..tilemap_size.x { + for y in 0..tilemap_size.y { + let tile_pos = TilePos { x, y }; + let tile_entity = commands + .spawn() + .insert_bundle(TileBundle { + position: tile_pos, + tilemap_id: TilemapId(tilemap_entity), + texture: TileTexture(random.gen_range(13..=19)), + ..Default::default() + }) + .id(); + tile_storage.set(&tile_pos, Some(tile_entity)); + } + } + + commands + .entity(tilemap_entity) + .insert_bundle(TilemapBundle { + grid_size: tile_size.into(), + size: tilemap_size, + storage: tile_storage, + texture: TilemapTexture(texture_handle), + tile_size, + transform: bevy_ecs_tilemap::helpers::get_centered_transform_2d( + &tilemap_size, + &tile_size, + 0.0, + ), + ..Default::default() + }); +} + +fn make_wall_layer( + commands: &mut Commands, + tilemap_size: TilemapSize, + texture_handle: Handle, + tile_size: TilemapTileSize, +) { + let mut tile_storage = TileStorage::empty(tilemap_size); + let tilemap_entity = commands.spawn().id(); + let mut random = thread_rng(); + + for x in 0..tilemap_size.x { + for y in 0..tilemap_size.y { + let tile_pos = TilePos { x, y }; + if random.gen_bool(0.5) { + let tile_entity = commands + .spawn() + .insert_bundle(TileBundle { + position: tile_pos, + tilemap_id: TilemapId(tilemap_entity), + texture: TileTexture(random.gen_range(0..=12)), + ..Default::default() + }) + .id(); + tile_storage.set(&tile_pos, Some(tile_entity)); + } + } + } + + commands + .entity(tilemap_entity) + .insert_bundle(TilemapBundle { + grid_size: tile_size.into(), + size: tilemap_size, + storage: tile_storage, + texture: TilemapTexture(texture_handle), + tile_size, + transform: bevy_ecs_tilemap::helpers::get_centered_transform_2d( + &tilemap_size, + &tile_size, + 1.0, + ), + ..Default::default() + }); +} fn startup(mut commands: Commands, asset_server: Res) { commands.spawn_bundle(Camera2dBundle::default()); @@ -14,37 +104,20 @@ fn startup(mut commands: Commands, asset_server: Res) { let texture_handle = asset_server.load("tileset.png"); let tilemap_size = TilemapSize { x: 320, y: 320 }; - let mut tile_storage = TileStorage::empty(tilemap_size); - let tilemap_entity = commands.spawn().id(); - - for x in 0..320u32 { - for y in 0..320u32 { - let tile_pos = TilePos { x, y }; - let tile_entity = commands - .spawn() - .insert_bundle(TileBundle { - position: tile_pos, - tilemap_id: TilemapId(tilemap_entity), - ..Default::default() - }) - .id(); - tile_storage.set(&tile_pos, Some(tile_entity)); - } - } - let tile_size = TilemapTileSize { x: 32.0, y: 32.0 }; - commands - .entity(tilemap_entity) - .insert_bundle(TilemapBundle { - grid_size: TilemapGridSize { x: 32.0, y: 32.0 }, - size: tilemap_size, - storage: tile_storage, - texture: TilemapTexture(texture_handle), - tile_size, - transform: bevy_ecs_tilemap::helpers::get_centered_transform_2d(&tilemap_size, &tile_size, 0.0), - ..Default::default() - }); + make_ground_layer( + &mut commands, + tilemap_size, + texture_handle.clone(), + tile_size, + ); + make_wall_layer( + &mut commands, + tilemap_size, + texture_handle, + tile_size, + ); } fn mouse_motion( @@ -79,12 +152,3 @@ fn main() { .add_system(mouse_motion) .run(); } - -#[cfg(test)] -mod tests { - #[test] - fn test_true() -{ - assert!(false); -} -}