1 #include "events.h"
2
Instance()3 Events* Events::Instance()
4 {
5 static Events t;
6 return &t;
7 }
8
Events()9 Events::Events()
10 {
11 cmd = Commands::Instance();
12 }
13
registerSharedtimer(unsigned int responsetime)14 sharedTimer* Events::registerSharedtimer(unsigned int responsetime)
15 {
16 // create a new event and a pointer to it
17 sharedtimers.push_back(sharedTimer());
18 sharedTimer* t = &sharedtimers[sharedtimers.size() - 1];
19
20 t->responsetime = responsetime;
21 t->elapsed = 0;
22 return t;
23 }
24
registerEvent(SDLKey key,const string & name,const cmdsettings & cmd,sharedTimer * stimer)25 void Events::registerEvent(SDLKey key, const string& name, const cmdsettings& cmd, sharedTimer* stimer)
26 {
27 // create a new event and a pointer to it
28 events.push_back(event());
29 event* e = &events[events.size() - 1];
30
31 // set up default values of event
32 e->active = false;
33 e->name = name;
34 e->bindkey = key;
35 e->bindbystring = false;
36 e->command = cmd;
37
38 e->timerisshared = true;
39 e->stimer = stimer;
40 }
41
registerEvent(SDLKey key,const string & name,const cmdsettings & cmd,unsigned int responsetime,unsigned int minfresponsetime,unsigned int fresponseinterval)42 void Events::registerEvent(SDLKey key, const string& name, const cmdsettings& cmd, unsigned int responsetime, unsigned int minfresponsetime, unsigned int fresponseinterval)
43 {
44 // create a new event and a pointer to it
45 events.push_back(event());
46 event* e = &events[events.size() - 1];
47
48 // set up default values of event
49 e->active = false;
50 e->name = name;
51 e->bindkey = key;
52 e->bindbystring = false;
53 e->command = cmd;
54
55 e->responsetime = responsetime;
56 e->minfresponsetime = minfresponsetime;
57 e->fresponseinterval = fresponseinterval;
58
59 e->timerisshared = false;
60 }
61
registerEvent(const string & name,const cmdsettings & cmd,unsigned int responsetime,unsigned int minfresponsetime,unsigned int fresponseinterval)62 void Events::registerEvent(const string& name, const cmdsettings& cmd, unsigned int responsetime, unsigned int minfresponsetime, unsigned int fresponseinterval)
63 {
64 // create a new event and a pointer to it
65 events.push_back(event());
66 event* e = &events[events.size() - 1];
67
68 // set up default values of event
69 e->active = false;
70 e->name = name;
71 e->bindstring = name;
72 e->bindbystring = true;
73 e->command = cmd;
74
75 e->responsetime = responsetime;
76 e->minfresponsetime = minfresponsetime;
77 e->fresponseinterval = fresponseinterval;
78
79 e->timerisshared = false;
80 }
81
activateEvent(const long unsigned int key)82 void Events::activateEvent(const long unsigned int key)
83 {
84 for ( unsigned int i=0; i < events.size(); i++ )
85 {
86 if ( !events[i].bindbystring && events[i].bindkey == key )
87 {
88 if ( !events[i].timerisshared )
89 cmd->execCmd( events[i].command );
90 if ( events[i].responsetime > 0 || events[i].timerisshared )
91 {
92 events[i].active = true;
93 // events[i].elapsed = events[i].responsetime;
94 events[i].elapsed = 0;
95 events[i].fresponsetime = events[i].responsetime;
96 }
97 // cerr << "activated " << events[i].name << " rt: " << events[i].elapsed << endl;
98 return;
99 }
100 }
101 }
102
activateEvent(const string & key)103 void Events::activateEvent(const string& key)
104 {
105 for ( unsigned int i=0; i < events.size(); i++ )
106 {
107 if ( events[i].bindbystring && events[i].bindstring == key )
108 {
109 if ( !events[i].timerisshared )
110 cmd->execCmd( events[i].command );
111 if ( events[i].responsetime > 0 || events[i].timerisshared )
112 {
113 events[i].active = true;
114 // events[i].elapsed = events[i].responsetime;
115 events[i].elapsed = 0;
116 events[i].fresponsetime = events[i].responsetime;
117 // cerr << "activated " << events[i].name << " rt: " << events[i].elapsed << endl;
118 }
119 return;
120 }
121 }
122 }
123
deactivateEvent(const long unsigned int key)124 void Events::deactivateEvent(const long unsigned int key)
125 {
126 for ( unsigned int i=0; i < events.size(); i++ )
127 {
128 if ( !events[i].bindbystring && events[i].bindkey == key )
129 {
130 // cerr << "deactivating " << events[i].name << endl;
131 events[i].active = false;
132 return;
133 }
134 }
135 }
136
deactivateEvent(const string & key)137 void Events::deactivateEvent(const string& key)
138 {
139 for ( unsigned int i=0; i < events.size(); i++ )
140 {
141 if ( events[i].bindbystring && events[i].bindstring == key )
142 {
143 // cerr << "deactivating " << events[i].name << endl;
144 events[i].active = false;
145 return;
146 }
147 }
148 }
149
processSharedTimers()150 void Events::processSharedTimers()
151 {
152 for ( unsigned int i=0; i < sharedtimers.size(); i++ )
153 {
154 sharedTimer* t = &sharedtimers[i];
155 t->elapsed += Timer::Instance()->elapsed;
156 if ( t->elapsed >= t->responsetime )
157 {
158 t->elapsed = 0;
159 t->active = true;
160 }
161 else
162 t->active = false;
163 }
164 }
165
handlecommands()166 void Events::handlecommands()
167 {
168 for ( unsigned int i=0; i < events.size(); i++ )
169 {
170 event* e = &events[i];
171 if ( e->active )
172 {
173 // event uses a shared timer
174 if ( e->timerisshared )
175 {
176 if ( e->stimer->active )
177 cmd->execCmd( e->command );
178 }
179 // event has it's own timer
180 else
181 {
182 e->elapsed += Timer::Instance()->elapsed;
183 if ( (int)e->elapsed >= e->fresponsetime )
184 {
185 if ( e->responsetime > e->minfresponsetime )
186 {
187 e->fresponsetime -= e->fresponseinterval;
188 if ( e->fresponsetime < (int)e->minfresponsetime )
189 e->fresponsetime = e->minfresponsetime;
190 }
191 e->elapsed = 0;
192 cmd->execCmd( e->command );
193 }
194 }
195 }
196 }
197 }
198
~Events()199 Events::~Events()
200 {
201 }
202