summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/input.c258
-rw-r--r--src/input.h58
-rw-r--r--src/main.c259
3 files changed, 330 insertions, 245 deletions
diff --git a/src/input.c b/src/input.c
new file mode 100644
index 0000000..6af50fa
--- /dev/null
+++ b/src/input.c
@@ -0,0 +1,258 @@
+
+#include "input.h"
+#include "rodeo/input.h"
+
+scenes_and_commands_t inputs = {0};
+
+#ifdef __GNUC__
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#endif
+#ifdef __clang__
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wunused-parameter"
+#endif
+
+void*
+summon_units_input(rodeo_input_any_state_t *input_state, void *data)
+{
+ static bool should_summon_units = false;
+
+ if(input_state != NULL)
+ {
+ should_summon_units = input_state->data.binary_state;
+ }
+ return &should_summon_units;
+}
+
+void
+units_move_generic_input(
+ rodeo_input_any_state_t *input_state,
+ float *move,
+ bool *binary_key,
+ float *unbounded_range,
+ float *bounded_range,
+ bool should_be_positive,
+ bool submit_inputs
+)
+{
+ if(submit_inputs)
+ {
+ *move = 0.0f;
+ *move += (should_be_positive ? 1 : -1) * (float)*binary_key * 5.0f;
+ *move += (*unbounded_range);
+ *unbounded_range = 0.0f;
+ *move += ((*bounded_range) * 15.0f);
+ //*bounded_range = 0.0f;
+
+ }
+ if(input_state != NULL)
+ {
+ if(input_state->type == rodeo_input_type_Binary)
+ {
+ *binary_key = input_state->data.binary_state;
+ }
+ else if(input_state->type == rodeo_input_type_UnboundedRange)
+ {
+ if((input_state->data.unbounded_range_state < 0) && !should_be_positive)
+ {
+ *unbounded_range += input_state->data.unbounded_range_state;
+ }
+ else if((input_state->data.unbounded_range_state > 0) && should_be_positive)
+ {
+ *unbounded_range += input_state->data.unbounded_range_state;
+ }
+ }
+ else if(input_state->type == rodeo_input_type_BoundedRange)
+ {
+ if((input_state->data.bounded_range_state < -0.03) && !should_be_positive)
+ {
+ *bounded_range = input_state->data.bounded_range_state;
+ }
+ else if((input_state->data.bounded_range_state > 0.03) && should_be_positive)
+ {
+ *bounded_range = input_state->data.bounded_range_state;
+ }
+ else
+ {
+ *bounded_range = 0;
+ }
+ }
+ }
+}
+
+void*
+units_move_right_input(rodeo_input_any_state_t *input_state, void *data)
+{
+ static float move = 0;
+ static bool binary_key = false;
+ static float unbounded_range = 0.0f;
+ static float bounded_range = 0.0f;
+
+ bool submit_inputs = false;
+ if(data == NULL)
+ {
+ data = &submit_inputs;
+ }
+ units_move_generic_input(
+ input_state,
+ &move,
+ &binary_key,
+ &unbounded_range,
+ &bounded_range,
+ true,
+ *(bool*)data
+ );
+ return &move;
+}
+
+void*
+units_move_left_input(rodeo_input_any_state_t *input_state, void *data)
+{
+ static float move = 0;
+ static bool binary_key = false;
+ static float unbounded_range = 0.0f;
+ static float bounded_range = 0.0f;
+
+ bool submit_inputs = false;
+ if(data == NULL)
+ {
+ data = &submit_inputs;
+ }
+ units_move_generic_input(
+ input_state,
+ &move,
+ &binary_key,
+ &unbounded_range,
+ &bounded_range,
+ false,
+ *(bool*)data
+ );
+ return &move;
+}
+
+void*
+units_move_up_input(rodeo_input_any_state_t *input_state, void *data)
+{
+ static float move = 0;
+ static bool binary_key = false;
+ static float unbounded_range = 0.0f;
+ static float bounded_range = 0.0f;
+
+ bool submit_inputs = false;
+ if(data == NULL)
+ {
+ data = &submit_inputs;
+ }
+ units_move_generic_input(
+ input_state,
+ &move,
+ &binary_key,
+ &unbounded_range,
+ &bounded_range,
+ false,
+ *(bool*)data
+ );
+ return &move;
+}
+
+void*
+units_move_down_input(rodeo_input_any_state_t *input_state, void *data)
+{
+ static float move = 0;
+ static bool binary_key = false;
+ static float unbounded_range = 0.0f;
+ static float bounded_range = 0.0f;
+
+ bool submit_inputs = false;
+ if(data == NULL)
+ {
+ data = &submit_inputs;
+ }
+ units_move_generic_input(
+ input_state,
+ &move,
+ &binary_key,
+ &unbounded_range,
+ &bounded_range,
+ true,
+ *(bool*)data
+ );
+ return &move;
+}
+
+#ifdef __clang__
+#pragma clang diagnostic pop
+#endif
+#ifdef __GNUC__
+#pragma GCC diagnostic pop
+#endif
+
+void
+register_inputs(void)
+{
+ // make scene
+ inputs.scene = rodeo_input_scene_create();
+
+ // - make commands -
+ inputs.create = rodeo_input_command_create(rodeo_input_type_Binary);
+
+ inputs.up = rodeo_input_command_create(
+ rodeo_input_type_Binary | rodeo_input_type_UnboundedRange | rodeo_input_type_BoundedRange
+ );
+ inputs.down = rodeo_input_command_create(
+ rodeo_input_type_Binary | rodeo_input_type_UnboundedRange | rodeo_input_type_BoundedRange
+ );
+ inputs.left = rodeo_input_command_create(
+ rodeo_input_type_Binary | rodeo_input_type_UnboundedRange | rodeo_input_type_BoundedRange
+ );
+ inputs.right = rodeo_input_command_create(
+ rodeo_input_type_Binary | rodeo_input_type_UnboundedRange | rodeo_input_type_BoundedRange
+ );
+ // --
+
+ // - register inputs -
+ rodeo_input_command_register_binary_scancode(inputs.create, rodeo_input_binary_scancode_Q);
+ rodeo_input_command_register_binary_controllerButton(inputs.create, rodeo_input_binary_controllerButton_A);
+
+ rodeo_input_command_register_binary_scancode(inputs.up, rodeo_input_binary_scancode_W);
+ rodeo_input_command_register_binary_scancode(inputs.down, rodeo_input_binary_scancode_S);
+ rodeo_input_command_register_binary_scancode(inputs.left, rodeo_input_binary_scancode_A);
+ rodeo_input_command_register_binary_scancode(inputs.right, rodeo_input_binary_scancode_D);
+ rodeo_input_command_register_unboundedRange_mouse(inputs.up, rodeo_input_unboundedRange_mouse_Y);
+ rodeo_input_command_register_unboundedRange_mouse(inputs.down, rodeo_input_unboundedRange_mouse_Y);
+ rodeo_input_command_register_unboundedRange_mouse(inputs.left, rodeo_input_unboundedRange_mouse_X);
+ rodeo_input_command_register_unboundedRange_mouse(inputs.right, rodeo_input_unboundedRange_mouse_X);
+ rodeo_input_command_register_boundedRange_controllerAxis(inputs.up, rodeo_input_boundedRange_controllerAxisLeft_Y);
+ rodeo_input_command_register_boundedRange_controllerAxis(inputs.down, rodeo_input_boundedRange_controllerAxisLeft_Y);
+ rodeo_input_command_register_boundedRange_controllerAxis(inputs.left, rodeo_input_boundedRange_controllerAxisLeft_X);
+ rodeo_input_command_register_boundedRange_controllerAxis(inputs.right, rodeo_input_boundedRange_controllerAxisLeft_X);
+ // --
+
+ // - register callbacks -
+ rodeo_input_command_register_callback(inputs.create, *summon_units_input);
+ rodeo_input_command_register_callback(inputs.up, *units_move_up_input);
+ rodeo_input_command_register_callback(inputs.down, *units_move_down_input);
+ rodeo_input_command_register_callback(inputs.left, *units_move_left_input);
+ rodeo_input_command_register_callback(inputs.right, *units_move_right_input);
+ // --
+
+ // - register commands -
+ rodeo_input_scene_register_command(inputs.scene, inputs.create);
+ rodeo_input_scene_register_command(inputs.scene, inputs.up);
+ rodeo_input_scene_register_command(inputs.scene, inputs.down);
+ rodeo_input_scene_register_command(inputs.scene, inputs.left);
+ rodeo_input_scene_register_command(inputs.scene, inputs.right);
+ // --
+
+ // activate scene
+ rodeo_input_scene_activate(inputs.scene);
+}
+
+void
+unregister_inputs(void)
+{
+ rodeo_input_scene_unregister_command(inputs.scene, inputs.create);
+ rodeo_input_command_destroy(inputs.create);
+ rodeo_input_scene_destroy(inputs.scene);
+}
diff --git a/src/input.h b/src/input.h
new file mode 100644
index 0000000..58abf5d
--- /dev/null
+++ b/src/input.h
@@ -0,0 +1,58 @@
+#pragma once
+#include "rodeo/input.h"
+
+typedef
+struct
+{
+ rodeo_input_scene_t *scene;
+ rodeo_input_command_t *create;
+ rodeo_input_command_t *left;
+ rodeo_input_command_t *right;
+ rodeo_input_command_t *up;
+ rodeo_input_command_t *down;
+}
+scenes_and_commands_t;
+
+void*
+summon_units_input(rodeo_input_any_state_t *input_state, void *data);
+
+void
+units_move_generic_input(
+ rodeo_input_any_state_t *input_state,
+ float *move,
+ bool *binary_key,
+ float *unbounded_range,
+ float *bounded_range,
+ bool should_be_positive,
+ bool reset
+);
+
+void*
+units_move_right_input(
+ rodeo_input_any_state_t *input_state,
+ void *data
+);
+
+void*
+units_move_left_input(
+ rodeo_input_any_state_t *input_state,
+ void *data
+);
+
+void*
+units_move_up_input(
+ rodeo_input_any_state_t *input_state,
+ void *data
+);
+
+void*
+units_move_down_input(
+ rodeo_input_any_state_t *input_state,
+ void *data
+);
+
+void
+register_inputs(void);
+
+void
+unregister_inputs(void);
diff --git a/src/main.c b/src/main.c
index 00699fb..cb4b66f 100644
--- a/src/main.c
+++ b/src/main.c
@@ -1,22 +1,22 @@
#include "rodeo.h"
#include <inttypes.h>
+#include "input.h"
cstr renderer;
float time_var;
-/*
-const uint8_t texture_memory[] = {
- 0x00, 0xff, 0xff, 0xff,
- 0xff, 0x00, 0xff, 0xff,
- 0xff, 0xff, 0x00, 0xff,
- 0xff, 0xff, 0xff, 0x99,
-};
-*/
+typedef
+struct
+{
+ float x;
+ float y;
+}
+summon_t;
-float orc_size[] = {13.0f * 2.0f, 19.0f * 2.0f};
+summon_t summon_position = { .x = 100, .y = 100 };
-rodeo_input_scene_t scene = {0};
+float orc_size[] = {13.0f * 2.0f, 19.0f * 2.0f};
rodeo_texture_2d_t texture;
@@ -65,192 +65,6 @@ const rodeo_color_RGBAFloat_t pink_clear =
.alpha = 0.5f
};
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wunused-parameter"
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wunused-parameter"
-
-typedef
-struct
-{
- float x;
- float y;
-}
-summon_t;
-
-summon_t summon_position = { .x = 100, .y = 100 };
-
-void*
-summon_units_input(rodeo_input_any_state_t *input_state, void *data)
-{
- static bool should_summon_units = false;
-
- if(input_state != NULL)
- {
- should_summon_units = input_state->data.binary_state;
- }
- return &should_summon_units;
-}
-
-void
-units_move_generic_input(
- rodeo_input_any_state_t *input_state,
- float *move,
- bool *binary_key,
- float *unbounded_range,
- float *bounded_range,
- bool should_be_positive,
- bool reset
-)
-{
- if(reset)
- {
- *move = 0.0f;
- *move += (should_be_positive ? 1 : -1) * (float)*binary_key * 5.0f;
- *move += (*unbounded_range);
- *unbounded_range = 0.0f;
- *move += ((*bounded_range) * 15.0f);
- //*bounded_range = 0.0f;
-
- }
- if(input_state != NULL)
- {
- if(input_state->type == rodeo_input_type_Binary)
- {
- *binary_key = input_state->data.binary_state;
- }
- else if(input_state->type == rodeo_input_type_UnboundedRange)
- {
- if((input_state->data.unbounded_range_state < 0) && !should_be_positive)
- {
- *unbounded_range += input_state->data.unbounded_range_state;
- }
- else if((input_state->data.unbounded_range_state > 0) && should_be_positive)
- {
- *unbounded_range += input_state->data.unbounded_range_state;
- }
- }
- else if(input_state->type == rodeo_input_type_BoundedRange)
- {
- if((input_state->data.bounded_range_state < -0.03) && !should_be_positive)
- {
- *bounded_range = input_state->data.bounded_range_state;
- }
- else if((input_state->data.bounded_range_state > 0.03) && should_be_positive)
- {
- *bounded_range = input_state->data.bounded_range_state;
- }
- else
- {
- *bounded_range = 0;
- }
- }
- }
-}
-
-void*
-units_move_right_input(rodeo_input_any_state_t *input_state, void *data)
-{
- static float move = 0;
- static bool binary_key = false;
- static float unbounded_range = 0.0f;
- static float bounded_range = 0.0f;
-
- bool dont_reset = false;
- if(data == NULL)
- {
- data = &dont_reset;
- }
- units_move_generic_input(
- input_state,
- &move,
- &binary_key,
- &unbounded_range,
- &bounded_range,
- true,
- *(bool*)data
- );
- return &move;
-}
-
-void*
-units_move_left_input(rodeo_input_any_state_t *input_state, void *data)
-{
- static float move = 0;
- static bool binary_key = false;
- static float unbounded_range = 0.0f;
- static float bounded_range = 0.0f;
-
- bool reset = false;
- if(data == NULL)
- {
- data = &reset;
- }
- units_move_generic_input(
- input_state,
- &move,
- &binary_key,
- &unbounded_range,
- &bounded_range,
- false,
- *(bool*)data
- );
- return &move;
-}
-
-void*
-units_move_up_input(rodeo_input_any_state_t *input_state, void *data)
-{
- static float move = 0;
- static bool binary_key = false;
- static float unbounded_range = 0.0f;
- static float bounded_range = 0.0f;
-
- bool reset = false;
- if(data == NULL)
- {
- data = &reset;
- }
- units_move_generic_input(
- input_state,
- &move,
- &binary_key,
- &unbounded_range,
- &bounded_range,
- false,
- *(bool*)data
- );
- return &move;
-}
-
-void*
-units_move_down_input(rodeo_input_any_state_t *input_state, void *data)
-{
- static float move = 0;
- static bool binary_key = false;
- static float unbounded_range = 0.0f;
- static float bounded_range = 0.0f;
-
- bool reset = false;
- if(data == NULL)
- {
- data = &reset;
- }
- units_move_generic_input(
- input_state,
- &move,
- &binary_key,
- &unbounded_range,
- &bounded_range,
- true,
- *(bool*)data
- );
- return &move;
-}
-
-#pragma clang diagnostic pop
-#pragma GCC diagnostic pop
-
void
summon_units(void)
{
@@ -428,51 +242,8 @@ main_loop(void)
int
main(void)
{
- rodeo_input_scene_t *scene = rodeo_input_scene_create();
-
- rodeo_input_command_t *summon_cmd = rodeo_input_command_create(rodeo_input_type_Binary);
-
- rodeo_input_command_t *up_mov_cmd = rodeo_input_command_create(
- rodeo_input_type_Binary | rodeo_input_type_UnboundedRange | rodeo_input_type_BoundedRange
- );
- rodeo_input_command_t *down_mov_cmd = rodeo_input_command_create(
- rodeo_input_type_Binary | rodeo_input_type_UnboundedRange | rodeo_input_type_BoundedRange
- );
- rodeo_input_command_t *left_mov_cmd = rodeo_input_command_create(
- rodeo_input_type_Binary | rodeo_input_type_UnboundedRange | rodeo_input_type_BoundedRange
- );
- rodeo_input_command_t *right_mov_cmd = rodeo_input_command_create(
- rodeo_input_type_Binary | rodeo_input_type_UnboundedRange | rodeo_input_type_BoundedRange
- );
-
- rodeo_input_command_register_binary_scancode(summon_cmd, rodeo_input_binary_scancode_Q);
- rodeo_input_command_register_unboundedRange_mouse(up_mov_cmd, rodeo_input_unboundedRange_mouse_Y);
- rodeo_input_command_register_binary_scancode(up_mov_cmd, rodeo_input_binary_scancode_W);
- rodeo_input_command_register_unboundedRange_mouse(down_mov_cmd, rodeo_input_unboundedRange_mouse_Y);
- rodeo_input_command_register_binary_scancode(down_mov_cmd, rodeo_input_binary_scancode_S);
- rodeo_input_command_register_unboundedRange_mouse(left_mov_cmd, rodeo_input_unboundedRange_mouse_X);
- rodeo_input_command_register_binary_scancode(left_mov_cmd, rodeo_input_binary_scancode_A);
- rodeo_input_command_register_unboundedRange_mouse(right_mov_cmd, rodeo_input_unboundedRange_mouse_X);
- rodeo_input_command_register_binary_scancode(right_mov_cmd, rodeo_input_binary_scancode_D);
- rodeo_input_command_register_boundedRange_controllerAxis(up_mov_cmd, rodeo_input_boundedRange_controllerAxisLeft_Y);
- rodeo_input_command_register_boundedRange_controllerAxis(down_mov_cmd, rodeo_input_boundedRange_controllerAxisLeft_Y);
- rodeo_input_command_register_boundedRange_controllerAxis(left_mov_cmd, rodeo_input_boundedRange_controllerAxisLeft_X);
- rodeo_input_command_register_boundedRange_controllerAxis(right_mov_cmd, rodeo_input_boundedRange_controllerAxisLeft_X);
-
- rodeo_input_command_register_callback(summon_cmd, *summon_units_input);
- rodeo_input_command_register_callback(up_mov_cmd, *units_move_up_input);
- rodeo_input_command_register_callback(down_mov_cmd, *units_move_down_input);
- rodeo_input_command_register_callback(left_mov_cmd, *units_move_left_input);
- rodeo_input_command_register_callback(right_mov_cmd, *units_move_right_input);
-
- rodeo_input_scene_register_command(scene, summon_cmd);
- rodeo_input_scene_register_command(scene, up_mov_cmd);
- rodeo_input_scene_register_command(scene, down_mov_cmd);
- rodeo_input_scene_register_command(scene, left_mov_cmd);
- rodeo_input_scene_register_command(scene, right_mov_cmd);
-
- rodeo_input_scene_activate(scene);
-
+ register_inputs();
+
rodeo_log(
rodeo_logLevel_info,
"Testing logging... It seems to work!"
@@ -506,9 +277,7 @@ main(void)
}
- rodeo_input_scene_unregister_command(scene, summon_cmd);
- rodeo_input_command_destroy(summon_cmd);
- rodeo_input_scene_destroy(scene);
-
+ unregister_inputs();
+
return 0;
}