small density adjusts

This commit is contained in:
Crizomb 2025-12-28 03:08:48 +01:00
parent 91c082def3
commit ad6eaa7d79
2 changed files with 18 additions and 9 deletions

View file

@ -1,13 +1,16 @@
use std::f32::consts::TAU;
use crate::globals::MAX_MAP_WIDTH;
use crate::physics_body::PhysicsBody;
use bevy::prelude::*;
use rand::Rng;
const CELL_SIZE: usize = 32;
const CELL_SIZE: usize = 8;
const MAX_MAP_SIZE: usize = MAX_MAP_WIDTH * 2;
const ARRAY_WIDTH: usize = MAX_MAP_SIZE / CELL_SIZE;
const GRID_ARRAY_SIZE: usize = ARRAY_WIDTH * ARRAY_WIDTH;
const DENSITY_FORCE_SCALE: f32 = 100.0;
const DENSITY_FORCE_SCALE: f32 = 6000.0;
#[derive(Resource)]
pub struct DensityGrid {
@ -34,12 +37,16 @@ fn get_index_from_uvec2(grid_cell: UVec2) -> usize {
}
#[derive(Component, Default)]
pub struct DensityObject {}
pub struct DensityObject {
random_offset: Vec2,
}
pub fn init_density_object(mut density_grid: ResMut<DensityGrid>, mut query: Query<&Transform>) {
for transform in &mut query {
pub fn init_density_object(mut density_grid: ResMut<DensityGrid>, mut query: Query<(&Transform, &mut DensityObject)>) {
let mut rng = rand::rng();
for (transform, mut density_obj) in &mut query {
let grid_cell = pos_to_grid_cell(transform.translation.xy());
// println!("grid cell {:?}", grid_cell);
density_obj.random_offset = Vec2::from_angle(rng.random_range(0.0..TAU)) * 0.2;
let index = get_index_from_uvec2(grid_cell);
density_grid.grid[index] += 1;
}
@ -57,9 +64,9 @@ pub fn density_grid_update(mut density_grid: ResMut<DensityGrid>, query: Query<&
pub fn density_grid_force(
density_grid: Res<DensityGrid>,
mut query: Query<(&mut PhysicsBody, &Transform), With<DensityObject>>,
mut query: Query<(&mut PhysicsBody, &Transform, &DensityObject)>,
) {
for (mut physics_body, transform) in &mut query {
for (mut physics_body, transform, density_obj) in &mut query {
let grid_cell = pos_to_grid_cell(transform.translation.xy());
let mut density_gradient = Vec2::ZERO;
@ -75,6 +82,7 @@ pub fn density_grid_force(
}
}
// println!("density : {:?}", density_gradient);
density_gradient += density_obj.random_offset; // To not have a "grid" thingy
physics_body.force -= density_gradient * DENSITY_FORCE_SCALE;
}
}