diff options
| -rw-r--r-- | CMakeLists.txt | 6 | ||||
| m--------- | external/RodeoKit | 0 | ||||
| -rw-r--r-- | src/input.c | 258 | ||||
| -rw-r--r-- | src/input.h | 58 | ||||
| -rw-r--r-- | src/main.c | 259 |
5 files changed, 335 insertions, 246 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 0925752..15c5f56 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,13 +6,17 @@ project(demo add_executable(${PROJECT_NAME} "src/main.c" + "src/input.c" ) set_property(TARGET ${PROJECT_NAME} PROPERTY C_STANDARD 11) add_subdirectory(external/RodeoKit) add_dependencies(${PROJECT_NAME} RodeoKit) -target_include_directories(${PROJECT_NAME} PUBLIC external/RodeoKit/include) +target_include_directories(${PROJECT_NAME} PUBLIC + external/RodeoKit/include + src + ) target_link_libraries(${PROJECT_NAME} PUBLIC RodeoKit) if(DEFINED EMSCRIPTEN) diff --git a/external/RodeoKit b/external/RodeoKit -Subproject 86a8351bf8318dc69ba89ac11d6f0b8baf70f7c +Subproject e5ad114afa00ed98908c3b3bacadf30c742cabd 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); @@ -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; } |
