@@ -9,23 +9,19 @@ pub struct ControlHandler {
99 move_speed : f32 ,
1010 scale_speed : f32 ,
1111 place_elevation : f32 ,
12- traj_update_interval : u64 ,
1312 control_state : ControlState ,
1413 ghost_obj : Option < Object > ,
15- traj_update_counter : u64 ,
1614 trajectories : HashMap < usize , Trajectory > ,
1715}
1816
1917impl ControlHandler {
20- fn new ( move_speed : f32 , scale_speed : f32 , traj_update_interval : u64 ) -> Self {
18+ fn new ( move_speed : f32 , scale_speed : f32 ) -> Self {
2119 ControlHandler {
2220 move_speed,
2321 scale_speed,
24- traj_update_interval,
2522 place_elevation : 0.0 ,
2623 control_state : ControlState :: Idle ,
2724 ghost_obj : None ,
28- traj_update_counter : 0 ,
2925 trajectories : HashMap :: new ( ) ,
3026 }
3127 }
@@ -60,8 +56,7 @@ impl ControlHandler {
6056 } ;
6157
6258 renderer. draw_halo ( obj. position , obj. radius * 1.1 , Some ( color) ) ;
63- let traj = obj. calculate_trajectory ( objects, physics_handler, 10_000 , 10 ) ;
64- traj. draw ( renderer, Some ( obj. color ) , obj. radius ) ;
59+ self . draw_obj_trajectory ( physics_handler, renderer, objects, & obj) ;
6560 }
6661
6762 if is_key_released ( KeyCode :: R ) {
@@ -116,7 +111,7 @@ impl ControlHandler {
116111 let ray = Ray :: new_from_mouse ( renderer. get_cam ( ) ) ;
117112
118113 if let Some ( obj) = & mut self . ghost_obj {
119- let veloc = ( ray. plane_intersect ( Some ( self . place_elevation ) ) - obj. position ) / 100 .0;
114+ let veloc = ( ray. plane_intersect ( Some ( self . place_elevation ) ) - obj. position ) / 10 .0;
120115
121116 let mut virtual_obj: Object = obj. clone ( ) ;
122117 virtual_obj. add_velocity ( veloc) ;
@@ -128,37 +123,16 @@ impl ControlHandler {
128123 ) ;
129124
130125 obj. draw ( renderer) ;
131- let traj = virtual_obj. calculate_trajectory ( objects, physics_handler, 10_000 , 20 ) ;
132- traj. draw ( renderer, Some ( obj. color ) , obj. radius ) ;
133-
134- let mut clones = objects. get_all_in_area ( obj. position , 100.0 ) ;
135- let id = clones. push ( virtual_obj. clone ( ) ) ;
136-
137- for ( id, traj) in & self . trajectories {
138- let obj = match clones. get ( * id) {
139- Some ( obj) => obj,
140- None => continue ,
141- } ;
142-
143- traj. draw ( renderer, Some ( obj. color ) , obj. radius ) ;
144- }
145126
146- if self . traj_update_counter % self . traj_update_interval == 0 {
147- self . trajectories =
148- clones. calculate_trajectories_except ( id, physics_handler, 5_000 , 20 ) ;
149- }
150-
151- self . traj_update_counter += 1 ;
127+ let mut clones = objects. clone ( ) . get_all_in_area ( virtual_obj. position , 500.0 ) ;
128+ clones. push ( virtual_obj. clone ( ) ) ;
152129
153- if self . traj_update_counter == ( 2u128 . pow ( 64 ) - 1 ) as u64 {
154- self . traj_update_counter = 0 ;
155- }
130+ self . draw_objects_trajectories ( physics_handler, renderer, & clones) ;
156131 }
157132
158133 if is_mouse_button_released ( MouseButton :: Left ) {
159134 if let Some ( obj) = & mut self . ghost_obj {
160- let veloc =
161- ( ray. plane_intersect ( Some ( self . place_elevation ) ) - obj. position ) / 100.0 ;
135+ let veloc = ( ray. plane_intersect ( Some ( self . place_elevation ) ) - obj. position ) / 10.0 ;
162136 obj. add_velocity ( veloc) ;
163137 objects. push ( obj. clone ( ) ) ;
164138 self . ghost_obj = None ;
@@ -237,6 +211,35 @@ impl ControlHandler {
237211 None
238212 }
239213
214+ fn draw_obj_trajectory (
215+ & mut self ,
216+ physics_handler : & PhysicsHandler ,
217+ renderer : & Renderer ,
218+ objects : & ObjectPool ,
219+ object : & Object ,
220+ ) {
221+ let traj = object. calculate_trajectory ( objects, physics_handler, 10_000 , 2 ) ;
222+ traj. draw ( renderer, Some ( object. color ) , object. radius ) ;
223+ }
224+
225+ fn draw_objects_trajectories (
226+ & mut self ,
227+ physics_handler : & PhysicsHandler ,
228+ renderer : & Renderer ,
229+ objects : & ObjectPool ,
230+ ) {
231+ self . trajectories = objects. calculate_trajectories ( physics_handler, 10_000 , 2 ) ;
232+
233+ for ( id, traj) in & self . trajectories {
234+ let obj = match objects. get ( * id) {
235+ Some ( obj) => obj,
236+ None => continue ,
237+ } ;
238+
239+ traj. draw ( renderer, Some ( obj. color ) , obj. radius ) ;
240+ }
241+ }
242+
240243 fn random_color ( ) -> Color {
241244 Color {
242245 r : rand:: gen_range ( 0.0 , 1.0 ) ,
@@ -249,7 +252,7 @@ impl ControlHandler {
249252
250253impl Default for ControlHandler {
251254 fn default ( ) -> Self {
252- ControlHandler :: new ( 20.0 , 5.0 , 5 )
255+ ControlHandler :: new ( 20.0 , 5.0 )
253256 }
254257}
255258
0 commit comments