Linked lists error handling and consequences 💀
This commit is contained in:
parent
d3f3ec21e0
commit
cf366ee21a
|
|
@ -1 +1 @@
|
||||||
Subproject commit 8b37fc78fa36748444054cac3c862e94de3565e9
|
Subproject commit 457de07ecb02822d5e309c188bdcdba1ce2cdc59
|
||||||
|
|
@ -5,12 +5,12 @@
|
||||||
#include "errors.h"
|
#include "errors.h"
|
||||||
|
|
||||||
// Args : size_t nb_frames, size_t actual_frame, float frame_delay_ms, bool play, bool loop, bool reverse
|
// Args : size_t nb_frames, size_t actual_frame, float frame_delay_ms, bool play, bool loop, bool reverse
|
||||||
void animation_system_init(component_t *component, va_list args)
|
int animation_system_init(component_t *component, va_list args)
|
||||||
{
|
{
|
||||||
animation_system_data_t *system_data = component->component_data;
|
animation_system_data_t *system_data = component->component_data;
|
||||||
|
|
||||||
system_data->sprite_component_data = get_component(component->entity, SPRITE_COMPONENT)->component_data;
|
system_data->sprite_component_data = get_component(component->entity, SPRITE_COMPONENT)->component_data;
|
||||||
if(!system_data->sprite_component_data) return;
|
if(!system_data->sprite_component_data) return EXIT_FAILURE;
|
||||||
|
|
||||||
system_data->nb_frames = va_arg(args, size_t);
|
system_data->nb_frames = va_arg(args, size_t);
|
||||||
system_data->actual_frame_nb= va_arg(args, size_t);
|
system_data->actual_frame_nb= va_arg(args, size_t);
|
||||||
|
|
@ -23,10 +23,10 @@ void animation_system_init(component_t *component, va_list args)
|
||||||
|
|
||||||
linked_list_init(&system_data->frames, sizeof(rect_t), NULL);
|
linked_list_init(&system_data->frames, sizeof(rect_t), NULL);
|
||||||
|
|
||||||
animation_system_create_frames_clips(system_data);
|
return animation_system_create_frames_clips(system_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
void animation_system_update(component_t *component)
|
int animation_system_update(component_t *component)
|
||||||
{
|
{
|
||||||
animation_system_data_t *system_data = component->component_data;
|
animation_system_data_t *system_data = component->component_data;
|
||||||
|
|
||||||
|
|
@ -76,6 +76,8 @@ void animation_system_update(component_t *component)
|
||||||
|
|
||||||
system_data->sprite_component_data->src_rect = *(rect_t *)system_data->actual_frame->data;
|
system_data->sprite_component_data->src_rect = *(rect_t *)system_data->actual_frame->data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void animation_system_destroy(component_t *component)
|
inline void animation_system_destroy(component_t *component)
|
||||||
|
|
@ -86,7 +88,7 @@ inline void animation_system_destroy(component_t *component)
|
||||||
free(system_data);
|
free(system_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
void animation_system_create_frames_clips(animation_system_data_t *system_data)
|
int animation_system_create_frames_clips(animation_system_data_t *system_data)
|
||||||
{
|
{
|
||||||
linked_list_clear(&system_data->frames);
|
linked_list_clear(&system_data->frames);
|
||||||
|
|
||||||
|
|
@ -101,18 +103,23 @@ void animation_system_create_frames_clips(animation_system_data_t *system_data)
|
||||||
((rect_t *)frame->data)->w = sprite_srcR->w;
|
((rect_t *)frame->data)->w = sprite_srcR->w;
|
||||||
((rect_t *)frame->data)->h = sprite_srcR->h;
|
((rect_t *)frame->data)->h = sprite_srcR->h;
|
||||||
|
|
||||||
linked_list_push_back_elem(&system_data->frames, frame);
|
if(linked_list_push_back_elem(&system_data->frames, frame)) return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
system_data->actual_frame = linked_list_get_elem(&system_data->frames, system_data->actual_frame_nb);
|
system_data->actual_frame = linked_list_get_elem(&system_data->frames, system_data->actual_frame_nb);
|
||||||
|
if(!system_data->actual_frame) return EXIT_FAILURE;
|
||||||
|
|
||||||
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void animation_system_change_animation(animation_system_data_t *system_data, const char *name, size_t nb_frames)
|
inline int animation_system_change_animation(animation_system_data_t *system_data, const char *name, size_t nb_frames)
|
||||||
{
|
{
|
||||||
system_data->sprite_component_data->texture = asset_manager_get_texture(&game.asset_manager, name);
|
system_data->sprite_component_data->texture = asset_manager_get_texture(&game.asset_manager, name);
|
||||||
|
|
||||||
system_data->nb_frames = nb_frames;
|
system_data->nb_frames = nb_frames;
|
||||||
animation_system_create_frames_clips(system_data);
|
if(animation_system_create_frames_clips(system_data)) return EXIT_FAILURE;
|
||||||
|
|
||||||
system_data->sprite_component_data->src_rect = *(rect_t *)system_data->actual_frame->data;
|
system_data->sprite_component_data->src_rect = *(rect_t *)system_data->actual_frame->data;
|
||||||
|
|
||||||
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -21,14 +21,14 @@ typedef struct animation_system_data_t {
|
||||||
bool reverse :1;
|
bool reverse :1;
|
||||||
} animation_system_data_t;
|
} animation_system_data_t;
|
||||||
|
|
||||||
void animation_system_init(component_t *component, va_list args);
|
int animation_system_init(component_t *component, va_list args);
|
||||||
|
|
||||||
void animation_system_update(component_t *component);
|
int animation_system_update(component_t *component);
|
||||||
|
|
||||||
void animation_system_destroy(component_t *component);
|
void animation_system_destroy(component_t *component);
|
||||||
|
|
||||||
void animation_system_create_frames_clips(animation_system_data_t *system_data);
|
int animation_system_create_frames_clips(animation_system_data_t *system_data);
|
||||||
|
|
||||||
void animation_system_change_animation(animation_system_data_t *system_data, const char *name, size_t nb_frames);
|
int animation_system_change_animation(animation_system_data_t *system_data, const char *name, size_t nb_frames);
|
||||||
|
|
||||||
#endif // SPRITE_COMPONENT_H
|
#endif // SPRITE_COMPONENT_H
|
||||||
|
|
@ -32,9 +32,9 @@ typedef struct player_system_data_t {
|
||||||
player_state_t last_state;
|
player_state_t last_state;
|
||||||
} player_system_data_t;
|
} player_system_data_t;
|
||||||
|
|
||||||
void player_system_init(component_t *, va_list);
|
int player_system_init(component_t *, va_list);
|
||||||
|
|
||||||
void player_system_update(component_t *);
|
int player_system_update(component_t *);
|
||||||
|
|
||||||
void player_system_destroy(component_t *);
|
void player_system_destroy(component_t *);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -16,9 +16,9 @@ typedef struct sprite_component_data_t {
|
||||||
bool flip;
|
bool flip;
|
||||||
} sprite_component_data_t;
|
} sprite_component_data_t;
|
||||||
|
|
||||||
void sprite_component_init(component_t *, va_list);
|
int sprite_component_init(component_t *, va_list);
|
||||||
|
|
||||||
void sprite_component_update(component_t *);
|
int sprite_component_update(component_t *);
|
||||||
|
|
||||||
int sprite_component_draw(component_t *);
|
int sprite_component_draw(component_t *);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -10,9 +10,9 @@ typedef struct transform_component_data_t {
|
||||||
float speed;
|
float speed;
|
||||||
} transform_component_data_t;
|
} transform_component_data_t;
|
||||||
|
|
||||||
void transform_component_init(component_t *, va_list);
|
int transform_component_init(component_t *, va_list);
|
||||||
|
|
||||||
void transform_component_update(component_t *);
|
int transform_component_update(component_t *);
|
||||||
|
|
||||||
void transform_component_destroy(component_t *);
|
void transform_component_destroy(component_t *);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@
|
||||||
#include "transform_component.h"
|
#include "transform_component.h"
|
||||||
|
|
||||||
// No args
|
// No args
|
||||||
void player_system_init(component_t *component, va_list args __attribute__((unused)))
|
int player_system_init(component_t *component, va_list args __attribute__((unused)))
|
||||||
{
|
{
|
||||||
player_system_data_t *system_data = component->component_data;
|
player_system_data_t *system_data = component->component_data;
|
||||||
|
|
||||||
|
|
@ -16,6 +16,8 @@ void player_system_init(component_t *component, va_list args __attribute__((unus
|
||||||
system_data->transform_component_data = system_data->sprite_component_data->transform_component_data;
|
system_data->transform_component_data = system_data->sprite_component_data->transform_component_data;
|
||||||
|
|
||||||
system_data->state = PLAYER_IDLE;
|
system_data->state = PLAYER_IDLE;
|
||||||
|
|
||||||
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Only for this file
|
// Only for this file
|
||||||
|
|
@ -70,7 +72,7 @@ static inline void player_system_set_velocity(player_system_data_t *system_data)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Only for this file
|
// Only for this file
|
||||||
static inline void player_system_set_animation_and_speed(player_system_data_t *system_data)
|
static inline int player_system_set_animation_and_speed(player_system_data_t *system_data)
|
||||||
{
|
{
|
||||||
animation_system_data_t *animation_system_data = system_data->animation_system_data;
|
animation_system_data_t *animation_system_data = system_data->animation_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;
|
||||||
|
|
@ -87,14 +89,14 @@ static inline void player_system_set_animation_and_speed(player_system_data_t *s
|
||||||
transform_component_data->speed = PLAYER_DEFAULT_RUN_SPEED;
|
transform_component_data->speed = PLAYER_DEFAULT_RUN_SPEED;
|
||||||
animation_system_data->frame_delay_ms = PLAYER_DEFAULT_RUN_ANIMATION_SPEED;
|
animation_system_data->frame_delay_ms = PLAYER_DEFAULT_RUN_ANIMATION_SPEED;
|
||||||
animation_system_data->actual_frame_nb = 0;
|
animation_system_data->actual_frame_nb = 0;
|
||||||
animation_system_change_animation(animation_system_data, "player_run_sheet", 8);
|
if(animation_system_change_animation(animation_system_data, "player_run_sheet", 8)) return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
transform_component_data->speed = PLAYER_DEFAULT_WALK_SPEED;
|
transform_component_data->speed = PLAYER_DEFAULT_WALK_SPEED;
|
||||||
animation_system_data->frame_delay_ms = PLAYER_DEFAULT_WALK_ANIMATION_SPEED;
|
animation_system_data->frame_delay_ms = PLAYER_DEFAULT_WALK_ANIMATION_SPEED;
|
||||||
animation_system_data->actual_frame_nb = 0;
|
animation_system_data->actual_frame_nb = 0;
|
||||||
animation_system_change_animation(animation_system_data, "player_walk_sheet", 4);
|
if(animation_system_change_animation(animation_system_data, "player_walk_sheet", 4)) return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
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))
|
||||||
|
|
@ -102,17 +104,21 @@ static inline void player_system_set_animation_and_speed(player_system_data_t *s
|
||||||
animation_system_data->actual_frame_nb = 0;
|
animation_system_data->actual_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;
|
||||||
animation_system_data->actual_frame_nb = 0;
|
animation_system_data->actual_frame_nb = 0;
|
||||||
animation_system_change_animation(animation_system_data, "player_idle_sheet", 4);
|
if(animation_system_change_animation(animation_system_data, "player_idle_sheet", 4)) return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
void player_system_update(component_t *component)
|
int player_system_update(component_t *component)
|
||||||
{
|
{
|
||||||
player_system_data_t *system_data = component->component_data;
|
player_system_data_t *system_data = component->component_data;
|
||||||
|
|
||||||
player_system_get_inputs(system_data);
|
player_system_get_inputs(system_data);
|
||||||
player_system_set_velocity(system_data);
|
player_system_set_velocity(system_data);
|
||||||
player_system_set_animation_and_speed(system_data);
|
if(player_system_set_animation_and_speed(system_data)) return EXIT_FAILURE;
|
||||||
|
|
||||||
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
void player_system_destroy(component_t *component)
|
void player_system_destroy(component_t *component)
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
#include "game.h"
|
#include "game.h"
|
||||||
|
|
||||||
// Arg : const char *name
|
// Arg : const char *name
|
||||||
void sprite_component_init(component_t *component, va_list args)
|
int sprite_component_init(component_t *component, va_list args)
|
||||||
{
|
{
|
||||||
sprite_component_data_t *component_data = component->component_data;
|
sprite_component_data_t *component_data = component->component_data;
|
||||||
|
|
||||||
|
|
@ -16,12 +16,17 @@ void sprite_component_init(component_t *component, va_list args)
|
||||||
component_data->flip = false;
|
component_data->flip = false;
|
||||||
|
|
||||||
component_data->texture = asset_manager_get_texture(&game.asset_manager, va_arg(args, const char *));
|
component_data->texture = asset_manager_get_texture(&game.asset_manager, va_arg(args, const char *));
|
||||||
|
if(!component_data->texture) return EXIT_FAILURE;
|
||||||
|
|
||||||
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void sprite_component_update(component_t *component)
|
inline int sprite_component_update(component_t *component)
|
||||||
{
|
{
|
||||||
sprite_component_data_t *component_data = component->component_data;
|
sprite_component_data_t *component_data = component->component_data;
|
||||||
frect_to_rect(&component_data->transform_component_data->bounds, &component_data->dst_rect);
|
frect_to_rect(&component_data->transform_component_data->bounds, &component_data->dst_rect);
|
||||||
|
|
||||||
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int sprite_component_draw(component_t *component)
|
inline int sprite_component_draw(component_t *component)
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
#include "game.h"
|
#include "game.h"
|
||||||
|
|
||||||
// Args : frect_t bounds, double speed
|
// Args : frect_t bounds, double speed
|
||||||
void transform_component_init(component_t *component, va_list args)
|
int transform_component_init(component_t *component, va_list args)
|
||||||
{
|
{
|
||||||
transform_component_data_t *const component_data = component->component_data;
|
transform_component_data_t *const component_data = component->component_data;
|
||||||
|
|
||||||
|
|
@ -12,14 +12,18 @@ void transform_component_init(component_t *component, va_list args)
|
||||||
|
|
||||||
component_data->velocity.x = 0.0f;
|
component_data->velocity.x = 0.0f;
|
||||||
component_data->velocity.y = 0.0f;
|
component_data->velocity.y = 0.0f;
|
||||||
|
|
||||||
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
void transform_component_update(component_t *component)
|
int transform_component_update(component_t *component)
|
||||||
{
|
{
|
||||||
transform_component_data_t *component_data = component->component_data;
|
transform_component_data_t *component_data = component->component_data;
|
||||||
|
|
||||||
component_data->bounds.x += component_data->velocity.x * component_data->speed * (float)game.delta_time_ms / 1000.0f;
|
component_data->bounds.x += component_data->velocity.x * component_data->speed * (float)game.delta_time_ms / 1000.0f;
|
||||||
component_data->bounds.y += component_data->velocity.y * component_data->speed * (float)game.delta_time_ms / 1000.0f;
|
component_data->bounds.y += component_data->velocity.y * component_data->speed * (float)game.delta_time_ms / 1000.0f;
|
||||||
|
|
||||||
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void transform_component_destroy(component_t *component)
|
inline void transform_component_destroy(component_t *component)
|
||||||
|
|
|
||||||
13
src/game.c
13
src/game.c
|
|
@ -17,7 +17,7 @@ int game_init(void)
|
||||||
|
|
||||||
entity_t *player = create_entity(0);
|
entity_t *player = create_entity(0);
|
||||||
|
|
||||||
entity_manager_add_entity(&game.entity_manager, player);
|
if(entity_manager_add_entity(&game.entity_manager, player)) return EXIT_FAILURE;
|
||||||
|
|
||||||
frect_t player_bounds = {10.0f, 10.0f, 32.0f, 32.0f};
|
frect_t player_bounds = {10.0f, 10.0f, 32.0f, 32.0f};
|
||||||
|
|
||||||
|
|
@ -58,9 +58,15 @@ void game_handle_event(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void game_update(void)
|
int game_update(void)
|
||||||
{
|
{
|
||||||
entity_manager_update(&game.entity_manager);
|
if(entity_manager_update(&game.entity_manager))
|
||||||
|
{
|
||||||
|
game.is_running = false;
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
int game_render(void)
|
int game_render(void)
|
||||||
|
|
@ -77,7 +83,6 @@ int game_render(void)
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
display_update();
|
display_update();
|
||||||
|
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue