@@ -57,7 +57,10 @@ fn update(
5757 let half_width = config . width / 2 .0 ;
5858 let half_height = config . height / 2 .0 ;
5959
60- // var total_count = 0u;
60+ let repulsion_range = config . repulsionRange ;
61+ let pre_mult_repulsion_strength = config . repulsionStrength * dt / repulsion_range ;
62+ let pre_mult_attraction_strength = config . attractionStrength * dt ;
63+ let pre_mult_inv_attraction_range = 1 / config . attractionRange ;
6164
6265 for (var bin_x = min_bin_x ; bin_x <= max_bin_x ; bin_x ++ ) {
6366 let wrapped_bin_x = (bin_x + wd ) % wd ;
@@ -92,24 +95,18 @@ fn update(
9295
9396 let dist = length (offset );
9497
95- if (dist < config . repulsionRange ) {
98+ if (dist < repulsion_range ) {
9699 // Repulsion
97- let strength = (config . repulsionRange - dist ) / config . repulsionRange * config . repulsionStrength * dt ;
100+ let strength = (repulsion_range - dist ) * pre_mult_repulsion_strength ;
98101 velocity -= normalize (offset ) * strength ;
99102 } else if (dist < range ) {
100103 // Attraction
101104 let other_color = particleColors [other_index ];
102105 let interaction_index = color * COLOR_COUNT + other_color ;
103106 let interaction_strength = interactions [interaction_index ];
104- // if (interaction_strength > 0.0) {
105- // total_count += 1u;
106- // }
107- let normalized_distance = (config . attractionRange - (dist - config . repulsionRange )) / config . attractionRange ;
107+ let normalized_distance = 1 - (dist - repulsion_range ) * pre_mult_inv_attraction_range ;
108108 let symmetric_distance = 1 .0 - abs (normalized_distance * 2 .0 - 1 .0 );
109- let strength = symmetric_distance * interaction_strength * config . attractionStrength * dt ;
110- // if (total_count > 200u) {
111- // strength = strength * (200.0 / f32(total_count));
112- // }
109+ let strength = symmetric_distance * interaction_strength * pre_mult_attraction_strength ;
113110 velocity += normalize (offset ) * strength ;
114111 }
115112 }
0 commit comments