From df045e2dd67c7865c6b010903d0e74d8d7e5e63e Mon Sep 17 00:00:00 2001 From: Alexandre Date: Mon, 1 Jul 2024 14:26:45 +0200 Subject: [PATCH] Working (hopefully) chunk system --- a.out | Bin 284617 -> 290367 bytes display.cmi | Bin 9035 -> 11143 bytes display.cmo | Bin 36391 -> 43567 bytes display.ml | 199 ++++++++++++++++++++++++++++++++++++++++++++++------ 4 files changed, 177 insertions(+), 22 deletions(-) diff --git a/a.out b/a.out index 3a5581bc998bfae722aa0150b14a2bafce2ed983..05debd38ca062df08d0b1a54d6903b0f1e13ab50 100755 GIT binary patch delta 3676 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 diff --git a/display.cmi b/display.cmi index b86063e35901699ed70373986ee19823a983efe2..9eb22df192c947f465d2b9440d6861060c7b8644 100644 GIT binary patch literal 11143 zcmaJ{33wF6^6#3=B!p9uQw2Ff2q3T=g5b3Q5=cN$AV3mu-6Wf2VY3@H8z6w90&@7k zt4pBr<$*MdQF9hUL1VrRiZUhm`tFD>u=_mj1&-bzURc%+*uWEW~db+o# zyU5p}Teog$j!up#3*OwqSkh+3;-ZW-2F4oAjI`|KEh+Z7%OdL{tz53L-n>wu%LV$0 z@1pO9mp1qML&?stQ!}po%$)G|Ea$pt>pat-U6C(kq(7=_DI>=^o#p!NPAB?k?Q#`* zyak0J?&Kso(Qi}iXQRDdBXtt%8P#jzpGUc2qhx2~lSs?FGQYdXn+y7>DvaIFBGGWT zsaph|<4lf3jzpS=+&L_i%&E0-2ZQdiJ`uf^;(so>Z}~VtHUKh9GSTxqNY|d++~@JL zQf{u_r&xv2s*^c(T2$|BqL;Z<&t7PiSmY_3SAF2(#dJF2IeXdVBeT+ir1>9;5jxjN;6ewvcUQexnyH_>TsQ`(2yjA!G?=1#?C z9@>mHN1lo5K@;8JHqWLxlaqN0Jh@Wyiw#kIjEQdYFUs|)sWQ2anB1BFO>QEEb12~! zqOWO#K?BfgMfK?>YQ{Y+>}#g=6xlqe*t~=`^URUWqxyUkb>=op`zaI`nqNRvUu2^D zOp43XiDH}FfG-gA}53DY!1$i>K~fO&&|FZfMzWUf*y|_*t2B#g<`lE4Y!%Y z15y2R6HVlXdmlr?gdAU~2iS9D_q}4b2<>*6qo0cEyG=BW+Z}zJPh0*EhwL@K=pNPg znP|FMvEz?o#qdtY8`hN@^teMF(0~6f`iV1YH;Pwzopwj`SS9SgWgB^oyFWP$v{|6d ziR!0Jw1hLbHci33Hm9JixF_%j8 z21Yl4WrMaCv>y;+yWsE`#y8-$!JI&wB6le09p@@4^@Tt`XELyx4z{&eJ{4|hkjs?V zZz^~>FVDOB9cZN2;~#2Qd`lU)LcuF}5gYS3dNceqpsVubDh0o-;MFqEH4?3*jJp(p zUJm*)%($xwu?1nqsaZVZ=I)#l(9c_$>TMO5>vUbZdWT%4upSWmFNh7JuT%@qBWD>N z?koYF<%51f*6o%CwjQU3xR&pd&mpWQ#J&fyAE3{n7XFBQ<`>YM$aNQaf^OHivhko_ z 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 literal 9035 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 Zg++(*c6@6LD5m0oQt)5n{}H_N`d`3X0n-2g diff --git a/display.cmo b/display.cmo index ac33f458d13f589b61f24b511cd6b3403660f24f..c3f49139482b84632755fccd403c06c774852184 100644 GIT binary patch delta 12508 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 0. then x else -.(x) ;; (* ------------------------------------------------------------- *) -type pt_3d = {mutable x : float ; mutable y : float ; mutable z : float} ;; -type pt_2d = {mutable x : float ; mutable y : float} ;; - (* ------------------------------------------------------------- *) let camera_xyz = {x = 0.0 ; y = 0.0 ; z = 0.0} ;; let camera_angle_x = ref 0 ;; @@ -524,6 +526,36 @@ let draw_multiples_cubes_colored (cubes : pt_3d array dynamic) rs gs bs screen_w end done ;; +let draw_multiples_cubes_colored_hash (dyna : coloredCube dynamic) screen_wd screen_ht fov = + let n = dyna.len in + + (*Printf.printf ">> %d <<" n; + Stdlib.print_endline " ";*) + + let distances = Array.make n 0. in + + for i = 0 to n-1 do + distances.(i) <- cube_dist dyna.tab.(i).cube; + done ; + + for i = 0 to n-1 do + let cur_max = ref distances.(i) in + let idmax = ref i in + for j = i to n-1 do + if distances.(j) > !cur_max then begin + cur_max := distances.(j); + idmax := j; + end + done; + swap distances i !idmax; + swap dyna.tab i !idmax; + done; + for i = 0 to n-1 do + (*Printf.printf "(%d, %d, %d)" (dyna.tab.(i).red) (dyna.tab.(i).green) (dyna.tab.(i).blue); + Stdlib.print_endline " ";*) + draw_cube_p (dyna.tab.(i).cube) screen_wd screen_ht fov (dyna.tab.(i).red) (dyna.tab.(i).green) (dyna.tab.(i).blue) + done ;; + let create_cube x0' y0' z0' sz' = let x0 = float_of_int x0' and y0 = float_of_int y0' @@ -591,6 +623,10 @@ and depth = 15 ;; (* dimensions *) let render_distance = 7 ;; +let chunk_dist = 1 ;; + +let chunk_size = 4 ;; +let chunk_size_f = float_of_int chunk_size ;; let laby = Array.make width [|[||]|] ;; for i = 0 to width -1 do @@ -599,17 +635,25 @@ done ;; let n_walls = ref (width*height*depth) ;; +let ctc_one x = + if x > 0 then + x / chunk_size + else + x / chunk_size -1 ;; + +let ctcf_one x = + if x > 0. then + int_of_float (x /. chunk_size_f) + else + int_of_float (x /. chunk_size_f) -1 ;; + +let coords_to_chunk x y z = + (ctc_one x, ctc_one y, ctc_one z) ;; + +let coords_to_chunk_f x y z = + (ctcf_one x, ctcf_one y, ctcf_one z) ;; + let is_collision_cube (cam_coords : pt_3d) (cube : pt_3d array) = - (*Printf.printf "testing cube [%b, %b, %b, %b, %b, %b] :" - (cube.(0).x >= (-. cam_coords.x)) - (cube.(0).y >= (-. cam_coords.x)) - (cube.(0).z >= cam_coords.z) - (cube.(6).x <= (-. cam_coords.x)) - (cube.(6).y <= (-. cam_coords.y)) - (cube.(6).z <= cam_coords.z) ; - Printf.printf "\n||{%f, %f, %f}, {%f, %f, %f}||\n" cube.(0).x cube.(0).y cube.(0).z cube.(6).x cube.(6).y cube.(6).z; - Printf.printf "with coords (%f, %f, %f)\n" (-. cam_coords.x) (-. cam_coords.y) cam_coords.z; - Stdlib.print_endline " ";*) cube.(0).x <= (-. cam_coords.x) && cube.(0).y <= (-. cam_coords.y) && cube.(0).z <= cam_coords.z && @@ -633,6 +677,22 @@ let is_collision (cam_coords : pt_3d) (cubes : pt_3d array array) = done; !res ;; +let is_collision_hash (cam_coords : pt_3d) (cubes : coloredCube dynamic) = + let res = ref false in + let n = cubes.len in + + let distances = Array.make n 0. in + + for i = 0 to n-1 do + distances.(i) <- cube_dist cubes.tab.(i).cube; + done ; + + for i = 0 to n-1 do + if not !res && distances.(i) < 2. then + res := is_collision_cube cam_coords cubes.tab.(i).cube + done; + !res ;; + let convert_laby laby = let width = Array.length laby and height = Array.length laby.(0) @@ -659,6 +719,45 @@ let convert_laby laby = done; (cubes, reds, greens, blues) ;; +let chunkify laby sz = + let width = Array.length laby + and height = Array.length laby.(0) + and depth = Array.length laby.(0).(0) in + + let cubes = Hashtbl.create 300 in + + let add_to_table w h d cw ch cd = + (*Printf.printf "(%d, %d, %d) (%d, %d, %d)\n" w h d cw ch cd;*) + match Hashtbl.find_opt cubes (cw, ch, cd) with + | None -> begin + let dyna = dyn_create {cube = create_cube (w*sz) (h*sz) (d*sz) sz; red = 220; green = 220; blue = 220} in + Hashtbl.add cubes (cw, ch, cd) dyna + end + | Some dyna -> begin + Hashtbl.remove cubes (cw, ch, cd); + dyn_append dyna {cube = create_cube (w*sz) (h*sz) (d*sz) sz; red = 220; green = 220; blue = 220}; + Hashtbl.add cubes (cw, ch, cd) dyna + end + in + + for w = 0 to width-1 do + for h = 0 to height-1 do + for d = 0 to depth-1 do + if laby.(w).(h).(d) <> Free then begin + for i = -chunk_dist to chunk_dist do + for j = -chunk_dist to chunk_dist do + for k = -chunk_dist to chunk_dist do + add_to_table w h d (w/chunk_size + i) (h/chunk_size + j) (d/chunk_size + k) + done + done + done + end(*; + Stdlib.print_endline " ";*) + done + done + done; + cubes ;; + let cheesify (laby : tile array array array) = let width = Array.length laby and height = Array.length laby.(0) @@ -680,14 +779,6 @@ let cheesify (laby : tile array array array) = done done;; -let print_cubes (cubes : pt_3d array array) = - for i = 0 to !n_walls -1 do - for j = 0 to 7 do - Printf.printf " {%f, %f, %f}\n" cubes.(i).(j).x cubes.(i).(j).y cubes.(i).(j).z - done; - Stdlib.print_endline " " - done ;; - (* z q s d for movement, p to go up, m to go down, a to rotate left, e to rotate right *) let rec move_cam (cubes : pt_3d array array) b c =(* Printf.printf "[%b]" b; Stdlib.print_endline " " ; *)match c with | 'z' -> @@ -744,4 +835,68 @@ let play laby = move_cam cs.tab true usr_input done ;; -play laby ;; \ No newline at end of file +let rec move_cam_hash (cubes : coloredCube dynamic) b c =(* Printf.printf "[%b]" b; Stdlib.print_endline " " ; *)match c with + | 'z' -> + camera_xyz.z <- camera_xyz.z +. Float.cos ((float_of_int !camera_angle_y) *. 3.1415926535 /. 180.); + camera_xyz.x <- camera_xyz.x +. Float.sin ((float_of_int !camera_angle_y) *. 3.1415926535 /. 180.); + if b && (is_collision_hash camera_xyz cubes) then move_cam_hash cubes false 's' + | 'q' -> + camera_xyz.z <- camera_xyz.z +. Float.cos (((float_of_int !camera_angle_y) +. 90.) *. 3.1415926535 /. 180.); + camera_xyz.x <- camera_xyz.x +. Float.sin (((float_of_int !camera_angle_y) +. 90.) *. 3.1415926535 /. 180.); + if b && (is_collision_hash camera_xyz cubes) then move_cam_hash cubes false 'q' + | 's' -> + camera_xyz.z <- camera_xyz.z -. Float.cos ((float_of_int !camera_angle_y) *. 3.1415926535 /. 180.); + camera_xyz.x <- camera_xyz.x -. Float.sin ((float_of_int !camera_angle_y) *. 3.1415926535 /. 180.); + if b && (is_collision_hash camera_xyz cubes) then move_cam_hash cubes false 'z' + | 'd' -> + camera_xyz.z <- camera_xyz.z +. Float.cos (((float_of_int !camera_angle_y) -. 90.) *. 3.1415926535 /. 180.); + camera_xyz.x <- camera_xyz.x +. Float.sin (((float_of_int !camera_angle_y) -. 90.) *. 3.1415926535 /. 180.); + if b && (is_collision_hash camera_xyz cubes) then move_cam_hash cubes false 'q' + | 'p' -> + camera_xyz.y <- camera_xyz.y -. 1.; + if b && (is_collision_hash camera_xyz cubes) then move_cam_hash cubes false 'm' + | 'm' -> + camera_xyz.y <- camera_xyz.y +. 1.; + if b && (is_collision_hash camera_xyz cubes) then move_cam_hash cubes false 'p' + | 'a' -> camera_angle_y := !camera_angle_y + 30 + | 'e' -> camera_angle_y := !camera_angle_y - 30 + | _ -> () ;; + +let play_dos laby = + try + cheesify laby; + let hash = chunkify laby 1 in + + camera_xyz.z <- -. (1.5) ; + camera_xyz.x <- -. (float_of_int width) /. 2. ; + camera_xyz.y <- -. (float_of_int height) /. 2. ; + + (*print_cubes cs ;*) + + while true do + ignore (Sys.command "clear") ; + + auto_synchronize false; + open_graph " 1500x1000"; + set_color black; + fill_poly [|(0, 0); (1500, 0); (1500, 1000); (0, 1000); (0, 0)|]; + set_color white; + + let (ch_x, ch_y, ch_z) = coords_to_chunk_f (-. camera_xyz.x) (-. camera_xyz.y) camera_xyz.z in + + draw_multiples_cubes_colored_hash (Hashtbl.find hash (ch_x, ch_y, ch_z)) __width__ __height__ fov ; + + auto_synchronize true; + + Printf.printf "current pos : (%f, %f, %f)\n" (-. camera_xyz.x) (-. camera_xyz.y) camera_xyz.z; + Printf.printf "current chunk : (%d, %d, %d)" ch_x ch_y ch_z; + Stdlib.print_endline " "; + + let usr_input = get1char () in + move_cam_hash (Hashtbl.find hash (ch_x, ch_y, ch_z)) true usr_input + done ; + () + with + | Not_found -> Stdlib.print_endline "Looks like you tried to load an uninitialized chunk..." ;; + +play_dos laby ;; \ No newline at end of file