summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--include/rodeo/input.h2
-rw-r--r--include/rodeo/input_t.h77
-rw-r--r--src/input/rodeo_input.c70
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,15 +766,28 @@ 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
+{
rodeo_input_unboundedRange_mouse_Invalid = 0,
rodeo_input_unboundedRange_mouse_X = 1,
rodeo_input_unboundedRange_mouse_Y = 2
@@ -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 <stc/cset.h>
+#define i_val rodeo_input_boundedRange_controllerAxis_t
+#define i_tag input_boundedRange_controllerAxis
+#include <stc/cset.h>
+
#define i_val rodeo_input_unboundedRange_mouse_t
#define i_tag input_unboundedRange_mouse
#include <stc/cset.h>
@@ -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;