bissl effizienter, sprites kaputt bruh, komische bug ich weiß net weiter :(, ich merge hier den main mal drauf, mal schauen was passiert

main
JanEhehalt 3 years ago
parent 8152651c99
commit 3c4d737199

@ -1,6 +1,8 @@
#include "bucket.h"
#include "stdio.h"
#include "stdlib.h"
#include "../sprite.h"
#include "../IsometricMap/tile.h"
#define TEXTUREWIDTH 32;
@ -19,7 +21,7 @@ Bucket * BucketInit(Sprite *sprite, Tile *tile){
bucket->type = 1;
bucket->sprite = 0;
bucket->tile = tile;
bucket->depth = tile->x * TEXTUREWIDTH + tile->y * TEXTUREHEIGHT + 0.001 * tile->z;
bucket->depth = tile->x * TEXTUREWIDTH + tile->y * TEXTUREHEIGHT + tile->z;
return bucket;
}
return 0;

@ -1,8 +1,9 @@
#ifndef BUCKET_H_
#define BUCKET_H_
#include "raylib.h"
#include "../sprite.h"
#include "../IsometricMap/tile.h"
typedef struct Sprite Sprite;
typedef struct Tile Tile;
typedef struct Bucket{
int type; // 0: Sprite, 1: Tile

@ -55,7 +55,7 @@ IsometricMap * IsometricMapInit(int layer){
tmp->offsetX = offset->x;
tmp->offsetY = offset->y;
free(offset);
tmp->sortable = BucketInit(0, tmp);
tiles[i][j] = tmp;
}
}
@ -143,22 +143,18 @@ Tile * IsometricMapGetTileFromWorldCoordinates(IsometricMap **isometricMap, floa
// Gives the most upper Tile above *tile
Tile * IsometricMapGetMostUpperTile(IsometricMap **isometricMap, Tile *tile){
Tile *ptr = (Tile *) malloc(sizeof(Tile *));
//Tile *ptr = (Tile *) malloc(sizeof(Tile *));
// hardcoded layer amount
int n = 9;
for(n=9;n>=0;n--){
if( tile->x < isometricMap[n]->width && tile->y < isometricMap[n]->height &&
tile->x >= 0 && tile->y >= 0 ){
if(isometricMap[n]->tiles[tile->x][tile->y]->textureId != -1){
ptr->x = isometricMap[n]->tiles[tile->x][tile->y]->x;
ptr->y = isometricMap[n]->tiles[tile->x][tile->y]->y;
ptr->z = isometricMap[n]->tiles[tile->x][tile->y]->z;
return ptr;
return isometricMap[n]->tiles[tile->x][tile->y];
}
}
}
ptr = 0;
return ptr;
return 0;
}
// changes to Texture ID of tile at x y on maplayer layer
@ -204,7 +200,7 @@ void IsometricMapDraw(Game *game){
if (game->layers[n]->tiles[i][j]->textureId == -1){
}
else{
buckets[counter] = BucketInit(0, game->layers[n]->tiles[i][j]);
buckets[counter] = game->layers[n]->tiles[i][j]->sortable;
++counter;
}
}
@ -225,27 +221,30 @@ void IsometricMapDraw(Game *game){
current->data.y > jtmp &&
current->data.x < maxI &&
current->data.y < maxJ){
buckets[counter] = BucketInit(&current->data, 0);
buckets[counter] = current->data.sortable;
++counter;
}
current = current->next;
}
MergeSort(buckets, counter);
//printf("HÄÄÄÄÄÄ\n");
int k = 0;
for(k = 0; k < counter; k++){
if(buckets[k]->type == 1){
//printf("Tile begin -");
DrawTexture(
game->layers[0]->tileTextures[buckets[k]->tile->textureId],
buckets[k]->tile->offsetX,
buckets[k]->tile->offsetY,
WHITE);
//printf("- Tile end \n");
}
else if(buckets[k]->type == 0){
//printf("Sprite begin -");
DrawSpriteToWorld(buckets[k]->sprite, game->layers, game->camera);
//printf("- Sprite end \n");
}
//free(buckets[k]);
}

@ -1,6 +1,7 @@
#ifndef TILE_H_
#define TILE_H_
#include "raylib.h"
#include "../DepthSorting/bucket.h"
// Tile with textureid = -1 wouldn't be drawed, would just be a placeholder tile
typedef struct Tile{
@ -10,6 +11,7 @@ typedef struct Tile{
int z;
int offsetX;
int offsetY;
Bucket *sortable;
} Tile;
#endif

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
game.o

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
list.o

Binary file not shown.

BIN
main.o

Binary file not shown.

Binary file not shown.

BIN
spiel

Binary file not shown.

@ -8,6 +8,7 @@
#include "Textures/animation.h"
#include "Textures/textureatlas.h"
#include "IsometricMap/tile.h"
#include "DepthSorting/bucket.h"
// @param deprecated
void SpriteAdd(Sprite *sprites, int *spriteAmount, Texture2D *texture, int x, int y){
@ -86,7 +87,7 @@ Sprite * SpriteCreate(TextureAtlas *atlas, int textureID, int x, int y){
animations = atlas->cursorAnimation;
}
else{
printf("\n\n\n\n\n\n\n\nSpriteCreate mit falscher ID aufgerufen oder ID nicht bekannt!!!\n\n\n\n\n\n\n\n");
printf("\n\n\n\n\n\n\n\nSpriteCreate mit falscher ID (%d) aufgerufen oder ID nicht bekannt!!!\n\n\n\n\n\n\n\n", textureID);
}
AnimationHandler *newHandler = AnimationHandlerInit(animations);
@ -100,5 +101,7 @@ Sprite * SpriteCreate(TextureAtlas *atlas, int textureID, int x, int y){
newSprite->hasDestination = 0;
newSprite->selected = 0;
newSprite->sortable = BucketInit(newSprite, 0);
return newSprite;
}

@ -4,6 +4,7 @@
#include "IsometricMap/isometricMap.h"
#include "Textures/animationHandler.h"
#include "Textures/textureatlas.h"
#include "DepthSorting/bucket.h"
typedef struct Sprite {
AnimationHandler *animationHandler;
@ -15,6 +16,7 @@ typedef struct Sprite {
float destY;
int hasDestination;
int selected;
Bucket *sortable;
} Sprite;
// @param deprecated

Binary file not shown.

Binary file not shown.

BIN
tile.o

Binary file not shown.
Loading…
Cancel
Save