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