(* vim: set st=2 sw=2 et : *)

type game_t = {
  level: Level.level_t ;
  players: Player.player_t array ;
  (* monsters: Monster.monster.t array ; *)
  timeline : Timeline.timeline_t ;
}

let handle event ev =
  ignore ev
;;

let rec refresh_input () = 
  (* poll events *)
  let get_handler_fun ev = 
    match ev with
    (* key events *)
    | Sdlevent.KEYDOWN _ -> Keyboard.handle_event
    | Sdlevent.KEYUP _ -> Keyboard.handle_event
    (* mouse events *)
    | Sdlevent.MOUSEMOTION _ -> Mouse.handle_event
    | Sdlevent.MOUSEBUTTONDOWN _ -> Mouse.handle_event
    | Sdlevent.MOUSEBUTTONUP _ -> Mouse.handle_event
    (* joystick events *)
    | 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
    (* video events *)
    | Sdlevent.VIDEORESIZE _ -> Video.handle_event
    | Sdlevent.VIDEOEXPOSE -> Video.handle_event
    | Sdlevent.ACTIVE _ -> Video.handle_event
    (* system events *)
    | Sdlevent.QUIT -> Game.handle_event
    | Sdlevent.SYSWM -> Game.handle_event
    (* user defined events *)
    | Sdlevent.USER _ -> ignore
  in

  let some_event = Sdlevent.poll ()
  in

  match some_event with
  | Some ev -> 
      if ev = Sdlevent.QUIT then ()
      else
        let handler_fun = get_handler_fun ev
        in 
        handler_fun ev ;
        refresh_input ()
    | None -> ()
;;
