depth gefixed, sortierung is raus, memleak is gefixed, animationen sind broken

main
JanEhehalt 3 years ago
parent 3340286a90
commit 1d4d0b60ba

@ -5,23 +5,20 @@
#include "../IsometricMap/tile.h" #include "../IsometricMap/tile.h"
#define TEXTUREWIDTH 32;
#define TEXTUREHEIGHT 32;
Bucket * BucketInit(Sprite *sprite, Tile *tile){ Bucket * BucketInit(Sprite *sprite, Tile *tile){
Bucket *bucket = (Bucket *) malloc(sizeof(Bucket)); Bucket *bucket = (Bucket *) malloc(sizeof(Bucket));
if(sprite != 0){ if(sprite != 0){
bucket->type = 0; bucket->type = 0;
bucket->sprite = sprite; bucket->sprite = sprite;
bucket->tile = 0; bucket->tile = 0;
bucket->depth = sprite->x + sprite->y + 0.001 * sprite->z; bucket->depth = sprite->x + sprite->y + sprite->z;
return bucket; return bucket;
} }
else if(tile != 0){ else if(tile != 0){
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 + tile->z; bucket->depth = tile->x * 32 + tile->y * 32 + tile->z;
return bucket; return bucket;
} }
return 0; return 0;

@ -1,7 +1,9 @@
#include "bucket.h" #include "bucket.h"
#include "stdlib.h"
#include "stdio.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];
@ -15,8 +17,8 @@ void MergeSort(Bucket *liste[], int groesse){
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;
Bucket **pos2 = &haelfte2[0]; Bucket **pos2 = haelfte2;
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;
@ -40,4 +42,15 @@ void MergeSort(Bucket *liste[], int groesse){
} }
} }
} }
}
int k = 0;
for(k = 0; k < groesse; k++){
printf("%f\n", liste[k]->depth);
}
//exit(0);
}
*/
void MergeSort(Bucket *liste[], int groesse){
}

@ -131,8 +131,8 @@ void mouseInput(Game *game){
else if(inputHandler->cursorWorldPos.x > maxWidth){ printf("OutOfBoundsDestination Spawn\n");} else if(inputHandler->cursorWorldPos.x > maxWidth){ printf("OutOfBoundsDestination Spawn\n");}
else if(inputHandler->cursorWorldPos.y > maxHeight){ printf("OutOfBoundsDestination Spawn\n");} else if(inputHandler->cursorWorldPos.y > maxHeight){ printf("OutOfBoundsDestination Spawn\n");}
else { else {
//ListInsertBack(sprites, SpriteCreate(game->textures, 1, inputHandler->cursorWorldPos.x, inputHandler->cursorWorldPos.y)); ListInsertBack(sprites, SpriteCreate(game->textures, 1, inputHandler->cursorWorldPos.x, inputHandler->cursorWorldPos.y));
ListInsertSorted(sprites, SpriteCreate(game->textures, 1, inputHandler->cursorWorldPos.x, inputHandler->cursorWorldPos.y)); //ListInsertSorted(sprites, SpriteCreate(game->textures, 1, inputHandler->cursorWorldPos.x, inputHandler->cursorWorldPos.y));
} }
} }

@ -207,6 +207,7 @@ void IsometricMapDraw(Game *game){
} }
} }
} }
//printf("\n\n\n");
Node *current = game->sprites->head; Node *current = game->sprites->head;
int extraPixels = 0; int extraPixels = 0;
@ -227,13 +228,17 @@ void IsometricMapDraw(Game *game){
} }
current = current->next; current = current->next;
} }
MergeSort(buckets, counter);
int hmmm = counter;
// Merge Sort ist scuffed
MergeSort(buckets, hmmm);
//printf("HÄÄÄÄÄÄ\n"); //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 -"); //printf("Tile begin -");
//printf("Tile %f\n", buckets[k]->depth);
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,
@ -242,11 +247,12 @@ void IsometricMapDraw(Game *game){
//printf("- Tile end \n"); //printf("- Tile end \n");
} }
else if(buckets[k]->type == 0){ else if(buckets[k]->type == 0){
//printf("Sprite begin -"); //printf("Sprite %f\n", buckets[k]->depth);
DrawSpriteToWorld(buckets[k]->sprite, game->layers, game->camera); DrawSpriteToWorld(buckets[k]->sprite, game->layers, game->camera);
//printf("- Sprite end \n"); //printf("- Sprite end \n");
} }
} }
//printf("\n\n");
} }

@ -203,60 +203,6 @@ void ListActAllSprites(Game *game){
} }
} }
// Sorting the sprites by y-coord, bruh
if(counter > 2 && current != game->sprites->tail){
if(current->data.y < current->prev->data.y){
Node *prepre = current->prev->prev;
Node *toBack = current->prev;
Node *toFront = current;
Node *back = current->next;
prepre->next = toFront;
toFront->next = toBack;
toFront->prev = prepre;
toBack->prev = toFront;
toBack->next = back;
back->prev = toBack;
}
}
else if(counter > 2 && current == game->sprites->tail){
if(current->data.y < current->prev->data.y){
Node *prepre = current->prev->prev;
Node *toBack = current->prev;
Node *toFront = current;
prepre->next = toFront;
toFront->next = toBack;
toFront->prev = prepre;
toBack->prev = toFront;
toBack->next = 0;
game->sprites->tail = toBack;
}
}
else if(counter == 2 && current != game->sprites->tail){
if(current->data.y < current->prev->data.y){
Node *toBack = current->prev;
Node *toFront = current;
Node *back = current->next;
toFront->next = toBack;
toBack->prev = toFront;
toBack->next = back;
back->prev = toBack;
toFront->prev = 0;
game->sprites->head = toFront;
}
}
else if(counter == 2 && current == game->sprites->tail){
if(current->data.y < current->prev->data.y){
Node *toBack = current->prev;
Node *toFront = current;
toBack->prev = toFront;
toBack->next = 0;
toFront->next = toBack;
toFront->prev = 0;
game->sprites->head = toFront;
game->sprites->tail = toBack;
}
}
SpriteUpdateAnimation(&current->data); SpriteUpdateAnimation(&current->data);
// updating z-position according to the tile the sprite stands on // updating z-position according to the tile the sprite stands on
Tile *floorTile = IsometricMapGetTileFromWorldCoordinates(game->layers, current->data.x, current->data.y, 0); Tile *floorTile = IsometricMapGetTileFromWorldCoordinates(game->layers, current->data.x, current->data.y, 0);

@ -67,7 +67,7 @@ Game *GameInit()
{ {
((game->layers))[n] = IsometricMapInit(n); ((game->layers))[n] = IsometricMapInit(n);
} }
/*
for (n = 0; n < 10; n++) for (n = 0; n < 10; n++)
{ {
for (i = 0; i < game->layers[n]->width; i++) for (i = 0; i < game->layers[n]->width; i++)
@ -122,7 +122,15 @@ Game *GameInit()
} }
} }
} }
*/
n = 0;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
IsometricMapChangeTextureIdOfTile(game->layers, i, j, n, 0);
}
}
// ------- // -------
return game; return game;

Loading…
Cancel
Save