1 module armos.events; 2 3 public import armos.events.events; 4 5 import rx; 6 7 /++ 8 +/ 9 class CoreSubjects { 10 public{ 11 SubjectObject!SetupEvent setup; 12 SubjectObject!UpdateEvent update; 13 SubjectObject!DrawEvent draw; 14 SubjectObject!ExitEvent exit; 15 SubjectObject!WindowResizeEvent windowResize; 16 SubjectObject!KeyPressedEvent keyPressed; 17 SubjectObject!KeyReleasedEvent keyReleased; 18 SubjectObject!UnicodeInputtedEvent unicodeInputted; 19 SubjectObject!MouseDraggedEvent mouseDragged; 20 SubjectObject!MouseEnteredEvent mouseEntered; 21 SubjectObject!MouseMovedEvent mouseMoved; 22 SubjectObject!MousePressedEvent mousePressed; 23 SubjectObject!MouseReleasedEvent mouseReleased; 24 SubjectObject!MouseScrolledEvent mouseScrolled; 25 SubjectObject!TouchCancelledEvent touchCancelled; 26 SubjectObject!TouchDoubleTapEvent touchDoubleTap; 27 SubjectObject!TouchDownEvent touchDown; 28 SubjectObject!TouchMovedEvent touchMoved; 29 SubjectObject!TouchUpEvent touchUp; 30 31 this(){ 32 setup = new SubjectObject!SetupEvent; 33 update = new SubjectObject!UpdateEvent; 34 draw = new SubjectObject!DrawEvent; 35 exit = new SubjectObject!ExitEvent; 36 windowResize = new SubjectObject!WindowResizeEvent; 37 keyPressed = new SubjectObject!KeyPressedEvent; 38 keyReleased = new SubjectObject!KeyReleasedEvent; 39 unicodeInputted = new SubjectObject!UnicodeInputtedEvent; 40 mouseDragged = new SubjectObject!MouseDraggedEvent; 41 mouseEntered = new SubjectObject!MouseEnteredEvent; 42 mouseMoved = new SubjectObject!MouseMovedEvent; 43 mousePressed = new SubjectObject!MousePressedEvent; 44 mouseReleased = new SubjectObject!MouseReleasedEvent; 45 mouseScrolled = new SubjectObject!MouseScrolledEvent; 46 touchCancelled = new SubjectObject!TouchCancelledEvent; 47 touchDoubleTap = new SubjectObject!TouchDoubleTapEvent; 48 touchDown = new SubjectObject!TouchDownEvent; 49 touchMoved = new SubjectObject!TouchMovedEvent; 50 touchUp = new SubjectObject!TouchUpEvent; 51 52 mousePressed.doSubscribe!((MousePressedEvent pressedEvent){ 53 auto disposable = mouseMoved.doSubscribe!((MouseMovedEvent movedEvent){ 54 auto draggedEvent = MouseDraggedEvent(); 55 draggedEvent.firstX = pressedEvent.x; 56 draggedEvent.firstY = pressedEvent.y; 57 draggedEvent.x = movedEvent.x; 58 draggedEvent.y = movedEvent.y; 59 draggedEvent.button = pressedEvent.button; 60 import std.range:put; 61 put(mouseDragged, draggedEvent); 62 }); 63 mouseReleased.doSubscribe!(event => disposable.dispose()); 64 }); 65 } 66 67 CoreObservables opCast(CoreObservables)(){ 68 return CoreObservables(this); 69 } 70 }//public 71 72 private{ 73 }//private 74 }//class CoreSubjects 75 76 /++ 77 +/ 78 struct CoreObservables { 79 public{ 80 this(CoreSubjects s){ 81 setup = s.setup; 82 update = s.update; 83 draw = s.draw; 84 exit = s.exit; 85 windowResize = s.windowResize; 86 keyPressed = s.keyPressed; 87 keyReleased = s.keyReleased; 88 unicodeInputted = s.unicodeInputted; 89 mouseDragged = s.mouseDragged; 90 mouseEntered = s.mouseEntered; 91 mouseMoved = s.mouseMoved; 92 mousePressed = s.mousePressed; 93 mouseReleased = s.mouseReleased; 94 mouseScrolled = s.mouseScrolled; 95 touchCancelled = s.touchCancelled; 96 touchDoubleTap = s.touchDoubleTap; 97 touchDown = s.touchDown; 98 touchMoved = s.touchMoved; 99 touchUp = s.touchUp; 100 } 101 102 Observable!SetupEvent setup; 103 Observable!UpdateEvent update; 104 Observable!DrawEvent draw; 105 Observable!ExitEvent exit; 106 Observable!WindowResizeEvent windowResize; 107 Observable!KeyPressedEvent keyPressed; 108 Observable!KeyReleasedEvent keyReleased; 109 Observable!UnicodeInputtedEvent unicodeInputted; 110 Observable!MouseDraggedEvent mouseDragged; 111 Observable!MouseEnteredEvent mouseEntered; 112 Observable!MouseMovedEvent mouseMoved; 113 Observable!MousePressedEvent mousePressed; 114 Observable!MouseReleasedEvent mouseReleased; 115 Observable!MouseScrolledEvent mouseScrolled; 116 Observable!TouchCancelledEvent touchCancelled; 117 Observable!TouchDoubleTapEvent touchDoubleTap; 118 Observable!TouchDownEvent touchDown; 119 Observable!TouchMovedEvent touchMoved; 120 Observable!TouchUpEvent touchUp; 121 }//public 122 123 private{ 124 }//private 125 }//struct CoreObservables