Guest User

Untitled

a guest
Feb 24th, 2015
258
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
OCaml 2.43 KB | None | 0 0
  1. open CamomileLibrary.UChar
  2. open LTerm_key
  3.        
  4. let get_time () =
  5.   let localtime = Unix.localtime (Unix.time ()) in
  6.   Printf.sprintf "[%02u:%02u:%02u]: "
  7.                  localtime.Unix.tm_hour
  8.                  localtime.Unix.tm_min
  9.                  localtime.Unix.tm_sec
  10.  
  11. let log_message message =
  12.   let open Core.Std in
  13.   let oc = open_out_gen [Open_wronly;
  14.                          Open_creat;
  15.                          Open_append] 0o666 "log" in
  16.   output_string oc ((get_time ()) ^ message ^ "\n");
  17.   Out_channel.close oc
  18.  
  19. class shooter =
  20.   object(self)
  21.     inherit LTerm_widget.label "defender" as super
  22.     method shoot_rocket () =
  23.       log_message "Shooting rocket"
  24.  
  25.     method move_left () =
  26.       log_message "Moving left"
  27.  
  28.     method move_right () =
  29.       log_message "Moving Right"
  30.  
  31.     initializer
  32.       log_message "Init called for initializer";
  33.       self#on_event (function
  34.           | LTerm_event.Key {control = false; meta = false;
  35.                              shift = false; code = Char ch }
  36.             when ch = of_char 'd' ->
  37.             self#shoot_rocket ();
  38.             false
  39.  
  40.           | LTerm_event.Key {control = false; meta = false;
  41.                              shift = false; code = Tab } ->
  42.             self#shoot_rocket ();
  43.             false
  44.           | LTerm_event.Key {control = false; meta = false;
  45.                              shift = false; code = Left} ->
  46.             self#move_left ();
  47.             false
  48.           | LTerm_event.Key {control = false; meta = false;
  49.                              shift = false; code = Right} ->
  50.             self#move_right ();
  51.             false
  52.           | _ -> true)
  53.   end
  54.  
  55. let root_handler exit_ (root_box: LTerm_widget.vbox) show_help =
  56.   (fun event ->
  57.      match event with
  58.      | LTerm_event.Key {control = false; meta = false;
  59.                         shift = false; code = LTerm_key.Char ch}
  60.        when ch = of_char 'q' ->
  61.        exit_ ();
  62.        false
  63.      | _ -> true
  64.   )
  65.  
  66. let make_help_modal () =
  67.   new LTerm_widget.modal_frame
  68.  
  69. lwt () =
  70.     let do_run, push_layer, pop_layer, exit_ = LTerm_widget.prepare_simple_run () in
  71.     let root_box = new LTerm_widget.vbox in
  72.  
  73.     let defender = new shooter in
  74.     root_box#add defender;
  75.    
  76.     root_box#on_event (root_handler
  77.                          exit_
  78.                          root_box
  79.                          (push_layer (make_help_modal ())));
  80.  
  81.  
  82.     do_run root_box
Advertisement
Add Comment
Please, Sign In to add comment