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