From 9afcb0f612402e5dc040acbf31897ef35b7d1e2d Mon Sep 17 00:00:00 2001 From: popertots Date: Sun, 22 Mar 2026 01:32:22 +0000 Subject: [PATCH] more debug --- src/entities/livestock/pig.rs | 31 ++++++++++++++------------ src/entities/livestock/rabbit.rs | 37 +++++++++++++++++--------------- src/entities/sentient/dorf.rs | 33 ++++++++++++++++------------ src/entities/tasks/executor.rs | 9 ++++++++ 4 files changed, 65 insertions(+), 45 deletions(-) diff --git a/src/entities/livestock/pig.rs b/src/entities/livestock/pig.rs index 285d75b..9b078a5 100644 --- a/src/entities/livestock/pig.rs +++ b/src/entities/livestock/pig.rs @@ -6,7 +6,7 @@ use crate::game::SpawnDelay; use crate::world::VisibleGameEntity; use bevy::prelude::*; use bevy_rand::prelude::*; -use rand::RngExt; +use rand::{RngExt, SeedableRng}; #[derive(Bundle)] pub struct Pig { @@ -47,7 +47,6 @@ impl Pig { pub fn spawn_pigs( mut commands: Commands, asset_server: Res, - mut rng_q: Query<&mut WyRand, With>, config: Res, mut delay: ResMut, mut has_spawned: Local, @@ -63,18 +62,22 @@ pub fn spawn_pigs( *has_spawned = true; - if let Ok(mut rng) = rng_q.single_mut() { - for _ in 0..config.spawn_counts.pigs { - let raw_x = rng.random_range(-32.0f32..32.0f32); - let raw_y = rng.random_range(-32.0f32..32.0f32); - let grid_x = (raw_x / TILE_SIZE).round() * TILE_SIZE; - let grid_y = (raw_y / TILE_SIZE).round() * TILE_SIZE; - let grid_z = 35.0 * TILE_SIZE; + use std::collections::hash_map::DefaultHasher; + use std::hash::{Hash, Hasher}; + let mut hasher = DefaultHasher::new(); + (crate::constants::SEED + 1).hash(&mut hasher); + let seed = hasher.finish(); + let mut rng = WyRand::seed_from_u64(seed); + for _ in 0..config.spawn_counts.pigs { + let raw_x = rng.random_range(-32.0f32..32.0f32); + let raw_y = rng.random_range(-32.0f32..32.0f32); + let grid_x = (raw_x / TILE_SIZE).round() * TILE_SIZE; + let grid_y = (raw_y / TILE_SIZE).round() * TILE_SIZE; + let grid_z = 35.0 * TILE_SIZE; - let pig = commands - .spawn(Pig::new(&asset_server, Vec3::new(grid_x, grid_y, grid_z))) - .id(); - commands.entity(pig).insert(VisibleGameEntity); - } + let pig = commands + .spawn(Pig::new(&asset_server, Vec3::new(grid_x, grid_y, grid_z))) + .id(); + commands.entity(pig).insert(VisibleGameEntity); } } diff --git a/src/entities/livestock/rabbit.rs b/src/entities/livestock/rabbit.rs index 1a6a97c..e5a0eb6 100644 --- a/src/entities/livestock/rabbit.rs +++ b/src/entities/livestock/rabbit.rs @@ -7,7 +7,7 @@ use crate::game::SpawnDelay; use crate::world::VisibleGameEntity; use bevy::prelude::*; use bevy_rand::prelude::*; -use rand::RngExt; +use rand::{RngExt, SeedableRng}; #[derive(Bundle)] pub struct Rabbit { @@ -49,7 +49,6 @@ impl Rabbit { pub fn spawn_rabbits( mut commands: Commands, asset_server: Res, - mut rng_q: Query<&mut WyRand, With>, config: Res, mut delay: ResMut, mut has_spawned: Local, @@ -65,21 +64,25 @@ pub fn spawn_rabbits( *has_spawned = true; - if let Ok(mut rng) = rng_q.single_mut() { - for _ in 0..config.spawn_counts.rabbits { - let raw_x = rng.random_range(-32.0f32..32.0f32); - let raw_y = rng.random_range(-32.0f32..32.0f32); - let grid_x = (raw_x / TILE_SIZE).round() * TILE_SIZE; - let grid_y = (raw_y / TILE_SIZE).round() * TILE_SIZE; - let grid_z = 35.0 * TILE_SIZE; + use std::collections::hash_map::DefaultHasher; + use std::hash::{Hash, Hasher}; + let mut hasher = DefaultHasher::new(); + (crate::constants::SEED + 2).hash(&mut hasher); + let seed = hasher.finish(); + let mut rng = WyRand::seed_from_u64(seed); + for _ in 0..config.spawn_counts.rabbits { + let raw_x = rng.random_range(-32.0f32..32.0f32); + let raw_y = rng.random_range(-32.0f32..32.0f32); + let grid_x = (raw_x / TILE_SIZE).round() * TILE_SIZE; + let grid_y = (raw_y / TILE_SIZE).round() * TILE_SIZE; + let grid_z = 35.0 * TILE_SIZE; - let rab = commands - .spawn(Rabbit::new( - &asset_server, - Vec3::new(grid_x, grid_y, grid_z), - )) - .id(); - commands.entity(rab).insert(VisibleGameEntity); - } + let rab = commands + .spawn(Rabbit::new( + &asset_server, + Vec3::new(grid_x, grid_y, grid_z), + )) + .id(); + commands.entity(rab).insert(VisibleGameEntity); } } diff --git a/src/entities/sentient/dorf.rs b/src/entities/sentient/dorf.rs index aec36d4..827868a 100644 --- a/src/entities/sentient/dorf.rs +++ b/src/entities/sentient/dorf.rs @@ -8,7 +8,7 @@ use crate::game::SpawnDelay; use crate::world::VisibleGameEntity; use bevy::prelude::*; use bevy_rand::prelude::*; -use rand::RngExt; +use rand::{RngExt, SeedableRng}; use std::collections::VecDeque; #[derive(Bundle)] @@ -67,7 +67,6 @@ impl Dorf { pub fn spawn_dorfs( mut commands: Commands, asset_server: Res, - mut rng_q: Query<&mut WyRand, With>, config: Res, mut delay: ResMut, mut has_spawned: Local, @@ -83,18 +82,24 @@ pub fn spawn_dorfs( *has_spawned = true; - if let Ok(mut rng) = rng_q.single_mut() { - for _ in 0..config.spawn_counts.dorfs { - let raw_x = rng.random_range(-8.0f32..8.0f32); - let raw_y = rng.random_range(-8.0f32..8.0f32); - let grid_x = (raw_x / TILE_SIZE).round() * TILE_SIZE; - let grid_y = (raw_y / TILE_SIZE).round() * TILE_SIZE; - let grid_z = 35.0 * TILE_SIZE; + // Create deterministic RNG from SEED - same pattern as forestry.rs + use std::collections::hash_map::DefaultHasher; + use std::hash::{Hash, Hasher}; + let mut hasher = DefaultHasher::new(); + crate::constants::SEED.hash(&mut hasher); + let seed = hasher.finish(); + let mut rng = WyRand::seed_from_u64(seed); - let cit = commands - .spawn(Dorf::new(&asset_server, Vec3::new(grid_x, grid_y, grid_z))) - .id(); - commands.entity(cit).insert(VisibleGameEntity); - } + for _ in 0..config.spawn_counts.dorfs { + let raw_x = rng.random_range(-8.0f32..8.0f32); + let raw_y = rng.random_range(-8.0f32..8.0f32); + let grid_x = (raw_x / TILE_SIZE).round() * TILE_SIZE; + let grid_y = (raw_y / TILE_SIZE).round() * TILE_SIZE; + let grid_z = 35.0 * TILE_SIZE; + + let cit = commands + .spawn(Dorf::new(&asset_server, Vec3::new(grid_x, grid_y, grid_z))) + .id(); + commands.entity(cit).insert(VisibleGameEntity); } } diff --git a/src/entities/tasks/executor.rs b/src/entities/tasks/executor.rs index 81c0437..ab2e2a0 100644 --- a/src/entities/tasks/executor.rs +++ b/src/entities/tasks/executor.rs @@ -34,14 +34,23 @@ pub fn task_executor_system( mut completed_writer: MessageWriter, mut failed_writer: MessageWriter, ) { + eprintln!("[TASK_EXEC] Running"); + use std::collections::hash_map::DefaultHasher; use std::hash::{Hash, Hasher}; let mut hasher = DefaultHasher::new(); crate::constants::SEED.hash(&mut hasher); time.elapsed_secs().to_bits().hash(&mut hasher); let seed = hasher.finish(); + eprintln!("[TASK_EXEC] RNG seed: {}", seed); let mut rng = WyRand::seed_from_u64(seed); + let count = query.iter().count(); + eprintln!("[TASK_EXEC] Query returned {} entities", count); + if count == 0 { + return; + } + for (entity, mut queue, mut state, mut ambulatory, transform) in query.iter_mut() { // If queue empty, assign default Idle task if queue.is_empty() {