#include "sprite.h" #include "raylib.h" #include #include #include "IsometricMap/isometricMap.h" #include "Textures/textureIDs.h" #include "Textures/animationHandler.h" #include "Textures/animation.h" #include "Textures/textureatlas.h" void SpriteAdd(Sprite *sprites, int *spriteAmount, Texture2D *texture, int x, int y){ /* if(*spriteAmount < 100){ (sprites + *spriteAmount) -> texture = texture; (sprites + *spriteAmount) -> x = x; (sprites + *spriteAmount) -> y = y; (sprites + *spriteAmount) -> destX = x; (sprites + *spriteAmount) -> destY = y; (sprites + *spriteAmount) -> hasDestination = 0; (sprites + *spriteAmount) -> selected = 0; (*spriteAmount)++; } else{ printf("Voll\n"); } */ } void DrawSpriteToWorld(Sprite *sprite, IsometricMap *map, Camera2D *camera){ // TODO: Nach y sortieren, bevor sie gedrawed werden // Wir müssen beachten, dass sie nach den unprojezierten Screen-Koordinaten sortiert werden müssen. // Macht es vielleicht sinn den Sprites auch einen Vector mit ihren Screen Koordinaten zu geben? Vector2 pos = {sprite->x, sprite->y}; IsometricMapUnproject(map, camera, pos.x, pos.y, &pos); // Also erst ab hier sortieren, mit den Werten aus dem pos Vector pos.x -= camera->target.x; pos.y -= camera->target.y; if(sprite->selected){ DrawTexture(*sprite->texture, pos.x - sprite->texture->width/4, pos.y - sprite->texture->height/4, BLACK); //DrawTexture(*sprite->texture, sprite->x, sprite->y, BLACK); } else{ DrawTexture(*sprite->texture, pos.x - sprite->texture->width/4, pos.y - sprite->texture->height/4, WHITE); } printf("%f %f \n", sprite->x, sprite->y); } void DrawSpriteToScreen(Sprite *sprite){ if(sprite->selected){ DrawTexture(*sprite->texture, sprite->x, sprite->y, WHITE); //DrawTexture(*sprite->texture, sprite->x, sprite->y, BLACK); } else{ DrawTexture(*sprite->texture, sprite->x, sprite->y, WHITE); } } void SpriteUpdateAnimation(Sprite *sprite){ AnimationUpdate(sprite->animationHandler); sprite->texture = sprite->animationHandler->currentFrame->texture; } Sprite * SpriteCreate(TextureAtlas *atlas, int textureID, int x, int y){ Sprite *newSprite = (Sprite *) malloc(sizeof(Sprite)); //AnimationHandler create //Animation **animations = atlas->workerAnimations; Animation **animations = 0; if(textureID == worker){ animations = atlas->workerAnimations; } else if(textureID == cursor){ // Nix } 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"); } AnimationHandler *newHandler = AnimationHandlerInit(animations); newSprite->animationHandler = newHandler; newSprite->texture = newSprite->animationHandler->currentFrame->texture; newSprite->x = x - newSprite->texture->width / 2; newSprite->y = y - newSprite->texture->height / 2; newSprite->destX = x; newSprite->destY = y; newSprite->hasDestination = 0; newSprite->selected = 0; return newSprite; }