diff --git a/Game.ml b/Game.ml new file mode 100644 index 0000000..e9d9868 --- /dev/null +++ b/Game.ml @@ -0,0 +1,35 @@ + +let rec refresh_input () = + (* poll events *) + let get_handler_fun ev = + match ev with + | Sdlevent.KEYDOWN _ -> Keyboard.handle_event + | Sdlevent.KEYUP _ -> Keyboard.handle_event + + | Sdlevent.MOUSEMOTION _ -> Mouse.handle_event + | Sdlevent.MOUSEBUTTONDOWN _ -> Mouse.handle_event + | Sdlevent.MOUSEBUTTONUP _ -> Mouse.handle_event + + (* + | Sdlevent.JOYAXISMOTION _ -> Joystick.handle_event + | Sdlevent.JOYBALLMOTION _ -> Joystick.handle_event + | Sdlevent.JOYHATMOTION _ -> Joystick.handle_event + | Sdlevent.JOYBUTTONDOWN _ -> Joystick.handle_event + | Sdlevent.JOYBUTTONUP _ -> Joystick.handle_event + *) + + | _ -> ignore + in + + let some_event = Sdlevent.poll () + in + + match some_event with + | Some Sdlevent.QUIT -> () + | Some ev -> + let handler_fun = get_handler_fun ev + in + handler_fun ev ; + refresh_input () + | None -> () +;; diff --git a/Keyboard.ml b/Keyboard.ml new file mode 100644 index 0000000..3ef5486 --- /dev/null +++ b/Keyboard.ml @@ -0,0 +1,4 @@ + +let handle_event ev = + ignore ev +;; diff --git a/Mouse.ml b/Mouse.ml new file mode 100644 index 0000000..3ef5486 --- /dev/null +++ b/Mouse.ml @@ -0,0 +1,4 @@ + +let handle_event ev = + ignore ev +;; diff --git a/main.ml b/main.ml index 0f54f01..5202243 100644 --- a/main.ml +++ b/main.ml @@ -38,14 +38,13 @@ let string_of_keyboard_event event = let rec event_loop () = print_endline "Event_loop..."; Sdltimer.delay 20; - let event_opt = Sdlevent.poll () - in let match_event event = ( match event with | Sdlevent.KEYDOWN {Sdlevent.keysym=Sdlkey.KEY_ESCAPE} -> print_endline "You pressed escape! The fun is over now." | Sdlevent.KEYDOWN event -> + Keyboard.handle_event event let keystr = string_of_keyboard_event event in print_endline ("You pressed " ^ keystr); @@ -54,6 +53,8 @@ let rec event_loop () = | _ -> event_loop () ) in + let event_opt = Sdlevent.poll () + in match event_opt with | None -> event_loop () | Some event -> match_event event; @@ -66,7 +67,8 @@ let game_loop ~screen = in Sdlvideo.blit_surface ~src:image ~src_rect:image_from ~dst:screen ~dst_rect:image_to (); Sdlvideo.flip screen; - event_loop (); + let action_fun = event_loop (); + game_loop screen ;; let main () =