diff --git a/src/components/door_component.c b/src/components/door_component.c index 6631b85..19a30bf 100644 --- a/src/components/door_component.c +++ b/src/components/door_component.c @@ -8,25 +8,6 @@ #include "memory_alloc.h" #include "errors.h" -// Event arg = size_t state, Subscription arg = entity_t *entity -static inline int door_component_callback(va_list event_args, void *subscription_data) -{ - const entity_t *entity = subscription_data; - - component_t *door_component = entity_get_component(entity, DOOR_COMPONENT); - if(!door_component) - { - error_printf("Failed to get door component."); - return EXIT_FAILURE; - } - - door_component_data_t *component_data = door_component->data; - - component_data->state = (bool)va_arg(event_args, size_t); - - return EXIT_SUCCESS; -} - inline int door_component_init(component_t *component) { door_component_data_t *component_data = component->data; @@ -80,6 +61,25 @@ inline int door_component_destroy(component_t *component) return EXIT_SUCCESS; } +// Event arg : size_t state, Subscription arg : entity_t *entity +static inline int door_component_callback(va_list event_args, void *subscription_data) +{ + const entity_t *entity = subscription_data; + + component_t *door_component = entity_get_component(entity, DOOR_COMPONENT); + if(!door_component) + { + error_printf("Failed to get door component."); + return EXIT_FAILURE; + } + + door_component_data_t *component_data = door_component->data; + + component_data->state = (bool)va_arg(event_args, size_t); + + return EXIT_SUCCESS; +} + inline int door_component_subscribe(door_component_data_t *component_data, entity_t *entity) { if(event_bus_subscribe(component_data->topic_id, door_component_callback, entity)) return_failure_int; diff --git a/src/components/headers/animation_system.h b/src/components/headers/animation_system.h index 7b308e0..8df79a2 100644 --- a/src/components/headers/animation_system.h +++ b/src/components/headers/animation_system.h @@ -23,9 +23,7 @@ typedef struct animation_system_data_t { } animation_system_data_t; int animation_system_init(component_t *component); - int animation_system_update(component_t *component); - int animation_system_destroy(component_t *component); int animation_system_apply_changes(animation_system_data_t *system_data); diff --git a/src/components/headers/door_component.h b/src/components/headers/door_component.h index 2a7de31..2f93215 100644 --- a/src/components/headers/door_component.h +++ b/src/components/headers/door_component.h @@ -19,9 +19,7 @@ typedef struct door_component_data_t { } door_component_data_t; int door_component_init(component_t *component); - int door_component_update(component_t *component); - int door_component_destroy(component_t *component); int door_component_subscribe(door_component_data_t *component_data, entity_t *entity); diff --git a/src/components/headers/hitbox_component.h b/src/components/headers/hitbox_component.h index 666ac89..a664a40 100644 --- a/src/components/headers/hitbox_component.h +++ b/src/components/headers/hitbox_component.h @@ -18,13 +18,10 @@ typedef struct hitbox_component_data_t { } hitbox_component_data_t; int hitbox_component_init(component_t *component); - int hitbox_component_update(component_t *component); - #if DEBUG >= 2 int hitbox_component_draw(const component_t *component); #endif - int hitbox_component_destroy(component_t *component); #endif // HITBOX_COMPONENT_H \ No newline at end of file diff --git a/src/components/headers/interact_component.h b/src/components/headers/interact_component.h index a8fc674..de4a5a7 100644 --- a/src/components/headers/interact_component.h +++ b/src/components/headers/interact_component.h @@ -25,17 +25,13 @@ typedef struct interact_component_data_t { } interact_component_data_t; int interact_component_init(component_t *component); - int interact_component_update(component_t *component); - #if DEBUG >= 2 int interact_component_draw(const component_t *component); #endif // DEBUG >= 2 - int interact_component_destroy(component_t *component); int interact_component_interact(interact_component_data_t *component_data); - int interact_component_modify_topic_id(interact_component_data_t *component_data, size_t id); #endif // TRANSFORM_COMPONENT_H \ No newline at end of file diff --git a/src/components/headers/lever_component.h b/src/components/headers/lever_component.h index f6744d6..2c6bba2 100644 --- a/src/components/headers/lever_component.h +++ b/src/components/headers/lever_component.h @@ -17,9 +17,7 @@ typedef struct lever_component_data_t { } lever_component_data_t; int lever_component_init(component_t *component); - int lever_component_update(component_t *component); - int lever_component_destroy(component_t *component); int lever_component_subscribe(lever_component_data_t *component_data, entity_t *entity); diff --git a/src/components/headers/physics_system.h b/src/components/headers/physics_system.h index d360330..4d46d1c 100644 --- a/src/components/headers/physics_system.h +++ b/src/components/headers/physics_system.h @@ -17,9 +17,7 @@ typedef struct physics_system_data_t { } physics_system_data_t; int physics_system_init(component_t *component); - int physics_system_update(component_t *component); - int physics_system_destroy(component_t *component); #endif // PHYSICS_SYSTEM_H \ No newline at end of file diff --git a/src/components/headers/player_system.h b/src/components/headers/player_system.h index 9ac29fa..94abbde 100644 --- a/src/components/headers/player_system.h +++ b/src/components/headers/player_system.h @@ -33,9 +33,7 @@ typedef struct player_system_data_t { } player_system_data_t; int player_system_init(component_t *component); - int player_system_update(component_t *component); - int player_system_destroy(component_t *component); #endif // PLAYER_SYSTEM_H \ No newline at end of file diff --git a/src/components/headers/sprite_component.h b/src/components/headers/sprite_component.h index cbc73e1..bf514c1 100644 --- a/src/components/headers/sprite_component.h +++ b/src/components/headers/sprite_component.h @@ -16,11 +16,8 @@ typedef struct sprite_component_data_t { } sprite_component_data_t; int sprite_component_init(component_t *component); - int sprite_component_update(component_t *component); - int sprite_component_draw(const component_t *component); - int sprite_component_destroy(component_t *component); #endif // SPRITE_COMPONENT_H \ No newline at end of file diff --git a/src/components/headers/transform_component.h b/src/components/headers/transform_component.h index 180fdee..d231454 100644 --- a/src/components/headers/transform_component.h +++ b/src/components/headers/transform_component.h @@ -10,13 +10,10 @@ typedef struct transform_component_data_t { } transform_component_data_t; int transform_component_init(component_t *component); - int transform_component_update(component_t *component); - #if DEBUG >= 2 int transform_component_draw(const component_t *component); #endif // DEBUG >= 2 - int transform_component_destroy(component_t *component); #endif // TRANSFORM_COMPONENT_H \ No newline at end of file diff --git a/src/components/lever_component.c b/src/components/lever_component.c index 5a42b04..d72dc1c 100644 --- a/src/components/lever_component.c +++ b/src/components/lever_component.c @@ -8,25 +8,6 @@ #include "memory_alloc.h" #include "errors.h" -// Args = entity_t *entity, size_t state -static inline int lever_component_callback(va_list args, void *subscription_data) -{ - const entity_t *entity = subscription_data; - - component_t *lever_component = entity_get_component(entity, LEVER_COMPONENT); - if(!lever_component) - { - error_printf("Failed to get lever component."); - return EXIT_FAILURE; - } - - lever_component_data_t *component_data = lever_component->data; - - component_data->state = (bool)va_arg(args, size_t); - - return EXIT_SUCCESS; -} - inline int lever_component_init(component_t *component) { lever_component_data_t *component_data = component->data; @@ -69,6 +50,25 @@ inline int lever_component_destroy(component_t *component) return EXIT_SUCCESS; } +// Event arg : size_t state, Subscription arg : entity_t *entity +static inline int lever_component_callback(va_list args, void *subscription_data) +{ + const entity_t *entity = subscription_data; + + component_t *lever_component = entity_get_component(entity, LEVER_COMPONENT); + if(!lever_component) + { + error_printf("Failed to get lever component."); + return EXIT_FAILURE; + } + + lever_component_data_t *component_data = lever_component->data; + + component_data->state = (bool)va_arg(args, size_t); + + return EXIT_SUCCESS; +} + inline int lever_component_subscribe(lever_component_data_t *component_data, entity_t *entity) { if(event_bus_subscribe(component_data->topic_id, lever_component_callback, entity)) return_failure_int; diff --git a/src/components/physics_system.c b/src/components/physics_system.c index 348f4c9..d2f35ad 100644 --- a/src/components/physics_system.c +++ b/src/components/physics_system.c @@ -44,6 +44,35 @@ inline int physics_system_init(component_t *component) } // Args : physics_system_data_t *system_data, size_t entity_id +static int action_detect_solve_entities_collision(elem_t *elem, va_list args); + +int physics_system_update(component_t *component) +{ + physics_system_data_t *system_data = component->data; + transform_component_data_t *transform_component_data = system_data->transform_component_data; + hitbox_component_data_t *hitbox_component_data = system_data->hitbox_component_data; + + system_data->velocity.x = lerp(system_data->velocity.x, system_data->target_velocity.x, system_data->smoothing_factor); + system_data->velocity.y = lerp(system_data->velocity.y, system_data->target_velocity.y, system_data->smoothing_factor); + + if(hitbox_component_data->activated) + if(linked_list_for_each(&game.entity_manager.entities, action_detect_solve_entities_collision, system_data, component->entity->id)) return EXIT_FAILURE; + + transform_component_data->bounds.x += system_data->velocity.x * system_data->speed * (float)game.delta_time_ms / 1000.0f; + transform_component_data->bounds.y += system_data->velocity.y * system_data->speed * (float)game.delta_time_ms / 1000.0f; + + return EXIT_SUCCESS; +} + +inline int physics_system_destroy(component_t *component) +{ + physics_system_data_t *system_data = component->data; + + free(system_data); + + return EXIT_SUCCESS; +} + static inline int action_detect_solve_entities_collision(elem_t *elem, va_list args) { const entity_t *target_entity = elem->data; @@ -104,30 +133,3 @@ static inline int action_detect_solve_entities_collision(elem_t *elem, va_list a return EXIT_SUCCESS; } - -int physics_system_update(component_t *component) -{ - physics_system_data_t *system_data = component->data; - transform_component_data_t *transform_component_data = system_data->transform_component_data; - hitbox_component_data_t *hitbox_component_data = system_data->hitbox_component_data; - - system_data->velocity.x = lerp(system_data->velocity.x, system_data->target_velocity.x, system_data->smoothing_factor); - system_data->velocity.y = lerp(system_data->velocity.y, system_data->target_velocity.y, system_data->smoothing_factor); - - if(hitbox_component_data->activated) - if(linked_list_for_each(&game.entity_manager.entities, action_detect_solve_entities_collision, system_data, component->entity->id)) return EXIT_FAILURE; - - transform_component_data->bounds.x += system_data->velocity.x * system_data->speed * (float)game.delta_time_ms / 1000.0f; - transform_component_data->bounds.y += system_data->velocity.y * system_data->speed * (float)game.delta_time_ms / 1000.0f; - - return EXIT_SUCCESS; -} - -inline int physics_system_destroy(component_t *component) -{ - physics_system_data_t *system_data = component->data; - - free(system_data); - - return EXIT_SUCCESS; -} diff --git a/src/components/player_system.c b/src/components/player_system.c index 5c09c49..d5e427a 100644 --- a/src/components/player_system.c +++ b/src/components/player_system.c @@ -58,6 +58,15 @@ inline int player_system_update(component_t *component) return EXIT_SUCCESS; } +inline int player_system_destroy(component_t *component) +{ + player_system_data_t *component_data = component->data; + + free(component_data); + + return EXIT_SUCCESS; +} + static inline void player_system_get_inputs(player_system_data_t *system_data) { system_data->last_state = system_data->state; @@ -204,12 +213,3 @@ static inline int player_system_process_interaction(player_system_data_t *system return EXIT_SUCCESS; } - -inline int player_system_destroy(component_t *component) -{ - player_system_data_t *component_data = component->data; - - free(component_data); - - return EXIT_SUCCESS; -}