source/code/joypad.cpp
browsing at commit = b2ff93be12aaeee839c04975e2f3646ce21e09fc
/*
===========================================================================
blockattack - Block Attack - Rise of the Blocks
Copyright (C) 2005-2012 Poul Sander
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see http://www.gnu.org/licenses/
Source information and contacts persons can be found at
http://blockattack.sf.net
===========================================================================
*/
#include "joypad.h"
bool Joypad_init() {
if (0==SDL_InitSubSystem(SDL_INIT_JOYSTICK)) {
return true;
}
else {
return false;
}
}
Joypad_status Joypad_getStatus(SDL_Joystick* joystick) {
Joypad_status status;
for (int i=0; i<NRofPADS; i++) {
//cout << SDL_JoystickNumAxes(joystick) << endl;
if (i*2>=SDL_JoystickNumAxes(joystick)) {
status.padDown[i]=false;
status.padUp[i] = false;
status.padLeft[i] = false;
status.padRight[i] = false;
}
else {
//cout << SDL_JoystickGetAxis(joystick,i*2+1)<< endl;
if (SDL_JoystickGetAxis(joystick,i*2)<(-8000)) {
status.padLeft[i]=1;
}
else {
status.padLeft[i]=0;
}
if (SDL_JoystickGetAxis(joystick,i*2)>(8000)) {
status.padRight[i]=1;
}
else {
status.padRight[i]=0;
}
if (SDL_JoystickGetAxis(joystick,i*2+1)<(-8000)) {
status.padUp[i]=1;
}
else {
status.padUp[i]=0;
}
if (SDL_JoystickGetAxis(joystick,i*2+1)>(8000)) {
status.padDown[i]=1;
}
else {
status.padDown[i]=0;
}
}
}//NRofPADS
for (int i=0; i<NRofBUTTONS; i++) {
if (i>=SDL_JoystickNumButtons(joystick)) {
status.button[i]=false;
}
else if (1==SDL_JoystickGetButton(joystick,i)) {
status.button[i] = true;
}
else {
status.button[i] = false;
}
}
return status;
}
Joypad::Joypad() {
up=false;
down=false;
left=false;
right=false;
but1=false;
but2=false;
upREL=true;
downREL=true;
leftREL=true;
rightREL=true;
but1REL=true;
but2REL=true;
int joynum = 0;
/*while ((SDL_JoystickOpened(joynum))&&(joynum<Joypad_number)) {
joynum++;
}*/
if (joynum>=Joypad_number) {
working = false;
}
else {
joystick=SDL_JoystickOpen(joynum);
if (joystick==nullptr) {
working =false;
}
else {
working=true;
}
}
}
Joypad::~Joypad() {
if (working) {
SDL_JoystickClose(joystick);
}
}
void Joypad::update() {
SDL_JoystickUpdate();
Joypad_status status = Joypad_getStatus(joystick);
if ((upREL)&&((status.padUp[0])||(status.padUp[1])||(status.padUp[2])||(status.padUp[3]))) {
up=true;
upREL=false;
}
else {
up=false;
}
if ((downREL)&&((status.padDown[0])||(status.padDown[1])||(status.padDown[2])||(status.padDown[3]))) {
down=true;
downREL=false;
}
else {
down=false;
}
if ((leftREL)&&((status.padLeft[0])||(status.padLeft[1])||(status.padLeft[2])||(status.padLeft[3]))) {
left=true;
leftREL=false;
}
else {
left=false;
}
if ((rightREL)&&((status.padRight[0])||(status.padRight[1])||(status.padRight[2])||(status.padRight[3]))) {
right=true;
rightREL=false;
}
else {
right=false;
}
if ((but1REL)&&((status.button[0])||(status.button[2])||(status.button[4])||(status.button[6]))) {
but1=true;
but1REL=false;
}
else {
but1=false;
}
if ((but2REL)&&((status.button[1])||(status.button[3])||(status.button[5])||(status.button[7]))) {
but2=true;
but2REL=false;
}
else {
but2=false;
}
//Now testing for up
if (!((status.padUp[0])||(status.padUp[1])||(status.padUp[2])||(status.padUp[3]))) {
upREL = true;
}
if (!((status.padDown[0])||(status.padDown[1])||(status.padDown[2])||(status.padDown[3]))) {
downREL = true;
}
if (!((status.padLeft[0])||(status.padLeft[1])||(status.padLeft[2])||(status.padLeft[3]))) {
leftREL = true;
}
if (!((status.padRight[0])||(status.padRight[1])||(status.padRight[2])||(status.padRight[3]))) {
rightREL= true;
}
if (!((status.button[0])||(status.button[2])||(status.button[4])||(status.button[6]))) {
but1REL = true;
}
if (!((status.button[1])||(status.button[3])||(status.button[5])||(status.button[7]))) {
but2REL = true;
}
}