| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
1 |
/*
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
2 |
joypad.cpp - Enables joypad support
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
3 |
Copyright (C) 2005 Poul Sander
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
4 |
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
5 |
This program is free software; you can redistribute it and/or modify
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
6 |
it under the terms of the GNU General Public License as published by
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
7 |
the Free Software Foundation; either version 2 of the License, or
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
8 |
(at your option) any later version.
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
9 |
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
10 |
This program is distributed in the hope that it will be useful,
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
11 |
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
12 |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
13 |
GNU General Public License for more details.
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
14 |
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
15 |
You should have received a copy of the GNU General Public License
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
16 |
along with this program; if not, write to the Free Software
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
17 |
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
18 |
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
19 |
Poul Sander
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
20 |
Rævehøjvej 36, V. 1111
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
21 |
2800 Kgs. Lyngby
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
22 |
DENMARK
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
23 |
blockattack@poulsander.com
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
24 |
*/
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
25 |
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
26 |
#include "joypad.h"
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
27 |
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
28 |
bool Joypad_init()
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
29 |
{
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
30 |
if (0==SDL_InitSubSystem(SDL_INIT_JOYSTICK))
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
31 |
return true;
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
32 |
else
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
33 |
return false;
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
34 |
}
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
35 |
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
36 |
Joypad_status Joypad_getStatus(SDL_Joystick *joystick)
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
37 |
{
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
38 |
Joypad_status status;
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
39 |
for (int i=0; i<NRofPADS; i++)
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
40 |
{
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
41 |
//cout << SDL_JoystickNumAxes(joystick) << endl;
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
42 |
if (i*2>=SDL_JoystickNumAxes(joystick))
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
43 |
{
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
44 |
status.padDown[i]=false;
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
45 |
status.padUp[i] = false;
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
46 |
status.padLeft[i] = false;
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
47 |
status.padRight[i] = false;
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
48 |
}
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
49 |
else
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
50 |
{
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
51 |
//cout << SDL_JoystickGetAxis(joystick,i*2+1)<< endl;
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
52 |
if (SDL_JoystickGetAxis(joystick,i*2)<(-8000))
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
53 |
status.padLeft[i]=1;
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
54 |
else
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
55 |
status.padLeft[i]=0;
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
56 |
if (SDL_JoystickGetAxis(joystick,i*2)>(8000))
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
57 |
status.padRight[i]=1;
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
58 |
else
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
59 |
status.padRight[i]=0;
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
60 |
if (SDL_JoystickGetAxis(joystick,i*2+1)<(-8000))
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
61 |
status.padUp[i]=1;
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
62 |
else
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
63 |
status.padUp[i]=0;
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
64 |
if (SDL_JoystickGetAxis(joystick,i*2+1)>(8000))
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
65 |
status.padDown[i]=1;
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
66 |
else
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
67 |
status.padDown[i]=0;
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
68 |
}
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
69 |
}//NRofPADS
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
70 |
for (int i=0; i<NRofBUTTONS; i++)
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
71 |
{
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
72 |
if (i>=SDL_JoystickNumButtons(joystick))
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
73 |
status.button[i]=false;
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
74 |
else
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
75 |
if (1==SDL_JoystickGetButton(joystick,i))
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
76 |
status.button[i] = true;
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
77 |
else
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
78 |
status.button[i] = false;
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
79 |
}
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
80 |
return status;
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
81 |
}
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
82 |
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
83 |
Joypad::Joypad()
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
84 |
{
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
85 |
up=false;
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
86 |
down=false;
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
87 |
left=false;
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
88 |
right=false;
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
89 |
but1=false;
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
90 |
but2=false;
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
91 |
upREL=true;
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
92 |
downREL=true;
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
93 |
leftREL=true;
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
94 |
rightREL=true;
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
95 |
but1REL=true;
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
96 |
but2REL=true;
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
97 |
int joynum = 0;
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
98 |
while ((SDL_JoystickOpened(joynum))&&(joynum<Joypad_number))
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
99 |
joynum++;
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
100 |
if (joynum>=Joypad_number)
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
101 |
working = false;
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
102 |
else
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
103 |
{
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
104 |
joystick=SDL_JoystickOpen(joynum);
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
105 |
if (joystick==NULL)
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
106 |
working =false;
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
107 |
else
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
108 |
working=true;
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
109 |
}
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
110 |
}
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
111 |
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
112 |
Joypad::~Joypad()
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
113 |
{
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
114 |
SDL_JoystickClose(joystick);
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
115 |
}
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
116 |
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
117 |
void Joypad::update()
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
118 |
{
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
119 |
SDL_JoystickUpdate();
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
120 |
Joypad_status status = Joypad_getStatus(joystick);
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
121 |
if ((upREL)&&((status.padUp[0])||(status.padUp[1])||(status.padUp[2])||(status.padUp[3])))
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
122 |
{
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
123 |
up=true;
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
124 |
upREL=false;
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
125 |
}
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
126 |
else
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
127 |
up=false;
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
128 |
if ((downREL)&&((status.padDown[0])||(status.padDown[1])||(status.padDown[2])||(status.padDown[3])))
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
129 |
{
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
130 |
down=true;
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
131 |
downREL=false;
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
132 |
}
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
133 |
else
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
134 |
down=false;
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
135 |
if ((leftREL)&&((status.padLeft[0])||(status.padLeft[1])||(status.padLeft[2])||(status.padLeft[3])))
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
136 |
{
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
137 |
left=true;
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
138 |
leftREL=false;
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
139 |
}
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
140 |
else
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
141 |
left=false;
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
142 |
if ((rightREL)&&((status.padRight[0])||(status.padRight[1])||(status.padRight[2])||(status.padRight[3])))
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
143 |
{
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
144 |
right=true;
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
145 |
rightREL=false;
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
146 |
}
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
147 |
else
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
148 |
right=false;
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
149 |
if ((but1REL)&&((status.button[0])||(status.button[2])||(status.button[4])||(status.button[6])))
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
150 |
{
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
151 |
but1=true;
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
152 |
but1REL=false;
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
153 |
}
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
154 |
else
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
155 |
but1=false;
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
156 |
if ((but2REL)&&((status.button[1])||(status.button[3])||(status.button[5])||(status.button[7])))
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
157 |
{
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
158 |
but2=true;
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
159 |
but2REL=false;
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
160 |
}
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
161 |
else
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
162 |
but2=false;
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
163 |
//Now testing for up
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
164 |
if (!((status.padUp[0])||(status.padUp[1])||(status.padUp[2])||(status.padUp[3])))
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
165 |
upREL = true;
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
166 |
if (!((status.padDown[0])||(status.padDown[1])||(status.padDown[2])||(status.padDown[3])))
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
167 |
downREL = true;
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
168 |
if (!((status.padLeft[0])||(status.padLeft[1])||(status.padLeft[2])||(status.padLeft[3])))
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
169 |
leftREL = true;
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
170 |
if (!((status.padRight[0])||(status.padRight[1])||(status.padRight[2])||(status.padRight[3])))
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
171 |
rightREL= true;
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
172 |
if (!((status.button[0])||(status.button[2])||(status.button[4])||(status.button[6])))
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
173 |
but1REL = true;
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
174 |
if (!((status.button[1])||(status.button[3])||(status.button[5])||(status.button[7])))
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
175 |
but2REL = true;
|
| 89c4a3a6 |
sago007 |
2008-08-29 14:32 |
176 |
}
|
|
|
1970-01-01 00:00 |
177 |
|