From c409f0a9ee0e80020852e789a04da79fb8cd274a Mon Sep 17 00:00:00 2001 From: Jonathan Hager Date: Wed, 4 Jan 2023 20:57:37 +0100 Subject: [PATCH] Gute Nacht --- DepthSorting/bucket.c | 62 +++++++++++++++++++++++++++---------- DepthSorting/bucket.h | 18 ++++++----- IsometricMap/isometricMap.c | 2 +- Makefile | 5 +-- main.c | 9 +++--- sprite.c | 2 +- 6 files changed, 64 insertions(+), 34 deletions(-) diff --git a/DepthSorting/bucket.c b/DepthSorting/bucket.c index d6e466a..7107c1f 100644 --- a/DepthSorting/bucket.c +++ b/DepthSorting/bucket.c @@ -3,37 +3,67 @@ #include "stdlib.h" #include "../sprite.h" #include "../IsometricMap/tile.h" +#include "../main.c" - -Bucket * BucketInit(Sprite *sprite, Tile *tile){ +Bucket * BucketInit(void *data, int type){ Bucket *bucket = malloc(sizeof(Bucket)); - if(sprite != 0){ - bucket->type = 0; - bucket->sprite = sprite; + + if(type == SPRITE){ + bucket->sprite = (Sprite *) data; bucket->tile = 0; - bucket->depth = sprite->x + sprite->y + sprite->z; + bucket->depth = bucket->sprite->x + bucket->sprite->y + bucket->sprite->z; } - else if(tile != 0){ - bucket->type = 1; + else if(type == TILE){ bucket->sprite = 0; - bucket->tile = tile; - bucket->depth = tile->x * 32 + tile->y * 32 + tile->z; + bucket->tile = (Tile *) data; + bucket->depth = bucket->tile->x * 32 + bucket->tile->y * 32 + bucket->tile->z; + } + else{ + printf("WARNING: BucketInit called with unknown type! Undefined behavior expected\n"); } - bucket->next = 0; - bucket->prev = 0; + bucket->type = type; + + bucket->left = 0; + bucket->right = 0; return bucket; } void BucketInsert(Bucket *head, Bucket *new){ + Bucket *current = head; + while(current != 0){ + if(current->depth > new->depth){ + // Rechter Teilbaum + if(current->right != 0){ + current = current->right; + } + else{ + current->right = new; + break; + } + } + else{ + // Linker Teilbaum + if(current->left != 0){ + current = current->left; + } + else{ + current->left = new; + break; + } + } + } +} + +void BucketRemove(Bucket *head, Bucket *new){ + if(new->left == 0){ + + } } -void BucketRemove(Bucket *new){ - new->next->prev = new->prev; - new->prev->next = new->next; +void BucketChanged(Bucket *head, Bucket *changed){ - free(new); } \ No newline at end of file diff --git a/DepthSorting/bucket.h b/DepthSorting/bucket.h index a85bc4e..949276d 100644 --- a/DepthSorting/bucket.h +++ b/DepthSorting/bucket.h @@ -2,24 +2,28 @@ #define BUCKET_H_ #include "raylib.h" +#define SPRITE 0 +#define TILE 1 + typedef struct Sprite Sprite; typedef struct Tile Tile; -typedef struct Bucket Bucket; typedef struct Bucket{ - int type; // 0: Sprite, 1: Tile + int type; Sprite *sprite; Tile *tile; float depth; - Bucket *next; - Bucket *prev; + struct Bucket *left; + struct Bucket *right; } Bucket; -Bucket * BucketInit(Sprite *sprite, Tile *tile); +Bucket * BucketInit(void *data, int type); + +void BucketInsert(struct Bucket *head, struct Bucket *new); -void BucketInsert(Bucket *head, Bucket *new); +void BucketRemove(struct Bucket *head, struct Bucket *new); -void BucketRemove(Bucket *new); +void BucketChanged(struct Bucket *head, struct Bucket *changed); #endif \ No newline at end of file diff --git a/IsometricMap/isometricMap.c b/IsometricMap/isometricMap.c index a59c54e..5213bbf 100644 --- a/IsometricMap/isometricMap.c +++ b/IsometricMap/isometricMap.c @@ -51,7 +51,7 @@ IsometricMap * IsometricMapInit(int layer){ tmp->offsetX = offset->x; tmp->offsetY = offset->y; free(offset); - tmp->sortable = BucketInit(0, tmp); + tmp->sortable = BucketInit(tmp, TILE); tiles[i][j] = tmp; } } diff --git a/Makefile b/Makefile index 5daf646..0fd2ff4 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ CC = gcc FLAGS = -lraylib -lGL -lm -lpthread -ldl -lrt -lX11 -OBJS = main.o sprite.o inputHandler.o isometricMap.o list.o game.o textureatlas.o animation.o animationHandler.o bucket.o mergeSort.o +OBJS = main.o sprite.o inputHandler.o isometricMap.o list.o game.o textureatlas.o animation.o animationHandler.o bucket.o spiel: $(OBJS) $(CC) -o spiel $(OBJS) $(FLAGS) @@ -35,8 +35,5 @@ animationHandler.o: Textures/animationHandler.c bucket.o: DepthSorting/bucket.c $(CC) -c DepthSorting/bucket.c $(FLAGS) -mergeSort.o: DepthSorting/mergeSort.c - $(CC) -c DepthSorting/mergeSort.c $(FLAGS) - clean: rm *.o spiel diff --git a/main.c b/main.c index 293c160..d60f0fb 100644 --- a/main.c +++ b/main.c @@ -9,11 +9,13 @@ #include "game.h" #include "DepthSorting/bucket.h" +Game *game; + int main(){ InitWindow(800, 450, "basic window"); - Game *game = GameInit(); + game = GameInit(); // Hides the operating systems own cursor HideCursor(); @@ -55,7 +57,4 @@ int main(){ return 0; -} - - - \ No newline at end of file +} \ No newline at end of file diff --git a/sprite.c b/sprite.c index 4eb0b57..c3a9eb3 100644 --- a/sprite.c +++ b/sprite.c @@ -69,7 +69,7 @@ Sprite * SpriteCreate(TextureAtlas *atlas, int textureID, int x, int y){ newSprite->hasDestination = 0; newSprite->selected = 0; - newSprite->sortable = BucketInit(newSprite, 0); + newSprite->sortable = BucketInit(newSprite, SPRITE); return newSprite; }