parent
13b270aca6
commit
8152651c99
@ -0,0 +1,27 @@
|
||||
#include "bucket.h"
|
||||
#include "stdio.h"
|
||||
#include "stdlib.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;
|
||||
return bucket;
|
||||
}
|
||||
else if(tile != 0){
|
||||
bucket->type = 1;
|
||||
bucket->sprite = 0;
|
||||
bucket->tile = tile;
|
||||
bucket->depth = tile->x * TEXTUREWIDTH + tile->y * TEXTUREHEIGHT + 0.001 * tile->z;
|
||||
return bucket;
|
||||
}
|
||||
return 0;
|
||||
|
||||
}
|
||||
@ -0,0 +1,17 @@
|
||||
#ifndef BUCKET_H_
|
||||
#define BUCKET_H_
|
||||
#include "raylib.h"
|
||||
#include "../sprite.h"
|
||||
#include "../IsometricMap/tile.h"
|
||||
|
||||
typedef struct Bucket{
|
||||
int type; // 0: Sprite, 1: Tile
|
||||
Sprite *sprite;
|
||||
Tile *tile;
|
||||
float depth;
|
||||
} Bucket;
|
||||
|
||||
Bucket * BucketInit(Sprite *sprite, Tile *tile);
|
||||
|
||||
|
||||
#endif
|
||||
@ -0,0 +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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,9 @@
|
||||
#ifndef MERGESORT_H_
|
||||
#define MERGESORT_H_
|
||||
#include "raylib.h"
|
||||
#include "bucket.h"
|
||||
|
||||
void MergeSort(Bucket *liste[], int groesse);
|
||||
|
||||
|
||||
#endif
|
||||
Loading…
Reference in new issue