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

@ -1,7 +1,9 @@
#include "bucket.h"
#include "stdlib.h"
#include "stdio.h"
/*
void MergeSort(Bucket *liste[], int groesse){
if(groesse > 1){
Bucket *haelfte1[groesse/2];
@ -15,8 +17,8 @@ void MergeSort(Bucket *liste[], int groesse){
MergeSort(haelfte1,groesse/2);
MergeSort(haelfte2,(groesse + 1)/2);
Bucket **pos1 = &haelfte1[0];
Bucket **pos2 = &haelfte2[0];
Bucket **pos1 = haelfte1;
Bucket **pos2 = haelfte2;
for(i = 0; i < groesse; ++i){
if((*pos1)->depth <= (*pos2)->depth){
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.y > maxHeight){ printf("OutOfBoundsDestination Spawn\n");}
else {
//ListInsertBack(sprites, SpriteCreate(game->textures, 1, inputHandler->cursorWorldPos.x, inputHandler->cursorWorldPos.y));
ListInsertSorted(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));
}
}

@ -207,6 +207,7 @@ void IsometricMapDraw(Game *game){
}
}
}
//printf("\n\n\n");
Node *current = game->sprites->head;
int extraPixels = 0;
@ -227,13 +228,17 @@ void IsometricMapDraw(Game *game){
}
current = current->next;
}
MergeSort(buckets, counter);
int hmmm = counter;
// Merge Sort ist scuffed
MergeSort(buckets, hmmm);
//printf("HÄÄÄÄÄÄ\n");
int k = 0;
for(k = 0; k < counter; k++){
if(buckets[k]->type == 1){
//printf("Tile begin -");
//printf("Tile %f\n", buckets[k]->depth);
DrawTexture(
game->layers[0]->tileTextures[buckets[k]->tile->textureId],
buckets[k]->tile->offsetX,
@ -242,11 +247,12 @@ void IsometricMapDraw(Game *game){
//printf("- Tile end \n");
}
else if(buckets[k]->type == 0){
//printf("Sprite begin -");
//printf("Sprite %f\n", buckets[k]->depth);
DrawSpriteToWorld(buckets[k]->sprite, game->layers, game->camera);
//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);
// updating z-position according to the tile the sprite stands on
Tile *floorTile = IsometricMapGetTileFromWorldCoordinates(game->layers, current->data.x, current->data.y, 0);

@ -67,7 +67,7 @@ Game *GameInit()
{
((game->layers))[n] = IsometricMapInit(n);
}
/*
for (n = 0; n < 10; n++)
{
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;

Loading…
Cancel
Save