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