Added trace for errors.

This commit is contained in:
Ulysse Cura 2026-08-13 19:02:08 +02:00
parent 53194e3fc7
commit b74b0e357b
10 changed files with 64 additions and 69 deletions

@ -1 +1 @@
Subproject commit ea7f7453133cb3ce231db074986820cbba86c0a6
Subproject commit 35e2f241c18d248cc98f450d5c570b3b98dea6d4

View File

@ -89,45 +89,34 @@ inline int animation_system_destroy(component_t *component)
{
animation_system_data_t *system_data = component->data;
if(linked_list_exit(&system_data->frames)) return EXIT_FAILURE;
if(linked_list_exit(&system_data->frames)) return_failure_int;
free(system_data);
return EXIT_SUCCESS;
}
int animation_system_create_frames_clips(animation_system_data_t *system_data)
{
sprite_component_data_t *sprite_component_data = system_data->sprite_component_data;
if(linked_list_clear(&system_data->frames)) return EXIT_FAILURE;
if(linked_list_reserve(&system_data->frames, system_data->nb_frames)) return EXIT_FAILURE;
for(size_t current_frame_nb = 0; current_frame_nb < system_data->nb_frames; current_frame_nb++)
{
elem_t *frame = create_elem(&system_data->frames);
if(!frame) return EXIT_FAILURE;
((rect_t *)frame->data)->x = sprite_component_data->src_rect.w * current_frame_nb;
((rect_t *)frame->data)->y = 0;
((rect_t *)frame->data)->w = sprite_component_data->src_rect.w;
((rect_t *)frame->data)->h = sprite_component_data->src_rect.h;
if(linked_list_push_back(&system_data->frames, frame)) return EXIT_FAILURE;
}
system_data->current_frame = linked_list_get(&system_data->frames, system_data->current_frame_nb);
if(!system_data->current_frame) return EXIT_FAILURE;
return EXIT_SUCCESS;
}
inline int animation_system_apply_changes(animation_system_data_t *system_data)
{
sprite_component_data_t *sprite_component_data = system_data->sprite_component_data;
if(animation_system_create_frames_clips(system_data)) return EXIT_FAILURE;
if(linked_list_clear(&system_data->frames)) return_failure_int;
for(size_t current_frame_nb = 0; current_frame_nb < system_data->nb_frames; current_frame_nb++)
{
elem_t *frame = create_elem(&system_data->frames);
if(!frame) return_failure_int;
((rect_t *)frame->data)->x = sprite_component_data->src_rect.w * current_frame_nb;
((rect_t *)frame->data)->y = 0;
((rect_t *)frame->data)->w = sprite_component_data->src_rect.w;
((rect_t *)frame->data)->h = sprite_component_data->src_rect.h;
linked_list_push_back(&system_data->frames, frame);
}
system_data->current_frame = linked_list_get(&system_data->frames, system_data->current_frame_nb);
if(!system_data->current_frame) return_failure_int;
sprite_component_data->src_rect = *(rect_t *)system_data->current_frame->data;

View File

@ -14,7 +14,11 @@ static inline int door_component_callback(va_list event_args, void *subscription
const entity_t *entity = subscription_data;
component_t *door_component = entity_get_component(entity, DOOR_COMPONENT);
if(!door_component) return EXIT_FAILURE;
if(!door_component)
{
error_printf("Failed to get door component.");
return EXIT_FAILURE;
}
door_component_data_t *component_data = door_component->data;

View File

@ -53,7 +53,7 @@ inline int hitbox_component_draw(const component_t *component)
const hitbox_component_data_t *component_data = component->data;
if(component_data->activated)
if(display_draw_frect(&component_data->bounds, C_RED, 128)) return EXIT_FAILURE;
if(display_draw_frect(&component_data->bounds, C_RED, 128)) return_failure_int;
return EXIT_SUCCESS;
}

View File

@ -29,16 +29,16 @@ inline int interact_component_init(component_t *component)
component_data->topic_id = 0;
component_data->type = INTERACT_TOGGLE;
if(event_bus_new_topic(&game.event_bus, component_data->topic_id)) return_failure_int;
component_data->state = 0;
if(event_bus_new_topic(&game.event_bus, component_data->topic_id)) return EXIT_FAILURE;
component_data->activated = true;
return EXIT_SUCCESS;
}
inline int interact_component_update(component_t *component __attribute__((unused)))
inline int interact_component_update(component_t *component)
{
interact_component_data_t *component_data = component->data;
const transform_component_data_t *transform_component_data = component_data->transform_component_data;
@ -58,7 +58,7 @@ inline int interact_component_draw(const component_t *component)
{
const interact_component_data_t *component_data = component->data;
if(display_draw_frect(&component_data->bounds, C_GREEN, 128)) return EXIT_FAILURE;
if(display_draw_frect(&component_data->bounds, C_GREEN, 128)) return_failure_int;
return EXIT_SUCCESS;
}
@ -82,17 +82,18 @@ inline int interact_component_interact(interact_component_data_t *component_data
break;
default:
error_printf("Interaction type not valid : %d", component_data->type);
return EXIT_FAILURE;
}
if(event_bus_publish(&game.event_bus, component_data->topic_id, component_data->state)) return EXIT_FAILURE;
if(event_bus_publish(&game.event_bus, component_data->topic_id, component_data->state)) return_failure_int;
return EXIT_SUCCESS;
}
inline int interact_component_modify_topic(interact_component_data_t *component_data, size_t id)
{
if(event_bus_change_topic_id(&game.event_bus, component_data->topic_id, id)) return EXIT_FAILURE;
if(event_bus_change_topic_id(&game.event_bus, component_data->topic_id, id)) return_failure_int;
component_data->topic_id = id;

View File

@ -8,15 +8,17 @@
#include "memory_alloc.h"
#include "errors.h"
#include "hitbox_component.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) return EXIT_FAILURE;
if(!lever_component)
{
error_printf("Failed to get lever component.");
return EXIT_FAILURE;
}
lever_component_data_t *component_data = lever_component->data;

View File

@ -52,8 +52,8 @@ inline int player_system_update(component_t *component)
player_system_get_inputs(system_data);
player_system_set_velocity(system_data);
if(player_system_set_animation_and_speed(system_data)) return EXIT_FAILURE;
if(player_system_process_interaction(system_data)) return EXIT_FAILURE;
if(player_system_set_animation_and_speed(system_data)) return_failure_int;
if(player_system_process_interaction(system_data)) return_failure_int;
return EXIT_SUCCESS;
}
@ -123,33 +123,33 @@ static inline int player_system_set_animation_and_speed(player_system_data_t *sy
{
physics_system_data->speed = PLAYER_DEFAULT_RUN_SPEED;
if(sprite_component_set_texture(sprite_component_data, "player_run_sheet")) return EXIT_FAILURE;
if(sprite_component_set_texture(sprite_component_data, "player_run_sheet")) return_failure_int;
animation_system_data->nb_frames = 8;
animation_system_data->current_frame_nb = 0;
animation_system_data->frame_delay_ms = PLAYER_DEFAULT_RUN_ANIMATION_SPEED;
if(animation_system_apply_changes(animation_system_data)) return EXIT_FAILURE;
if(animation_system_apply_changes(animation_system_data)) return_failure_int;
}
else
{
physics_system_data->speed = PLAYER_DEFAULT_WALK_SPEED;
if(sprite_component_set_texture(sprite_component_data, "player_walk_sheet")) return EXIT_FAILURE;
if(sprite_component_set_texture(sprite_component_data, "player_walk_sheet")) return_failure_int;
animation_system_data->nb_frames = 4;
animation_system_data->current_frame_nb = 0;
animation_system_data->frame_delay_ms = PLAYER_DEFAULT_WALK_ANIMATION_SPEED;
if(animation_system_apply_changes(animation_system_data)) return EXIT_FAILURE;
if(animation_system_apply_changes(animation_system_data)) return_failure_int;
}
}
else if(!(system_data->state & PLAYER_MOVING) && (system_data->last_state & PLAYER_MOVING))
{
if(sprite_component_set_texture(sprite_component_data, "player_idle_sheet")) return EXIT_FAILURE;
if(sprite_component_set_texture(sprite_component_data, "player_idle_sheet")) return_failure_int;
animation_system_data->nb_frames = 4;
animation_system_data->current_frame_nb = 0;
animation_system_data->frame_delay_ms = PLAYER_DEFAULT_IDLE_ANIMATION_SPEED;
if(animation_system_apply_changes(animation_system_data)) return EXIT_FAILURE;
if(animation_system_apply_changes(animation_system_data)) return_failure_int;
}
return EXIT_SUCCESS;
@ -176,7 +176,7 @@ static inline int action_detect_activate_interact(elem_t *elem, va_list args)
if(fhas_intersection(hitbox_bounds, target_interact_bounds))
{
if(interact_component_interact(target_interact_component_data)) return EXIT_FAILURE;
if(interact_component_interact(target_interact_component_data)) return_failure_int;
}
return EXIT_SUCCESS;
@ -188,7 +188,7 @@ static inline int player_system_process_interaction(player_system_data_t *system
if(game.events.keys[KEY_INTERACT] && !last_state)
{
if(linked_list_for_each(&game.entity_manager.entities, action_detect_activate_interact, system_data)) return EXIT_FAILURE;
if(linked_list_for_each(&game.entity_manager.entities, action_detect_activate_interact, system_data)) return_failure_int;
}
last_state = game.events.keys[KEY_INTERACT];

View File

@ -44,7 +44,7 @@ inline int sprite_component_draw(const component_t *component)
{
const sprite_component_data_t *component_data = component->data;
if(display_draw_texture(component_data->texture, &component_data->src_rect, &component_data->dst_rect, component_data->flip)) return EXIT_FAILURE;
if(display_draw_texture(component_data->texture, &component_data->src_rect, &component_data->dst_rect, component_data->flip)) return_failure_int;
return EXIT_SUCCESS;
}
@ -61,7 +61,7 @@ inline int sprite_component_destroy(component_t *component)
inline int sprite_component_set_texture(sprite_component_data_t *component_data, const char *texture_name)
{
asset_t *texture_asset = asset_manager_get(&game.asset_manager, texture_name);
if(!texture_asset) return EXIT_FAILURE;
if(!texture_asset) return_failure_int;
component_data->texture = texture_asset->data;

View File

@ -30,7 +30,7 @@ inline int transform_component_draw(const component_t *component)
{
const transform_component_data_t *component_data = component->data;
if(display_draw_frect(&component_data->bounds, C_BLUE, 128)) return EXIT_FAILURE;
if(display_draw_frect(&component_data->bounds, C_BLUE, 128)) return_failure_int;
return EXIT_SUCCESS;
}

View File

@ -3,29 +3,28 @@
#include <stdlib.h>
#include "display.h"
#include "asset_manager.h"
#include "ecs.h"
#include "event_bus.h"
#include "inputs.h"
#include "ecs.h"
#include "components.h"
#include "inputs.h"
#include "errors.h"
int game_init(void)
{
game.is_running = false;
if(display_init()) return EXIT_FAILURE;
if(asset_manager_init(&game.asset_manager)) return EXIT_FAILURE;
if(display_init()) return_failure_int;
if(asset_manager_init(&game.asset_manager)) return_failure_int;
event_bus_init(&game.event_bus);
entity_manager_init(&game.entity_manager);
if(asset_manager_load_asset(&game.asset_manager, "dummy_sheet", ASSET_TEXTURE)) return EXIT_FAILURE;
if(asset_manager_load_asset(&game.asset_manager, "player_idle_sheet", ASSET_TEXTURE)) return EXIT_FAILURE;
if(asset_manager_load_asset(&game.asset_manager, "player_walk_sheet", ASSET_TEXTURE)) return EXIT_FAILURE;
if(asset_manager_load_asset(&game.asset_manager, "player_run_sheet", ASSET_TEXTURE)) return EXIT_FAILURE;
if(asset_manager_load_asset(&game.asset_manager, "lever_sheet", ASSET_TEXTURE)) return EXIT_FAILURE;
if(asset_manager_load_asset(&game.asset_manager, "barred_door_sheet", ASSET_TEXTURE)) return EXIT_FAILURE;
if(asset_manager_load_asset(&game.asset_manager, "wooden_door_sheet", ASSET_TEXTURE)) return EXIT_FAILURE;
if(asset_manager_load_asset(&game.asset_manager, "tileset", ASSET_TEXTURE)) return EXIT_FAILURE;
if(asset_manager_load_asset(&game.asset_manager, "player_idle_sheet", ASSET_TEXTURE)) return_failure_int;
if(asset_manager_load_asset(&game.asset_manager, "player_walk_sheet", ASSET_TEXTURE)) return_failure_int;
if(asset_manager_load_asset(&game.asset_manager, "player_run_sheet", ASSET_TEXTURE)) return_failure_int;
if(asset_manager_load_asset(&game.asset_manager, "lever_sheet", ASSET_TEXTURE)) return_failure_int;
if(asset_manager_load_asset(&game.asset_manager, "barred_door_sheet", ASSET_TEXTURE)) return_failure_int;
if(asset_manager_load_asset(&game.asset_manager, "wooden_door_sheet", ASSET_TEXTURE)) return_failure_int;
if(asset_manager_load_asset(&game.asset_manager, "tileset", ASSET_TEXTURE)) return_failure_int;
/* ======== Player ======== */
entity_t *player_entity = entity_manager_new_entity(&game.entity_manager, 0);
@ -228,7 +227,7 @@ int game_update(void)
if(entity_manager_update(&game.entity_manager))
{
game.is_running = false;
return EXIT_FAILURE;
return_failure_int;
}
return EXIT_SUCCESS;
@ -239,13 +238,13 @@ int game_render(void)
if(display_clear())
{
game.is_running = false;
return EXIT_FAILURE;
return_failure_int;
}
if(entity_manager_draw(&game.entity_manager))
{
game.is_running = false;
return EXIT_FAILURE;
return_failure_int;
}
display_update();
@ -257,7 +256,7 @@ int game_exit(void)
{
entity_manager_exit(&game.entity_manager);
event_bus_exit(&game.event_bus);
if(asset_manager_exit(&game.asset_manager)) return EXIT_FAILURE;
if(asset_manager_exit(&game.asset_manager)) return_failure_int;
display_exit();
return EXIT_SUCCESS;