use fastrand for better asteroid distribution
This commit is contained in:
parent
0e18067024
commit
3ea2f3bc3a
5
Cargo.lock
generated
5
Cargo.lock
generated
|
@ -1704,9 +1704,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "fastrand"
|
||||
version = "2.0.1"
|
||||
version = "2.0.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5"
|
||||
checksum = "658bd65b1cf4c852a3cc96f18a8ce7b5640f6b703f905c7d74532294c2a63984"
|
||||
|
||||
[[package]]
|
||||
name = "fdeflate"
|
||||
|
@ -2753,6 +2753,7 @@ dependencies = [
|
|||
"bevy",
|
||||
"bevy_embedded_assets",
|
||||
"bevy_xpbd_3d",
|
||||
"fastrand",
|
||||
"regex",
|
||||
]
|
||||
|
||||
|
|
|
@ -14,6 +14,7 @@ regex = "1"
|
|||
bevy = { version = "0.13.1", default-features = false, features = ["jpeg", "bevy_asset", "bevy_audio", "bevy_scene", "bevy_winit", "bevy_core_pipeline", "bevy_pbr", "bevy_gltf", "bevy_render", "bevy_text", "bevy_ui", "file_watcher", "multi-threaded", "png", "vorbis", "x11", "tonemapping_luts"]}
|
||||
bevy_xpbd_3d = { version = "0.4.2", default-features = false, features = ["3d", "f64", "parry-f64", "parallel", "async-collider"] }
|
||||
bevy_embedded_assets = "0.10.2"
|
||||
fastrand = "2.0.2"
|
||||
|
||||
[features]
|
||||
dev = ["bevy/dynamic_linking"]
|
||||
|
|
32
src/world.rs
32
src/world.rs
|
@ -6,9 +6,10 @@ use bevy_xpbd_3d::prelude::*;
|
|||
use bevy_xpbd_3d::plugins::sync::SyncConfig;
|
||||
use std::collections::HashMap;
|
||||
use std::f32::consts::PI;
|
||||
use fastrand;
|
||||
|
||||
const ASTEROID_UPDATE_INTERVAL: f32 = 1.0; // seconds
|
||||
const ASTEROID_SIZE_FACTOR: f32 = 5.0;
|
||||
const ASTEROID_SIZE_FACTOR: f32 = 3.0;
|
||||
const STARS_MAX_MAGNITUDE: f32 = 5.5;
|
||||
|
||||
const CENTER_WORLD_ON_PLAYER: bool = true;
|
||||
|
@ -232,6 +233,7 @@ fn spawn_despawn_asteroids(
|
|||
}
|
||||
}
|
||||
|
||||
let mut rng = fastrand::Rng::new();
|
||||
for x in -stepmax..=stepmax {
|
||||
for y in -stepmax..=stepmax {
|
||||
for z in -stepmax..=stepmax {
|
||||
|
@ -245,9 +247,15 @@ fn spawn_despawn_asteroids(
|
|||
continue;
|
||||
}
|
||||
|
||||
// generate some deterministic pseudorandom numbers seeded with the origin coordinates
|
||||
let rand_s = (4.0*((origin.x+origin.y+origin.z) as f64).sin()
|
||||
+ 3.0*((origin.x+origin.y+origin.z) as f64).cos()).abs() % 1.0;
|
||||
// Get a seed based on all of the origin axes
|
||||
// Probably there's a faster way
|
||||
rng.seed(origin.x as u64);
|
||||
let seed = rng.u64(0..u64::MAX).wrapping_add(origin.y as u64);
|
||||
rng.seed(seed);
|
||||
let seed = rng.u64(0..u64::MAX).wrapping_add(origin.z as u64);
|
||||
rng.seed(seed);
|
||||
|
||||
let rand_s = rng.f32();
|
||||
let size: f32 = (rand_s + 1e-6).powf(-0.5) as f32; // -> between ~1 and 1000
|
||||
|
||||
if rand_s > 0.7 {
|
||||
|
@ -258,18 +266,14 @@ fn spawn_despawn_asteroids(
|
|||
spawned_near += 1;
|
||||
}
|
||||
|
||||
let rand_x = (4.0*((origin.x+origin.y) as f64).sin()
|
||||
+ 3.0*((origin.y+origin.z) as f64).cos()) % 1.0;
|
||||
let rand_y = (4.0*((origin.y+origin.z) as f64).sin()
|
||||
+ 3.0*((origin.z+origin.x) as f64).cos()) % 1.0;
|
||||
let rand_z = (40.0*((origin.z+origin.x) as f64).sin()
|
||||
+ 30.0*((origin.x+origin.y) as f64).cos()) % 1.0;
|
||||
let rand_c = (8.0*((origin.x+origin.z) as f64).sin()
|
||||
+ 4.0*((origin.x+origin.z) as f64).cos()).abs() % 1.0;
|
||||
let class = if rand_c < 0.5 { 0 } else { 1 };
|
||||
let rand_x = rng.f64();
|
||||
let rand_y = rng.f64();
|
||||
let rand_z = rng.f64();
|
||||
let rand_c = rng.bool();
|
||||
let class = if rand_c { 0 } else { 1 };
|
||||
|
||||
//let max_viewdist = ASTEROID_VIEW_RADIUS / ASTEROID_SPAWN_STEP;
|
||||
let wobble = ASTEROID_SPAWN_STEP * 0.3;
|
||||
let wobble = ASTEROID_SPAWN_STEP * 0.5;
|
||||
let pos = DVec3::new(
|
||||
origin.x as f64 * ASTEROID_SPAWN_STEP + wobble * rand_x * 2.0 - 1.0,
|
||||
origin.y as f64 * ASTEROID_SPAWN_STEP + wobble * rand_y * 2.0 - 1.0,
|
||||
|
|
Loading…
Reference in a new issue