-
Notifications
You must be signed in to change notification settings - Fork 0
/
JoystickController.cpp
115 lines (82 loc) · 2.93 KB
/
JoystickController.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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#include "JoystickController.h"
#include <math.h>
#include "MathUtil.h"
namespace dxco {
void JoystickController::addJoystick(Joystick* joystick) {
angulo = 0;
this->joysticks.push_back(joystick);
}
void JoystickController::ccTouchesBegan(cocos2d::CCSet *pTouches,
cocos2d::CCEvent *pEvent) {
cocos2d::CCSetIterator it = pTouches->begin();
cocos2d::CCPoint location;
cocos2d::CCTouch * touch;
for (int iTouchCount = 0; iTouchCount < pTouches->count(); iTouchCount++) {
touch = (cocos2d::CCTouch*) (*it);
location = touch->getLocationInView();
location = cocos2d::CCDirector::sharedDirector()->convertToGL(location);
this->setRelatedJoystick(touch->getID(), location);
Joystick* joystick = this->getRelatedJoystick(touch->getID());
if (joystick) {
cocos2d::CCPoint center = joystick->getCenter();
float intensity = MathUtil::distance(location, joystick->getCenter());
joystick->onTouchedBegan(location, 0, intensity);
}
it++;
}
}
void JoystickController::ccTouchesEnded(cocos2d::CCSet *pTouches,
cocos2d::CCEvent *pEvent) {
cocos2d::CCSetIterator it = pTouches->begin();
cocos2d::CCPoint location;
cocos2d::CCTouch * touch;
for (int iTouchCount = 0; iTouchCount < pTouches->count(); iTouchCount++) {
touch = (cocos2d::CCTouch*) (*it);
location = touch->getLocationInView();
location = cocos2d::CCDirector::sharedDirector()->convertToGL(location);
Joystick* joystick = getRelatedJoystick(touch->getID());
if (joystick) {
cocos2d::CCPoint center = joystick->getCenter();
float intensity = MathUtil::distance(location, joystick->getCenter());
joystick->onTouchedEnded(location, 0, intensity);
}
it++;
}
}
void JoystickController::ccTouchesMoved(cocos2d::CCSet *pTouches,
cocos2d::CCEvent *pEvent) {
cocos2d::CCSetIterator it = pTouches->begin();
cocos2d::CCPoint location;
cocos2d::CCTouch * touch;
for (int iTouchCount = 0; iTouchCount < pTouches->count(); iTouchCount++) {
touch = (cocos2d::CCTouch*) (*it);
location = touch->getLocationInView();
location = cocos2d::CCDirector::sharedDirector()->convertToGL(location);
Joystick* joystick = getRelatedJoystick(touch->getID());
if (joystick) {
cocos2d::CCPoint center = joystick->getCenter();
float intensity = MathUtil::distance(location, joystick->getCenter());
joystick->onMoved(location, MathUtil::angle(joystick->getCenter(), location),
intensity);
}
it++;
}
}
void JoystickController::setRelatedJoystick(int id, cocos2d::CCPoint location) {
Joystick* joystick = NULL;
if (!this->joysticks.size()) {
return;
}
for (int i = 0; i < this->joysticks.size(); i++) {
float distance = MathUtil::distance(this->joysticks[i]->getCenter(), location);
if (distance <= this->joysticks[i]->getRadio() * 1.2) {
joystick = this->joysticks[i];
break;
}
}
this->relatedJoysticks[id] = joystick;
}
Joystick* JoystickController::getRelatedJoystick(int id) {
return this->relatedJoysticks[id];
}
} /* namespace dxco */