Added trace for errors.
This commit is contained in:
parent
53194e3fc7
commit
b74b0e357b
|
|
@ -1 +1 @@
|
||||||
Subproject commit ea7f7453133cb3ce231db074986820cbba86c0a6
|
Subproject commit 35e2f241c18d248cc98f450d5c570b3b98dea6d4
|
||||||
|
|
@ -89,45 +89,34 @@ inline int animation_system_destroy(component_t *component)
|
||||||
{
|
{
|
||||||
animation_system_data_t *system_data = component->data;
|
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);
|
free(system_data);
|
||||||
|
|
||||||
return EXIT_SUCCESS;
|
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)
|
inline int animation_system_apply_changes(animation_system_data_t *system_data)
|
||||||
{
|
{
|
||||||
sprite_component_data_t *sprite_component_data = system_data->sprite_component_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;
|
sprite_component_data->src_rect = *(rect_t *)system_data->current_frame->data;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,11 @@ static inline int door_component_callback(va_list event_args, void *subscription
|
||||||
const entity_t *entity = subscription_data;
|
const entity_t *entity = subscription_data;
|
||||||
|
|
||||||
component_t *door_component = entity_get_component(entity, DOOR_COMPONENT);
|
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;
|
door_component_data_t *component_data = door_component->data;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -53,7 +53,7 @@ inline int hitbox_component_draw(const component_t *component)
|
||||||
const hitbox_component_data_t *component_data = component->data;
|
const hitbox_component_data_t *component_data = component->data;
|
||||||
|
|
||||||
if(component_data->activated)
|
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;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -29,16 +29,16 @@ inline int interact_component_init(component_t *component)
|
||||||
component_data->topic_id = 0;
|
component_data->topic_id = 0;
|
||||||
component_data->type = INTERACT_TOGGLE;
|
component_data->type = INTERACT_TOGGLE;
|
||||||
|
|
||||||
|
if(event_bus_new_topic(&game.event_bus, component_data->topic_id)) return_failure_int;
|
||||||
component_data->state = 0;
|
component_data->state = 0;
|
||||||
|
|
||||||
if(event_bus_new_topic(&game.event_bus, component_data->topic_id)) return EXIT_FAILURE;
|
|
||||||
|
|
||||||
component_data->activated = true;
|
component_data->activated = true;
|
||||||
|
|
||||||
return EXIT_SUCCESS;
|
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;
|
interact_component_data_t *component_data = component->data;
|
||||||
const transform_component_data_t *transform_component_data = component_data->transform_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;
|
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;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
@ -82,17 +82,18 @@ inline int interact_component_interact(interact_component_data_t *component_data
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
error_printf("Interaction type not valid : %d", component_data->type);
|
||||||
return EXIT_FAILURE;
|
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;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int interact_component_modify_topic(interact_component_data_t *component_data, size_t id)
|
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;
|
component_data->topic_id = id;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8,15 +8,17 @@
|
||||||
#include "memory_alloc.h"
|
#include "memory_alloc.h"
|
||||||
#include "errors.h"
|
#include "errors.h"
|
||||||
|
|
||||||
#include "hitbox_component.h"
|
|
||||||
|
|
||||||
// Args = entity_t *entity, size_t state
|
// Args = entity_t *entity, size_t state
|
||||||
static inline int lever_component_callback(va_list args, void *subscription_data)
|
static inline int lever_component_callback(va_list args, void *subscription_data)
|
||||||
{
|
{
|
||||||
const entity_t *entity = subscription_data;
|
const entity_t *entity = subscription_data;
|
||||||
|
|
||||||
component_t *lever_component = entity_get_component(entity, LEVER_COMPONENT);
|
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;
|
lever_component_data_t *component_data = lever_component->data;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -52,8 +52,8 @@ inline int player_system_update(component_t *component)
|
||||||
|
|
||||||
player_system_get_inputs(system_data);
|
player_system_get_inputs(system_data);
|
||||||
player_system_set_velocity(system_data);
|
player_system_set_velocity(system_data);
|
||||||
if(player_system_set_animation_and_speed(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 EXIT_FAILURE;
|
if(player_system_process_interaction(system_data)) return_failure_int;
|
||||||
|
|
||||||
return EXIT_SUCCESS;
|
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;
|
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->nb_frames = 8;
|
||||||
animation_system_data->current_frame_nb = 0;
|
animation_system_data->current_frame_nb = 0;
|
||||||
animation_system_data->frame_delay_ms = PLAYER_DEFAULT_RUN_ANIMATION_SPEED;
|
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
|
else
|
||||||
{
|
{
|
||||||
physics_system_data->speed = PLAYER_DEFAULT_WALK_SPEED;
|
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->nb_frames = 4;
|
||||||
animation_system_data->current_frame_nb = 0;
|
animation_system_data->current_frame_nb = 0;
|
||||||
animation_system_data->frame_delay_ms = PLAYER_DEFAULT_WALK_ANIMATION_SPEED;
|
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))
|
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->nb_frames = 4;
|
||||||
animation_system_data->current_frame_nb = 0;
|
animation_system_data->current_frame_nb = 0;
|
||||||
animation_system_data->frame_delay_ms = PLAYER_DEFAULT_IDLE_ANIMATION_SPEED;
|
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;
|
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(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;
|
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(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];
|
last_state = game.events.keys[KEY_INTERACT];
|
||||||
|
|
|
||||||
|
|
@ -44,7 +44,7 @@ inline int sprite_component_draw(const component_t *component)
|
||||||
{
|
{
|
||||||
const sprite_component_data_t *component_data = component->data;
|
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;
|
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)
|
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);
|
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;
|
component_data->texture = texture_asset->data;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,7 @@ inline int transform_component_draw(const component_t *component)
|
||||||
{
|
{
|
||||||
const transform_component_data_t *component_data = component->data;
|
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;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
31
src/game.c
31
src/game.c
|
|
@ -3,29 +3,28 @@
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include "display.h"
|
#include "display.h"
|
||||||
#include "asset_manager.h"
|
#include "asset_manager.h"
|
||||||
#include "ecs.h"
|
|
||||||
#include "event_bus.h"
|
#include "event_bus.h"
|
||||||
#include "inputs.h"
|
#include "ecs.h"
|
||||||
#include "components.h"
|
#include "components.h"
|
||||||
|
#include "inputs.h"
|
||||||
#include "errors.h"
|
#include "errors.h"
|
||||||
|
|
||||||
int game_init(void)
|
int game_init(void)
|
||||||
{
|
{
|
||||||
game.is_running = false;
|
game.is_running = false;
|
||||||
|
|
||||||
if(display_init()) return EXIT_FAILURE;
|
if(display_init()) return_failure_int;
|
||||||
if(asset_manager_init(&game.asset_manager)) return EXIT_FAILURE;
|
if(asset_manager_init(&game.asset_manager)) return_failure_int;
|
||||||
event_bus_init(&game.event_bus);
|
event_bus_init(&game.event_bus);
|
||||||
entity_manager_init(&game.entity_manager);
|
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_failure_int;
|
||||||
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_failure_int;
|
||||||
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_failure_int;
|
||||||
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_failure_int;
|
||||||
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_failure_int;
|
||||||
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_failure_int;
|
||||||
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_failure_int;
|
||||||
if(asset_manager_load_asset(&game.asset_manager, "tileset", ASSET_TEXTURE)) return EXIT_FAILURE;
|
|
||||||
|
|
||||||
/* ======== Player ======== */
|
/* ======== Player ======== */
|
||||||
entity_t *player_entity = entity_manager_new_entity(&game.entity_manager, 0);
|
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))
|
if(entity_manager_update(&game.entity_manager))
|
||||||
{
|
{
|
||||||
game.is_running = false;
|
game.is_running = false;
|
||||||
return EXIT_FAILURE;
|
return_failure_int;
|
||||||
}
|
}
|
||||||
|
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
|
|
@ -239,13 +238,13 @@ int game_render(void)
|
||||||
if(display_clear())
|
if(display_clear())
|
||||||
{
|
{
|
||||||
game.is_running = false;
|
game.is_running = false;
|
||||||
return EXIT_FAILURE;
|
return_failure_int;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(entity_manager_draw(&game.entity_manager))
|
if(entity_manager_draw(&game.entity_manager))
|
||||||
{
|
{
|
||||||
game.is_running = false;
|
game.is_running = false;
|
||||||
return EXIT_FAILURE;
|
return_failure_int;
|
||||||
}
|
}
|
||||||
|
|
||||||
display_update();
|
display_update();
|
||||||
|
|
@ -257,7 +256,7 @@ int game_exit(void)
|
||||||
{
|
{
|
||||||
entity_manager_exit(&game.entity_manager);
|
entity_manager_exit(&game.entity_manager);
|
||||||
event_bus_exit(&game.event_bus);
|
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();
|
display_exit();
|
||||||
|
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue