|
|
|
|
@ -3,37 +3,67 @@
|
|
|
|
|
#include "stdlib.h"
|
|
|
|
|
#include "../sprite.h"
|
|
|
|
|
#include "../IsometricMap/tile.h"
|
|
|
|
|
#include "../main.c"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Bucket * BucketInit(Sprite *sprite, Tile *tile){
|
|
|
|
|
Bucket * BucketInit(void *data, int type){
|
|
|
|
|
Bucket *bucket = malloc(sizeof(Bucket));
|
|
|
|
|
if(sprite != 0){
|
|
|
|
|
bucket->type = 0;
|
|
|
|
|
bucket->sprite = sprite;
|
|
|
|
|
|
|
|
|
|
if(type == SPRITE){
|
|
|
|
|
bucket->sprite = (Sprite *) data;
|
|
|
|
|
bucket->tile = 0;
|
|
|
|
|
bucket->depth = sprite->x + sprite->y + sprite->z;
|
|
|
|
|
bucket->depth = bucket->sprite->x + bucket->sprite->y + bucket->sprite->z;
|
|
|
|
|
}
|
|
|
|
|
else if(tile != 0){
|
|
|
|
|
bucket->type = 1;
|
|
|
|
|
else if(type == TILE){
|
|
|
|
|
bucket->sprite = 0;
|
|
|
|
|
bucket->tile = tile;
|
|
|
|
|
bucket->depth = tile->x * 32 + tile->y * 32 + tile->z;
|
|
|
|
|
bucket->tile = (Tile *) data;
|
|
|
|
|
bucket->depth = bucket->tile->x * 32 + bucket->tile->y * 32 + bucket->tile->z;
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
printf("WARNING: BucketInit called with unknown type! Undefined behavior expected\n");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bucket->next = 0;
|
|
|
|
|
bucket->prev = 0;
|
|
|
|
|
bucket->type = type;
|
|
|
|
|
|
|
|
|
|
bucket->left = 0;
|
|
|
|
|
bucket->right = 0;
|
|
|
|
|
|
|
|
|
|
return bucket;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void BucketInsert(Bucket *head, Bucket *new){
|
|
|
|
|
Bucket *current = head;
|
|
|
|
|
|
|
|
|
|
while(current != 0){
|
|
|
|
|
if(current->depth > new->depth){
|
|
|
|
|
// Rechter Teilbaum
|
|
|
|
|
if(current->right != 0){
|
|
|
|
|
current = current->right;
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
current->right = new;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
// Linker Teilbaum
|
|
|
|
|
if(current->left != 0){
|
|
|
|
|
current = current->left;
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
current->left = new;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void BucketRemove(Bucket *head, Bucket *new){
|
|
|
|
|
if(new->left == 0){
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void BucketRemove(Bucket *new){
|
|
|
|
|
new->next->prev = new->prev;
|
|
|
|
|
new->prev->next = new->next;
|
|
|
|
|
void BucketChanged(Bucket *head, Bucket *changed){
|
|
|
|
|
|
|
|
|
|
free(new);
|
|
|
|
|
}
|