From 5a766c50d331e89e257a7fb68a876cb993087ef9 Mon Sep 17 00:00:00 2001 From: realtradam Date: Mon, 24 Apr 2023 19:08:31 -0400 Subject: add void* to callbacks --- include/rodeo/input.h | 2 +- include/rodeo/input_t.h | 77 +++++++++++++++++++++++++++++++++++++++++-------- src/input/rodeo_input.c | 70 ++++++++++++++++++++++++++++++-------------- 3 files changed, 115 insertions(+), 34 deletions(-) diff --git a/include/rodeo/input.h b/include/rodeo/input.h index 8d3d775..e589c90 100644 --- a/include/rodeo/input.h +++ b/include/rodeo/input.h @@ -25,7 +25,7 @@ void rodeo_input_scene_destroy(rodeo_input_scene_t *scene); rodeo_input_command_t* -rodeo_input_command_create(uint32_t input_type); +rodeo_input_command_create(uint32_t input_types); // make sure to unregister from all scenes before destroying void diff --git a/include/rodeo/input_t.h b/include/rodeo/input_t.h index f717de3..cb3163e 100644 --- a/include/rodeo/input_t.h +++ b/include/rodeo/input_t.h @@ -766,12 +766,25 @@ rodeo_input_binary_mouseButton_t; typedef enum { - rodeo_input_positional_mouse_Invalid = 0, - rodeo_input_positional_mouse_X = 1, - rodeo_input_positional_mouse_Y = 2 + rodeo_input_positional_mouse_Invalid = -1, + rodeo_input_positional_mouse_X, + rodeo_input_positional_mouse_Y } rodeo_input_positional_mouse_t; +typedef +enum +{ + rodeo_input_boundedRange_controllerAxis_Invalid = -1, + rodeo_input_boundedRange_controllerAxisLeft_X = 0, + rodeo_input_boundedRange_controllerAxisLeft_Y = 1, + rodeo_input_boundedRange_controllerAxisRight_X = 2, + rodeo_input_boundedRange_controllerAxisRight_Y = 3, + rodeo_input_boundedRange_controllerAxisTriggerLeft_X = 4, + rodeo_input_boundedRange_controllerAxisTriggerRight_Y = 5, +} +rodeo_input_boundedRange_controllerAxis_t; + typedef enum { @@ -787,10 +800,14 @@ enum rodeo_input_type_Invalid = (1 << 0), rodeo_input_type_Binary = (1 << 1), rodeo_input_type_Positional = (1 << 2), - rodeo_input_type_UnboundedRange = (1 << 3), + rodeo_input_type_BoundedRange = (1 << 3), + rodeo_input_type_UnboundedRange = (1 << 4), } rodeo_input_type_t ; +/* + * needed for alternative registration + * uncomment this for when that is being implemented typedef enum { @@ -800,6 +817,30 @@ enum } rodeo_input_binary_type_t; +typedef +enum +{ + rodeo_input_positional_Invalid = 0, + rodeo_input_positional_Mouse +} +rodeo_input_positional_type_t; + +typedef +enum +{ + rodeo_input_boundedRange_Invalid = 0, + rodeo_input_boundedRange_Joystick +} +rodeo_input_boundedRange_type_t; + +typedef +enum +{ + rodeo_input_unboundedRange_Invalid = 0, + rodeo_input_unboundedRange_Mouse +} +rodeo_input_unboundedRange_type_t; +*/ typedef enum @@ -811,6 +852,9 @@ rodeo_input_binary_state_t; typedef int64_t rodeo_input_positional_state_t; +// ranges between -1.0 and +1.0 +typedef float rodeo_input_boundedRange_state_t; + typedef float rodeo_input_unboundedRange_state_t; typedef @@ -820,17 +864,19 @@ struct { rodeo_input_binary_state_t binary_state; rodeo_input_positional_state_t positional_state; + rodeo_input_boundedRange_state_t bounded_range_state; rodeo_input_unboundedRange_state_t unbounded_range_state; } data; - rodeo_input_type_t input_type; + rodeo_input_type_t type; } rodeo_input_any_state_t; typedef -void +void* (*rodeo_input_callback_function)( - rodeo_input_any_state_t state + rodeo_input_any_state_t *state, + void *data ); #define i_val rodeo_input_callback_function @@ -849,6 +895,10 @@ void #define i_tag input_positional_mouse #include +#define i_val rodeo_input_boundedRange_controllerAxis_t +#define i_tag input_boundedRange_controllerAxis +#include + #define i_val rodeo_input_unboundedRange_mouse_t #define i_tag input_unboundedRange_mouse #include @@ -860,7 +910,6 @@ struct cset_input_callback_functions callbacks; - // binary struct { cset_input_binary_scancodes scancodes; @@ -868,17 +917,21 @@ struct } binary; - // positional struct { - cset_input_positional_mouse mouse_position; + cset_input_positional_mouse mouse_axes; } positional; - // unbounded range struct { - cset_input_unboundedRange_mouse mouse_delta; + cset_input_boundedRange_controllerAxis controller_axes; + } + bounded_range; + + struct + { + cset_input_unboundedRange_mouse mouse_axes; } unbounded_range; diff --git a/src/input/rodeo_input.c b/src/input/rodeo_input.c index 426fda4..ceb2d85 100644 --- a/src/input/rodeo_input.c +++ b/src/input/rodeo_input.c @@ -44,9 +44,9 @@ rodeo_input_events_poll(void) } else { - rodeo_input_any_state_t key_state = { + rodeo_input_any_state_t input_state = { .data.binary_state = event.key.state, - .input_type = rodeo_input_type_Binary + .type = rodeo_input_type_Binary }; c_foreach( k, @@ -54,7 +54,7 @@ rodeo_input_events_poll(void) command->callbacks ) { - (**k.ref)(key_state); + (**k.ref)(&input_state, NULL); } } } @@ -84,7 +84,7 @@ rodeo_input_events_poll(void) { rodeo_input_any_state_t input_state = { .data.binary_state = event.button.state, - .input_type = rodeo_input_type_Binary + .type = rodeo_input_type_Binary }; c_foreach( k, @@ -92,7 +92,7 @@ rodeo_input_events_poll(void) command->callbacks ) { - (**k.ref)(input_state); + (**k.ref)(&input_state, NULL); } } } @@ -108,21 +108,21 @@ rodeo_input_events_poll(void) { rodeo_input_command_t *command = *j.ref; const cset_input_positional_mouse_value *x_value = cset_input_positional_mouse_get( - &command->positional.mouse_position, + &command->positional.mouse_axes, rodeo_input_positional_mouse_X ); const cset_input_positional_mouse_value *y_value = cset_input_positional_mouse_get( - &command->positional.mouse_position, + &command->positional.mouse_axes, rodeo_input_positional_mouse_Y ); const cset_input_unboundedRange_mouse_value *rel_x_value = cset_input_unboundedRange_mouse_get( - &command->unbounded_range.mouse_delta, + &command->unbounded_range.mouse_axes, rodeo_input_unboundedRange_mouse_X ); const cset_input_unboundedRange_mouse_value *rel_y_value = cset_input_unboundedRange_mouse_get( - &command->unbounded_range.mouse_delta, + &command->unbounded_range.mouse_axes, rodeo_input_unboundedRange_mouse_Y ); @@ -130,7 +130,7 @@ rodeo_input_events_poll(void) { rodeo_input_any_state_t input_state = { .data.positional_state = event.motion.x, - .input_type = rodeo_input_type_Positional + .type = rodeo_input_type_Positional }; c_foreach( k, @@ -138,7 +138,7 @@ rodeo_input_events_poll(void) command->callbacks ) { - (**k.ref)(input_state); + (**k.ref)(&input_state, NULL); } } @@ -146,7 +146,7 @@ rodeo_input_events_poll(void) { rodeo_input_any_state_t input_state = { .data.positional_state = event.motion.y, - .input_type = rodeo_input_type_Positional + .type = rodeo_input_type_Positional }; c_foreach( k, @@ -154,14 +154,14 @@ rodeo_input_events_poll(void) command->callbacks ) { - (**k.ref)(input_state); + (**k.ref)(&input_state, NULL); } } if(rel_x_value != NULL) { rodeo_input_any_state_t input_state = { .data.unbounded_range_state = (float)event.motion.xrel, - .input_type = rodeo_input_type_UnboundedRange + .type = rodeo_input_type_UnboundedRange }; c_foreach( k, @@ -169,7 +169,7 @@ rodeo_input_events_poll(void) command->callbacks ) { - (**k.ref)(input_state); + (**k.ref)(&input_state, NULL); } } @@ -177,7 +177,7 @@ rodeo_input_events_poll(void) { rodeo_input_any_state_t input_state = { .data.unbounded_range_state = (float)event.motion.yrel, - .input_type = rodeo_input_type_UnboundedRange + .type = rodeo_input_type_UnboundedRange }; c_foreach( k, @@ -185,13 +185,41 @@ rodeo_input_events_poll(void) command->callbacks ) { - (**k.ref)(input_state); + (**k.ref)(&input_state, NULL); } } } } } break; + case SDL_CONTROLLERAXISMOTION: + { + c_foreach(i, cset_input_scene, istate.active_scenes) + { + rodeo_input_scene_t *scene = *i.ref; + c_foreach(j, cset_input_commands, scene->commands) + { + rodeo_input_command_t *command = *j.ref; + if(cset_input_boundedRange_controllerAxis_contains(&command->bounded_range.controller_axes, event.caxis.axis)) + { + rodeo_input_any_state_t input_state = { + .data.bounded_range_state = (float)event.caxis.value, + .type = rodeo_input_type_BoundedRange + }; + c_foreach( + k, + cset_input_callback_functions, + command->callbacks + ) + { + (**k.ref)(&input_state, NULL); + } + } + } + + } + } + break; } } return false; @@ -259,12 +287,12 @@ rodeo_input_scene_destroy(rodeo_input_scene_t *scene) } rodeo_input_command_t* -rodeo_input_command_create(uint32_t input_type) +rodeo_input_command_create(uint32_t input_types) { rodeo_input_command_t *result = malloc(sizeof(rodeo_input_command_t)); *result = (rodeo_input_command_t) { - .valid_types = input_type + .valid_types = input_types }; return result; } @@ -343,7 +371,7 @@ rodeo_input_command_register_positional_mouse( else { cset_input_positional_mouse_insert( - &input_command->positional.mouse_position, + &input_command->positional.mouse_axes, mouse_axis ); return true; @@ -367,7 +395,7 @@ rodeo_input_command_register_unboundedRange_mouse( else { cset_input_unboundedRange_mouse_insert( - &input_command->unbounded_range.mouse_delta, + &input_command->unbounded_range.mouse_axes, mouse_axis ); return true; -- cgit v1.2.3