summaryrefslogtreecommitdiffhomepage
path: root/src/main.c
diff options
context:
space:
mode:
authorrealtradam <[email protected]>2023-04-24 19:08:50 -0400
committerrealtradam <[email protected]>2023-04-24 19:08:50 -0400
commita5874f06847e5b440dd6f3022487b7d842b937ad (patch)
tree4c32e094b8677301e613b369cce1989bd930a5c5 /src/main.c
parent222af03421f767de5ab1f44764bc1c4de6274898 (diff)
downloadTOJam2023-a5874f06847e5b440dd6f3022487b7d842b937ad.tar.gz
TOJam2023-a5874f06847e5b440dd6f3022487b7d842b937ad.zip
rodeo bump
Diffstat (limited to 'src/main.c')
-rw-r--r--src/main.c158
1 files changed, 94 insertions, 64 deletions
diff --git a/src/main.c b/src/main.c
index 848bdb4..5c70f48 100644
--- a/src/main.c
+++ b/src/main.c
@@ -65,16 +65,10 @@ const rodeo_color_RGBAFloat_t pink_clear =
.alpha = 0.5f
};
-typedef
-struct
-{
- bool w;
- bool a;
- bool s;
- bool d;
-}
-key_state_t;
-key_state_t key_state = {0};
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wunused-parameter"
typedef
struct
@@ -84,92 +78,124 @@ struct
}
summon_t;
-bool should_summon_units = false;
summon_t summon_position = { .x = 100, .y = 100 };
-summon_t summon_movement = {0};
-void
-summon_units_input(rodeo_input_any_state_t key_state)
+void*
+summon_units_input(rodeo_input_any_state_t *input_state, void *data)
{
- should_summon_units = key_state.data.binary_state;
-}
+ static bool should_summon_units = false;
-void
-units_move_right_input(rodeo_input_any_state_t input_state)
-{
- if(input_state.input_type == rodeo_input_type_Binary)
+ if(input_state != NULL)
{
- summon_movement.x += (int32_t)input_state.data.binary_state * 15;
- }
- else if(input_state.input_type == rodeo_input_type_UnboundedRange)
- {
- if(input_state.data.unbounded_range_state > 0)
- {
- summon_movement.x += (int32_t)input_state.data.unbounded_range_state;
- }
+ should_summon_units = input_state->data.binary_state;
}
+ return &should_summon_units;
}
void
-units_move_left_input(rodeo_input_any_state_t input_state)
+units_move_generic_input(
+ rodeo_input_any_state_t *input_state,
+ int32_t *move,
+ bool *binary_key,
+ bool should_be_positive,
+ bool reset
+)
{
- if(input_state.input_type == rodeo_input_type_Binary)
+ if(reset)
{
- summon_movement.x -= (int32_t)input_state.data.binary_state * 15;
+ *move = 0;
+ *move += (should_be_positive ? 1 : -1) * (int32_t)*binary_key * 5;
}
- else if(input_state.input_type == rodeo_input_type_UnboundedRange)
+ if(input_state != NULL)
{
- if(input_state.data.unbounded_range_state < 0)
+ if(input_state->type == rodeo_input_type_Binary)
+ {
+ *binary_key = input_state->data.binary_state;
+ *move += (should_be_positive ? 1 : -1) * (int32_t)*binary_key * 5;
+ }
+ else if(input_state->type == rodeo_input_type_UnboundedRange)
{
- summon_movement.x += (int32_t)input_state.data.unbounded_range_state;
+ if((input_state->data.unbounded_range_state < 0) && !should_be_positive)
+ {
+ *move += (int32_t)(input_state->data.unbounded_range_state);
+ }
+ else if((input_state->data.unbounded_range_state > 0) && should_be_positive)
+ {
+ *move += (int32_t)(input_state->data.unbounded_range_state);
+ }
}
}
}
-void
-units_move_up_input(rodeo_input_any_state_t input_state)
+void*
+units_move_right_input(rodeo_input_any_state_t *input_state, void *data)
{
- if(input_state.input_type == rodeo_input_type_Binary)
+ static int32_t move = 0;
+ static bool binary_key = false;
+
+ bool dont_reset = false;
+ if(data == NULL)
{
- summon_movement.y -= (int32_t)input_state.data.binary_state * 15;
+ data = &dont_reset;
}
- else if(input_state.input_type == rodeo_input_type_UnboundedRange)
+ units_move_generic_input(input_state, &move, &binary_key, true, *(bool*)data);
+ return &move;
+}
+
+void*
+units_move_left_input(rodeo_input_any_state_t *input_state, void *data)
+{
+ static int32_t move = 0;
+ static bool binary_key = false;
+
+ bool reset = false;
+ if(data == NULL)
{
- if(input_state.data.unbounded_range_state < 0)
- {
- summon_movement.y += (int32_t)input_state.data.unbounded_range_state;
- }
+ data = &reset;
}
-}
+ units_move_generic_input(input_state, &move, &binary_key, false, *(bool*)data);
+ return &move;
+}
-void
-units_move_down_input(rodeo_input_any_state_t input_state)
+void*
+units_move_up_input(rodeo_input_any_state_t *input_state, void *data)
{
- if(input_state.input_type == rodeo_input_type_Binary)
+ static int32_t move = 0;
+ static bool binary_key = false;
+
+ bool reset = false;
+ if(data == NULL)
{
- summon_movement.y += (int32_t)input_state.data.binary_state * 15;
+ data = &reset;
}
- else if(input_state.input_type == rodeo_input_type_UnboundedRange)
+ units_move_generic_input(input_state, &move, &binary_key, false, *(bool*)data);
+ return &move;
+}
+
+void*
+units_move_down_input(rodeo_input_any_state_t *input_state, void *data)
+{
+ static int32_t move = 0;
+ static bool binary_key = false;
+
+ bool reset = false;
+ if(data == NULL)
{
- if(input_state.data.unbounded_range_state > 0)
- {
- summon_movement.y += (int32_t)input_state.data.unbounded_range_state;
- }
+ data = &reset;
}
-}
+ units_move_generic_input(input_state, &move, &binary_key, true, *(bool*)data);
+ return &move;
+}
-void
-units_reset_input(void)
-{
- summon_movement = (summon_t){0};
-}
+#pragma clang diagnostic pop
+#pragma GCC diagnostic pop
void
summon_units(void)
{
for(uint8_t i = 0; i < 10; ++i)
{
- if((num_of_units < UINT16_MAX) && should_summon_units)//(rodeo_frame_perSecond_get() > 40))
+ if((num_of_units < UINT16_MAX))//(rodeo_frame_perSecond_get() > 40))
{
num_of_units += 1;
units[num_of_units - 1][0] = (rodeo_vector2_t){ {
@@ -206,12 +232,16 @@ main_loop(void)
time_var = rodeo_frame_perSecond_get();
}
- units_reset_input();
+ bool reset_movement = true;
+ units_move_up_input(NULL, &reset_movement);
+ units_move_down_input(NULL, &reset_movement);
+ units_move_left_input(NULL, &reset_movement);
+ units_move_right_input(NULL, &reset_movement);
mrodeo_frame_do()
{
- summon_position.x += summon_movement.x;
- summon_position.y += summon_movement.y;
- if(should_summon_units)
+ summon_position.x += *(int32_t*)units_move_right_input(NULL, NULL) + *(int32_t*)units_move_left_input(NULL, NULL);
+ summon_position.y += *(int32_t*)units_move_down_input(NULL, NULL) + *(int32_t*)units_move_up_input(NULL, NULL);
+ if(*(bool*)summon_units_input(NULL, NULL))
{
summon_units();
}