Skip to content
Permalink
Browse files
Small experiment against Joystick controller
  • Loading branch information
Wohlstand committed Dec 16, 2016
1 parent a8f6183 commit b25beb81cb49858da952493ea51658abe6f2a4d7
Show file tree
Hide file tree
Showing 2 changed files with 92 additions and 60 deletions.
@@ -24,13 +24,12 @@ JoystickController::JoystickController() :
Controller(),
m_joystickController(0)
{
// qDebug() << "Num of joysticks: " << SDL_NumJoysticks();
// if(SDL_NumJoysticks() > 0){
// //TODO: Select which controller you want to use.
// joystickController = SDL_JoystickOpen(0);
// qDebug() << "Opened Controller \"" << SDL_JoystickName(joystickController) << "\"";
// }

// qDebug() << "Num of joysticks: " << SDL_NumJoysticks();
// if(SDL_NumJoysticks() > 0){
// //TODO: Select which controller you want to use.
// joystickController = SDL_JoystickOpen(0);
// qDebug() << "Opened Controller \"" << SDL_JoystickName(joystickController) << "\"";
// }
kmap.jump.val = 1;
kmap.jump_alt.val = 3;
kmap.run.val = 0;
@@ -48,7 +47,7 @@ JoystickController::~JoystickController()

void JoystickController::setJoystickDevice(SDL_Joystick *jctrl)
{
m_joystickController=jctrl;
m_joystickController = jctrl;
}

SDL_Joystick *JoystickController::getJoystickDevice() const
@@ -58,42 +57,54 @@ SDL_Joystick *JoystickController::getJoystickDevice() const

void JoystickController::updateKey(bool &key, KM_Key &mkey)
{
int val=0, dx=0, dy=0;
Sint32 val = 0, dx = 0, dy = 0;

switch(mkey.type)
{
case KeyMapJoyCtrls::JoyAxis:
val=SDL_JoystickGetAxis(m_joystickController, mkey.id);
if(mkey.val>0)
key=(val>0);
else if(mkey.val<0)
key=(val<0);
else key=false;
val = SDL_JoystickGetAxis(m_joystickController, mkey.id);

if(mkey.val > 0)
key = (val > 0);
else if(mkey.val < 0)
key = (val < 0);
else key = false;

break;

case KeyMapJoyCtrls::JoyBallX:
SDL_JoystickGetBall(m_joystickController, mkey.id, &dx, &dy);
if(mkey.id>0)
key=(dx>0);
else if(mkey.id<0)
key=(dx<0);
else key=false;

if(mkey.id > 0)
key = (dx > 0);
else if(mkey.id < 0)
key = (dx < 0);
else key = false;

break;

case KeyMapJoyCtrls::JoyBallY:
SDL_JoystickGetBall(m_joystickController, mkey.id, &dx, &dy);
if(mkey.id>0)
key=(dy>0);
else if(mkey.id<0)
key=(dy<0);
else key=false;

if(mkey.id > 0)
key = (dy > 0);
else if(mkey.id < 0)
key = (dy < 0);
else key = false;

break;

case KeyMapJoyCtrls::JoyHat:
val=SDL_JoystickGetHat(m_joystickController, mkey.id);
key = (val==mkey.val);
val = SDL_JoystickGetHat(m_joystickController, mkey.id);
key = (val == mkey.val);
break;

case KeyMapJoyCtrls::JoyButton:
key = SDL_JoystickGetButton(m_joystickController, mkey.id);
break;

default:
key=false;
key = false;
break;
}
}
@@ -105,18 +116,14 @@ void JoystickController::update()

//SDL_PumpEvents();
SDL_JoystickUpdate();

updateKey(keys.jump, kmap.jump);
updateKey(keys.alt_jump, kmap.jump_alt);

updateKey(keys.run, kmap.run);
updateKey(keys.alt_run, kmap.run_alt);

updateKey(keys.right, kmap.right);
updateKey(keys.left, kmap.left);
updateKey(keys.up, kmap.up);
updateKey(keys.down, kmap.down);

updateKey(keys.drop, kmap.drop);
updateKey(keys.start, kmap.start);
}
@@ -125,56 +132,81 @@ void JoystickController::update()

bool JoystickController::bindJoystickKey(SDL_Joystick *joy, KM_Key &k)
{
int val=0, dx=0, dy=0;
Sint32 val = 0;
int dx = 0, dy = 0;
//SDL_PumpEvents();
SDL_JoystickUpdate();
int balls = SDL_JoystickNumBalls(joy);
int hats = SDL_JoystickNumHats(joy);
int buttons = SDL_JoystickNumButtons(joy);
int axes = SDL_JoystickNumAxes(joy);

for(int i=0; i<SDL_JoystickNumBalls(joy);i++)
for(int i = 0; i < balls; i++)
{
dx=0; dy=0;
dx = 0;
dy = 0;
SDL_JoystickGetBall(joy, i, &dx, &dy);
if(dx!=0)

if(dx != 0)
{
k.val=dx;
k.id=i;
k.type=(int)KeyMapJoyCtrls::JoyBallX;
k.val = dx;
k.id = i;
k.type = (int)KeyMapJoyCtrls::JoyBallX;
return true;
}else if(dy!=0)
}
else if(dy != 0)
{
k.val = dy;
k.id = i;
k.type = (int)KeyMapJoyCtrls::JoyBallY;
return true;
}
}

for(int i = 0; i < hats; i++)
{
val = 0;
val = SDL_JoystickGetHat(joy, i);

if(val != 0)
{
k.val=dy;
k.id=i;
k.type=(int)KeyMapJoyCtrls::JoyBallY;
k.val = val;
k.id = i;
k.type = (int)KeyMapJoyCtrls::JoyHat;
return true;
}
}

for(int i=0; i<SDL_JoystickNumHats(joy);i++)
for(int i = 0; i < buttons; i++)
{
val=0;
val=SDL_JoystickGetHat(joy, i);
if(val!=0)
val = 0;
val = SDL_JoystickGetButton(joy, i);

if(val == 1)
{
k.val=val;
k.id=i;
k.type=(int)KeyMapJoyCtrls::JoyHat;
k.val = val;
k.id = i;
k.type = (int)KeyMapJoyCtrls::JoyButton;
return true;
}
}
for(int i=0; i<SDL_JoystickNumButtons(joy);i++)

for(int i = 0; i < axes; i++)
{
val=0;
val=SDL_JoystickGetButton(joy, i);
if(val==1)
val = 0;
val = SDL_JoystickGetAxis(joy, i);

if(val != 0)
{
k.val=val;
k.id=i;
k.type=(int)KeyMapJoyCtrls::JoyButton;
k.val = val;
k.id = i;
k.type = (int)KeyMapJoyCtrls::JoyAxis;
return true;
}
}

k.val=0;
k.id=0;
k.type=(int)KeyMapJoyCtrls::NoControl;
k.val = 0;
k.id = 0;
k.type = (int)KeyMapJoyCtrls::NoControl;
return false;
}
0 clear_deps.sh 100644 → 100755
Empty file.

0 comments on commit b25beb8

Please sign in to comment.