From ad6eaa7d79c90dacc9dfbce4ce7db711b088412d Mon Sep 17 00:00:00 2001 From: Crizomb Date: Sun, 28 Dec 2025 03:08:48 +0100 Subject: [PATCH 1/3] small density adjusts --- src/density_grid.rs | 22 +++++++++++++++------- src/lana.rs | 5 +++-- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/src/density_grid.rs b/src/density_grid.rs index 1804aa3..d6ff771 100644 --- a/src/density_grid.rs +++ b/src/density_grid.rs @@ -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, mut query: Query<&Transform>) { - for transform in &mut query { +pub fn init_density_object(mut density_grid: ResMut, 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, query: Query<& pub fn density_grid_force( density_grid: Res, - mut query: Query<(&mut PhysicsBody, &Transform), With>, + 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; } } diff --git a/src/lana.rs b/src/lana.rs index 66e6ef0..c71fa83 100644 --- a/src/lana.rs +++ b/src/lana.rs @@ -5,6 +5,7 @@ use crate::sphere_collider::SphereCollider; use bevy::prelude::*; use rand::Rng; use std::f32::consts::TAU; +use std::fmt::Debug; #[derive(Component)] #[require(Sprite, PhysicsBody, SphereCollider, DensityObject)] @@ -16,14 +17,14 @@ pub fn lana_spawn(mut commands: Commands, asset_server: Res) { let texture: Handle = asset_server.load("sprites/lana.png"); let mut rng = rand::rng(); - for _ in 0..1_000 { + for _ in 0..1000 { let angle = rng.random_range(0.0..TAU); let pos = Vec2::from_angle(angle) * 500.0; commands.spawn(( Lana { move_force: 3000.0 }, Sprite { image: texture.clone(), ..default() }, - Transform::from_translation(pos.extend(0.0)).with_scale(Vec3::splat(0.02)), + Transform::from_translation(pos.extend(0.0)).with_scale(Vec3::splat(0.01)), PhysicsBody { mass: 10.0, force: Vec2::ZERO, velocity: Vec2::ZERO, drag: 0.05 }, )); } From b3e1359c637db4a92f09f07bd3409b549fc72dda Mon Sep 17 00:00:00 2001 From: Crizomb Date: Sun, 28 Dec 2025 21:07:03 +0100 Subject: [PATCH 2/3] sprite sheet --- assets/sprites/Sprite_kirby-Sheet.png | Bin 0 -> 1839 bytes assets/sprites/bubble.png | Bin 0 -> 180 bytes assets/sprites/kirby_item.png | Bin 0 -> 204 bytes assets/sprites/shield.png | Bin 0 -> 193 bytes assets/sprites/speed.png | Bin 0 -> 181 bytes src/animation.rs | 60 ++++++++++++++++++++++++++ src/box_collider.rs | 7 --- src/{lana.rs => bubble.rs} | 23 ++++------ src/kirby.rs | 42 +++++++++++++++--- src/main.rs | 15 ++++--- 10 files changed, 112 insertions(+), 35 deletions(-) create mode 100644 assets/sprites/Sprite_kirby-Sheet.png create mode 100644 assets/sprites/bubble.png create mode 100644 assets/sprites/kirby_item.png create mode 100644 assets/sprites/shield.png create mode 100644 assets/sprites/speed.png create mode 100644 src/animation.rs delete mode 100644 src/box_collider.rs rename src/{lana.rs => bubble.rs} (71%) diff --git a/assets/sprites/Sprite_kirby-Sheet.png b/assets/sprites/Sprite_kirby-Sheet.png new file mode 100644 index 0000000000000000000000000000000000000000..75ee4bea5b669295b6837d25c527567ffd0e067b GIT binary patch literal 1839 zcmV+~2hjM5P)Px*=}AOERCt{2UB6EoNfdrQ-9O;e6jl(88w+7!xxmtO9MwrzKpLP(buLhfD564C z5fwr@uA(3`IFTZy3D8C23d_joMB@fwZ9(tu+Pxwk=k4tLp0~R`dp;@3dRfo+-ZyW4 z?D{<$ARr(hAQ$Z1KgayJpRy(>3e#i@DC{Ba02NUYm?m3t!_NJ4JS~n-iyaKP*%LZJ zjLg>nh7T(XB^~kq9WN{O82@u^=Vw~8lGwR_j#+2mV+!z252L=aZ59N+HZb1)>L!$% z)yetAlY`jA4j#@OpcCN3%0dY{O*IN!1@N^2^8!GE8vx*G@6gB&1{RRk9Y7rcF1$b> zfGxL-mj|}P#0KLIpb)@y8p=`t86P`lZHRbpF0P=lRDp7{nm87Y5X3m_A2=I5w8 z0Gapz0RR4Z1;74tnmT5fh~KKg`RxPrS2t6^km>+R0oeaV3D7y)hx6M905pPhfq;Wd zH`;aBZPj46Ra3T?n1Wmdh_^Qq$BY~U3!s{tDFooTZ7}K%yoATxtn+c(YoEU)&ZX7> zN&$ESOyDa3g9|qRK<_bvhN17}W)Sz0*H)}i9jiUh!+50>-GB|f9G}}rrf*@ zPfhXW!vu+d8y_3p2bc%|3h}pIzfTOoX%N7M+ZD3lJHLH^#ghXmzwk!PMF1Ru3@+mP z0t>;W!o`fZ8cUTQ$48fmZMbUph>_XTP`nsp0jQsfVi9_e(IgOf0jQpa@?dlO@zJHz z`@K7W7oc;t51sLAelafMbAjDf4c1!U_ue+*52Jo*@#H{y6UuOWbO~?Xy_$3cLuc$i z;~%ap2;VO?=w+p@Bxh>?-vJO2bs0VA27u z!kgHjNEekZKsNZ*NFh65!xR0oTG3a_?2q_CO0(#j|w(QTtt``e&IhoDp6lnMw;$lah0g#pd#?Qx13pB7H)MY|YPyl4(1L^8Ui2>|AimQn>f$XGx!1x5&El}PzSKC+tmrcrv`$gIKmcr z`ky+Xn|EC?>JFfO_t9u)LTy8l+&UYCQxG+|O`BN=P;OR*HM*+nsUd4q*a4z~YaMiR zpG})Z1_0#jzpw*(kCC+zs(BZeXquqt0LasSX=)-E-1eJ*&3$0_cz~q^;sw@~AB)&~ zjEvJ0^YmYv9gTMbF2mS#@#A^fF$F(^iyc|}Z@eqOP#J=w&PDur6w5PrBb zQ0C{)BENNgfavB2gD=&j&d;AU{!kxKFn_2ID40Lg2TUn{KtMo1KtMo1KtMo1K)`Im z`|I6d4sWw5{damk5^4kJ{5O6)3!ye36aTF~k_@#0^!^)tC?9GAvh!b?9UW=|vi09N zJ37<`(D*O?4Vj`-!(k3;13)zbLTx}k{%4+^Zj&00ZP0yfa$~6iFFw76`1mV~x&wIe z=`CC@w}m;HHj8rJ{tL4rs8hq?j;uKV%i;(ZX^k15qNSPb&lN{^%)$t52cg1=7ugr|&w}O1u zuS^`D+5ieWY>Prvy!clIO>MC8U%Cbiqkah&H}F}%r{xCl(*&N6Da5z6gI^DP_!+OL z&_ibfSom*MA0R?|)Js&cQ03;k*a562m#FgrjfDE$N23gATYi#V5Q8W(e4oeI;I!Px zM0^|A@*5YdsX&>VPhm$^Bag2M5W$vLTOVN5U=F$Y*beqX&3QuM zixMm0bTV7a>{gWH&gL^ELr#Xxz-WRbH_wF?OZvD^6te0l2I^}HXLH;;({f%R=B6aW XE-s@jzoT+Nu3_+W^>bP0l+XkKCyzJ0 literal 0 HcmV?d00001 diff --git a/assets/sprites/kirby_item.png b/assets/sprites/kirby_item.png new file mode 100644 index 0000000000000000000000000000000000000000..b9133ad8b0a4c7344c2dd9683810b8f4557fe664 GIT binary patch literal 204 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|+B{txLo9le z6C^SYbhy8>H_Y0|`7b>oA>l{i3#~4N_PJ(ZwkKrPNL^&yq}i2)N-~7GcTz6_qc>{)50G*2VS%CS?4}+ILs9>K~y-|c$byfj0d|npx=y1A{YhyJc6uyOQ9~Q+tB#&+(;#?T$S>K;ZMkWdEKD#?_1g zTmMhwJ+M-8x}rhDWro69W|3Jb%pI&D+%BtjG-!k?-0nNeu%~T7_OVokFy{@K$I=

>u8L`S*Fb<=N~pF$X3+_Dk&<55R;udGx{SZsd%M*ru7DNL#o z3}KTT4ngTe~DWM4fKRHRF literal 0 HcmV?d00001 diff --git a/src/animation.rs b/src/animation.rs new file mode 100644 index 0000000..6d487c7 --- /dev/null +++ b/src/animation.rs @@ -0,0 +1,60 @@ +use bevy::prelude::*; +// Source : https://bevy.org/examples/2d-rendering/sprite-sheet/ + +fn main() { + App::new() + .add_plugins(DefaultPlugins.set(ImagePlugin::default_nearest())) // prevents blurry sprites + .add_systems(Startup, setup) + .add_systems(Update, animate_sprite) + .run(); +} + +#[derive(Component)] +pub struct AnimationIndices { + pub first: usize, + pub last: usize, +} + +#[derive(Component, Deref, DerefMut)] +pub struct AnimationTimer(pub Timer); + +pub fn animate_sprite(time: Res