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];
};
// 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);

20
main.c
View File

@ -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
//--------------------------------------------------------------------------------------

View File

@ -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){