From 2823ddc3d7fdd27353656bd22c5df13238486827 Mon Sep 17 00:00:00 2001 From: En Yi Date: Sat, 7 Mar 2020 16:06:47 +0800 Subject: [PATCH] Make linked list functions more general --- include/header.h | 7 ++----- main.c | 20 ++++++++++---------- utilities/linked_list.c | 19 ++++++++----------- 3 files changed, 20 insertions(+), 26 deletions(-) diff --git a/include/header.h b/include/header.h index 988f6d5..599ce59 100644 --- a/include/header.h +++ b/include/header.h @@ -88,8 +88,6 @@ struct squishy_square Vector2 right_vertices[BEZIER_POINTS+1]; }; - - // Object functions, kinematics.c struct kinematic_obj init_kinematic_obj(int width, int height); void move(struct kinematic_obj *obj, Vector2 acceleration); @@ -105,11 +103,10 @@ Vector2 dir(Vector2 vec); void approach(double *val, double target, float f); // Linked list, linked_list.c -extern struct kinematic_obj_node *kinematic_HEAD; void create_list(void); -void add_node(struct kinematic_obj *obj); +void add_node(struct kinematic_obj *obj, struct kinematic_obj_node **HEAD); //struct kinematic_obj_node **get_list(); -void free_list(void); +void free_list(struct kinematic_obj_node **HEAD); void create_afterimage(struct player_obj *player, Color color); void remove_last_afterimage(struct player_obj *player); void free_afterimages(struct player_obj *player); diff --git a/main.c b/main.c index e85c5ea..9e64e1c 100644 --- a/main.c +++ b/main.c @@ -23,7 +23,7 @@ */ #include "header.h" -extern struct kinematic_obj_node *kinematic_HEAD; +struct kinematic_obj_node *kinematic_HEAD = NULL; int PLAYER_ACCEL = 1500; int JUMP_ACCEL = 15000; int JUMP_SPD = 350; @@ -73,14 +73,14 @@ int main() struct squishy_square sqr = init_squishy_square(&player.kinematic, RED); player.image = &sqr; - add_node(&tile); - add_node(&tile2); - add_node(&tile3); - add_node(&tile4); - add_node(&tile5); - add_node(&tile6); - add_node(&tile7); - add_node(&player.kinematic); + add_node(&tile, &kinematic_HEAD); + add_node(&tile2, &kinematic_HEAD); + add_node(&tile3, &kinematic_HEAD); + add_node(&tile4, &kinematic_HEAD); + add_node(&tile5, &kinematic_HEAD); + add_node(&tile6, &kinematic_HEAD); + add_node(&tile7, &kinematic_HEAD); + add_node(&player.kinematic, &kinematic_HEAD); SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- @@ -126,7 +126,7 @@ int main() // De-Initialization //-------------------------------------------------------------------------------------- - free_list(); + free_list(&kinematic_HEAD); free_afterimages(&player); CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- diff --git a/utilities/linked_list.c b/utilities/linked_list.c index c48b179..bed6933 100644 --- a/utilities/linked_list.c +++ b/utilities/linked_list.c @@ -3,28 +3,25 @@ // Placeholder collision checking structure. Use linked list for now // Need to implement some sort of tree structure for efficient collision checking -struct kinematic_obj_node *kinematic_HEAD = NULL; -void add_node(struct kinematic_obj *obj){ +void add_node(struct kinematic_obj *obj, struct kinematic_obj_node **HEAD){ struct kinematic_obj_node *node = malloc(sizeof(struct kinematic_obj_node)); if (node){ node->obj = obj; node->next = NULL; } - if (kinematic_HEAD == NULL){ - kinematic_HEAD = node; - }else{ - node->next = kinematic_HEAD; - kinematic_HEAD = node; - } + if (*HEAD != NULL) + node->next = *HEAD; + + *HEAD = node; } /**struct kinematic_obj_node **get_list(){ return &kinematic_HEAD; }*/ -void free_list(){ - struct kinematic_obj_node *current = kinematic_HEAD; +void free_list(struct kinematic_obj_node **HEAD){ + struct kinematic_obj_node *current = *HEAD; struct kinematic_obj_node *next; while(current){ next = current->next; @@ -32,7 +29,7 @@ void free_list(){ free(current); current = next; } - kinematic_HEAD = NULL; + *HEAD = NULL; } void create_afterimage(struct player_obj *player, Color color){