-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathsequence-relative.cpp
49 lines (33 loc) · 1.04 KB
/
sequence-relative.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include "sequence.h"
#include <unistd.h>
#include <sys/time.h>
#include <iostream>
using namespace Chaos;
SequenceRelative::SequenceRelative() {
tickTime = 200;
}
void SequenceRelative::send(Controller* dualshock) {
struct timeval startTime;
gettimeofday(&startTime, NULL);
long long lastTime = 0;
struct timeval currentTime = startTime;
long long runningTimeInMicroseconds = 0;
bool done;
for (std::vector<DeviceEvent>::iterator it = events.begin(); it != events.end(); it++) {
DeviceEvent& event = (*it);
done = false;
while(!done) {
// Send ASAP then check next event:
if (((long long)event.time + lastTime) <= runningTimeInMicroseconds) {
lastTime += event.time;
dualshock->applyEvent( &event );
done = true;
continue;
}
// Event not ready, wait then check new time:
usleep(tickTime);
gettimeofday(¤tTime, NULL);
runningTimeInMicroseconds = (long long)(currentTime.tv_sec - startTime.tv_sec)*1000000 + (long long)(currentTime.tv_usec - startTime.tv_usec);
}
}
}