From d38e41de29b2bcc1cc78ac13af0930b5f5772c7b Mon Sep 17 00:00:00 2001 From: ModZero Date: Thu, 11 Aug 2022 05:11:22 +0200 Subject: [PATCH] Just a really bad terrain generator --- Cargo.lock | 43 +++++++++++- Cargo.toml | 1 + assets/tileset.aseprite | Bin 2093 -> 2107 bytes assets/tileset.png | Bin 2124 -> 2109 bytes src/main.rs | 142 +++++++++++++++++++++++++++++----------- 5 files changed, 144 insertions(+), 42 deletions(-) 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 aff703d56ed3642aa0260c5d253b92859e498bcb..e61408541709e286233bc24ae958fd3dccf708c7 100644 GIT binary patch delta 1415 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 J3;+`#0FWFQ+amw~ diff --git a/assets/tileset.png b/assets/tileset.png index a082b44e4d7a7803c125bc2111ca759c6232c812..5812f51880ddd08ac5560b0be4f46eae9b41f7b0 100644 GIT binary patch literal 2109 zcmV-D2*US?P)Px+_en%SRCt{2oxf{bM-a#7#1Uc{LlO>TBV;gXWQ33~5x7qo(xeE4`~`vh1u0w@ z0x8l2+@&@L2e~Fis`LgykPyc13_gS+IO0Hv>@-Q5tn#$C``-SV-I?9_RMMUH?Y=kP zotd4t?`Z@H`0Ue9{+Z6^qwenj0Nu~JpR4a|e>c=u-}ghuiftdtP`@$6j5+#bT`#EX z1?Uq^E>epi*ExiY+q*#tgOnnL5K3Mzm+^a@U`xi=Ng1X}U>pD7Nl`qRQn-kK^7S%} zf33toYK5}#0nFnQ0eH}7VCu$K=;Mr9GPMeYl}aq?9IOK1cv6BpN&v3a^j2{mBWJZW%4%69u6deL2!Q)M|0I=h) z2n?4s0NUx&xJKG1Wy;K#;z>++Depu8?g^I7Y5-9K?R(x3mz}ZD&LLq!) z5dcRQnS;{d13*GR^H>EydFJ>~dWKQQDge1~b)%O5!6Bd)579co0uT?un=4zwq#D>3 z-93%63TPY=K;uXVXqf42K9akEjWZGfw2kBdjUxg;gnF@TI-8HyuwIEG@F(A)qBv3d&mm)Lok3N00{)w_guq z^#hkBpzeKQ#fbfaDe9Aj)sCQ&>-etls2kM>(gKje4L;;o0b+by$O}NgMfL+UP8BzU zgfOPF`KXF_1q=S5z9UE~g|tC^Hn270b3b1c575%mt?yhph(nUV#?V)MmmWZj-zL=- zf;hNe3REiq01<%+y0SNgJ0W^*XfEg)w zWnZ})NHG}{@R3q*Iw(gTRd+(?o14km$;{MCnZ2oU4bB9&+C+Ew-gFaYai zS<~5kH12*N#-|Bpfs14kDBvT7AOQe00mwdp_Q<*;NT7$+*pd)lMNJIX>*D+OF_Fnfnxi29YddhQ|D--?|=BIXskc{_N$WJ!}#m6sm^yF zyj8USF#y0XKmS;y^LrnDT%=#&e=bYGzb}8y+VMM+o9KPKcy%4_y!$75Kb#?134HPD zdXnRa@rNNP0F&XAD3~U=!SCrZip{GUtam0y#Tn(a^J9`8_M-NU)Tu1X6WuLzq_?w zOb}f2266&8-T&M8xr;l0wzvp(``F|PE56}@oB%eD$PLK}3V8#-YIqnD1e>dUcWXVk zZK}EgM~3nRHUfCIxCm~mmXNma;sVzgKLi^A=nN%$rti6i7fi;(e?pU?WG{6xNFlys zAX9=lF-0K&q5^PP%Tq4^rN|j{Pl`zg_lo3a9^V3PyHtO82F zC1)V%0YYhcy&swjR3!k@J_5{Kp@!N3djaUVfo|{?a)lxKyaSsYz=ob1q%ydg*?qB` zQk)OHeayxKP+#_Og^dSD?aGIC3{#rjn6U8xF&Vz;P9ldL!?9I97uX2k#`|v1Eto<@ zsTxA;DgmSLqr*l3f8BQT0Fw3lK}rC9n?8JQ<;H9tNeSjIp;Y04lmJ3pwJA5?RyNLw zE}Y9%K#phiFyN5PVPMJ+9zC86<_-GyV*q(dw-!Q@#?eP#>=k`L{^q@-lHJ3d#WzL! zFAbYQP|ch!7eVbdCtK0&MF9V?v9}KZ0O!YX9_e(sxHOCpzF}B@sYhu0WCA!lS%+J@ zl6{95U*Re~CDs(}lL>&k@ndJcjZ~fm3u_(V?1V-!#m1YHm*{{c;F{f25lIZWjUW5M?$GvD0fZXz z*6u}C5vWYRL^v=J;yGf)7SrA;fEWYj^Z-;0ub`Uj*&v$)mP+zUAo~Fflr(;c1d#oH zfSSNC{>I+^;PSD=egG*1WrAw$fRzATYx}wH0Z=XTy1+^Ru6Y4Q{&2cnSY2=5z5(ht zh_VQP%iY61LY|%A@VrG-66jL!sloUFVKJO)-0u?Q0elKRXD92d#K1YO`{3jOVoJMQ z?+b9N=!Mej0o07;zQrqcRbcW4z8-?AN9h%S&+Mf<(=j%I=Dy*B1-nXMcQ)5{uYml1 n01DJ*bOpKn075=W?g#i6Cq0S%6ieF-00000NkvXXu0mjf$9wI# literal 2124 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, + 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); -} -}