You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

167 lines
5.1 KiB

#include "textureatlas.h"
#include "stdlib.h"
#include "raylib.h"
#include "string.h"
#include "stdio.h"
TextureAtlas * TextureAtlasInit(){
TextureAtlas *textures = malloc(sizeof(TextureAtlas));
LoadCursorTextures(textures->cursorTextures, textures->cursorAnimation);
LoadWorkerTextures(textures->workerTextures);
LoadWorkerAnimations(textures->workerAnimations, textures->workerTextures);
//Das soll nicht hier hin, bin aber zu faul :|
textures->building = LoadTexture("assets/building.png");
Animation *buildingAnimation = AnimationInit();
AnimationInsertBack(buildingAnimation, &textures->building);
textures->buildingAnimation[0] = buildingAnimation;
textures->buildingAnimation[1] = buildingAnimation;
textures->buildingAnimation[2] = buildingAnimation;
textures->buildingAnimation[3] = buildingAnimation;
textures->buildingAnimation[4] = buildingAnimation;
textures->buildingAnimation[5] = buildingAnimation;
textures->buildingAnimation[6] = buildingAnimation;
textures->buildingAnimation[7] = buildingAnimation;
//Das soll nicht hier hin, bin aber zu faul :|
textures->baustelle = LoadTexture("assets/construction.png");
Animation *baustelleAnimation = AnimationInit();
AnimationInsertBack(baustelleAnimation, &textures->baustelle);
textures->baustelleAnimation[0] = baustelleAnimation;
textures->baustelleAnimation[1] = baustelleAnimation;
textures->baustelleAnimation[2] = baustelleAnimation;
textures->baustelleAnimation[3] = baustelleAnimation;
textures->baustelleAnimation[4] = baustelleAnimation;
textures->baustelleAnimation[5] = baustelleAnimation;
textures->baustelleAnimation[6] = baustelleAnimation;
textures->baustelleAnimation[7] = baustelleAnimation;
return textures;
}
void TextureAtlasLoadTextures(TextureAtlas *atlas){
int i;
for(i = 0; i < TE_AMOUNT; i++){
switch(i){
case TE_CURSOR:
//Laden
break;
case TE_WORKER:
// Laden
break;
}
}
}
void LoadCursorTextures(Texture2D *cursorTextures, Animation **cursorAnimation){
*cursorTextures = LoadTexture("assets/cursor.gif");
*(cursorTextures + 1) = LoadTexture("assets/cursor_down.gif");
Animation *new = AnimationInit();
AnimationInsertBack(new, cursorTextures);
cursorAnimation[0] = new;
}
void LoadWorkerTextures(Texture2D *workerTextures){
char beginning[30] = "assets/worker/walk-";
char filename[30] = "";
char number[3] = "";
char ending[5] = ".png";
// Since some Images need to be flipped, we have fewer pngs than textures later loaded. i counts textures
// file counts the filename and is incremented manually when needed
int i;
int file = 0;
for(i = 0; i < 104; i++){
// Concatenate the correct string for the filename (beginning + i + ending)
sprintf(number, "%d", file);
strcat(filename, beginning);
strcat(filename, number);
strcat(filename, ending);
//printf("file:%s:file\n", filename);
// Set correct values for next iteration
int lol = i % 8;
// TODO: walk und umackern läuft nicht bis 24 sondern nur 23
if(lol == 0){
*(workerTextures + i) = LoadTexture(filename);
printf("\n");
file++;
}
else if(lol == 2){
Image tmp = LoadImage(filename);
ImageFlipHorizontal(&tmp);
*(workerTextures + i) = LoadTextureFromImage(tmp);
printf("flipped\n");
file++;
}
else if(lol == 4){
Image tmp = LoadImage(filename);
ImageFlipHorizontal(&tmp);
*(workerTextures + i) = LoadTextureFromImage(tmp);
printf("flipped\n");
file++;
}
else if(lol == 6){
Image tmp = LoadImage(filename);
ImageFlipHorizontal(&tmp);
*(workerTextures + i) = LoadTextureFromImage(tmp);
printf("flipped\n");
file++;
}
else if(lol == 7){
*(workerTextures + i) = LoadTexture(filename);
printf("\n");
file++;
}
else{
*(workerTextures + i) = LoadTexture(filename);
printf("\n");
}
strcpy(filename, "");
strcpy(number, "");
if(i == 39){
strcpy(beginning, "assets/worker/umackern-");
file = 0;
}
else if(i == 79){
strcpy(beginning, "assets/worker/die-");
file = 0;
}
}
}
void LoadWorkerAnimations(Animation **workerAnimations, Texture2D *workerTextures){
int i;
int j;
int frame = 0;
for(i=0; i < 24; i++){
frame = i;
Animation *newAnimation = AnimationInit();
int obergrenze;
if(frame <= 79){
obergrenze = 5;
}
else{
obergrenze = 3;
}
for(j = 0; j < obergrenze; j++){
AnimationInsertBack(newAnimation, (workerTextures+frame));
frame += 8;
}
workerAnimations[i] = newAnimation;
}
}