clean map

This commit is contained in:
Swrup 2022-12-15 19:59:42 +01:00
parent 5f1d29bda3
commit aebafe30f3
3 changed files with 46 additions and 45 deletions

View file

@ -51,16 +51,11 @@ let papy_up = C2d.image_src_of_el (get_el "papy_up")
let water = C2d.image_src_of_el (get_el "water")
let map =
(* TODO receive map / state *)
(* dummy map; should ask for map to server *)
ref (Map.init ())
let draw_map =
let papy_x = float_of_int (width - tile_size) /. 2. in
let papy_y = (float_of_int height /. 2.) -. (float_of_int tile_size *. 1.5) in
fun () ->
let player_x, player_y = !Map.player_pos in
fun map ->
let player_x, player_y = map.Map.player_pos in
for x = 0 to tiles_per_w - 1 do
let map_x = x + player_x - (tiles_per_w / 2) in
let tile_x = float_of_int ((x * tile_size) + orig_x) in
@ -68,7 +63,7 @@ let draw_map =
let map_y = y + player_y - (tiles_per_h / 2) in
let tile_y = float_of_int ((y * tile_size) + orig_y) in
let tile_img =
match Map.get_tile_kind ~x:map_x ~y:map_y !map with
match Map.get_tile_kind ~x:map_x ~y:map_y map with
| Grass -> grass
| Water -> water
| Black -> water
@ -77,7 +72,7 @@ let draw_map =
done
done;
let papy =
match !Map.player_dir with
match map.Map.player_dir with
| Left -> papy_left
| Right -> papy_right
| Down -> papy_down
@ -85,23 +80,8 @@ let draw_map =
in
C2d.draw_image context papy ~x:papy_x ~y:papy_y
let move dir =
if !Map.player_dir = dir then begin
let x, y = !Map.player_pos in
let x, y =
match dir with
| Left -> (x - 1, y)
| Right -> (x + 1, y)
| Down -> (x, y + 1)
| Up -> (x, y - 1)
in
match Map.get_tile_kind ~x ~y !map with
| Black | Water -> ()
| Grass -> Map.player_pos := (x, y)
end
else Map.player_dir := dir
let kb_handler ev =
let kb_handler state ev =
let move = Map.move !state.State.map in
match ev |> Ev.as_type |> Ev.Keyboard.code |> Jstr.to_string with
| "KeyW" | "ArrowUp" -> move Up
| "KeyA" | "ArrowLeft" -> move Left
@ -111,7 +91,7 @@ let kb_handler ev =
| _s -> ()
let rec game_loop state _timestamp =
draw_map ();
draw_map !state.State.map;
let new_state = state in
G.request_animation_frame (game_loop new_state)
@ -122,10 +102,6 @@ let () =
C2d.set_fill_style context (C2d.color (Jstr.v "#FF1188"));
C2d.fill_rect context ~x:0. ~y:0. ~w:(float_of_int width)
~h:(float_of_int height);
(* bind keys *)
let _e : Ev.listener =
Ev.listen Ev.keydown kb_handler (Window.as_target G.window)
in
(* get state from server*)
let initial_state_fut = Ev.next Message.Ev.message Ws_client.ws_target in
@ -133,6 +109,10 @@ let () =
Fut.await initial_state_fut (fun msg ->
let initial_state = Ws_client.to_server_msg msg in
let state_ref = ref initial_state in
(* bind keys *)
let _e : Ev.listener =
Ev.listen Ev.keydown (kb_handler state_ref) (Window.as_target G.window)
in
(* attach message listener to update state *)
Ws_client.on_update_state_message (fun received ->
state_ref := received;