tweaking asteroids
This commit is contained in:
parent
e3e67b0c6f
commit
0e18067024
33
src/world.rs
33
src/world.rs
|
@ -14,7 +14,7 @@ const STARS_MAX_MAGNITUDE: f32 = 5.5;
|
||||||
const CENTER_WORLD_ON_PLAYER: bool = true;
|
const CENTER_WORLD_ON_PLAYER: bool = true;
|
||||||
|
|
||||||
const ASTEROID_SPAWN_STEP: f64 = 500.0;
|
const ASTEROID_SPAWN_STEP: f64 = 500.0;
|
||||||
const ASTEROID_VIEW_RADIUS: f64 = 1000.0;
|
const ASTEROID_VIEW_RADIUS: f64 = 3000.0;
|
||||||
|
|
||||||
const ASSET_ASTEROID1: &str = "models/asteroid.glb#Scene0";
|
const ASSET_ASTEROID1: &str = "models/asteroid.glb#Scene0";
|
||||||
const ASSET_ASTEROID2: &str = "models/asteroid2.glb#Scene0";
|
const ASSET_ASTEROID2: &str = "models/asteroid2.glb#Scene0";
|
||||||
|
@ -193,6 +193,7 @@ fn spawn_despawn_asteroids(
|
||||||
(player.z / ASTEROID_SPAWN_STEP).round() as i64,
|
(player.z / ASTEROID_SPAWN_STEP).round() as i64,
|
||||||
);
|
);
|
||||||
let mut spawned = 0;
|
let mut spawned = 0;
|
||||||
|
let mut spawned_near = 0;
|
||||||
let mut despawned = 0;
|
let mut despawned = 0;
|
||||||
|
|
||||||
// Parameters
|
// Parameters
|
||||||
|
@ -245,31 +246,37 @@ fn spawn_despawn_asteroids(
|
||||||
}
|
}
|
||||||
|
|
||||||
// generate some deterministic pseudorandom numbers seeded with the origin coordinates
|
// 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;
|
||||||
|
let size: f32 = (rand_s + 1e-6).powf(-0.5) as f32; // -> between ~1 and 1000
|
||||||
|
|
||||||
|
if rand_s > 0.7 {
|
||||||
|
let dist = player_cell.as_dvec3().distance(origin.as_dvec3());
|
||||||
|
if dist > 4.0 {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
spawned_near += 1;
|
||||||
|
}
|
||||||
|
|
||||||
let rand_x = (4.0*((origin.x+origin.y) as f64).sin()
|
let rand_x = (4.0*((origin.x+origin.y) as f64).sin()
|
||||||
+ 3.0*((origin.y+origin.z) as f64).cos()) % 1.0;
|
+ 3.0*((origin.y+origin.z) as f64).cos()) % 1.0;
|
||||||
let rand_y = (4.0*((origin.y+origin.z) as f64).sin()
|
let rand_y = (4.0*((origin.y+origin.z) as f64).sin()
|
||||||
+ 3.0*((origin.z+origin.x) as f64).cos()) % 1.0;
|
+ 3.0*((origin.z+origin.x) as f64).cos()) % 1.0;
|
||||||
let rand_z = (4.0*((origin.z+origin.x) as f64).sin()
|
let rand_z = (40.0*((origin.z+origin.x) as f64).sin()
|
||||||
+ 3.0*((origin.x+origin.y) as f64).cos()) % 1.0;
|
+ 30.0*((origin.x+origin.y) as f64).cos()) % 1.0;
|
||||||
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;
|
|
||||||
let rand_c = (8.0*((origin.x+origin.z) as f64).sin()
|
let rand_c = (8.0*((origin.x+origin.z) as f64).sin()
|
||||||
+ 4.0*((origin.x+origin.z) as f64).cos()).abs() % 1.0;
|
+ 4.0*((origin.x+origin.z) as f64).cos()).abs() % 1.0;
|
||||||
let class = if rand_c < 0.5 { 0 } else { 1 };
|
let class = if rand_c < 0.5 { 0 } else { 1 };
|
||||||
|
|
||||||
//if player_cell.as_dvec3().distance(origin.as_dvec3()) > asteroid.viewdistance
|
|
||||||
//let max_viewdist = ASTEROID_VIEW_RADIUS / ASTEROID_SPAWN_STEP;
|
//let max_viewdist = ASTEROID_VIEW_RADIUS / ASTEROID_SPAWN_STEP;
|
||||||
let size: f32 = (rand_s + 1e-6).powf(-0.5) as f32; // -> between ~1 and 1000
|
|
||||||
let wobble = ASTEROID_SPAWN_STEP * 0.3;
|
let wobble = ASTEROID_SPAWN_STEP * 0.3;
|
||||||
let pos = DVec3::new(
|
let pos = DVec3::new(
|
||||||
origin.x as f64 * ASTEROID_SPAWN_STEP + wobble * rand_x,
|
origin.x as f64 * ASTEROID_SPAWN_STEP + wobble * rand_x * 2.0 - 1.0,
|
||||||
origin.y as f64 * ASTEROID_SPAWN_STEP + wobble * rand_y,
|
origin.y as f64 * ASTEROID_SPAWN_STEP + wobble * rand_y * 2.0 - 1.0,
|
||||||
origin.z as f64 * ASTEROID_SPAWN_STEP + wobble * rand_z,
|
origin.z as f64 * ASTEROID_SPAWN_STEP + wobble * rand_z * 2.0 - 1.0,
|
||||||
);
|
);
|
||||||
dbg!(pos);
|
|
||||||
|
|
||||||
// Spawn
|
// Spawn
|
||||||
dbg!(pos, origin, size);
|
|
||||||
let mut entity_commands = commands.spawn((
|
let mut entity_commands = commands.spawn((
|
||||||
actor::Actor::default(),
|
actor::Actor::default(),
|
||||||
RigidBody::Dynamic,
|
RigidBody::Dynamic,
|
||||||
|
@ -301,7 +308,7 @@ fn spawn_despawn_asteroids(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if spawned != 0 || despawned != 0 {
|
if spawned != 0 || despawned != 0 {
|
||||||
log.notice(format!("spawned: {spawned}, despawned: {despawned}"));
|
log.notice(format!("spawned: {spawned} (near: {spawned_near}), despawned: {despawned}"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue