From bb25d625616e788af5cacdb1b91e8c1896781878 Mon Sep 17 00:00:00 2001 From: crumblingstatue Date: Mon, 3 Apr 2023 12:41:27 +0200 Subject: [PATCH] Add a surface/underground divide --- res/tiles.png | Bin 4921 -> 4474 bytes src/app.rs | 2 +- src/game.rs | 7 +++++-- src/world.rs | 14 ++++++++++---- 4 files changed, 16 insertions(+), 7 deletions(-) diff --git a/res/tiles.png b/res/tiles.png index 21d6e7332e1276e9cd0a2f46541e99ec852e40b9..008e901880b2d541ed806f380b7cb3d73e9e4d06 100644 GIT binary patch delta 517 zcmdm~_DgAka=oCVr;B4q#hkZyHwGRy5MfJbPiE!{-&xF-AbRZthn`X6wS?{~ItSPu z_H}74co0;;*ZJnew4D0*x0|o*i+}Gq`)}R<*wim|HqT=AakV>N`#L}F-llc`WA^85 z%41+)Xz;Xoa*u(5fx*Cz5k#$N0Few~3&I&TteqXWkF}nGf#H~_EJM!gWxxLX>iAbU zKmU1xxYJf{#qVYe3=9bqUN9tNvi=oVzU}N@Rt5$Ji6z1e8F$$k7#g0wWMT08rCBNB^#D6MoCWz`(Gs zTBf>j={^1ey?5so57ZysCjineq{7Ltt#tDZr~hKCb_@&*#ScV5Mu02?(E(qs{KdvDS04wdtKpV_$BgH@BeS_kNgY_4lAwBGibeP zH`ZbRaVFhmOppN?b!w^(!;Wi~3Ls9yo<+PTXLsyh~Du>ZBhp=7IEky85}Sb4q9e0KA*KQUCw| delta 970 zcmeyRv{P+@a=kEvr;B4q#hf>HPv+h+kYEe2^x(IXEZ`0Ht}5_-cW~>DHU`V3T+b6Y z6x>cv5H#<6&$#c*3FWR!Pk$eM`tt4Dx7k@Q{{H>D^65`T28IL{`zUh;1_lNVe?}0+ zwg5yjFnee*?6KJ|W+_(nxp22>tTZzNgTnUt8`<~S?63E$|M#!&-@_@%+jCks#Lu7a zE5^rjJ9sy*{Px@7t6#r68E0_a{{Az&OY#g14jQ`{CMaK6euK*pB-?Euvn@UEaMW*& z#bqB;_nkLs-$eS7NAqi#EP28M4c{)`^H|5e2}-q#Uuim?r zoq^#+{3oRbU5@{cf6fz>xF0h~Mxy`OcLk%8gC9ll-$jjc!H z&!lf%x@BSex45JK&y?$56=Ps%FplnF@QA#)|I4HL#2K#>1-BXWywmmA{{64$5uH=h zAKRo$T)O|tx8{a#PaXYmaMwwRNwpg+mdIc%S0I6w8eT#)-o_0 zFucjdQ2o$;o5h4(kE-8nRQ-CXPwL67#IY)^cZ9+56`#$)1P-_pVY@$ zj0_A#!d-d{TVkXcs+MRlGBC_JxiFW3aWf;67eD`l`04@=Q2tSP@jp8~VlpF>w3r1; Wfk*aZ&0jf_K@y&>elF{r5}E+P6R({B diff --git a/src/app.rs b/src/app.rs index 4f38a0a..d19a5ac 100644 --- a/src/app.rs +++ b/src/app.rs @@ -86,7 +86,7 @@ impl App { } fn do_rendering(&mut self) { - self.rw.clear(Color::BLACK); + self.rw.clear(Color::rgb(55, 221, 231)); self.game.draw_world(&mut self.rw, &self.res); self.sf_egui .do_frame(|ctx| { diff --git a/src/game.rs b/src/game.rs index 19a8f63..70595b1 100644 --- a/src/game.rs +++ b/src/game.rs @@ -4,7 +4,7 @@ use crate::{ graphics::{ScreenPos, ScreenPosScalar, NATIVE_RESOLUTION}, math::{wp_to_tp, WorldPos, WorldPosScalar}, res::Res, - world::{TilePos, World}, + world::{Tile, TilePos, World}, }; pub struct GameState { @@ -16,7 +16,10 @@ impl GameState { let mut s = Sprite::with_texture(&res.tile_atlas); for_each_tile_on_screen(self.camera_offset, |tp, sp| { let tile = self.world.tile_at_mut(tp); - s.set_texture_rect(Rect::new(tile.id as i32 * 32, 0, 32, 32)); + if tile.id == Tile::AIR { + return; + } + s.set_texture_rect(Rect::new((tile.id - 1) as i32 * 32, 0, 32, 32)); s.set_position(sp.to_sf_vec()); rw.draw(&s); }); diff --git a/src/world.rs b/src/world.rs index 72a1eb6..1a49597 100644 --- a/src/world.rs +++ b/src/world.rs @@ -28,7 +28,7 @@ impl World { /// Loads or generates the containing chunk if necessary. pub fn tile_at_mut(&mut self, pos: TilePos) -> &mut Tile { let (chk, local) = pos.to_chunk_and_local(); - let chk = self.chunks.entry(chk).or_insert_with(Chunk::new_rand); + let chk = self.chunks.entry(chk).or_insert_with(|| Chunk::gen(chk)); chk.at_mut(local) } } @@ -107,11 +107,13 @@ pub struct Chunk { } impl Chunk { - pub fn new_rand() -> Self { + pub fn gen(pos: ChunkPos) -> Self { let mut rng = thread_rng(); let mut tiles = [Tile { id: 0 }; CHUNK_N_TILES]; - for b in &mut tiles { - b.id = rng.gen_range(0..8); + if pos.y > 40 { + for b in &mut tiles { + b.id = rng.gen_range(1..5); + } } Self { tiles } } @@ -127,3 +129,7 @@ type TileId = u16; pub struct Tile { pub id: TileId, } + +impl Tile { + pub const AIR: TileId = 0; +}