Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
54
Task/Joystick-position/OCaml/joystick-position.ocaml
Normal file
54
Task/Joystick-position/OCaml/joystick-position.ocaml
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
let remove x = List.filter (fun y -> y <> x)
|
||||
let buttons_string b =
|
||||
String.concat " " (List.map string_of_int b)
|
||||
|
||||
let position app x y =
|
||||
let view = SFRenderWindow.getView app in
|
||||
let width, height = SFView.getSize view in
|
||||
let hw = width /. 2.0 in
|
||||
let hh = height /. 2.0 in
|
||||
(hw +. ((x /. 100.0) *. hw),
|
||||
hh +. ((y /. 100.0) *. hh))
|
||||
|
||||
let cross =
|
||||
[| 1.0, 1.0; 10.0, 1.0; 10.0, -1.0; 1.0, -1.0;
|
||||
1.0, -10.0; -1.0, -10.0; -1.0, -1.0; -10.0, -1.0;
|
||||
-10.0, 1.0; -1.0, 1.0; -1.0, 10.0; 1.0, 10.0; |]
|
||||
|
||||
let () =
|
||||
let app = SFRenderWindow.make (800, 600) "Joystick Position" in
|
||||
let text = SFText.make "" in
|
||||
let shape = SFShape.create cross in
|
||||
SFShape.setFillColor shape SFColor.white;
|
||||
SFShape.setOutlineColor shape SFColor.white;
|
||||
SFShape.setOutlineThickness shape 1.0;
|
||||
let rec display ((x, y), b) =
|
||||
SFText.setString text (buttons_string b);
|
||||
let x, y = position app x y in
|
||||
SFShape.setPosition shape (x, y);
|
||||
SFRenderWindow.clear app SFColor.black;
|
||||
SFRenderWindow.drawText app text ();
|
||||
SFRenderWindow.drawShape app shape ();
|
||||
SFRenderWindow.display app;
|
||||
and loop joyd =
|
||||
let get_joystick (((x, y), b) as joyd) = function
|
||||
| SFEvent.JoystickButtonPressed (0, button) -> ((x, y), button::b)
|
||||
| SFEvent.JoystickButtonReleased (0, button) -> ((x, y), remove button b)
|
||||
| SFEvent.JoystickMoved (0, SFJoystick.X, av) -> ((av, y), b)
|
||||
| SFEvent.JoystickMoved (0, SFJoystick.Y, av) -> ((x, av), b)
|
||||
| _ -> joyd
|
||||
in
|
||||
let rec proc_event joyd =
|
||||
match SFRenderWindow.pollEvent app with
|
||||
| Some SFEvent.KeyPressed (SFKey.Escape,_,_,_,_)
|
||||
| Some SFEvent.Closed -> ()
|
||||
| Some event ->
|
||||
let joyd = get_joystick joyd event in
|
||||
proc_event joyd
|
||||
| None ->
|
||||
display joyd;
|
||||
loop joyd
|
||||
in
|
||||
proc_event joyd
|
||||
in
|
||||
loop ((0.0, 0.0), [])
|
||||
Loading…
Add table
Add a link
Reference in a new issue