projects
/
rocksndiamonds.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
added boundary checks for sound/music ID for some sound and music functions
[rocksndiamonds.git]
/
src
/
libgame
/
sdl.c
diff --git
a/src/libgame/sdl.c
b/src/libgame/sdl.c
index ee43dc05b0c1b1795328b129d1ca0a563f0398e2..9d2dc17c656f06b6ded090cc5da70f22bdd7b84e 100644
(file)
--- a/
src/libgame/sdl.c
+++ b/
src/libgame/sdl.c
@@
-17,6
+17,8
@@
#define ENABLE_UNUSED_CODE 0 /* currently unused functions */
#define ENABLE_UNUSED_CODE 0 /* currently unused functions */
+#define DEBUG_JOYSTICKS 0
+
/* ========================================================================= */
/* video functions */
/* ========================================================================= */
/* video functions */
@@
-532,11
+534,7
@@
inline static void SDLInitVideoBuffer_VideoBuffer(boolean fullscreen)
SDLSetWindowIcon(program.icon_filename);
/* set window and icon title */
SDLSetWindowIcon(program.icon_filename);
/* set window and icon title */
-#if defined(TARGET_SDL2)
- SDL_SetWindowTitle(sdl_window, program.window_title);
-#else
- SDL_WM_SetCaption(program.window_title, program.window_title);
-#endif
+ SDLSetWindowTitle();
}
inline static void SDLInitVideoBuffer_DrawBuffer()
}
inline static void SDLInitVideoBuffer_DrawBuffer()
@@
-830,6
+828,9
@@
boolean SDLSetVideoMode(boolean fullscreen)
void SDLSetWindowTitle()
{
#if defined(TARGET_SDL2)
void SDLSetWindowTitle()
{
#if defined(TARGET_SDL2)
+ if (sdl_window == NULL)
+ return;
+
SDL_SetWindowTitle(sdl_window, program.window_title);
#else
SDL_WM_SetCaption(program.window_title, program.window_title);
SDL_SetWindowTitle(sdl_window, program.window_title);
#else
SDL_WM_SetCaption(program.window_title, program.window_title);
@@
-2535,7
+2536,7
@@
void SDLCloseAudio(void)
/* event functions */
/* ========================================================================= */
/* event functions */
/* ========================================================================= */
-void SDL
Nex
tEvent(Event *event)
+void SDL
Wai
tEvent(Event *event)
{
SDL_WaitEvent(event);
}
{
SDL_WaitEvent(event);
}
@@
-2601,9
+2602,24
@@
static int sdl_js_axis[MAX_PLAYERS][2];
static int sdl_js_button[MAX_PLAYERS][2];
static boolean sdl_is_controller[MAX_PLAYERS];
static int sdl_js_button[MAX_PLAYERS][2];
static boolean sdl_is_controller[MAX_PLAYERS];
-
static boolean SDLOpenJoystick(int nr
)
+
void SDLClearJoystickState(
)
{
{
- if (nr < 0 || nr > MAX_PLAYERS)
+ int i, j;
+
+ for (i = 0; i < MAX_PLAYERS; i++)
+ {
+ for (j = 0; j < 2; j++)
+ {
+ sdl_js_axis_raw[i][j] = -1;
+ sdl_js_axis[i][j] = 0;
+ sdl_js_button[i][j] = 0;
+ }
+ }
+}
+
+boolean SDLOpenJoystick(int nr)
+{
+ if (nr < 0 || nr >= MAX_PLAYERS)
return FALSE;
#if defined(TARGET_SDL2)
return FALSE;
#if defined(TARGET_SDL2)
@@
-2612,7
+2628,7
@@
static boolean SDLOpenJoystick(int nr)
sdl_is_controller[nr] = FALSE;
#endif
sdl_is_controller[nr] = FALSE;
#endif
-#if
1
+#if
DEBUG_JOYSTICKS
Error(ERR_DEBUG, "opening joystick %d (%s)",
nr, (sdl_is_controller[nr] ? "game controller" : "joystick"));
#endif
Error(ERR_DEBUG, "opening joystick %d (%s)",
nr, (sdl_is_controller[nr] ? "game controller" : "joystick"));
#endif
@@
-2629,12
+2645,12
@@
static boolean SDLOpenJoystick(int nr)
return (sdl_joystick[nr] != NULL);
}
return (sdl_joystick[nr] != NULL);
}
-
static
void SDLCloseJoystick(int nr)
+void SDLCloseJoystick(int nr)
{
{
- if (nr < 0 || nr > MAX_PLAYERS)
+ if (nr < 0 || nr >
=
MAX_PLAYERS)
return;
return;
-#if
1
+#if
DEBUG_JOYSTICKS
Error(ERR_DEBUG, "closing joystick %d", nr);
#endif
Error(ERR_DEBUG, "closing joystick %d", nr);
#endif
@@
-2648,18
+2664,11
@@
static void SDLCloseJoystick(int nr)
#endif
sdl_joystick[nr] = NULL;
#endif
sdl_joystick[nr] = NULL;
-
- sdl_js_axis_raw[nr][0] = -1;
- sdl_js_axis_raw[nr][1] = -1;
- sdl_js_axis[nr][0] = 0;
- sdl_js_axis[nr][1] = 0;
- sdl_js_button[nr][0] = 0;
- sdl_js_button[nr][1] = 0;
}
boolean SDLCheckJoystickOpened(int nr)
{
}
boolean SDLCheckJoystickOpened(int nr)
{
- if (nr < 0 || nr > MAX_PLAYERS)
+ if (nr < 0 || nr >
=
MAX_PLAYERS)
return FALSE;
#if defined(TARGET_SDL2)
return FALSE;
#if defined(TARGET_SDL2)
@@
-2680,6
+2689,9
@@
static void setJoystickAxis(int nr, int axis_id_raw, int axis_value)
int axis_id = axis_id_raw % 2;
#endif
int axis_id = axis_id_raw % 2;
#endif
+ if (nr < 0 || nr >= MAX_PLAYERS)
+ return;
+
if (axis_id == -1)
return;
if (axis_id == -1)
return;
@@
-2723,6
+2735,9
@@
static void setJoystickButton(int nr, int button_id_raw, int button_state)
int button_id = button_id_raw % 2;
#endif
int button_id = button_id_raw % 2;
#endif
+ if (nr < 0 || nr >= MAX_PLAYERS)
+ return;
+
if (button_id == -1)
return;
if (button_id == -1)
return;
@@
-2735,7
+2750,7
@@
void HandleJoystickEvent(Event *event)
{
#if defined(TARGET_SDL2)
case SDL_CONTROLLERDEVICEADDED:
{
#if defined(TARGET_SDL2)
case SDL_CONTROLLERDEVICEADDED:
-#if
1
+#if
DEBUG_JOYSTICKS
Error(ERR_DEBUG, "SDL_CONTROLLERDEVICEADDED: device %d added",
event->cdevice.which);
#endif
Error(ERR_DEBUG, "SDL_CONTROLLERDEVICEADDED: device %d added",
event->cdevice.which);
#endif
@@
-2743,7
+2758,7
@@
void HandleJoystickEvent(Event *event)
break;
case SDL_CONTROLLERDEVICEREMOVED:
break;
case SDL_CONTROLLERDEVICEREMOVED:
-#if
1
+#if
DEBUG_JOYSTICKS
Error(ERR_DEBUG, "SDL_CONTROLLERDEVICEREMOVED: device %d removed",
event->cdevice.which);
#endif
Error(ERR_DEBUG, "SDL_CONTROLLERDEVICEREMOVED: device %d removed",
event->cdevice.which);
#endif
@@
-2751,7
+2766,7
@@
void HandleJoystickEvent(Event *event)
break;
case SDL_CONTROLLERAXISMOTION:
break;
case SDL_CONTROLLERAXISMOTION:
-#if
1
+#if
DEBUG_JOYSTICKS
Error(ERR_DEBUG, "SDL_CONTROLLERAXISMOTION: device %d, axis %d: %d",
event->caxis.which, event->caxis.axis, event->caxis.value);
#endif
Error(ERR_DEBUG, "SDL_CONTROLLERAXISMOTION: device %d, axis %d: %d",
event->caxis.which, event->caxis.axis, event->caxis.value);
#endif
@@
-2761,7
+2776,7
@@
void HandleJoystickEvent(Event *event)
break;
case SDL_CONTROLLERBUTTONDOWN:
break;
case SDL_CONTROLLERBUTTONDOWN:
-#if
1
+#if
DEBUG_JOYSTICKS
Error(ERR_DEBUG, "SDL_CONTROLLERBUTTONDOWN: device %d, button %d",
event->cbutton.which, event->cbutton.button);
#endif
Error(ERR_DEBUG, "SDL_CONTROLLERBUTTONDOWN: device %d, button %d",
event->cbutton.which, event->cbutton.button);
#endif
@@
-2771,7
+2786,7
@@
void HandleJoystickEvent(Event *event)
break;
case SDL_CONTROLLERBUTTONUP:
break;
case SDL_CONTROLLERBUTTONUP:
-#if
1
+#if
DEBUG_JOYSTICKS
Error(ERR_DEBUG, "SDL_CONTROLLERBUTTONUP: device %d, button %d",
event->cbutton.which, event->cbutton.button);
#endif
Error(ERR_DEBUG, "SDL_CONTROLLERBUTTONUP: device %d, button %d",
event->cbutton.which, event->cbutton.button);
#endif
@@
-2785,7
+2800,7
@@
void HandleJoystickEvent(Event *event)
if (sdl_is_controller[event->jaxis.which])
break;
if (sdl_is_controller[event->jaxis.which])
break;
-#if
1
+#if
DEBUG_JOYSTICKS
Error(ERR_DEBUG, "SDL_JOYAXISMOTION: device %d, axis %d: %d",
event->jaxis.which, event->jaxis.axis, event->jaxis.value);
#endif
Error(ERR_DEBUG, "SDL_JOYAXISMOTION: device %d, axis %d: %d",
event->jaxis.which, event->jaxis.axis, event->jaxis.value);
#endif
@@
-2799,7
+2814,7
@@
void HandleJoystickEvent(Event *event)
if (sdl_is_controller[event->jaxis.which])
break;
if (sdl_is_controller[event->jaxis.which])
break;
-#if
1
+#if
DEBUG_JOYSTICKS
Error(ERR_DEBUG, "SDL_JOYBUTTONDOWN: device %d, button %d",
event->jbutton.which, event->jbutton.button);
#endif
Error(ERR_DEBUG, "SDL_JOYBUTTONDOWN: device %d, button %d",
event->jbutton.which, event->jbutton.button);
#endif
@@
-2813,7
+2828,7
@@
void HandleJoystickEvent(Event *event)
if (sdl_is_controller[event->jaxis.which])
break;
if (sdl_is_controller[event->jaxis.which])
break;
-#if
1
+#if
DEBUG_JOYSTICKS
Error(ERR_DEBUG, "SDL_JOYBUTTONUP: device %d, button %d",
event->jbutton.which, event->jbutton.button);
#endif
Error(ERR_DEBUG, "SDL_JOYBUTTONUP: device %d, button %d",
event->jbutton.which, event->jbutton.button);
#endif
@@
-2833,7
+2848,7
@@
void SDLInitJoysticks()
static boolean sdl_joystick_subsystem_initialized = FALSE;
boolean print_warning = !sdl_joystick_subsystem_initialized;
#if defined(TARGET_SDL2)
static boolean sdl_joystick_subsystem_initialized = FALSE;
boolean print_warning = !sdl_joystick_subsystem_initialized;
#if defined(TARGET_SDL2)
- char *mappings_file_base = getPath2(options.
ro_base
_directory,
+ char *mappings_file_base = getPath2(options.
conf
_directory,
GAMECONTROLLER_BASENAME);
char *mappings_file_user = getPath2(getUserGameDataDir(),
GAMECONTROLLER_BASENAME);
GAMECONTROLLER_BASENAME);
char *mappings_file_user = getPath2(getUserGameDataDir(),
GAMECONTROLLER_BASENAME);
@@
-2860,23
+2875,30
@@
void SDLInitJoysticks()
#if defined(TARGET_SDL2)
num_mappings = SDL_GameControllerAddMappingsFromFile(mappings_file_base);
#if defined(TARGET_SDL2)
num_mappings = SDL_GameControllerAddMappingsFromFile(mappings_file_base);
- if (num_mappings != -1)
- Error(ERR_INFO, "%d game controller base mapping(s) added", num_mappings);
- else
+ /* the included game controller base mappings should always be found */
+ if (num_mappings == -1)
Error(ERR_WARN, "no game controller base mappings found");
Error(ERR_WARN, "no game controller base mappings found");
+#if DEBUG_JOYSTICKS
+ else
+ Error(ERR_INFO, "%d game controller base mapping(s) added", num_mappings);
+#endif
num_mappings = SDL_GameControllerAddMappingsFromFile(mappings_file_user);
num_mappings = SDL_GameControllerAddMappingsFromFile(mappings_file_user);
- if (num_mappings != -1)
- Error(ERR_INFO, "%d game controller user mapping(s) added", num_mappings);
- else
+#if DEBUG_JOYSTICKS
+ /* the personal game controller user mappings may or may not be found */
+ if (num_mappings == -1)
Error(ERR_WARN, "no game controller user mappings found");
Error(ERR_WARN, "no game controller user mappings found");
+ else
+ Error(ERR_INFO, "%d game controller user mapping(s) added", num_mappings);
Error(ERR_INFO, "%d joystick(s) found:", SDL_NumJoysticks());
Error(ERR_INFO, "%d joystick(s) found:", SDL_NumJoysticks());
+#endif
checked_free(mappings_file_base);
checked_free(mappings_file_user);
checked_free(mappings_file_base);
checked_free(mappings_file_user);
+#if DEBUG_JOYSTICKS
for (i = 0; i < SDL_NumJoysticks(); i++)
{
const char *name, *type;
for (i = 0; i < SDL_NumJoysticks(); i++)
{
const char *name, *type;
@@
-2895,6
+2917,7
@@
void SDLInitJoysticks()
Error(ERR_INFO, "- joystick %d (%s): '%s'",
i, type, (name ? name : "(Unknown)"));
}
Error(ERR_INFO, "- joystick %d (%s): '%s'",
i, type, (name ? name : "(Unknown)"));
}
+#endif
#endif
}
#endif
}
@@
-2913,8
+2936,8
@@
void SDLInitJoysticks()
joystick_nr = -1;
}
joystick_nr = -1;
}
- /*
misuse joystick file descriptor variable to store joystick numb
er */
- joystick.
fd
[i] = joystick_nr;
+ /*
store configured joystick number for each play
er */
+ joystick.
nr
[i] = joystick_nr;
}
/* now open all connected joysticks (regardless if configured or not) */
}
/* now open all connected joysticks (regardless if configured or not) */
@@
-2929,6
+2952,8
@@
void SDLInitJoysticks()
else if (print_warning)
Error(ERR_WARN, "cannot open joystick %d", i);
}
else if (print_warning)
Error(ERR_WARN, "cannot open joystick %d", i);
}
+
+ SDLClearJoystickState();
}
boolean SDLReadJoystick(int nr, int *x, int *y, boolean *b1, boolean *b2)
}
boolean SDLReadJoystick(int nr, int *x, int *y, boolean *b1, boolean *b2)
@@
-2949,6
+2974,11
@@
boolean SDLReadJoystick(int nr, int *x, int *y, boolean *b1, boolean *b2)
return TRUE;
}
return TRUE;
}
+
+/* ========================================================================= */
+/* touch input overlay functions */
+/* ========================================================================= */
+
#if defined(USE_TOUCH_INPUT_OVERLAY)
static void DrawTouchInputOverlay()
{
#if defined(USE_TOUCH_INPUT_OVERLAY)
static void DrawTouchInputOverlay()
{
@@
-2960,11
+2990,12
@@
static void DrawTouchInputOverlay()
static int alpha_step = 5;
static int alpha_last = 0;
static int alpha = 0;
static int alpha_step = 5;
static int alpha_last = 0;
static int alpha = 0;
+ boolean active = (overlay.enabled && overlay.active);
- if (!
overlay.
active && deactivated)
+ if (!active && deactivated)
return;
return;
- if (
overlay.
active)
+ if (active)
{
if (alpha < alpha_max)
alpha = MIN(alpha + alpha_step, alpha_max);
{
if (alpha < alpha_max)
alpha = MIN(alpha + alpha_step, alpha_max);