Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
ACGL
acgl
Commits
a548df80
Commit
a548df80
authored
Jul 12, 2013
by
Robert Menzel
Browse files
added microsoft 360 controller
parent
474d97b0
Changes
2
Hide whitespace changes
Inline
Side-by-side
include/ACGL/HardwareSupport/GamePad.hh
View file @
a548df80
...
...
@@ -84,6 +84,15 @@ public:
//! define the mapping of one button
void
setAxisMapping
(
GamePadAxis
_axis
,
unsigned
int
_rawAxisNumber
);
//! sets the minimal value an axis has to be pushed to trigger.
//! _sensitivity has to be >= 0.0 and < 1.0.
//! reported axis values will still be between -1..0..1
void
setMinAxisSensitivity
(
float
_sensitivity
);
float
getMinAxisSensitivity
()
{
return
mMinSensitivity
;
}
//! set and unset the invertation of an axis (1..-1 -> -1..1)
void
invertAxis
(
int
_axis
,
bool
_invert
=
true
);
//! print the button and axes state for debugging:
void
printState
();
...
...
@@ -97,6 +106,9 @@ private:
int
mNumberOfAxes
;
int
mButtonMap
[
GAMEPAD_BUTTON_ENUM_SIZE
];
int
mAxisMap
[
GAMEPAD_AXIS_ENUM_SIZE
];
float
*
mAxes
;
float
*
mAxesMultiplier
;
float
mMinSensitivity
;
//
// GLFW specifics: replace this to support joysticks with other APIs
...
...
src/ACGL/HardwareSupport/GamePad.cc
View file @
a548df80
...
...
@@ -6,6 +6,7 @@
#include <ACGL/HardwareSupport/GamePad.hh>
#include <ACGL/Utils/Log.hh>
#include <ACGL/Math/Math.hh>
#include <cassert>
#include <cstring>
...
...
@@ -25,6 +26,9 @@ GamePad::GamePad( int _n )
mGamePadOK
=
false
;
mLastGLFWButtonState
=
NULL
;
mAxes
=
NULL
;
mAxesMultiplier
=
NULL
;
mMinSensitivity
=
0.0
f
;
#ifdef ACGL_COMPILE_WITH_GLFW
int
numberOfJoysticksFound
=
0
;
...
...
@@ -90,6 +94,34 @@ GamePad::GamePad( int _n )
setAxisMapping
(
LEFT_ANALOG_STICK_Y
,
1
);
setAxisMapping
(
RIGHT_ANALOG_STICK_X
,
2
);
setAxisMapping
(
RIGHT_ANALOG_STICK_Y
,
3
);
setMinAxisSensitivity
(
0.05
f
);
}
else
if
(
joystickName
==
"Microsoft X-Box 360 pad"
)
{
setButtonMapping
(
SELECT
,
6
);
setButtonMapping
(
START
,
7
);
//setButtonMapping( LEFT_PAD_NORTH , 0);
//setButtonMapping( LEFT_PAD_EAST , 0);
//setButtonMapping( LEFT_PAD_SOUTH , 0);
//setButtonMapping( LEFT_PAD_WEST , 0);
setButtonMapping
(
RIGHT_PAD_NORTH
,
3
);
setButtonMapping
(
RIGHT_PAD_EAST
,
1
);
setButtonMapping
(
RIGHT_PAD_SOUTH
,
0
);
setButtonMapping
(
RIGHT_PAD_WEST
,
2
);
setButtonMapping
(
LEFT_SHOULDER
,
4
);
setButtonMapping
(
RIGHT_SHOULDER
,
5
);
//setButtonMapping( LEFT_TRIGGER , 0);
//setButtonMapping( RIGHT_TRIGGER , 0);
setAxisMapping
(
LEFT_ANALOG_TRIGGER
,
2
);
setAxisMapping
(
RIGHT_ANALOG_TRIGGER
,
5
);
setAxisMapping
(
LEFT_ANALOG_STICK_X
,
0
);
setAxisMapping
(
LEFT_ANALOG_STICK_Y
,
1
);
setAxisMapping
(
RIGHT_ANALOG_STICK_X
,
3
);
setAxisMapping
(
RIGHT_ANALOG_STICK_Y
,
4
);
setMinAxisSensitivity
(
0.2
f
);
}
else
{
debug
()
<<
"unknown gamepad: "
<<
joystickName
<<
endl
;
}
}
#endif
...
...
@@ -98,6 +130,8 @@ GamePad::GamePad( int _n )
GamePad
::~
GamePad
()
{
delete
[]
mLastGLFWButtonState
;
delete
[]
mAxes
;
delete
[]
mAxesMultiplier
;
}
bool
GamePad
::
isPressedRaw
(
unsigned
int
_button
)
...
...
@@ -133,7 +167,7 @@ bool GamePad::buttonStateChanged( GamePadButton _button )
float
GamePad
::
getAxisRaw
(
unsigned
int
_axis
)
{
if
(
(
int
)
_axis
>
mNumberOfAxes
)
return
0.0
f
;
return
m
GLFW
Axes
[
_axis
];
return
mAxes
[
_axis
];
}
float
GamePad
::
getAxis
(
GamePadAxis
_axis
)
...
...
@@ -147,6 +181,19 @@ void GamePad::setAxisMapping( GamePadAxis _axis, unsigned int _rawAxisNumber )
mAxisMap
[
_axis
]
=
_rawAxisNumber
;
}
void
GamePad
::
setMinAxisSensitivity
(
float
_sensitivity
)
{
assert
(
_sensitivity
>=
0.0
f
&&
"sensitivity can't be negative"
);
assert
(
_sensitivity
<
1.0
f
&&
"sensitivity has to be smaller than one"
);
mMinSensitivity
=
_sensitivity
;
}
void
GamePad
::
invertAxis
(
int
_axis
,
bool
_invert
)
{
assert
(
_axis
<
GAMEPAD_AXIS_ENUM_SIZE
);
mAxesMultiplier
[
_axis
]
=
(
_invert
)
?
-
1.0
f
:
1.0
f
;
}
void
GamePad
::
update
()
{
...
...
@@ -158,12 +205,29 @@ void GamePad::update()
mGLFWAxes
=
glfwGetJoystickAxes
(
mGLFWGamePadNumber
,
&
mNumberOfAxes
);
mLastGLFWButtonState
=
new
unsigned
char
[
mNumberOfButtons
];
mAxes
=
new
float
[
mNumberOfAxes
];
mAxesMultiplier
=
new
float
[
mNumberOfAxes
];
for
(
int
i
=
0
;
i
<
mNumberOfAxes
;
++
i
)
{
mAxesMultiplier
[
i
]
=
1.0
f
;
}
}
memcpy
(
mLastGLFWButtonState
,
mGLFWButtons
,
mNumberOfButtons
);
mGLFWButtons
=
glfwGetJoystickButtons
(
mGLFWGamePadNumber
,
&
mNumberOfButtons
);
mGLFWAxes
=
glfwGetJoystickAxes
(
mGLFWGamePadNumber
,
&
mNumberOfAxes
);
memcpy
(
mAxes
,
mGLFWAxes
,
mNumberOfAxes
*
sizeof
(
float
)
);
#endif
for
(
int
i
=
0
;
i
<
mNumberOfAxes
;
++
i
)
{
float
tmp
=
std
::
abs
(
mAxes
[
i
]
);
tmp
-=
mMinSensitivity
;
if
(
tmp
<
0.0
f
)
tmp
=
0.0
f
;
tmp
/=
(
1.0
f
-
mMinSensitivity
);
// rescaled to 0..1
float
sign
=
((
mAxes
[
i
]
<
0.0
f
)
&&
(
tmp
!=
0.0
f
))
?
-
1.0
f
:
1.0
f
;
mAxes
[
i
]
=
tmp
*
sign
;
}
}
void
GamePad
::
printState
()
...
...
@@ -176,7 +240,7 @@ void GamePad::printState()
}
debug
()
<<
"| "
;
for
(
int
i
=
0
;
i
<
mNumberOfAxes
;
++
i
)
{
debug
()
<<
m
GLFW
Axes
[
i
]
<<
" "
;
debug
()
<<
mAxes
[
i
]
<<
" "
;
}
debug
()
<<
endl
;
#endif
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment