Make linked list functions more general

master
En Yi 2020-03-07 16:06:47 +08:00 committed by En Yi
parent 2a7dc3f00a
commit 2823ddc3d7
3 changed files with 20 additions and 26 deletions

View File

@ -88,8 +88,6 @@ struct squishy_square
Vector2 right_vertices[BEZIER_POINTS+1]; Vector2 right_vertices[BEZIER_POINTS+1];
}; };
// Object functions, kinematics.c // Object functions, kinematics.c
struct kinematic_obj init_kinematic_obj(int width, int height); struct kinematic_obj init_kinematic_obj(int width, int height);
void move(struct kinematic_obj *obj, Vector2 acceleration); void move(struct kinematic_obj *obj, Vector2 acceleration);
@ -105,11 +103,10 @@ Vector2 dir(Vector2 vec);
void approach(double *val, double target, float f); void approach(double *val, double target, float f);
// Linked list, linked_list.c // Linked list, linked_list.c
extern struct kinematic_obj_node *kinematic_HEAD;
void create_list(void); 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(); //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 create_afterimage(struct player_obj *player, Color color);
void remove_last_afterimage(struct player_obj *player); void remove_last_afterimage(struct player_obj *player);
void free_afterimages(struct player_obj *player); void free_afterimages(struct player_obj *player);

20
main.c
View File

@ -23,7 +23,7 @@
*/ */
#include "header.h" #include "header.h"
extern struct kinematic_obj_node *kinematic_HEAD; struct kinematic_obj_node *kinematic_HEAD = NULL;
int PLAYER_ACCEL = 1500; int PLAYER_ACCEL = 1500;
int JUMP_ACCEL = 15000; int JUMP_ACCEL = 15000;
int JUMP_SPD = 350; int JUMP_SPD = 350;
@ -73,14 +73,14 @@ int main()
struct squishy_square sqr = init_squishy_square(&player.kinematic, RED); struct squishy_square sqr = init_squishy_square(&player.kinematic, RED);
player.image = &sqr; player.image = &sqr;
add_node(&tile); add_node(&tile, &kinematic_HEAD);
add_node(&tile2); add_node(&tile2, &kinematic_HEAD);
add_node(&tile3); add_node(&tile3, &kinematic_HEAD);
add_node(&tile4); add_node(&tile4, &kinematic_HEAD);
add_node(&tile5); add_node(&tile5, &kinematic_HEAD);
add_node(&tile6); add_node(&tile6, &kinematic_HEAD);
add_node(&tile7); add_node(&tile7, &kinematic_HEAD);
add_node(&player.kinematic); add_node(&player.kinematic, &kinematic_HEAD);
SetTargetFPS(60); // Set our game to run at 60 frames-per-second SetTargetFPS(60); // Set our game to run at 60 frames-per-second
//-------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------
@ -126,7 +126,7 @@ int main()
// De-Initialization // De-Initialization
//-------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------
free_list(); free_list(&kinematic_HEAD);
free_afterimages(&player); free_afterimages(&player);
CloseWindow(); // Close window and OpenGL context CloseWindow(); // Close window and OpenGL context
//-------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------

View File

@ -3,28 +3,25 @@
// Placeholder collision checking structure. Use linked list for now // Placeholder collision checking structure. Use linked list for now
// Need to implement some sort of tree structure for efficient collision checking // 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)); struct kinematic_obj_node *node = malloc(sizeof(struct kinematic_obj_node));
if (node){ if (node){
node->obj = obj; node->obj = obj;
node->next = NULL; node->next = NULL;
} }
if (kinematic_HEAD == NULL){ if (*HEAD != NULL)
kinematic_HEAD = node; node->next = *HEAD;
}else{
node->next = kinematic_HEAD; *HEAD = node;
kinematic_HEAD = node;
}
} }
/**struct kinematic_obj_node **get_list(){ /**struct kinematic_obj_node **get_list(){
return &kinematic_HEAD; return &kinematic_HEAD;
}*/ }*/
void free_list(){ void free_list(struct kinematic_obj_node **HEAD){
struct kinematic_obj_node *current = kinematic_HEAD; struct kinematic_obj_node *current = *HEAD;
struct kinematic_obj_node *next; struct kinematic_obj_node *next;
while(current){ while(current){
next = current->next; next = current->next;
@ -32,7 +29,7 @@ void free_list(){
free(current); free(current);
current = next; current = next;
} }
kinematic_HEAD = NULL; *HEAD = NULL;
} }
void create_afterimage(struct player_obj *player, Color color){ void create_afterimage(struct player_obj *player, Color color){