bissl effizienter, sprites kaputt bruh, komische bug ich weiß net weiter :(, ich merge hier den main mal drauf, mal schauen was passiert

main
JanEhehalt 3 years ago
parent 8152651c99
commit 3c4d737199

@ -1,6 +1,8 @@
#include "bucket.h" #include "bucket.h"
#include "stdio.h" #include "stdio.h"
#include "stdlib.h" #include "stdlib.h"
#include "../sprite.h"
#include "../IsometricMap/tile.h"
#define TEXTUREWIDTH 32; #define TEXTUREWIDTH 32;
@ -19,7 +21,7 @@ Bucket * BucketInit(Sprite *sprite, Tile *tile){
bucket->type = 1; bucket->type = 1;
bucket->sprite = 0; bucket->sprite = 0;
bucket->tile = tile; 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 bucket;
} }
return 0; return 0;

@ -1,8 +1,9 @@
#ifndef BUCKET_H_ #ifndef BUCKET_H_
#define BUCKET_H_ #define BUCKET_H_
#include "raylib.h" #include "raylib.h"
#include "../sprite.h"
#include "../IsometricMap/tile.h" typedef struct Sprite Sprite;
typedef struct Tile Tile;
typedef struct Bucket{ typedef struct Bucket{
int type; // 0: Sprite, 1: Tile int type; // 0: Sprite, 1: Tile

@ -1,43 +1,43 @@
#include "bucket.h" #include "bucket.h"
void MergeSort(Bucket *liste[], int groesse){ void MergeSort(Bucket *liste[], int groesse){
if(groesse > 1){ if(groesse > 1){
Bucket *haelfte1[groesse/2]; Bucket *haelfte1[groesse/2];
Bucket *haelfte2[(groesse + 1)/2]; Bucket *haelfte2[(groesse + 1)/2];
int i; int i;
for(i = 0; i < groesse/2; ++i) for(i = 0; i < groesse/2; ++i)
haelfte1[i] = liste[i]; haelfte1[i] = liste[i];
for(i = groesse/2; i < groesse; ++i) for(i = groesse/2; i < groesse; ++i)
haelfte2[i - groesse/2] = liste[i]; haelfte2[i - groesse/2] = liste[i];
MergeSort(haelfte1,groesse/2); MergeSort(haelfte1,groesse/2);
MergeSort(haelfte2,(groesse + 1)/2); MergeSort(haelfte2,(groesse + 1)/2);
Bucket **pos1 = &haelfte1[0]; Bucket **pos1 = &haelfte1[0];
Bucket **pos2 = &haelfte2[0]; Bucket **pos2 = &haelfte2[0];
for(i = 0; i < groesse; ++i){ for(i = 0; i < groesse; ++i){
if((*pos1)->depth <= (*pos2)->depth){ if((*pos1)->depth <= (*pos2)->depth){
liste[i] = *pos1; liste[i] = *pos1;
if (pos1 != &haelfte2[(groesse+1)/2 - 1]) { // pos1 nicht verändern, wenn der größte Wert mehrmals vorkommt if (pos1 != &haelfte2[(groesse+1)/2 - 1]) { // pos1 nicht verändern, wenn der größte Wert mehrmals vorkommt
if(pos1 == &haelfte1[groesse/2 - 1]){ if(pos1 == &haelfte1[groesse/2 - 1]){
pos1 = &haelfte2[(groesse+1)/2 - 1]; pos1 = &haelfte2[(groesse+1)/2 - 1];
} }
else{ else{
++pos1; ++pos1;
} }
} }
} }
else{ else{
liste[i] = *pos2; liste[i] = *pos2;
if(pos2 == &haelfte2[(groesse + 1)/2 - 1]){ if(pos2 == &haelfte2[(groesse + 1)/2 - 1]){
pos2 = &haelfte1[groesse/2 - 1]; pos2 = &haelfte1[groesse/2 - 1];
} }
else{ else{
++pos2; ++pos2;
} }
} }
} }
} }
} }

@ -55,7 +55,7 @@ IsometricMap * IsometricMapInit(int layer){
tmp->offsetX = offset->x; tmp->offsetX = offset->x;
tmp->offsetY = offset->y; tmp->offsetY = offset->y;
free(offset); free(offset);
tmp->sortable = BucketInit(0, tmp);
tiles[i][j] = tmp; tiles[i][j] = tmp;
} }
} }
@ -143,22 +143,18 @@ Tile * IsometricMapGetTileFromWorldCoordinates(IsometricMap **isometricMap, floa
// Gives the most upper Tile above *tile // Gives the most upper Tile above *tile
Tile * IsometricMapGetMostUpperTile(IsometricMap **isometricMap, Tile *tile){ Tile * IsometricMapGetMostUpperTile(IsometricMap **isometricMap, Tile *tile){
Tile *ptr = (Tile *) malloc(sizeof(Tile *)); //Tile *ptr = (Tile *) malloc(sizeof(Tile *));
// hardcoded layer amount // hardcoded layer amount
int n = 9; int n = 9;
for(n=9;n>=0;n--){ for(n=9;n>=0;n--){
if( tile->x < isometricMap[n]->width && tile->y < isometricMap[n]->height && if( tile->x < isometricMap[n]->width && tile->y < isometricMap[n]->height &&
tile->x >= 0 && tile->y >= 0 ){ tile->x >= 0 && tile->y >= 0 ){
if(isometricMap[n]->tiles[tile->x][tile->y]->textureId != -1){ if(isometricMap[n]->tiles[tile->x][tile->y]->textureId != -1){
ptr->x = isometricMap[n]->tiles[tile->x][tile->y]->x; return isometricMap[n]->tiles[tile->x][tile->y];
ptr->y = isometricMap[n]->tiles[tile->x][tile->y]->y;
ptr->z = isometricMap[n]->tiles[tile->x][tile->y]->z;
return ptr;
} }
} }
} }
ptr = 0; return 0;
return ptr;
} }
// changes to Texture ID of tile at x y on maplayer layer // 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){ if (game->layers[n]->tiles[i][j]->textureId == -1){
} }
else{ else{
buckets[counter] = BucketInit(0, game->layers[n]->tiles[i][j]); buckets[counter] = game->layers[n]->tiles[i][j]->sortable;
++counter; ++counter;
} }
} }
@ -225,27 +221,30 @@ void IsometricMapDraw(Game *game){
current->data.y > jtmp && current->data.y > jtmp &&
current->data.x < maxI && current->data.x < maxI &&
current->data.y < maxJ){ current->data.y < maxJ){
buckets[counter] = BucketInit(&current->data, 0); buckets[counter] = current->data.sortable;
++counter; ++counter;
} }
current = current->next; current = current->next;
} }
MergeSort(buckets, counter); MergeSort(buckets, counter);
//printf("HÄÄÄÄÄÄ\n");
int k = 0; int k = 0;
for(k = 0; k < counter; k++){ for(k = 0; k < counter; k++){
if(buckets[k]->type == 1){ if(buckets[k]->type == 1){
//printf("Tile begin -");
DrawTexture( DrawTexture(
game->layers[0]->tileTextures[buckets[k]->tile->textureId], game->layers[0]->tileTextures[buckets[k]->tile->textureId],
buckets[k]->tile->offsetX, buckets[k]->tile->offsetX,
buckets[k]->tile->offsetY, buckets[k]->tile->offsetY,
WHITE); WHITE);
//printf("- Tile end \n");
} }
else if(buckets[k]->type == 0){ else if(buckets[k]->type == 0){
//printf("Sprite begin -");
DrawSpriteToWorld(buckets[k]->sprite, game->layers, game->camera); DrawSpriteToWorld(buckets[k]->sprite, game->layers, game->camera);
//printf("- Sprite end \n");
} }
//free(buckets[k]);
} }

