diff --git a/DepthSorting/bucket.c b/DepthSorting/bucket.c index 479b13c..9f01fea 100644 --- a/DepthSorting/bucket.c +++ b/DepthSorting/bucket.c @@ -1,6 +1,8 @@ #include "bucket.h" #include "stdio.h" #include "stdlib.h" +#include "../sprite.h" +#include "../IsometricMap/tile.h" #define TEXTUREWIDTH 32; @@ -19,7 +21,7 @@ Bucket * BucketInit(Sprite *sprite, Tile *tile){ bucket->type = 1; bucket->sprite = 0; bucket->tile = tile; - bucket->depth = tile->x * TEXTUREWIDTH + tile->y * TEXTUREHEIGHT + 0.001 * tile->z; + bucket->depth = tile->x * TEXTUREWIDTH + tile->y * TEXTUREHEIGHT + tile->z; return bucket; } return 0; diff --git a/DepthSorting/bucket.h b/DepthSorting/bucket.h index 8b0e771..ec5351a 100644 --- a/DepthSorting/bucket.h +++ b/DepthSorting/bucket.h @@ -1,8 +1,9 @@ #ifndef BUCKET_H_ #define BUCKET_H_ #include "raylib.h" -#include "../sprite.h" -#include "../IsometricMap/tile.h" + +typedef struct Sprite Sprite; +typedef struct Tile Tile; typedef struct Bucket{ int type; // 0: Sprite, 1: Tile diff --git a/DepthSorting/mergeSort.c b/DepthSorting/mergeSort.c index 8cc9887..6cf3ad6 100644 --- a/DepthSorting/mergeSort.c +++ b/DepthSorting/mergeSort.c @@ -1,43 +1,43 @@ #include "bucket.h" void MergeSort(Bucket *liste[], int groesse){ - - if(groesse > 1){ - - Bucket *haelfte1[groesse/2]; - Bucket *haelfte2[(groesse + 1)/2]; - int i; - for(i = 0; i < groesse/2; ++i) - haelfte1[i] = liste[i]; - for(i = groesse/2; i < groesse; ++i) - haelfte2[i - groesse/2] = liste[i]; - - MergeSort(haelfte1,groesse/2); - MergeSort(haelfte2,(groesse + 1)/2); - - Bucket **pos1 = &haelfte1[0]; - Bucket **pos2 = &haelfte2[0]; - for(i = 0; i < groesse; ++i){ - if((*pos1)->depth <= (*pos2)->depth){ - liste[i] = *pos1; - if (pos1 != &haelfte2[(groesse+1)/2 - 1]) { // pos1 nicht verändern, wenn der größte Wert mehrmals vorkommt - if(pos1 == &haelfte1[groesse/2 - 1]){ - pos1 = &haelfte2[(groesse+1)/2 - 1]; - } - else{ - ++pos1; - } - } - } - else{ - liste[i] = *pos2; - if(pos2 == &haelfte2[(groesse + 1)/2 - 1]){ - pos2 = &haelfte1[groesse/2 - 1]; - } - else{ - ++pos2; - } - } - } - } + + if(groesse > 1){ + + Bucket *haelfte1[groesse/2]; + Bucket *haelfte2[(groesse + 1)/2]; + int i; + for(i = 0; i < groesse/2; ++i) + haelfte1[i] = liste[i]; + for(i = groesse/2; i < groesse; ++i) + haelfte2[i - groesse/2] = liste[i]; + + MergeSort(haelfte1,groesse/2); + MergeSort(haelfte2,(groesse + 1)/2); + + Bucket **pos1 = &haelfte1[0]; + Bucket **pos2 = &haelfte2[0]; + for(i = 0; i < groesse; ++i){ + if((*pos1)->depth <= (*pos2)->depth){ + liste[i] = *pos1; + if (pos1 != &haelfte2[(groesse+1)/2 - 1]) { // pos1 nicht verändern, wenn der größte Wert mehrmals vorkommt + if(pos1 == &haelfte1[groesse/2 - 1]){ + pos1 = &haelfte2[(groesse+1)/2 - 1]; + } + else{ + ++pos1; + } + } + } + else{ + liste[i] = *pos2; + if(pos2 == &haelfte2[(groesse + 1)/2 - 1]){ + pos2 = &haelfte1[groesse/2 - 1]; + } + else{ + ++pos2; + } + } + } + } } \ No newline at end of file diff --git a/IsometricMap/isometricMap.c b/IsometricMap/isometricMap.c index 7284d68..1fefdb9 100644 --- a/IsometricMap/isometricMap.c +++ b/IsometricMap/isometricMap.c @@ -55,7 +55,7 @@ IsometricMap * IsometricMapInit(int layer){ tmp->offsetX = offset->x; tmp->offsetY = offset->y; free(offset); - + tmp->sortable = BucketInit(0, tmp); tiles[i][j] = tmp; } } @@ -143,22 +143,18 @@ Tile * IsometricMapGetTileFromWorldCoordinates(IsometricMap **isometricMap, floa // Gives the most upper Tile above *tile Tile * IsometricMapGetMostUpperTile(IsometricMap **isometricMap, Tile *tile){ - Tile *ptr = (Tile *) malloc(sizeof(Tile *)); + //Tile *ptr = (Tile *) malloc(sizeof(Tile *)); // hardcoded layer amount int n = 9; for(n=9;n>=0;n--){ if( tile->x < isometricMap[n]->width && tile->y < isometricMap[n]->height && tile->x >= 0 && tile->y >= 0 ){ if(isometricMap[n]->tiles[tile->x][tile->y]->textureId != -1){ - ptr->x = isometricMap[n]->tiles[tile->x][tile->y]->x; - ptr->y = isometricMap[n]->tiles[tile->x][tile->y]->y; - ptr->z = isometricMap[n]->tiles[tile->x][tile->y]->z; - return ptr; + return isometricMap[n]->tiles[tile->x][tile->y]; } } } - ptr = 0; - return ptr; + return 0; } // changes to Texture ID of tile at x y on maplayer layer @@ -204,7 +200,7 @@ void IsometricMapDraw(Game *game){ if (game->layers[n]->tiles[i][j]->textureId == -1){ } else{ - buckets[counter] = BucketInit(0, game->layers[n]->tiles[i][j]); + buckets[counter] = game->layers[n]->tiles[i][j]->sortable; ++counter; } } @@ -225,27 +221,30 @@ void IsometricMapDraw(Game *game){ current->data.y > jtmp && current->data.x < maxI && current->data.y < maxJ){ - buckets[counter] = BucketInit(¤t->data, 0); + buckets[counter] = current->data.sortable; ++counter; } current = current->next; } - MergeSort(buckets, counter); - + + //printf("HÄÄÄÄÄÄ\n"); int k = 0; for(k = 0; k < counter; k++){ if(buckets[k]->type == 1){ + //printf("Tile begin -"); DrawTexture( game->layers[0]->tileTextures[buckets[k]->tile->textureId], buckets[k]->tile->offsetX, buckets[k]->tile->offsetY, WHITE); + //printf("- Tile end \n"); } else if(buckets[k]->type == 0){ + //printf("Sprite begin -"); DrawSpriteToWorld(buckets[k]->sprite, game->layers, game->camera); + //printf("- Sprite end \n"); } - //free(buckets[k]); } diff --git a/IsometricMap/tile.h b/IsometricMap/tile.h index dd656b9..455f2ac 100644 --- a/IsometricMap/tile.h +++ b/IsometricMap/tile.h @@ -1,6 +1,7 @@ #ifndef TILE_H_ #define TILE_H_ #include "raylib.h" +#include "../DepthSorting/bucket.h" // Tile with textureid = -1 wouldn't be drawed, would just be a placeholder tile typedef struct Tile{ @@ -10,6 +11,7 @@ typedef struct Tile{ int z; int offsetX; int offsetY; + Bucket *sortable; } Tile; #endif \ No newline at end of file diff --git a/animation.o b/animation.o new file mode 100644 index 0000000..75e4a75 Binary files /dev/null and b/animation.o differ diff --git a/animationHandler.o b/animationHandler.o new file mode 100644 index 0000000..21f4c01 Binary files /dev/null and b/animationHandler.o differ diff --git a/bucket.o b/bucket.o new file mode 100644 index 0000000..8143d5c Binary files /dev/null and b/bucket.o differ diff --git a/game.o b/game.o new file mode 100644 index 0000000..f438d02 Binary files /dev/null and b/game.o differ diff --git a/inputHandler.o b/inputHandler.o new file mode 100644 index 0000000..a96eea9 Binary files /dev/null and b/inputHandler.o differ diff --git a/isometricMap.o b/isometricMap.o new file mode 100644 index 0000000..1e5c8a2 Binary files /dev/null and b/isometricMap.o differ diff --git a/isometricRenderer.o b/isometricRenderer.o new file mode 100644 index 0000000..605d535 Binary files /dev/null and b/isometricRenderer.o differ diff --git a/list.o b/list.o new file mode 100644 index 0000000..3a299c8 Binary files /dev/null and b/list.o differ diff --git a/main.o b/main.o new file mode 100644 index 0000000..f0cbcd6 Binary files /dev/null and b/main.o differ diff --git a/mergeSort.o b/mergeSort.o new file mode 100644 index 0000000..a2a49b1 Binary files /dev/null and b/mergeSort.o differ diff --git a/spiel b/spiel new file mode 100755 index 0000000..0c26f76 Binary files /dev/null and b/spiel differ diff --git a/sprite.c b/sprite.c index 8a85a13..c4abac3 100644 --- a/sprite.c +++ b/sprite.c @@ -8,6 +8,7 @@ #include "Textures/animation.h" #include "Textures/textureatlas.h" #include "IsometricMap/tile.h" +#include "DepthSorting/bucket.h" // @param deprecated void SpriteAdd(Sprite *sprites, int *spriteAmount, Texture2D *texture, int x, int y){ @@ -86,7 +87,7 @@ Sprite * SpriteCreate(TextureAtlas *atlas, int textureID, int x, int y){ animations = atlas->cursorAnimation; } else{ - printf("\n\n\n\n\n\n\n\nSpriteCreate mit falscher ID aufgerufen oder ID nicht bekannt!!!\n\n\n\n\n\n\n\n"); + printf("\n\n\n\n\n\n\n\nSpriteCreate mit falscher ID (%d) aufgerufen oder ID nicht bekannt!!!\n\n\n\n\n\n\n\n", textureID); } AnimationHandler *newHandler = AnimationHandlerInit(animations); @@ -100,5 +101,7 @@ Sprite * SpriteCreate(TextureAtlas *atlas, int textureID, int x, int y){ newSprite->hasDestination = 0; newSprite->selected = 0; + newSprite->sortable = BucketInit(newSprite, 0); + return newSprite; } diff --git a/sprite.h b/sprite.h index f63f088..87d394e 100644 --- a/sprite.h +++ b/sprite.h @@ -4,6 +4,7 @@ #include "IsometricMap/isometricMap.h" #include "Textures/animationHandler.h" #include "Textures/textureatlas.h" +#include "DepthSorting/bucket.h" typedef struct Sprite { AnimationHandler *animationHandler; @@ -15,6 +16,7 @@ typedef struct Sprite { float destY; int hasDestination; int selected; + Bucket *sortable; } Sprite; // @param deprecated diff --git a/sprite.o b/sprite.o new file mode 100644 index 0000000..6d63660 Binary files /dev/null and b/sprite.o differ diff --git a/textureatlas.o b/textureatlas.o new file mode 100644 index 0000000..ddd110b Binary files /dev/null and b/textureatlas.o differ diff --git a/tile.o b/tile.o new file mode 100644 index 0000000..ab55776 Binary files /dev/null and b/tile.o differ