From 8d89f86c69c6817109a47bb901b5203e265ed15a Mon Sep 17 00:00:00 2001 From: popertots Date: Sat, 14 Dec 2024 01:04:52 +0000 Subject: [PATCH] z sorting attempt --- assets/sky.png | Bin 4509 -> 4774 bytes src/game.rs | 51 +++++++++++++++++++++++---------------------- src/main.rs | 4 ++-- src/tile.rs | 55 ++++++++++++++++++++++++++----------------------- 4 files changed, 57 insertions(+), 53 deletions(-) diff --git a/assets/sky.png b/assets/sky.png index e61863746b76d3d481007b3660ba47b4678be9df..5d4304b5bc20e4be518f3a8a370123d99be543cd 100644 GIT binary patch delta 950 zcmbQMyi9e1ay_F+YJ_K+r>7PJ2Ll5GHv=>XNNgrXW(H=U*d!q4V`O3w z0@5>pSO_Q%QV+sXjI3aK6_70rWp4tqHK1xh`VE14d4cpUAU0xTs%H=ZGEM+-W;?{< zJ3uxFaDbt6QEFmIYKlU6W=V#EyQgme!yioshG?KXj0OoR80i@r=owo8jWjSau`)EW zGBi;zFt9SVure@VU}9*S#LgfI)bk6785bZN%)p=m6oCRvtKJvKPXuaco-D&CU%#qZ z)i(grwX5UsW*A)U;tzoi0dVibLcs;wi7e9z9_>jEu)q_WCRyVI!;HYb`u(r_L z<khuzVu zEo`5vw$@K_c;EfF#-(vz?1HNWbKWN(&z#F}F#Uno`ybi93Ew7vadYpMVLW{Mz|m6o z;BO75WfQ)foZx$NYLiK8l3<1X;`~$0%G(bdm~}n6T7Egd!?ayq_ZisR54d!0x?X$l z?)|&B_ov_b`#9nqrn}m}s1AZe%<;inWW?Co`|KV)AQNX-+dU3lmFAV{?SCR(PYC7CAa8YU$h>6)0Drs^hI z8YSx{8C#fJrX?Dgm>L>RPG{GE+BA(_jvryFHqdy3&2u<1ImGTZ_jA z5L~c#`Q*vcf(jgb3~DUb7ZRl)tGRQixf^jh$j~Fw9@J=QlnWvTs Pp!DhK>gTe~DWM4fRg*LR delta 865 zcmV-n1D^b*C7mOXBYyzvdQ@0+Qek%>aB^>EX>4U6ba`-PAZ2)IW&i+q+Ko|L4#O}A z`_CzM1OhY($4Ot(Zm{FeO-Q>=nlz-i;81Ygu)UspcpSlngHE|5ONkI_YFv>N>M=Kr zqz%2Gk=*!jUN9)ZQ+jFa{01I*^xAw$9Q|X^xv3(Xu8UfopMUTC>;t)c4{`+(`(|4G z1s^2rinP~@D@s=K?bFtU?oqCzk~vK&W(6u!&dHD$Ce843J%sKHTN^ZWLr-GVqm`kF zH;F<(5$!7FI4Tu9HnN zgNw7S4z7YA_yOYV;H2mxCH^ldw21NGxF7HCJ?`ECLZiY|vnvXynq{QoF)^E46?)AfDN@bk6(4Ay$$U z;&b8&gDyz?$aUG}H_kiNlJjQNECMS>e3JS*_Gq z>z@3DfxNbo<~q$0#Ib|~k`N)IhB7L!5TR8g#YBqsV;=rt$DbsZOs+B*ITlcb3d!+< z|H1EW&BD~An|~CD0o^aQ{V@jg>;lcYZGRuzcJl=AKLb}<+h1(}v!A5b+gkVt=-&n| zuG^Zt2VCv|Lr=P7NRH&EDHIC8`x$*x4j8xv`qtduTKhPC05a6o@(pls2#gmgd)?#R zy`8=Nd#2Uj4;FcH=xy?j&Hw-oRcTaMbXZMHI%98bF0Dti zEi^D@FfBPbG-NGhHe+F9F=RPqWH@A#f(42PS7~l!Z+CN(5e6G1Gcq(VGBPwZF*qU$ zARr(|Nlj2XR%LQ?X>V>lA~G&9FfKDRlTZd%3NutPGdeUdIy5kou?8dxGgLA&Iy5jk zG%&N@2J8W|t_ffW7Q^psga7~l24YJ`L;wH)0002_L%V;IBoZJ94HqaVaM-mrlS~pb rCyWpS1%QcxLNIE;r~#t}3>E_bI3)sAw2>^S00000NkvXXu0mjf`K5IS diff --git a/src/game.rs b/src/game.rs index c5ed295..bc37ca5 100644 --- a/src/game.rs +++ b/src/game.rs @@ -6,28 +6,29 @@ use bevy::prelude::*; use rand::prelude::*; use noise::{NoiseFn, Perlin}; +pub const Z_INDEX:f32 = 0.; pub fn setup_level(mut commands: Commands, asset_server: Res) { setup_tilemap(&mut commands, &asset_server); - // for x in -50..50 { - // for y in -25..25 { - // if random::() < 0.1 { - // commands.spawn(Citizen::new( - // &asset_server, - // Vec3::new(x as f32 * 64., y as f32 * 64., 1.), - // )); - // } - // } - // } + for x in -10..10 { + for y in -10..10 { + if random::() < 0.1 { + commands.spawn(Citizen::new( + &asset_server, + Vec3::new(x as f32 * 64., y as f32 * 64., 0.9), + )); + } + } + } } fn setup_tilemap(commands: &mut Commands, asset_server: &Res) { let perlin = Perlin::new(0); - for x in -150..150 { - for y in -150..150 { - for z in -10..10 { + for x in -20..20 { + for y in -20..20 { + for z in -2..10 { let position = Vec3::new( x as f32 * TILE_SIZE, y as f32 * TILE_SIZE, @@ -42,23 +43,15 @@ fn setup_tilemap(commands: &mut Commands, asset_server: &Res) { ]); let mut items: Vec = vec![]; - if noise_value < -0.3 { + if noise_value < -0.4 { commands - .spawn(TilePrefab::rock(position, asset_server)) + .spawn(TilePrefab::air(position, asset_server)) .with_children(|parent| { for item in items { parent.spawn(item); } }); - } else if noise_value < 0. { - commands - .spawn(TilePrefab::dirt(position, asset_server)) - .with_children(|parent| { - for item in items { - parent.spawn(item); - } - }); - } else if noise_value < 0.3 { + } else if noise_value < -0.2 { commands .spawn(TilePrefab::grass(position, asset_server)) .with_children(|parent| { @@ -66,8 +59,16 @@ fn setup_tilemap(commands: &mut Commands, asset_server: &Res) { parent.spawn(item); } }); + } else if noise_value < 0.2 { + commands + .spawn(TilePrefab::dirt(position, asset_server)) + .with_children(|parent| { + for item in items { + parent.spawn(item); + } + }); } else { - commands.spawn(TilePrefab::air(position, asset_server)); + commands.spawn(TilePrefab::rock(position, asset_server)); } } } diff --git a/src/main.rs b/src/main.rs index 1c473f5..1aba68d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -22,9 +22,9 @@ fn main() { }) .set(ImagePlugin::default_nearest()), ) - .insert_resource(ClearColor(Color::srgb(0.1, 0.1, 0.15))) + .insert_resource(ClearColor(Color::srgb(0.0, 0.0, 0.0))) .add_systems(Startup, (game::setup_level, camera::spawn_panning_camera)) - .add_systems(Startup, tile::tile_sprite_visibility_update) + .add_systems(PostStartup, tile::tile_sprite_visibility_update) .add_systems(Startup, cursor::setup_curor) .add_systems( FixedUpdate, diff --git a/src/tile.rs b/src/tile.rs index 081117b..110df9f 100644 --- a/src/tile.rs +++ b/src/tile.rs @@ -1,16 +1,16 @@ use crate::item::Item; -use crate::constants::*; +use crate::{constants::*, game}; use bevy::prelude::*; #[derive(Component)] #[require(Sprite)] pub struct Tile { - pub id: u32 + pub id: u32, } impl Default for Tile { fn default() -> Self { - Self {id:1} + Self { id: 1 } } } @@ -51,33 +51,39 @@ pub struct DoorTile { pub locked: bool, } - - pub fn tile_sprite_visibility_update( - mut query: Query<(&mut Visibility, &Transform, Entity), With>, + mut query: Query<(&mut Visibility, &Transform), With>, tile_query: Query<(&Transform, &Tile)>, ) { - for (mut visibility, transform, entity) in query.iter_mut() { + for (mut visibility, transform) in query.iter_mut() { *visibility = Visibility::Hidden; + if transform.translation.z > game::Z_INDEX { + continue; + } + for x_offset in -1..=1 { for y_offset in -1..=1 { - if x_offset == 0 && y_offset == 0 { - continue; // Skip the current tile - } + for z_offset in -1..=0 { + if x_offset == 0 && y_offset == 0 && z_offset == 0 { + continue; // Skip the current tile + } + let neighbor_position = transform.translation + + Vec3::new( + x_offset as f32 * TILE_SIZE, + y_offset as f32 * TILE_SIZE, + z_offset as f32 * TILE_SIZE, + ); - let neighbor_position = transform.translation + Vec3::new( - x_offset as f32 * TILE_SIZE, - y_offset as f32 * TILE_SIZE, - 0.0, - ); - - if let Some((neighbor_transform, neighbor_tile)) = tile_query.iter().find(|(neighbor_transform, _)| { - neighbor_transform.translation == neighbor_position - }) { - if neighbor_tile.id == 0 { - *visibility = Visibility::Visible; - break; + if let Some((neighbor_transform, neighbor_tile)) = + tile_query.iter().find(|(neighbor_transform, _)| { + neighbor_transform.translation == neighbor_position + }) + { + if neighbor_tile.id == 0 { + *visibility = Visibility::Visible; + break; + } } } } @@ -85,8 +91,6 @@ pub fn tile_sprite_visibility_update( } } - - pub fn tile_item_sprite_update( time: Res