diff --git a/main.cmi b/main.cmi index a70d639..21f9406 100644 Binary files a/main.cmi and b/main.cmi differ diff --git a/main.cmx b/main.cmx index 3827cda..3099830 100644 Binary files a/main.cmx and b/main.cmx differ diff --git a/main.ml b/main.ml index 97d6bc4..eb4cfb2 100644 --- a/main.ml +++ b/main.ml @@ -17,7 +17,7 @@ and __height__ = 800 ;; let __istr__ = " 1200x800" ;; -let univ_dt = 0.003 ;; +let univ_dt = 0.01 ;; let _camx_ = ref 0 and _camy_ = ref 0 ;; @@ -76,6 +76,7 @@ type ball = { v : pt_2d ; a : pt_2d ; fres : pt_2d ; + fres_0 : pt_2d ; } ;; (* --- *) @@ -436,8 +437,11 @@ let remove_dead_destr (destr : polygon dynamic) (cand : int list) = in aux cand ;; let update_ball_data (b : ball) (id : int) (balls : ball array) (polys : polygon dynamic) (destr : polygon dynamic) (spheres : sphere dynamic) (flips : flipper dynamic) (dt : float) = - b.fres.x <- 0. ; - b.fres.y <- 0. ; + b.fres.x <- b.fres_0.x ; + b.fres.y <- b.fres_0.y ; + + b.fres_0.x <- 0. ; + b.fres_0.y <- 0. ; let destr_remove = ref [] in @@ -573,6 +577,9 @@ let update_ball_data (b : ball) (id : int) (balls : ball array) (polys : polygon let reaction_force_2 = vect_mult_2D proj_n (univ_g *. b.mass *. scal) in b.fres.x <- b.fres.x +. reaction_force_2.x *. 1.1 ; b.fres.y <- b.fres.y +. reaction_force_2.y *. 1.1 ; + (* apply forces to collisionned marble *) + balls.(s).fres.x <- balls.(s).fres.x -. reaction_force_2.x *. 1.1 ; + balls.(s).fres.y <- balls.(s).fres.y -. reaction_force_2.y *. 1.1 ; end; (* change velocity according to angle *) @@ -583,6 +590,14 @@ let update_ball_data (b : ball) (id : int) (balls : ball array) (polys : polygon b.v.x <- symmetric.x ; b.v.y <- symmetric.y ; + (* apply forces to collisionned marble *) + let rc_theta = balls.(s).radius /. (vect_norm_2D (vect_diff_2D balls.(s).xy b.xy)) in + let rc_intersection = (vect_convexf balls.(s).xy b.xy rc_theta) in + let rc_director = vect_normal_2D rc_intersection (vect_sum_2D rc_intersection proj_n) in + let rc_symmetric = vect_symmetry balls.(s).v {x = 0. ; y = 0.} rc_director in + + balls.(s).v.x <- rc_symmetric.x ; + balls.(s).v.y <- rc_symmetric.y ; end done ; @@ -885,6 +900,7 @@ let create_ball (r : float) (x0 : int) (y0 : int) (m : float) (red : int) (green v = {x = 0. ; y = 0.} ; a = {x = 0. ; y = 0.} ; fres = {x = 0. ; y = 0.} ; + fres_0 = {x = 0. ; y = 0.} ; } ;; let create_polygon ?showScore:(shsc=true) (arr : (int * int) array) (rest : float) (pts : int) (red : int) (green : int) (blue : int) = @@ -1022,7 +1038,7 @@ let simulate (data : polygon dynamic) (destructible : polygon dynamic) (dats : s open_graph __istr__ ; set_window_title "WAH" ; - let pinballs = generate_pinballs 8 10.0 600 800 0.15 255 255 0 in + let pinballs = generate_pinballs 8 10.0 600 1000 0.15 255 255 0 in let stime = Unix.gettimeofday () in let ctime = ref (Unix.gettimeofday ()) in @@ -1080,10 +1096,13 @@ let flippers = dyn_create default_flipper ;; dyn_add polygons (create_polygon [|(700, -20); (500, -20); (500, 1); (700, 1)|] 0. 0 255 32 32) ;; (* upper part *) -dyn_add polygons (create_polygon [|(500, -200); (700, -200); (700, -250); (500, -250)|] 0. 0 32 32 32) ;; -dyn_add polygons (create_polygon [|(500, 800); (500, 1100); (450, 1100); (450, 800)|] 0. 0 32 32 32) ;; -dyn_add polygons (create_polygon [|(700, 800); (700, 1100); (750, 1100); (750, 800)|] 0. 0 32 32 32) ;; -dyn_add polygons (create_polygon [|(450, 1100); (750, 1100); (750, 1150); (450, 1150)|] 0. 0 32 32 32) ;; +dyn_add polygons (create_polygon [|(500, -200); (700, -200); (700, -250); (500, -250)|] 1. 0 32 32 32) ;; +dyn_add polygons (create_polygon [|(500, 800); (500, 1100); (450, 1100); (450, 800)|] 1. 0 32 32 32) ;; +dyn_add polygons (create_polygon [|(700, 800); (700, 1100); (750, 1100); (750, 800)|] 1. 0 32 32 32) ;; +dyn_add polygons (create_polygon [|(450, 1100); (750, 1100); (750, 1150); (450, 1150)|] 1. 0 32 32 32) ;; + +(* TEST *) +(* dyn_add polygons (create_polygon [|(500, 800); (700, 800); (700, 850); (500, 850)|] 1. 0 32 32 32) ;; *) (* outer walls *) dyn_add polygons (create_polygon [|(0, -250); (500, -250); (500, 20); (0, 20)|] 1. 0 32 32 32) ;; diff --git a/main.o b/main.o index 7aeda1a..2e47b27 100644 Binary files a/main.o and b/main.o differ diff --git a/pinball b/pinball index 7a50c01..56535c1 100755 Binary files a/pinball and b/pinball differ