pellest/src/island_client.ml

166 lines
3.6 KiB
OCaml
Raw Normal View History

2022-12-06 03:30:16 +01:00
let () = Random.self_init ()
2022-12-06 03:08:30 +01:00
module Map = struct
type background =
| Grass
| Water
| Black
let width = 1000
let height = 1000
2022-12-06 03:30:16 +01:00
let player_pos = ref (20, 3)
2022-12-06 03:08:30 +01:00
let m =
Array.init width (fun _x ->
Array.init height (fun _y ->
2022-12-06 03:30:16 +01:00
if Random.int 1000 <= 42 then Water else Grass ) )
2022-12-06 03:08:30 +01:00
let get_tile_kind ~x ~y = try m.(x).(y) with Invalid_argument _ -> Black
end
2022-12-06 02:31:33 +01:00
let tile_size = 40
let width = 835
let height = 635
let canvas = Jv.get Jv.global "canvas"
let context = Jv.call canvas "getContext" [| Jv.of_string "2d" |]
let init_bg () =
Jv.set canvas "width" (Jv.of_int width);
Jv.set canvas "height" (Jv.of_int height);
Jv.set context "fillStyle" (Jv.of_string "#FF1188");
Jv.call context "fillRect"
[| Jv.of_int 0; Jv.of_int 0; Jv.of_int width; Jv.of_int height |]
let window = Jv.get Jv.global "window"
let () =
let (_ : Jv.t) =
Jv.call window "addEventListener" [| Jv.of_string "load"; Jv.repr init_bg |]
in
()
let tiles_per_w = width / tile_size
let tiles_per_h = height / tile_size
let orig_x = (width - (tiles_per_w * tile_size)) / 2
let orig_y = (height - (tiles_per_h * tile_size)) / 2
let grass = Jv.get Jv.global "grass"
2022-12-06 03:08:30 +01:00
let papy_bottom = Jv.get Jv.global "papy_bottom"
let water = Jv.get Jv.global "water"
let draw_map () =
let player_x, player_y = !Map.player_pos in
Format.printf "player_x = %d@\nplayer_y = %d@\n" player_x player_y;
2022-12-06 02:31:33 +01:00
for x = 0 to tiles_per_w - 1 do
2022-12-06 03:08:30 +01:00
let mapx = x + player_x - (tiles_per_w / 2) in
2022-12-06 02:31:33 +01:00
for y = 0 to tiles_per_h - 1 do
2022-12-06 03:08:30 +01:00
let mapy = y + player_y - (tiles_per_h / 2) in
let img =
match Map.get_tile_kind ~x:mapx ~y:mapy with
| Grass -> grass
| Water -> water
| Black -> water
in
2022-12-06 02:31:33 +01:00
let (_ : Jv.t) =
Jv.call context "drawImage"
2022-12-06 03:08:30 +01:00
[| img
2022-12-06 02:31:33 +01:00
; Jv.of_int (orig_x + (x * tile_size))
; Jv.of_int (orig_y + (y * tile_size))
|]
in
()
done
2022-12-06 03:08:30 +01:00
done;
let (_ : Jv.t) =
Jv.call context "drawImage"
2022-12-06 03:30:16 +01:00
[| papy_bottom; Jv.of_int (width / 2); Jv.of_int (height / 2) |]
2022-12-06 03:08:30 +01:00
in
()
let () =
let (_ : Jv.t) =
Jv.call window "addEventListener"
[| Jv.of_string "load"; Jv.repr draw_map |]
in
()
2022-12-06 03:30:16 +01:00
let kb_handler e =
let x, y = !Map.player_pos in
let x, y =
match Jv.to_string @@ Jv.get e "key" with
| "z" -> (x, y - 1)
| "q" -> (x - 1, y)
| "s" -> (x, y + 1)
| "d" -> (x + 1, y)
| _s -> (x, y)
in
let x = max 0 x in
let x = min (Map.width - 1) x in
let y = max 0 y in
let y = min (Map.height - 1) y in
Map.player_pos := (x, y);
draw_map ()
let bind_keys () =
Jv.call window "addEventListener"
[| Jv.of_string "keydown"; Jv.repr kb_handler |]
let () =
let (_ : Jv.t) =
Jv.call window "addEventListener"
[| Jv.of_string "load"; Jv.repr bind_keys |]
in
()
2022-12-06 03:08:30 +01:00
(*
let draw_background () =
for x = 0 to tiles_per_w - 1 do
for y = 0 to tiles_per_h - 1 do
let (_ : Jv.t) =
Jv.call context "drawImage"
[| grass
; Jv.of_int (orig_x + (x * tile_size))
; Jv.of_int (orig_y + (y * tile_size))
|]
in
()
done
done
2022-12-06 02:31:33 +01:00
let () =
let (_ : Jv.t) =
Jv.call window "addEventListener"
[| Jv.of_string "load"; Jv.repr draw_background |]
in
()
2022-12-06 03:08:30 +01:00
let draw_papy () =
let (_ : Jv.t) =
Jv.call context "drawImage"
[| papy_bottom
; Jv.of_int ((width / 2) - (tile_size / 2))
; Jv.of_int ((height / 2) - (tile_size / 2))
|]
in
()
let () =
let (_ : Jv.t) =
Jv.call window "addEventListener"
[| Jv.of_string "load"; Jv.repr draw_papy |]
in
()
*)