From 501c66a1b0d55eafb7a7b5294f3276386793a10e Mon Sep 17 00:00:00 2001 From: StephenAdamson Date: Sat, 25 Jan 2025 16:54:27 +0000 Subject: [PATCH] better dorf z --- assets/sky.png | Bin 5510 -> 5974 bytes src/citizen.rs | 25 ++++++++++++------------- src/tilemap.rs | 11 +++++------ 3 files changed, 17 insertions(+), 19 deletions(-) diff --git a/assets/sky.png b/assets/sky.png index 4a37c7e99719d62ab93039d3d29db393c2265241..1b767518fbd0de5ff7768e9a18888564525af55b 100644 GIT binary patch delta 1552 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 QJ^%m!07*qoM6N<$f?R!v8~^|S diff --git a/src/citizen.rs b/src/citizen.rs index be9638c..b8e5f8f 100644 --- a/src/citizen.rs +++ b/src/citizen.rs @@ -1,15 +1,16 @@ use crate::{ constants::*, + game, tilemap::{ChunkMap, CHUNK_SIZE}, }; use bevy::{math::ivec3, prelude::*}; -use noise::Vector3; #[derive(Bundle)] pub struct Citizen { ambulatory: Ambulatory, sprite: Sprite, transform: Transform, + visibility: Visibility, } impl Citizen { @@ -26,6 +27,7 @@ impl Citizen { ..Default::default() }, transform: Transform::from_translation(position).with_scale(Vec3::splat(PIXEL_RATIO)), + visibility: Visibility::Hidden, } } } @@ -129,10 +131,11 @@ pub fn update_citizen_wandering_targets( } pub fn citizen_movement( - mut query: Query<(&mut Ambulatory, &mut Transform)>, + mut query: Query<(&mut Ambulatory, &mut Transform, &mut Visibility)>, tilemap: Res, + z_index: Res, ) { - for (mut ambulatory, mut transform) in query.iter_mut() { + for (mut ambulatory, mut transform, mut visibility) in query.iter_mut() { // Check if current position is valid let current_pos = transform.translation; let below_pos = Vec3::new( @@ -147,19 +150,10 @@ pub fn citizen_movement( // println!("transform.translation: {:?}", transform.translation); continue; } - let mut rng = rand::thread_rng(); - if rng.gen_range(0..8) > 0 { - continue; - } if let Some(target) = ambulatory.target { // Calculate path if needed if ambulatory.current_path.is_none() { - // println!( - // "from {:?} to {:?}", - // transform.translation.as_ivec3(), - // target.as_ivec3() - ivec3(0, 0, 1) - // ); ambulatory.current_path = Some(calculate_path( &tilemap, transform.translation.as_ivec3(), @@ -182,6 +176,11 @@ pub fn citizen_movement( } else if direction.x < 0.0 { transform.scale.x = -PIXEL_RATIO; } + if transform.translation.z.round() / TILE_SIZE <= z_index.0 + 1.0 { + *visibility = Visibility::Visible; + } else { + *visibility = Visibility::Hidden; + } // Check if we've reached the next point if transform.translation.distance(next_point) < ambulatory.speed { @@ -342,7 +341,7 @@ pub fn spawn_citizens(mut commands: Commands, asset_server: Res) { let mut rng = rand::thread_rng(); // Spawn a handful of citizens - for _ in 0..1 { + for _ in 0..5 { let x: f32 = rng.gen_range(-8.0..8.0); let y: f32 = rng.gen_range(-8.0..8.0); let mut position = Vec3::new(x.round(), y.round(), 30.0) * TILE_SIZE; diff --git a/src/tilemap.rs b/src/tilemap.rs index 309c0b4..74dab0f 100644 --- a/src/tilemap.rs +++ b/src/tilemap.rs @@ -150,16 +150,15 @@ pub fn generate_surface_noise(x: i32, y: i32) -> f32 { let noise = Perlin::new(0); let mut noise_value = 0.0; let mut amplitude = 1.0; - let mut frequency = 0.008; // Reduced initial frequency for smoother base terrain + let mut frequency = 0.008; - // Reduced number of octaves for less rough detail for _ in 0..6 { noise_value += noise.get([x as f64 * frequency, y as f64 * frequency]) * amplitude; - amplitude *= 0.6; // Gentler amplitude falloff - frequency *= 1.8; // Gentler frequency increase + amplitude *= 0.6; + frequency *= 1.8; } - (noise_value * 2.5) as f32 // Reduced height multiplier for less extreme elevation + (noise_value * 2.5) as f32 } fn handle_chunk_loading( @@ -287,7 +286,7 @@ fn handle_chunk_loading( fn setup_initial_chunks(mut event_writer: EventWriter) { println!("setup_initial_chunks"); - for x in -3..=3 { + for x in -9..=9 { for y in -2..=2 { event_writer.send(LoadChunkEvent { chunk_position: IVec2::new(x, y),