@ -1,6 +1,7 @@
#ifndef TILE_H_ #ifndef TILE_H_
#define TILE_H_ #define TILE_H_
#include "raylib.h" #include "raylib.h"
#include "../DepthSorting/bucket.h"
// Tile with textureid = -1 wouldn't be drawed, would just be a placeholder tile // Tile with textureid = -1 wouldn't be drawed, would just be a placeholder tile
typedef struct Tile{ typedef struct Tile{
@ -10,6 +11,7 @@ typedef struct Tile{
int z; int z;
int offsetX; int offsetX;
int offsetY; int offsetY;
Bucket *sortable;
} Tile; } Tile;
#endif #endif

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
game.o

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
list.o

Binary file not shown.

BIN
main.o

Binary file not shown.

Binary file not shown.

BIN
spiel

Binary file not shown.

@ -8,6 +8,7 @@
#include "Textures/animation.h" #include "Textures/animation.h"
#include "Textures/textureatlas.h" #include "Textures/textureatlas.h"
#include "IsometricMap/tile.h" #include "IsometricMap/tile.h"
#include "DepthSorting/bucket.h"
// @param deprecated // @param deprecated
void SpriteAdd(Sprite *sprites, int *spriteAmount, Texture2D *texture, int x, int y){ 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; animations = atlas->cursorAnimation;
} }
else{ 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); AnimationHandler *newHandler = AnimationHandlerInit(animations);
@ -100,5 +101,7 @@ Sprite * SpriteCreate(TextureAtlas *atlas, int textureID, int x, int y){
newSprite->hasDestination = 0; newSprite->hasDestination = 0;
newSprite->selected = 0; newSprite->selected = 0;
newSprite->sortable = BucketInit(newSprite, 0);
return newSprite; return newSprite;
} }

@ -4,6 +4,7 @@
#include "IsometricMap/isometricMap.h" #include "IsometricMap/isometricMap.h"
#include "Textures/animationHandler.h" #include "Textures/animationHandler.h"
#include "Textures/textureatlas.h" #include "Textures/textureatlas.h"
#include "DepthSorting/bucket.h"
typedef struct Sprite { typedef struct Sprite {
AnimationHandler *animationHandler; AnimationHandler *animationHandler;
@ -15,6 +16,7 @@ typedef struct Sprite {
float destY; float destY;
int hasDestination; int hasDestination;
int selected; int selected;
Bucket *sortable;
} Sprite; } Sprite;
// @param deprecated // @param deprecated

Binary file not shown.

Binary file not shown.

BIN
tile.o

Binary file not shown.
Loading…
Cancel
Save