From 9397431d41c196afb184a7c5423b7fc871bb0131 Mon Sep 17 00:00:00 2001 From: Jonathan Hager Date: Thu, 12 Jan 2023 00:23:50 +0100 Subject: [PATCH 1/5] Funktioniert halb --- Entity/entity.c | 42 ++++++++++++++++++++++++++++++++++++- Entity/entity.h | 5 ++++- Entity/professions.h | 7 +++++++ Entity/task.c | 8 +++++++ Entity/task.h | 12 +++++++++++ Input/inputHandler.c | 14 ++++++++++++- IsometricMap/isometricMap.c | 1 - Makefile | 5 ++++- MapObject/mapobject.c | 3 ++- MapObject/mapobject.h | 3 ++- MapObject/mapobjectIDs.h | 16 ++++++++++++++ Sprite/sprite.c | 10 +++++++-- Textures/animationHandler.c | 4 +++- Textures/textureIDs.h | 8 ++++--- Textures/textureatlas.c | 27 ++++++++++++++++++++++++ Textures/textureatlas.h | 8 ++++++- main.c | 4 +++- 17 files changed, 162 insertions(+), 15 deletions(-) create mode 100644 Entity/professions.h create mode 100644 Entity/task.c create mode 100644 Entity/task.h create mode 100644 MapObject/mapobjectIDs.h diff --git a/Entity/entity.c b/Entity/entity.c index 62db4e5..bc49c37 100644 --- a/Entity/entity.c +++ b/Entity/entity.c @@ -3,8 +3,12 @@ #include #include #include "../Sprite/sprite.h" +#include "../MapObject/mapobject.h" +#include "../MapObject/mapobjectIDs.h" +#include "../Entity/professions.h" +#include "../Textures/textureIDs.h" -Entity * EntityInit(Sprite *sprite){ +Entity * EntityInit(Sprite *sprite, int profession){ Entity *new = malloc(sizeof(Entity)); new->sprite = sprite; @@ -14,6 +18,8 @@ Entity * EntityInit(Sprite *sprite){ new->selected = 0; new->next = 0; new->prev = 0; + new->task = TaskInit(); + new->profession = profession; return new; } @@ -101,6 +107,40 @@ void EntityListActAllEntities(Game *game){ } } + else{ + if(current->profession == PR_BUILDER){ + if(current->task->target == 0){ + // Prüft, ob eine Baustelle existiert + MapObject *currentMO = game->mapObjects->head; + while(currentMO != 0){ + if(currentMO->id == MO_Baustelle){ + current->hasDestination = 1; + current->destX = currentMO->sprite->x; + current->destY = currentMO->sprite->y; + current->task->target = currentMO; + break; + } + currentMO = currentMO->next; + } + } + else{ + // Is beim target angekommen + MapObject *obj = current->task->target; + printf("Hier\n"); + Sprite *new = SpriteCreate(game->textures, 2, obj->sprite->x, obj->sprite->y); + SpriteListRemove(game->sprites, obj->sprite); + SpriteListInsert(game->sprites, new); + free(obj->sprite); + MapObject *newObject = MapObjectInit(new, MO_Building); + MapObjectListRemove(game->mapObjects, obj); + MapObjectListInsert(game->mapObjects, newObject); + current->task->target = 0; + free(obj); + } + + } + + } SpriteUpdate(current->sprite); diff --git a/Entity/entity.h b/Entity/entity.h index 672bfc4..4390565 100644 --- a/Entity/entity.h +++ b/Entity/entity.h @@ -2,6 +2,7 @@ #define ENTITY_H_ #include "../Sprite/sprite.h" #include "../game.h" +#include "task.h" typedef struct Entity Entity; @@ -11,6 +12,8 @@ typedef struct Entity{ float destY; int hasDestination; int selected; + Task *task; + int profession; Entity *next; Entity *prev; @@ -21,7 +24,7 @@ typedef struct EntityList{ Entity *tail; } EntityList; -Entity * EntityInit(Sprite *sprite); +Entity * EntityInit(Sprite *sprite, int profession); EntityList * EntityListInit(); void EntityListPrintForward(EntityList *entities); diff --git a/Entity/professions.h b/Entity/professions.h new file mode 100644 index 0000000..a46a3e6 --- /dev/null +++ b/Entity/professions.h @@ -0,0 +1,7 @@ +#ifndef PROFESSIONS_H_ +#define PROFESSIONS_H_ + +#define PR_NOWORK 0 +#define PR_BUILDER 1 + +#endif \ No newline at end of file diff --git a/Entity/task.c b/Entity/task.c new file mode 100644 index 0000000..b2f3db4 --- /dev/null +++ b/Entity/task.c @@ -0,0 +1,8 @@ +#include +#include "task.h" + +Task * TaskInit(){ + Task *new = malloc(sizeof(Task)); + new->target = 0; + return new; +} \ No newline at end of file diff --git a/Entity/task.h b/Entity/task.h new file mode 100644 index 0000000..3c99985 --- /dev/null +++ b/Entity/task.h @@ -0,0 +1,12 @@ +#ifndef TASK_H_ +#define TASK_H_ + +typedef struct Task Task; + +typedef struct Task{ + void *target; +} Task; + +Task * TaskInit(); + +#endif \ No newline at end of file diff --git a/Input/inputHandler.c b/Input/inputHandler.c index 2beba3c..5ac3098 100644 --- a/Input/inputHandler.c +++ b/Input/inputHandler.c @@ -3,11 +3,15 @@ #include "../Sprite/sprite.h" #include "../IsometricMap/isometricMap.h" #include "../Entity/entity.h" +#include "../MapObject/mapobject.h" #include #include #include #include "../IsometricMap/tile.h" #include "../game.h" +#include "../MapObject/mapobjectIDs.h" +#include "../Entity/professions.h" +//#include "../Textures/textureIDs.h" void DrawRect(Vector2 rectStart, Vector2 *mousePosition){ float width = GetMousePosition().x - rectStart.x; @@ -69,6 +73,14 @@ void mouseInput(Game *game){ IsometricMapChangeTextureIdOfTile(map, (int) inputHandler->cursorWorldTile.x, (int) inputHandler->cursorWorldTile.y, 0); } + if(IsKeyPressed(KEY_G)){ + // Baustelle adden + Sprite *new = SpriteCreate(game->textures, 3, inputHandler->cursorWorldPos.x, inputHandler->cursorWorldPos.y); + MapObject *newObject = MapObjectInit(new, MO_Baustelle); + SpriteListInsert(game->sprites, new); + MapObjectListInsert(game->mapObjects, newObject); + } + // hardcoded layer amount float tileWidthHalf = map->tileTextures[0].width / 2; float tileHeightQuarter = map->tileTextures[0].height / 4; @@ -126,7 +138,7 @@ void mouseInput(Game *game){ else if(inputHandler->cursorWorldPos.y > maxHeight){ printf("OutOfBoundsDestination Spawn\n");} else { Sprite *newSprite = SpriteCreate(game->textures, 1, inputHandler->cursorWorldPos.x, inputHandler->cursorWorldPos.y); - Entity *entity = EntityInit(newSprite); + Entity *entity = EntityInit(newSprite, PR_BUILDER); EntityListInsert(game->entities, entity); SpriteListInsert(game->sprites, newSprite); //ListPrintForward(sprites); diff --git a/IsometricMap/isometricMap.c b/IsometricMap/isometricMap.c index cc92c2f..aa151fb 100644 --- a/IsometricMap/isometricMap.c +++ b/IsometricMap/isometricMap.c @@ -165,5 +165,4 @@ void IsometricMapDraw(Game *game){ } } - SpriteListDrawAllSprites(game->sprites, game->map, game->camera); } diff --git a/Makefile b/Makefile index 2cd745e..289daa3 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ CC = gcc FLAGS = -lraylib -lGL -lm -lpthread -ldl -lrt -lX11 -OBJS = main.o sprite.o inputHandler.o isometricMap.o game.o textureatlas.o animation.o animationHandler.o button.o uiContainer.o debug.o mapobject.o entity.o +OBJS = main.o sprite.o inputHandler.o isometricMap.o game.o textureatlas.o animation.o animationHandler.o button.o uiContainer.o debug.o mapobject.o entity.o task.o spiel: $(OBJS) $(CC) -o spiel $(OBJS) $(FLAGS) @@ -44,5 +44,8 @@ entity.o: Entity/entity.c mapobject.o: MapObject/mapobject.c $(CC) -c MapObject/mapobject.c $(FLAGS) +task.o: Entity/task.c + $(CC) -c Entity/task.c $(FLAGS) + clean: rm *.o spiel diff --git a/MapObject/mapobject.c b/MapObject/mapobject.c index b30e3d6..7a1b124 100644 --- a/MapObject/mapobject.c +++ b/MapObject/mapobject.c @@ -1,10 +1,11 @@ #include "mapobject.h" #include -MapObject * MapObjectInit(Sprite *sprite){ +MapObject * MapObjectInit(Sprite *sprite, int id){ MapObject *new = malloc(sizeof(MapObject)); new->sprite = sprite; + new->id = id; new->next = 0; new->prev = 0; diff --git a/MapObject/mapobject.h b/MapObject/mapobject.h index 44a570c..68fd140 100644 --- a/MapObject/mapobject.h +++ b/MapObject/mapobject.h @@ -7,6 +7,7 @@ typedef struct MapObjectList MapObjectList; typedef struct MapObject{ Sprite *sprite; + int id; MapObject *next; MapObject *prev; @@ -17,7 +18,7 @@ typedef struct MapObjectList{ MapObject *tail; } MapObjectList; -MapObject * MapObjectInit(Sprite *sprite); +MapObject * MapObjectInit(Sprite *sprite, int id); MapObjectList * MapObjectListInit(); void MapObjectListPrintForward(MapObjectList *mapObjects); diff --git a/MapObject/mapobjectIDs.h b/MapObject/mapobjectIDs.h new file mode 100644 index 0000000..8bc91d7 --- /dev/null +++ b/MapObject/mapobjectIDs.h @@ -0,0 +1,16 @@ +#ifndef TEXTUREIDS_H_ +#define TEXTUREIDS_H_ + +#define N 0 +#define NE 1 +#define E 3 +#define SE 5 +#define S 7 +#define SW 6 +#define W 4 +#define NW 2 + +#define MO_Baustelle 0 +#define MO_Building 1 + +#endif \ No newline at end of file diff --git a/Sprite/sprite.c b/Sprite/sprite.c index 865d55a..e6466ef 100644 --- a/Sprite/sprite.c +++ b/Sprite/sprite.c @@ -86,12 +86,18 @@ Sprite * SpriteCreate(TextureAtlas *atlas, int textureID, int x, int y){ //AnimationHandler create Animation **animations = 0; - if(textureID == worker){ + if(textureID == TE_worker){ animations = atlas->workerAnimations; } - else if(textureID == cursor){ + else if(textureID == TE_cursor){ animations = atlas->cursorAnimation; } + else if(textureID == TE_building){ + animations = atlas->buildingAnimation; + } + else if(textureID == TE_baustelle){ + animations = atlas->baustelleAnimation; + } else{ 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); } diff --git a/Textures/animationHandler.c b/Textures/animationHandler.c index 968dd4a..11e88cd 100644 --- a/Textures/animationHandler.c +++ b/Textures/animationHandler.c @@ -11,6 +11,8 @@ AnimationHandler * AnimationHandlerInit(Animation **animations){ new->currentFrame = new->animations[new->currentAnimation]->head; new->forward = 1; new->deltaElapsed = 0; + + return new; } void AnimationUpdate(AnimationHandler *animationHandler){ @@ -39,4 +41,4 @@ void AnimationChangeAnimation(AnimationHandler *animationHandler, int newAnimati AnimationReset(animationHandler); } -} \ No newline at end of file +} diff --git a/Textures/textureIDs.h b/Textures/textureIDs.h index 1cb932c..5a60e99 100644 --- a/Textures/textureIDs.h +++ b/Textures/textureIDs.h @@ -10,7 +10,9 @@ #define W 4 #define NW 2 -#define cursor 0 -#define worker 1 +#define TE_cursor 0 +#define TE_worker 1 +#define TE_building 2 +#define TE_baustelle 3 -#endif \ No newline at end of file +#endif diff --git a/Textures/textureatlas.c b/Textures/textureatlas.c index 353cdcf..d35e157 100644 --- a/Textures/textureatlas.c +++ b/Textures/textureatlas.c @@ -6,10 +6,37 @@ 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; } diff --git a/Textures/textureatlas.h b/Textures/textureatlas.h index 1199d77..abecee1 100644 --- a/Textures/textureatlas.h +++ b/Textures/textureatlas.h @@ -12,6 +12,12 @@ typedef struct TextureAtlas{ Texture2D workerTextures[104]; Animation *workerAnimations[24]; + Texture2D building; + Animation *buildingAnimation[8]; + + Texture2D baustelle; + Animation *baustelleAnimation[8]; + //Texture2D[] mapTextures; } TextureAtlas; @@ -21,4 +27,4 @@ void LoadCursorTextures(Texture2D *cursorTextures, Animation **cursorAnimation); void LoadWorkerTextures(Texture2D *workerTextures); void LoadWorkerAnimations(Animation **workerAnimations, Texture2D *workerTextures); -#endif \ No newline at end of file +#endif diff --git a/main.c b/main.c index 5388ce6..d7a3bdf 100644 --- a/main.c +++ b/main.c @@ -52,12 +52,14 @@ int main(){ return 0; case SCREEN_GAME: - // Updating Sprites + // Updating Entities EntityListActAllEntities(game); // Drawing IsometricMap BeginMode2D(*(game->camera)); // Sorgt dafür, dass die Kameraposition beachtet wird IsometricMapDraw(game); + + SpriteListDrawAllSprites(game->sprites, game->map, game->camera); EndMode2D(); // User Input Handling From e9282a62fba54bfea93f4178b693db1a44ee9f8e Mon Sep 17 00:00:00 2001 From: Jonathan Hager Date: Sun, 15 Jan 2023 22:45:24 +0100 Subject: [PATCH 2/5] Zwischenstand --- Entity/entity.c | 43 ++++++++++++++++--- Entity/entity.h | 3 ++ Entity/professions.h | 7 --- MapObject/mapobjectIDs.h | 16 ------- Sprite/sprite.c | 36 +--------------- Sprite/sprite.h | 2 - Textures/animationHandler.c | 12 +++--- Textures/animationHandler.h | 5 ++- Textures/textureIDs.h | 18 -------- Textures/textureatlas.c | 14 ++++++ Textures/textureatlas.h | 7 ++- assets/{ => entities}/worker/die-0.png | Bin assets/{ => entities}/worker/die-1.png | Bin assets/{ => entities}/worker/die-10.png | Bin assets/{ => entities}/worker/die-11.png | Bin assets/{ => entities}/worker/die-12.png | Bin assets/{ => entities}/worker/die-13.png | Bin assets/{ => entities}/worker/die-14.png | Bin assets/{ => entities}/worker/die-2.png | Bin assets/{ => entities}/worker/die-3.png | Bin assets/{ => entities}/worker/die-4.png | Bin assets/{ => entities}/worker/die-5.png | Bin assets/{ => entities}/worker/die-6.png | Bin assets/{ => entities}/worker/die-7.png | Bin assets/{ => entities}/worker/die-8.png | Bin assets/{ => entities}/worker/die-9.png | Bin assets/{ => entities}/worker/die.png | Bin assets/{ => entities}/worker/umackern-0.png | Bin assets/{ => entities}/worker/umackern-1.png | Bin assets/{ => entities}/worker/umackern-10.png | Bin assets/{ => entities}/worker/umackern-11.png | Bin assets/{ => entities}/worker/umackern-12.png | Bin assets/{ => entities}/worker/umackern-13.png | Bin assets/{ => entities}/worker/umackern-14.png | Bin assets/{ => entities}/worker/umackern-15.png | Bin assets/{ => entities}/worker/umackern-16.png | Bin assets/{ => entities}/worker/umackern-17.png | Bin assets/{ => entities}/worker/umackern-18.png | Bin assets/{ => entities}/worker/umackern-19.png | Bin assets/{ => entities}/worker/umackern-2.png | Bin assets/{ => entities}/worker/umackern-20.png | Bin assets/{ => entities}/worker/umackern-21.png | Bin assets/{ => entities}/worker/umackern-22.png | Bin assets/{ => entities}/worker/umackern-23.png | Bin assets/{ => entities}/worker/umackern-24.png | Bin assets/{ => entities}/worker/umackern-3.png | Bin assets/{ => entities}/worker/umackern-4.png | Bin assets/{ => entities}/worker/umackern-5.png | Bin assets/{ => entities}/worker/umackern-6.png | Bin assets/{ => entities}/worker/umackern-7.png | Bin assets/{ => entities}/worker/umackern-8.png | Bin assets/{ => entities}/worker/umackern-9.png | Bin assets/{ => entities}/worker/umackern.png | Bin assets/{ => entities}/worker/walk-0.png | Bin assets/{ => entities}/worker/walk-1.png | Bin assets/{ => entities}/worker/walk-10.png | Bin assets/{ => entities}/worker/walk-11.png | Bin assets/{ => entities}/worker/walk-12.png | Bin assets/{ => entities}/worker/walk-13.png | Bin assets/{ => entities}/worker/walk-14.png | Bin assets/{ => entities}/worker/walk-15.png | Bin assets/{ => entities}/worker/walk-16.png | Bin assets/{ => entities}/worker/walk-17.png | Bin assets/{ => entities}/worker/walk-18.png | Bin assets/{ => entities}/worker/walk-19.png | Bin assets/{ => entities}/worker/walk-2.png | Bin assets/{ => entities}/worker/walk-20.png | Bin assets/{ => entities}/worker/walk-21.png | Bin assets/{ => entities}/worker/walk-22.png | Bin assets/{ => entities}/worker/walk-23.png | Bin assets/{ => entities}/worker/walk-24.png | Bin assets/{ => entities}/worker/walk-3.png | Bin assets/{ => entities}/worker/walk-4.png | Bin assets/{ => entities}/worker/walk-5.png | Bin assets/{ => entities}/worker/walk-6.png | Bin assets/{ => entities}/worker/walk-7.png | Bin assets/{ => entities}/worker/walk-8.png | Bin assets/{ => entities}/worker/walk-9.png | Bin assets/{ => entities}/worker/walk.png | Bin assets/{ => entities}/worker/worker.png | Bin definitions.h | 22 ++++++++++ 81 files changed, 92 insertions(+), 93 deletions(-) delete mode 100644 Entity/professions.h delete mode 100644 MapObject/mapobjectIDs.h delete mode 100644 Textures/textureIDs.h rename assets/{ => entities}/worker/die-0.png (100%) rename assets/{ => entities}/worker/die-1.png (100%) rename assets/{ => entities}/worker/die-10.png (100%) rename assets/{ => entities}/worker/die-11.png (100%) rename assets/{ => entities}/worker/die-12.png (100%) rename assets/{ => entities}/worker/die-13.png (100%) rename assets/{ => entities}/worker/die-14.png (100%) rename assets/{ => entities}/worker/die-2.png (100%) rename assets/{ => entities}/worker/die-3.png (100%) rename assets/{ => entities}/worker/die-4.png (100%) rename assets/{ => entities}/worker/die-5.png (100%) rename assets/{ => entities}/worker/die-6.png (100%) rename assets/{ => entities}/worker/die-7.png (100%) rename assets/{ => entities}/worker/die-8.png (100%) rename assets/{ => entities}/worker/die-9.png (100%) rename assets/{ => entities}/worker/die.png (100%) rename assets/{ => entities}/worker/umackern-0.png (100%) rename assets/{ => entities}/worker/umackern-1.png (100%) rename assets/{ => entities}/worker/umackern-10.png (100%) rename assets/{ => entities}/worker/umackern-11.png (100%) rename assets/{ => entities}/worker/umackern-12.png (100%) rename assets/{ => entities}/worker/umackern-13.png (100%) rename assets/{ => entities}/worker/umackern-14.png (100%) rename assets/{ => entities}/worker/umackern-15.png (100%) rename assets/{ => entities}/worker/umackern-16.png (100%) rename assets/{ => entities}/worker/umackern-17.png (100%) rename assets/{ => entities}/worker/umackern-18.png (100%) rename assets/{ => entities}/worker/umackern-19.png (100%) rename assets/{ => entities}/worker/umackern-2.png (100%) rename assets/{ => entities}/worker/umackern-20.png (100%) rename assets/{ => entities}/worker/umackern-21.png (100%) rename assets/{ => entities}/worker/umackern-22.png (100%) rename assets/{ => entities}/worker/umackern-23.png (100%) rename assets/{ => entities}/worker/umackern-24.png (100%) rename assets/{ => entities}/worker/umackern-3.png (100%) rename assets/{ => entities}/worker/umackern-4.png (100%) rename assets/{ => entities}/worker/umackern-5.png (100%) rename assets/{ => entities}/worker/umackern-6.png (100%) rename assets/{ => entities}/worker/umackern-7.png (100%) rename assets/{ => entities}/worker/umackern-8.png (100%) rename assets/{ => entities}/worker/umackern-9.png (100%) rename assets/{ => entities}/worker/umackern.png (100%) rename assets/{ => entities}/worker/walk-0.png (100%) rename assets/{ => entities}/worker/walk-1.png (100%) rename assets/{ => entities}/worker/walk-10.png (100%) rename assets/{ => entities}/worker/walk-11.png (100%) rename assets/{ => entities}/worker/walk-12.png (100%) rename assets/{ => entities}/worker/walk-13.png (100%) rename assets/{ => entities}/worker/walk-14.png (100%) rename assets/{ => entities}/worker/walk-15.png (100%) rename assets/{ => entities}/worker/walk-16.png (100%) rename assets/{ => entities}/worker/walk-17.png (100%) rename assets/{ => entities}/worker/walk-18.png (100%) rename assets/{ => entities}/worker/walk-19.png (100%) rename assets/{ => entities}/worker/walk-2.png (100%) rename assets/{ => entities}/worker/walk-20.png (100%) rename assets/{ => entities}/worker/walk-21.png (100%) rename assets/{ => entities}/worker/walk-22.png (100%) rename assets/{ => entities}/worker/walk-23.png (100%) rename assets/{ => entities}/worker/walk-24.png (100%) rename assets/{ => entities}/worker/walk-3.png (100%) rename assets/{ => entities}/worker/walk-4.png (100%) rename assets/{ => entities}/worker/walk-5.png (100%) rename assets/{ => entities}/worker/walk-6.png (100%) rename assets/{ => entities}/worker/walk-7.png (100%) rename assets/{ => entities}/worker/walk-8.png (100%) rename assets/{ => entities}/worker/walk-9.png (100%) rename assets/{ => entities}/worker/walk.png (100%) rename assets/{ => entities}/worker/worker.png (100%) create mode 100644 definitions.h diff --git a/Entity/entity.c b/Entity/entity.c index bc49c37..313ac98 100644 --- a/Entity/entity.c +++ b/Entity/entity.c @@ -4,13 +4,12 @@ #include #include "../Sprite/sprite.h" #include "../MapObject/mapobject.h" -#include "../MapObject/mapobjectIDs.h" -#include "../Entity/professions.h" #include "../Textures/textureIDs.h" Entity * EntityInit(Sprite *sprite, int profession){ Entity *new = malloc(sizeof(Entity)); - + + new->angle = 0; new->sprite = sprite; new->destX = 0; new->destY = 0; @@ -103,9 +102,40 @@ void EntityListActAllEntities(Game *game){ angle = angle * RAD2DEG; angle -= 35.26; - current->sprite->angle = angle; - + if(angle <= 22.5 && angle >= -22.5){ + // E + AnimationChangeAnimation(current->animationHandler, E); + } + else if(angle > 0 && angle <= 67.5){ + // NE + AnimationChangeAnimation(current->animationHandler, NE); + } + else if(angle > 0 && angle <= 112.5){ + // N + AnimationChangeAnimation(current->animationHandler, N); + } + else if(angle > 0 && angle <= 157.5){ + // NW + AnimationChangeAnimation(current->animationHandler, NW); + } + else if(angle < 0 && angle >= -67.5){ + // SE + AnimationChangeAnimation(current->animationHandler, SE); + } + else if(angle < 0 && angle >= -112.5){ + // S + AnimationChangeAnimation(current->animationHandler, S); + } + else if(angle < 0 && angle >= -157.5){ + // SW + AnimationChangeAnimation(current->animationHandler, SW); + } + else{ + // W + AnimationChangeAnimation(current->animationHandler, W); + } } + } else{ if(current->profession == PR_BUILDER){ @@ -142,8 +172,9 @@ void EntityListActAllEntities(Game *game){ } - SpriteUpdate(current->sprite); + AnimationUpdate(current->animationHandler); + SpriteUpdate(current->sprite); SpriteListSpriteChanged(game->sprites, current->sprite); current = current->next; diff --git a/Entity/entity.h b/Entity/entity.h index 4390565..b2448fc 100644 --- a/Entity/entity.h +++ b/Entity/entity.h @@ -3,11 +3,14 @@ #include "../Sprite/sprite.h" #include "../game.h" #include "task.h" +#include "../Textures/animationHandler.h" typedef struct Entity Entity; typedef struct Entity{ Sprite *sprite; + AnimationHandler animationHandler; + float angle; float destX; float destY; int hasDestination; diff --git a/Entity/professions.h b/Entity/professions.h deleted file mode 100644 index a46a3e6..0000000 --- a/Entity/professions.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef PROFESSIONS_H_ -#define PROFESSIONS_H_ - -#define PR_NOWORK 0 -#define PR_BUILDER 1 - -#endif \ No newline at end of file diff --git a/MapObject/mapobjectIDs.h b/MapObject/mapobjectIDs.h deleted file mode 100644 index 8bc91d7..0000000 --- a/MapObject/mapobjectIDs.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef TEXTUREIDS_H_ -#define TEXTUREIDS_H_ - -#define N 0 -#define NE 1 -#define E 3 -#define SE 5 -#define S 7 -#define SW 6 -#define W 4 -#define NW 2 - -#define MO_Baustelle 0 -#define MO_Building 1 - -#endif \ No newline at end of file diff --git a/Sprite/sprite.c b/Sprite/sprite.c index e6466ef..d53bf1d 100644 --- a/Sprite/sprite.c +++ b/Sprite/sprite.c @@ -43,41 +43,7 @@ void SpriteUpdate(Sprite *sprite){ sprite->depth = sprite->x + sprite->y + sprite->z; - if(sprite->angle <= 22.5 && sprite->angle >= -22.5){ - // E - AnimationChangeAnimation(sprite->animationHandler, E); - } - else if(sprite->angle > 0 && sprite->angle <= 67.5){ - // NE - AnimationChangeAnimation(sprite->animationHandler, NE); - } - else if(sprite->angle > 0 && sprite->angle <= 112.5){ - // N - AnimationChangeAnimation(sprite->animationHandler, N); - } - else if(sprite->angle > 0 && sprite->angle <= 157.5){ - // NW - AnimationChangeAnimation(sprite->animationHandler, NW); - } - else if(sprite->angle < 0 && sprite->angle >= -67.5){ - // SE - AnimationChangeAnimation(sprite->animationHandler, SE); - } - else if(sprite->angle < 0 && sprite->angle >= -112.5){ - // S - AnimationChangeAnimation(sprite->animationHandler, S); - } - else if(sprite->angle < 0 && sprite->angle >= -157.5){ - // SW - AnimationChangeAnimation(sprite->animationHandler, SW); - } - else{ - // W - AnimationChangeAnimation(sprite->animationHandler, W); - } - - AnimationUpdate(sprite->animationHandler); - sprite->texture = sprite->animationHandler->currentFrame->texture; +// sprite->texture = sprite->animationHandler->currentFrame->texture; } Sprite * SpriteCreate(TextureAtlas *atlas, int textureID, int x, int y){ diff --git a/Sprite/sprite.h b/Sprite/sprite.h index a4dbf1c..8f819e8 100644 --- a/Sprite/sprite.h +++ b/Sprite/sprite.h @@ -9,13 +9,11 @@ typedef struct Sprite Sprite; typedef struct SpriteList SpriteList; typedef struct Sprite { - AnimationHandler *animationHandler; Texture2D *texture; float x; float y; float z; float depth; - float angle; Sprite *next; Sprite *prev; diff --git a/Textures/animationHandler.c b/Textures/animationHandler.c index 11e88cd..d832875 100644 --- a/Textures/animationHandler.c +++ b/Textures/animationHandler.c @@ -1,11 +1,12 @@ #include "animationHandler.h" #include "animation.h" -#include "stdlib.h" -#include "stdio.h" +#include +#include -AnimationHandler * AnimationHandlerInit(Animation **animations){ +AnimationHandler * AnimationHandlerInit(Animation **animations, Texture2D **spriteTexture){ AnimationHandler *new = malloc(sizeof(AnimationHandler)); + new->spriteTexture = spriteTexture; new->animations = animations; new->currentAnimation = 0; new->currentFrame = new->animations[new->currentAnimation]->head; @@ -17,7 +18,7 @@ AnimationHandler * AnimationHandlerInit(Animation **animations){ void AnimationUpdate(AnimationHandler *animationHandler){ animationHandler->deltaElapsed += GetFrameTime(); - + if(animationHandler->deltaElapsed >= 0.2){ if(animationHandler->forward == 1){ animationHandler->currentFrame = animationHandler->currentFrame->next; @@ -28,11 +29,13 @@ void AnimationUpdate(AnimationHandler *animationHandler){ animationHandler->deltaElapsed = 0; } + *(animationHandler->spriteTexture) = animationHandler->currentFrame->texture; } void AnimationReset(AnimationHandler *animationHandler){ animationHandler->currentFrame = animationHandler->animations[animationHandler->currentAnimation]->head; + *(animationHandler->spriteTexture) = animationHandler->currentFrame->texture; } void AnimationChangeAnimation(AnimationHandler *animationHandler, int newAnimation){ @@ -40,5 +43,4 @@ void AnimationChangeAnimation(AnimationHandler *animationHandler, int newAnimati animationHandler->currentAnimation = newAnimation; AnimationReset(animationHandler); } - } diff --git a/Textures/animationHandler.h b/Textures/animationHandler.h index 739b868..1dbd414 100644 --- a/Textures/animationHandler.h +++ b/Textures/animationHandler.h @@ -9,14 +9,15 @@ typedef struct AnimationHandler AnimationHandler; typedef struct AnimationHandler{ Animation **animations; AnimationFrame *currentFrame; + Texture2D **spriteTexture; int currentAnimation; int forward; float deltaElapsed; } AnimationHandler; -AnimationHandler * AnimationHandlerInit(Animation **animations); +AnimationHandler * AnimationHandlerInit(Animation **animations, Texture2D **spriteTexture); void AnimationUpdate(AnimationHandler *animationHandler); void AnimationReset(AnimationHandler *animationHandler); void AnimationChangeAnimation(AnimationHandler *animationHandler, int newAnimation); -#endif \ No newline at end of file +#endif diff --git a/Textures/textureIDs.h b/Textures/textureIDs.h deleted file mode 100644 index 5a60e99..0000000 --- a/Textures/textureIDs.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef TEXTUREIDS_H_ -#define TEXTUREIDS_H_ - -#define N 0 -#define NE 1 -#define E 3 -#define SE 5 -#define S 7 -#define SW 6 -#define W 4 -#define NW 2 - -#define TE_cursor 0 -#define TE_worker 1 -#define TE_building 2 -#define TE_baustelle 3 - -#endif diff --git a/Textures/textureatlas.c b/Textures/textureatlas.c index d35e157..48f15dd 100644 --- a/Textures/textureatlas.c +++ b/Textures/textureatlas.c @@ -41,6 +41,20 @@ TextureAtlas * TextureAtlasInit(){ 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"); diff --git a/Textures/textureatlas.h b/Textures/textureatlas.h index abecee1..5e268a2 100644 --- a/Textures/textureatlas.h +++ b/Textures/textureatlas.h @@ -2,10 +2,14 @@ #define TEXTUREATLAS_H_ #include "raylib.h" #include "animation.h" +#include "../definitions.h" typedef struct TextureAtlas TextureAtlas; typedef struct TextureAtlas{ + + Texture2D *textures[TE_AMOUNT]; + Texture2D cursorTextures[2]; Animation *cursorAnimation[1]; @@ -17,12 +21,11 @@ typedef struct TextureAtlas{ Texture2D baustelle; Animation *baustelleAnimation[8]; - - //Texture2D[] mapTextures; } TextureAtlas; // Initialize the full TextureAtlas struct with all Textures used in the game TextureAtlas * TextureAtlasInit(); +void TextureAtlasLoadTextures(TextureAtlas *atlas); void LoadCursorTextures(Texture2D *cursorTextures, Animation **cursorAnimation); void LoadWorkerTextures(Texture2D *workerTextures); void LoadWorkerAnimations(Animation **workerAnimations, Texture2D *workerTextures); diff --git a/assets/worker/die-0.png b/assets/entities/worker/die-0.png similarity index 100% rename from assets/worker/die-0.png rename to assets/entities/worker/die-0.png diff --git a/assets/worker/die-1.png b/assets/entities/worker/die-1.png similarity index 100% rename from assets/worker/die-1.png rename to assets/entities/worker/die-1.png diff --git a/assets/worker/die-10.png b/assets/entities/worker/die-10.png similarity index 100% rename from assets/worker/die-10.png rename to assets/entities/worker/die-10.png diff --git a/assets/worker/die-11.png b/assets/entities/worker/die-11.png similarity index 100% rename from assets/worker/die-11.png rename to assets/entities/worker/die-11.png diff --git a/assets/worker/die-12.png b/assets/entities/worker/die-12.png similarity index 100% rename from assets/worker/die-12.png rename to assets/entities/worker/die-12.png diff --git a/assets/worker/die-13.png b/assets/entities/worker/die-13.png similarity index 100% rename from assets/worker/die-13.png rename to assets/entities/worker/die-13.png diff --git a/assets/worker/die-14.png b/assets/entities/worker/die-14.png similarity index 100% rename from assets/worker/die-14.png rename to assets/entities/worker/die-14.png diff --git a/assets/worker/die-2.png b/assets/entities/worker/die-2.png similarity index 100% rename from assets/worker/die-2.png rename to assets/entities/worker/die-2.png diff --git a/assets/worker/die-3.png b/assets/entities/worker/die-3.png similarity index 100% rename from assets/worker/die-3.png rename to assets/entities/worker/die-3.png diff --git a/assets/worker/die-4.png b/assets/entities/worker/die-4.png similarity index 100% rename from assets/worker/die-4.png rename to assets/entities/worker/die-4.png diff --git a/assets/worker/die-5.png b/assets/entities/worker/die-5.png similarity index 100% rename from assets/worker/die-5.png rename to assets/entities/worker/die-5.png diff --git a/assets/worker/die-6.png b/assets/entities/worker/die-6.png similarity index 100% rename from assets/worker/die-6.png rename to assets/entities/worker/die-6.png diff --git a/assets/worker/die-7.png b/assets/entities/worker/die-7.png similarity index 100% rename from assets/worker/die-7.png rename to assets/entities/worker/die-7.png diff --git a/assets/worker/die-8.png b/assets/entities/worker/die-8.png similarity index 100% rename from assets/worker/die-8.png rename to assets/entities/worker/die-8.png diff --git a/assets/worker/die-9.png b/assets/entities/worker/die-9.png similarity index 100% rename from assets/worker/die-9.png rename to assets/entities/worker/die-9.png diff --git a/assets/worker/die.png b/assets/entities/worker/die.png similarity index 100% rename from assets/worker/die.png rename to assets/entities/worker/die.png diff --git a/assets/worker/umackern-0.png b/assets/entities/worker/umackern-0.png similarity index 100% rename from assets/worker/umackern-0.png rename to assets/entities/worker/umackern-0.png diff --git a/assets/worker/umackern-1.png b/assets/entities/worker/umackern-1.png similarity index 100% rename from assets/worker/umackern-1.png rename to assets/entities/worker/umackern-1.png diff --git a/assets/worker/umackern-10.png b/assets/entities/worker/umackern-10.png similarity index 100% rename from assets/worker/umackern-10.png rename to assets/entities/worker/umackern-10.png diff --git a/assets/worker/umackern-11.png b/assets/entities/worker/umackern-11.png similarity index 100% rename from assets/worker/umackern-11.png rename to assets/entities/worker/umackern-11.png diff --git a/assets/worker/umackern-12.png b/assets/entities/worker/umackern-12.png similarity index 100% rename from assets/worker/umackern-12.png rename to assets/entities/worker/umackern-12.png diff --git a/assets/worker/umackern-13.png b/assets/entities/worker/umackern-13.png similarity index 100% rename from assets/worker/umackern-13.png rename to assets/entities/worker/umackern-13.png diff --git a/assets/worker/umackern-14.png b/assets/entities/worker/umackern-14.png similarity index 100% rename from assets/worker/umackern-14.png rename to assets/entities/worker/umackern-14.png diff --git a/assets/worker/umackern-15.png b/assets/entities/worker/umackern-15.png similarity index 100% rename from assets/worker/umackern-15.png rename to assets/entities/worker/umackern-15.png diff --git a/assets/worker/umackern-16.png b/assets/entities/worker/umackern-16.png similarity index 100% rename from assets/worker/umackern-16.png rename to assets/entities/worker/umackern-16.png diff --git a/assets/worker/umackern-17.png b/assets/entities/worker/umackern-17.png similarity index 100% rename from assets/worker/umackern-17.png rename to assets/entities/worker/umackern-17.png diff --git a/assets/worker/umackern-18.png b/assets/entities/worker/umackern-18.png similarity index 100% rename from assets/worker/umackern-18.png rename to assets/entities/worker/umackern-18.png diff --git a/assets/worker/umackern-19.png b/assets/entities/worker/umackern-19.png similarity index 100% rename from assets/worker/umackern-19.png rename to assets/entities/worker/umackern-19.png diff --git a/assets/worker/umackern-2.png b/assets/entities/worker/umackern-2.png similarity index 100% rename from assets/worker/umackern-2.png rename to assets/entities/worker/umackern-2.png diff --git a/assets/worker/umackern-20.png b/assets/entities/worker/umackern-20.png similarity index 100% rename from assets/worker/umackern-20.png rename to assets/entities/worker/umackern-20.png diff --git a/assets/worker/umackern-21.png b/assets/entities/worker/umackern-21.png similarity index 100% rename from assets/worker/umackern-21.png rename to assets/entities/worker/umackern-21.png diff --git a/assets/worker/umackern-22.png b/assets/entities/worker/umackern-22.png similarity index 100% rename from assets/worker/umackern-22.png rename to assets/entities/worker/umackern-22.png diff --git a/assets/worker/umackern-23.png b/assets/entities/worker/umackern-23.png similarity index 100% rename from assets/worker/umackern-23.png rename to assets/entities/worker/umackern-23.png diff --git a/assets/worker/umackern-24.png b/assets/entities/worker/umackern-24.png similarity index 100% rename from assets/worker/umackern-24.png rename to assets/entities/worker/umackern-24.png diff --git a/assets/worker/umackern-3.png b/assets/entities/worker/umackern-3.png similarity index 100% rename from assets/worker/umackern-3.png rename to assets/entities/worker/umackern-3.png diff --git a/assets/worker/umackern-4.png b/assets/entities/worker/umackern-4.png similarity index 100% rename from assets/worker/umackern-4.png rename to assets/entities/worker/umackern-4.png diff --git a/assets/worker/umackern-5.png b/assets/entities/worker/umackern-5.png similarity index 100% rename from assets/worker/umackern-5.png rename to assets/entities/worker/umackern-5.png diff --git a/assets/worker/umackern-6.png b/assets/entities/worker/umackern-6.png similarity index 100% rename from assets/worker/umackern-6.png rename to assets/entities/worker/umackern-6.png diff --git a/assets/worker/umackern-7.png b/assets/entities/worker/umackern-7.png similarity index 100% rename from assets/worker/umackern-7.png rename to assets/entities/worker/umackern-7.png diff --git a/assets/worker/umackern-8.png b/assets/entities/worker/umackern-8.png similarity index 100% rename from assets/worker/umackern-8.png rename to assets/entities/worker/umackern-8.png diff --git a/assets/worker/umackern-9.png b/assets/entities/worker/umackern-9.png similarity index 100% rename from assets/worker/umackern-9.png rename to assets/entities/worker/umackern-9.png diff --git a/assets/worker/umackern.png b/assets/entities/worker/umackern.png similarity index 100% rename from assets/worker/umackern.png rename to assets/entities/worker/umackern.png diff --git a/assets/worker/walk-0.png b/assets/entities/worker/walk-0.png similarity index 100% rename from assets/worker/walk-0.png rename to assets/entities/worker/walk-0.png diff --git a/assets/worker/walk-1.png b/assets/entities/worker/walk-1.png similarity index 100% rename from assets/worker/walk-1.png rename to assets/entities/worker/walk-1.png diff --git a/assets/worker/walk-10.png b/assets/entities/worker/walk-10.png similarity index 100% rename from assets/worker/walk-10.png rename to assets/entities/worker/walk-10.png diff --git a/assets/worker/walk-11.png b/assets/entities/worker/walk-11.png similarity index 100% rename from assets/worker/walk-11.png rename to assets/entities/worker/walk-11.png diff --git a/assets/worker/walk-12.png b/assets/entities/worker/walk-12.png similarity index 100% rename from assets/worker/walk-12.png rename to assets/entities/worker/walk-12.png diff --git a/assets/worker/walk-13.png b/assets/entities/worker/walk-13.png similarity index 100% rename from assets/worker/walk-13.png rename to assets/entities/worker/walk-13.png diff --git a/assets/worker/walk-14.png b/assets/entities/worker/walk-14.png similarity index 100% rename from assets/worker/walk-14.png rename to assets/entities/worker/walk-14.png diff --git a/assets/worker/walk-15.png b/assets/entities/worker/walk-15.png similarity index 100% rename from assets/worker/walk-15.png rename to assets/entities/worker/walk-15.png diff --git a/assets/worker/walk-16.png b/assets/entities/worker/walk-16.png similarity index 100% rename from assets/worker/walk-16.png rename to assets/entities/worker/walk-16.png diff --git a/assets/worker/walk-17.png b/assets/entities/worker/walk-17.png similarity index 100% rename from assets/worker/walk-17.png rename to assets/entities/worker/walk-17.png diff --git a/assets/worker/walk-18.png b/assets/entities/worker/walk-18.png similarity index 100% rename from assets/worker/walk-18.png rename to assets/entities/worker/walk-18.png diff --git a/assets/worker/walk-19.png b/assets/entities/worker/walk-19.png similarity index 100% rename from assets/worker/walk-19.png rename to assets/entities/worker/walk-19.png diff --git a/assets/worker/walk-2.png b/assets/entities/worker/walk-2.png similarity index 100% rename from assets/worker/walk-2.png rename to assets/entities/worker/walk-2.png diff --git a/assets/worker/walk-20.png b/assets/entities/worker/walk-20.png similarity index 100% rename from assets/worker/walk-20.png rename to assets/entities/worker/walk-20.png diff --git a/assets/worker/walk-21.png b/assets/entities/worker/walk-21.png similarity index 100% rename from assets/worker/walk-21.png rename to assets/entities/worker/walk-21.png diff --git a/assets/worker/walk-22.png b/assets/entities/worker/walk-22.png similarity index 100% rename from assets/worker/walk-22.png rename to assets/entities/worker/walk-22.png diff --git a/assets/worker/walk-23.png b/assets/entities/worker/walk-23.png similarity index 100% rename from assets/worker/walk-23.png rename to assets/entities/worker/walk-23.png diff --git a/assets/worker/walk-24.png b/assets/entities/worker/walk-24.png similarity index 100% rename from assets/worker/walk-24.png rename to assets/entities/worker/walk-24.png diff --git a/assets/worker/walk-3.png b/assets/entities/worker/walk-3.png similarity index 100% rename from assets/worker/walk-3.png rename to assets/entities/worker/walk-3.png diff --git a/assets/worker/walk-4.png b/assets/entities/worker/walk-4.png similarity index 100% rename from assets/worker/walk-4.png rename to assets/entities/worker/walk-4.png diff --git a/assets/worker/walk-5.png b/assets/entities/worker/walk-5.png similarity index 100% rename from assets/worker/walk-5.png rename to assets/entities/worker/walk-5.png diff --git a/assets/worker/walk-6.png b/assets/entities/worker/walk-6.png similarity index 100% rename from assets/worker/walk-6.png rename to assets/entities/worker/walk-6.png diff --git a/assets/worker/walk-7.png b/assets/entities/worker/walk-7.png similarity index 100% rename from assets/worker/walk-7.png rename to assets/entities/worker/walk-7.png diff --git a/assets/worker/walk-8.png b/assets/entities/worker/walk-8.png similarity index 100% rename from assets/worker/walk-8.png rename to assets/entities/worker/walk-8.png diff --git a/assets/worker/walk-9.png b/assets/entities/worker/walk-9.png similarity index 100% rename from assets/worker/walk-9.png rename to assets/entities/worker/walk-9.png diff --git a/assets/worker/walk.png b/assets/entities/worker/walk.png similarity index 100% rename from assets/worker/walk.png rename to assets/entities/worker/walk.png diff --git a/assets/worker/worker.png b/assets/entities/worker/worker.png similarity index 100% rename from assets/worker/worker.png rename to assets/entities/worker/worker.png diff --git a/definitions.h b/definitions.h new file mode 100644 index 0000000..ce3c322 --- /dev/null +++ b/definitions.h @@ -0,0 +1,22 @@ +#ifndef DEFINITIONS_H_ +#define DEFINITIONS_H_ + +#define N 0 +#define NE 1 +#define E 3 +#define SE 5 +#define S 7 +#define SW 6 +#define W 4 +#define NW 2 + +#define TE_CURSOR 0 +#define TE_WORKER 1 +#define TE_BUILDING 2 +#define TE_BAUSTELLE 3 + +#define TE_AMOUNT 4 +#define TE_ENTITY_LENGTH 104 +#define TE_MAPOBJECT_LENGTH 1 + +#endif From 9ce0701cc748f79e880df476d64f7e2732143585 Mon Sep 17 00:00:00 2001 From: Jonathan Hager Date: Mon, 16 Jan 2023 16:41:12 +0100 Subject: [PATCH 3/5] Zwischenstand2 --- Sprite/sprite.c | 10 +- Textures/textureatlas.c | 145 ++++++++++++++++-- Textures/textureatlas.h | 7 +- .../worker/{umackern-0.png => arbeiten-0.png} | Bin .../worker/{umackern-1.png => arbeiten-1.png} | Bin .../{umackern-10.png => arbeiten-10.png} | Bin .../{umackern-11.png => arbeiten-11.png} | Bin .../{umackern-12.png => arbeiten-12.png} | Bin .../{umackern-13.png => arbeiten-13.png} | Bin .../{umackern-14.png => arbeiten-14.png} | Bin .../{umackern-15.png => arbeiten-15.png} | Bin .../{umackern-16.png => arbeiten-16.png} | Bin .../{umackern-17.png => arbeiten-17.png} | Bin .../{umackern-18.png => arbeiten-18.png} | Bin .../{umackern-19.png => arbeiten-19.png} | Bin .../worker/{umackern-2.png => arbeiten-2.png} | Bin .../{umackern-20.png => arbeiten-20.png} | Bin .../{umackern-21.png => arbeiten-21.png} | Bin .../{umackern-22.png => arbeiten-22.png} | Bin .../{umackern-23.png => arbeiten-23.png} | Bin .../{umackern-24.png => arbeiten-24.png} | Bin .../worker/{umackern-3.png => arbeiten-3.png} | Bin .../worker/{umackern-4.png => arbeiten-4.png} | Bin .../worker/{umackern-5.png => arbeiten-5.png} | Bin .../worker/{umackern-6.png => arbeiten-6.png} | Bin .../worker/{umackern-7.png => arbeiten-7.png} | Bin .../worker/{umackern-8.png => arbeiten-8.png} | Bin .../worker/{umackern-9.png => arbeiten-9.png} | Bin .../worker/{umackern.png => arbeiten.png} | Bin .../building/idle.png} | Bin 30 files changed, 140 insertions(+), 22 deletions(-) rename assets/entities/worker/{umackern-0.png => arbeiten-0.png} (100%) rename assets/entities/worker/{umackern-1.png => arbeiten-1.png} (100%) rename assets/entities/worker/{umackern-10.png => arbeiten-10.png} (100%) rename assets/entities/worker/{umackern-11.png => arbeiten-11.png} (100%) rename assets/entities/worker/{umackern-12.png => arbeiten-12.png} (100%) rename assets/entities/worker/{umackern-13.png => arbeiten-13.png} (100%) rename assets/entities/worker/{umackern-14.png => arbeiten-14.png} (100%) rename assets/entities/worker/{umackern-15.png => arbeiten-15.png} (100%) rename assets/entities/worker/{umackern-16.png => arbeiten-16.png} (100%) rename assets/entities/worker/{umackern-17.png => arbeiten-17.png} (100%) rename assets/entities/worker/{umackern-18.png => arbeiten-18.png} (100%) rename assets/entities/worker/{umackern-19.png => arbeiten-19.png} (100%) rename assets/entities/worker/{umackern-2.png => arbeiten-2.png} (100%) rename assets/entities/worker/{umackern-20.png => arbeiten-20.png} (100%) rename assets/entities/worker/{umackern-21.png => arbeiten-21.png} (100%) rename assets/entities/worker/{umackern-22.png => arbeiten-22.png} (100%) rename assets/entities/worker/{umackern-23.png => arbeiten-23.png} (100%) rename assets/entities/worker/{umackern-24.png => arbeiten-24.png} (100%) rename assets/entities/worker/{umackern-3.png => arbeiten-3.png} (100%) rename assets/entities/worker/{umackern-4.png => arbeiten-4.png} (100%) rename assets/entities/worker/{umackern-5.png => arbeiten-5.png} (100%) rename assets/entities/worker/{umackern-6.png => arbeiten-6.png} (100%) rename assets/entities/worker/{umackern-7.png => arbeiten-7.png} (100%) rename assets/entities/worker/{umackern-8.png => arbeiten-8.png} (100%) rename assets/entities/worker/{umackern-9.png => arbeiten-9.png} (100%) rename assets/entities/worker/{umackern.png => arbeiten.png} (100%) rename assets/{building.png => mapobjects/building/idle.png} (100%) diff --git a/Sprite/sprite.c b/Sprite/sprite.c index d53bf1d..debc33f 100644 --- a/Sprite/sprite.c +++ b/Sprite/sprite.c @@ -3,7 +3,7 @@ #include #include #include "../IsometricMap/isometricMap.h" -#include "../Textures/textureIDs.h" +#include "../definitions.h" #include "../Textures/animationHandler.h" #include "../Textures/animation.h" #include "../Textures/textureatlas.h" @@ -52,16 +52,16 @@ Sprite * SpriteCreate(TextureAtlas *atlas, int textureID, int x, int y){ //AnimationHandler create Animation **animations = 0; - if(textureID == TE_worker){ + if(textureID == TE_WORKER){ animations = atlas->workerAnimations; } - else if(textureID == TE_cursor){ + else if(textureID == TE_WORKER){ animations = atlas->cursorAnimation; } - else if(textureID == TE_building){ + else if(textureID == TE_BUILDING){ animations = atlas->buildingAnimation; } - else if(textureID == TE_baustelle){ + else if(textureID == TE_BAUSTELLE){ animations = atlas->baustelleAnimation; } else{ diff --git a/Textures/textureatlas.c b/Textures/textureatlas.c index 48f15dd..4653256 100644 --- a/Textures/textureatlas.c +++ b/Textures/textureatlas.c @@ -5,13 +5,14 @@ #include "stdio.h" TextureAtlas * TextureAtlasInit(){ - TextureAtlas *textures = malloc(sizeof(TextureAtlas)); + TextureAtlas *new = malloc(sizeof(TextureAtlas)); + TextureAtlasLoadTextures(new->textures); + //LoadCursorTextures(textures->cursorTextures, textures->cursorAnimation); + //LoadWorkerTextures(textures->workerTextures); + //LoadWorkerAnimations(textures->workerAnimations, textures->workerTextures); - 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(); @@ -24,8 +25,10 @@ TextureAtlas * TextureAtlasInit(){ 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); @@ -37,31 +40,143 @@ TextureAtlas * TextureAtlasInit(){ textures->baustelleAnimation[5] = baustelleAnimation; textures->baustelleAnimation[6] = baustelleAnimation; textures->baustelleAnimation[7] = baustelleAnimation; + */ - return textures; + return new; } -void TextureAtlasLoadTextures(TextureAtlas *atlas){ +void TextureAtlasLoadTextures(Texture2D **textures){ int i; for(i = 0; i < TE_AMOUNT; i++){ switch(i){ case TE_CURSOR: - //Laden + textures[TE_CURSOR] = malloc(2 * sizeof(Texture2D)); // So vielleicht + LoadCursorTextures(textures[TE_CURSOR]); break; case TE_WORKER: - // Laden + LoadEntityTextures(textures[TE_WORKER], "worker"); + break; + case TE_BUILDING: + LoadMapObjectTextures(textures[TE_BUILDING], "building"); + break; + case TE_BAUSTELLE: + LoadMapObjectTextures(textures[TE_BAUSTELLE], "baustelle"); break; + default: + printf("WARNING: TEXTUREATLAS TRIED LOADING NON DEFINED TEXTUREID!!\n"); + } + } +} + +void LoadEntityTextures(Texture2D *atlasrow, char *directoryPrefix){ + // Das klappt so nicht + atlasrow = malloc(TE_ENTITY_LENGTH * sizeof(Texture2D)); + + // pathToFile wird erstellt. z.B. assets/entities/ + worker ---> assets/entities/worker/ + char pathToFile[50] = "assets/entities/"; + strcat(pathToFile, directoryPrefix); + strcat(pathToFile, "/"); + + char animation[30] = "walk"; + char filename[100]; + 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 < TE_ENTITY_LENGTH; i++){ + // Concatenate the correct string for the filename assets/worker/ + walk + - + 5 + .png + sprintf(number, "%d", file); + strcat(filename, pathToFile); + strcat(filename, animation); + strcat(filename, "-"); + strcat(filename, number); + strcat(filename, ending); + + //printf("file:%s:file\n", filename); + + // Set correct values for next iteration + int lol = i % 8; + + if(lol == 0){ + atlasrow[i] = LoadTexture(filename); + printf("\n"); + file++; + } + else if(lol == 2){ + Image tmp = LoadImage(filename); + ImageFlipHorizontal(&tmp); + atlasrow[i] = LoadTextureFromImage(tmp); + printf("flipped\n"); + file++; + } + else if(lol == 4){ + Image tmp = LoadImage(filename); + ImageFlipHorizontal(&tmp); + atlasrow[i] = LoadTextureFromImage(tmp); + printf("flipped\n"); + file++; + } + else if(lol == 6){ + Image tmp = LoadImage(filename); + ImageFlipHorizontal(&tmp); + atlasrow[i] = LoadTextureFromImage(tmp); + printf("flipped\n"); + file++; + } + else if(lol == 7){ + atlasrow[i] = LoadTexture(filename); + printf("\n"); + file++; + } + else{ + atlasrow[i] = LoadTexture(filename); + printf("\n"); + } + + strcpy(filename, ""); + strcpy(number, ""); + + if(i == 39){ + strcpy(animation, "arbeiten"); + file = 0; + } + else if(i == 79){ + strcpy(animation, "die"); + file = 0; } } + +} + +void LoadMapObjectTextures(Texture2D *atlasrow, char *directoryPrefix){ + atlasrow = malloc(TE_MAPOBJECT_LENGTH * sizeof(Texture2D)); + + // pathToFile wird erstellt. z.B. assets/mapobjects/ + building ---> assets/mapobjects/building/ + char pathToFile[50] = "assets/mapobjects/"; + strcat(pathToFile, directoryPrefix); + strcat(pathToFile, "/"); + + //char animation[30] = "walk"; + char filename[100]; + //char number[3] = ""; + + char ending[5] = ".png"; + + strcat(filename, pathToFile); + strcat(filename, "idle"); + strcat(filename, ending); + + atlasrow[0] = LoadTexture(filename); } -void LoadCursorTextures(Texture2D *cursorTextures, Animation **cursorAnimation){ - *cursorTextures = LoadTexture("assets/cursor.gif"); - *(cursorTextures + 1) = LoadTexture("assets/cursor_down.gif"); +void LoadCursorTextures(Texture2D *cursorTextures){ + cursorTextures = malloc(2 * sizeof(Texture2D)); - Animation *new = AnimationInit(); - AnimationInsertBack(new, cursorTextures); - cursorAnimation[0] = new; + cursorTextures[0] = LoadTexture("assets/cursor.gif"); + cursorTextures[1] = LoadTexture("assets/cursor_down.gif"); } void LoadWorkerTextures(Texture2D *workerTextures){ diff --git a/Textures/textureatlas.h b/Textures/textureatlas.h index 5e268a2..09d2ef8 100644 --- a/Textures/textureatlas.h +++ b/Textures/textureatlas.h @@ -25,8 +25,11 @@ typedef struct TextureAtlas{ // Initialize the full TextureAtlas struct with all Textures used in the game TextureAtlas * TextureAtlasInit(); -void TextureAtlasLoadTextures(TextureAtlas *atlas); -void LoadCursorTextures(Texture2D *cursorTextures, Animation **cursorAnimation); +void TextureAtlasLoadTextures(Texture2D **textures); +void LoadCursorTextures(Texture2D *cursorTextures); +void LoadEntityTextures(Texture2D *atlasrow, char *directoryPrefix); +void LoadMapObjectTextures(Texture2D *atlasrow, char *directoryPrefix); + void LoadWorkerTextures(Texture2D *workerTextures); void LoadWorkerAnimations(Animation **workerAnimations, Texture2D *workerTextures); diff --git a/assets/entities/worker/umackern-0.png b/assets/entities/worker/arbeiten-0.png similarity index 100% rename from assets/entities/worker/umackern-0.png rename to assets/entities/worker/arbeiten-0.png diff --git a/assets/entities/worker/umackern-1.png b/assets/entities/worker/arbeiten-1.png similarity index 100% rename from assets/entities/worker/umackern-1.png rename to assets/entities/worker/arbeiten-1.png diff --git a/assets/entities/worker/umackern-10.png b/assets/entities/worker/arbeiten-10.png similarity index 100% rename from assets/entities/worker/umackern-10.png rename to assets/entities/worker/arbeiten-10.png diff --git a/assets/entities/worker/umackern-11.png b/assets/entities/worker/arbeiten-11.png similarity index 100% rename from assets/entities/worker/umackern-11.png rename to assets/entities/worker/arbeiten-11.png diff --git a/assets/entities/worker/umackern-12.png b/assets/entities/worker/arbeiten-12.png similarity index 100% rename from assets/entities/worker/umackern-12.png rename to assets/entities/worker/arbeiten-12.png diff --git a/assets/entities/worker/umackern-13.png b/assets/entities/worker/arbeiten-13.png similarity index 100% rename from assets/entities/worker/umackern-13.png rename to assets/entities/worker/arbeiten-13.png diff --git a/assets/entities/worker/umackern-14.png b/assets/entities/worker/arbeiten-14.png similarity index 100% rename from assets/entities/worker/umackern-14.png rename to assets/entities/worker/arbeiten-14.png diff --git a/assets/entities/worker/umackern-15.png b/assets/entities/worker/arbeiten-15.png similarity index 100% rename from assets/entities/worker/umackern-15.png rename to assets/entities/worker/arbeiten-15.png diff --git a/assets/entities/worker/umackern-16.png b/assets/entities/worker/arbeiten-16.png similarity index 100% rename from assets/entities/worker/umackern-16.png rename to assets/entities/worker/arbeiten-16.png diff --git a/assets/entities/worker/umackern-17.png b/assets/entities/worker/arbeiten-17.png similarity index 100% rename from assets/entities/worker/umackern-17.png rename to assets/entities/worker/arbeiten-17.png diff --git a/assets/entities/worker/umackern-18.png b/assets/entities/worker/arbeiten-18.png similarity index 100% rename from assets/entities/worker/umackern-18.png rename to assets/entities/worker/arbeiten-18.png diff --git a/assets/entities/worker/umackern-19.png b/assets/entities/worker/arbeiten-19.png similarity index 100% rename from assets/entities/worker/umackern-19.png rename to assets/entities/worker/arbeiten-19.png diff --git a/assets/entities/worker/umackern-2.png b/assets/entities/worker/arbeiten-2.png similarity index 100% rename from assets/entities/worker/umackern-2.png rename to assets/entities/worker/arbeiten-2.png diff --git a/assets/entities/worker/umackern-20.png b/assets/entities/worker/arbeiten-20.png similarity index 100% rename from assets/entities/worker/umackern-20.png rename to assets/entities/worker/arbeiten-20.png diff --git a/assets/entities/worker/umackern-21.png b/assets/entities/worker/arbeiten-21.png similarity index 100% rename from assets/entities/worker/umackern-21.png rename to assets/entities/worker/arbeiten-21.png diff --git a/assets/entities/worker/umackern-22.png b/assets/entities/worker/arbeiten-22.png similarity index 100% rename from assets/entities/worker/umackern-22.png rename to assets/entities/worker/arbeiten-22.png diff --git a/assets/entities/worker/umackern-23.png b/assets/entities/worker/arbeiten-23.png similarity index 100% rename from assets/entities/worker/umackern-23.png rename to assets/entities/worker/arbeiten-23.png diff --git a/assets/entities/worker/umackern-24.png b/assets/entities/worker/arbeiten-24.png similarity index 100% rename from assets/entities/worker/umackern-24.png rename to assets/entities/worker/arbeiten-24.png diff --git a/assets/entities/worker/umackern-3.png b/assets/entities/worker/arbeiten-3.png similarity index 100% rename from assets/entities/worker/umackern-3.png rename to assets/entities/worker/arbeiten-3.png diff --git a/assets/entities/worker/umackern-4.png b/assets/entities/worker/arbeiten-4.png similarity index 100% rename from assets/entities/worker/umackern-4.png rename to assets/entities/worker/arbeiten-4.png diff --git a/assets/entities/worker/umackern-5.png b/assets/entities/worker/arbeiten-5.png similarity index 100% rename from assets/entities/worker/umackern-5.png rename to assets/entities/worker/arbeiten-5.png diff --git a/assets/entities/worker/umackern-6.png b/assets/entities/worker/arbeiten-6.png similarity index 100% rename from assets/entities/worker/umackern-6.png rename to assets/entities/worker/arbeiten-6.png diff --git a/assets/entities/worker/umackern-7.png b/assets/entities/worker/arbeiten-7.png similarity index 100% rename from assets/entities/worker/umackern-7.png rename to assets/entities/worker/arbeiten-7.png diff --git a/assets/entities/worker/umackern-8.png b/assets/entities/worker/arbeiten-8.png similarity index 100% rename from assets/entities/worker/umackern-8.png rename to assets/entities/worker/arbeiten-8.png diff --git a/assets/entities/worker/umackern-9.png b/assets/entities/worker/arbeiten-9.png similarity index 100% rename from assets/entities/worker/umackern-9.png rename to assets/entities/worker/arbeiten-9.png diff --git a/assets/entities/worker/umackern.png b/assets/entities/worker/arbeiten.png similarity index 100% rename from assets/entities/worker/umackern.png rename to assets/entities/worker/arbeiten.png diff --git a/assets/building.png b/assets/mapobjects/building/idle.png similarity index 100% rename from assets/building.png rename to assets/mapobjects/building/idle.png From 356e23e5a8a364e7bc51ba0301c637b3518d5062 Mon Sep 17 00:00:00 2001 From: Jonathan Hager Date: Sun, 22 Jan 2023 01:10:58 +0100 Subject: [PATCH 4/5] Refactor erfolgreich --- Entity/entity.c | 39 +++-- Entity/entity.h | 4 +- Input/inputHandler.c | 14 +- Input/inputHandler.h | 2 - Sprite/sprite.c | 25 +-- Textures/animationHandler.c | 25 ++- Textures/animationHandler.h | 10 +- Textures/textureatlas.c | 142 +++++------------- Textures/textureatlas.h | 13 +- .../baustelle/idle.png} | Bin definitions.h | 14 ++ game.c | 4 +- 12 files changed, 120 insertions(+), 172 deletions(-) rename assets/{construction.png => mapobjects/baustelle/idle.png} (100%) diff --git a/Entity/entity.c b/Entity/entity.c index 313ac98..fcf9d60 100644 --- a/Entity/entity.c +++ b/Entity/entity.c @@ -4,9 +4,10 @@ #include #include "../Sprite/sprite.h" #include "../MapObject/mapobject.h" -#include "../Textures/textureIDs.h" +#include "../definitions.h" +#include "../Textures/textureatlas.h" -Entity * EntityInit(Sprite *sprite, int profession){ +Entity * EntityInit(Sprite *sprite, int profession, TextureAtlas *atlas){ Entity *new = malloc(sizeof(Entity)); new->angle = 0; @@ -20,6 +21,17 @@ Entity * EntityInit(Sprite *sprite, int profession){ new->task = TaskInit(); new->profession = profession; + Animation ***animations = 0; + + if(profession == TE_WORKER){ + animations = atlas->animations[AN_WORKER]; + } + else{ + printf("\n\n\n\n\n\n\n\nEntityCreate mit falscher ID (%d) aufgerufen oder ID nicht bekannt!!!\n\n\n\n\n\n\n\n", profession); + } + + new->animationHandler = AnimationHandlerInit(animations, &new->sprite->texture); + return new; } @@ -104,40 +116,41 @@ void EntityListActAllEntities(Game *game){ if(angle <= 22.5 && angle >= -22.5){ // E - AnimationChangeAnimation(current->animationHandler, E); + AnimationChangeDirection(current->animationHandler, E); } else if(angle > 0 && angle <= 67.5){ // NE - AnimationChangeAnimation(current->animationHandler, NE); + AnimationChangeDirection(current->animationHandler, NE); } else if(angle > 0 && angle <= 112.5){ // N - AnimationChangeAnimation(current->animationHandler, N); + AnimationChangeDirection(current->animationHandler, N); } else if(angle > 0 && angle <= 157.5){ // NW - AnimationChangeAnimation(current->animationHandler, NW); + AnimationChangeDirection(current->animationHandler, NW); } else if(angle < 0 && angle >= -67.5){ // SE - AnimationChangeAnimation(current->animationHandler, SE); + AnimationChangeDirection(current->animationHandler, SE); } else if(angle < 0 && angle >= -112.5){ // S - AnimationChangeAnimation(current->animationHandler, S); + AnimationChangeDirection(current->animationHandler, S); } else if(angle < 0 && angle >= -157.5){ // SW - AnimationChangeAnimation(current->animationHandler, SW); + AnimationChangeDirection(current->animationHandler, SW); } else{ // W - AnimationChangeAnimation(current->animationHandler, W); + AnimationChangeDirection(current->animationHandler, W); } } } else{ + /* if(current->profession == PR_BUILDER){ if(current->task->target == 0){ // Prüft, ob eine Baustelle existiert @@ -155,6 +168,7 @@ void EntityListActAllEntities(Game *game){ } else{ // Is beim target angekommen + /* MapObject *obj = current->task->target; printf("Hier\n"); Sprite *new = SpriteCreate(game->textures, 2, obj->sprite->x, obj->sprite->y); @@ -166,9 +180,10 @@ void EntityListActAllEntities(Game *game){ MapObjectListInsert(game->mapObjects, newObject); current->task->target = 0; free(obj); - } + */ + //} - } + //} } diff --git a/Entity/entity.h b/Entity/entity.h index b2448fc..a7f1e76 100644 --- a/Entity/entity.h +++ b/Entity/entity.h @@ -9,7 +9,7 @@ typedef struct Entity Entity; typedef struct Entity{ Sprite *sprite; - AnimationHandler animationHandler; + AnimationHandler *animationHandler; float angle; float destX; float destY; @@ -27,7 +27,7 @@ typedef struct EntityList{ Entity *tail; } EntityList; -Entity * EntityInit(Sprite *sprite, int profession); +Entity * EntityInit(Sprite *sprite, int profession, TextureAtlas *atlas); EntityList * EntityListInit(); void EntityListPrintForward(EntityList *entities); diff --git a/Input/inputHandler.c b/Input/inputHandler.c index 5ac3098..6f468a5 100644 --- a/Input/inputHandler.c +++ b/Input/inputHandler.c @@ -9,9 +9,7 @@ #include #include "../IsometricMap/tile.h" #include "../game.h" -#include "../MapObject/mapobjectIDs.h" -#include "../Entity/professions.h" -//#include "../Textures/textureIDs.h" +#include "../definitions.h" void DrawRect(Vector2 rectStart, Vector2 *mousePosition){ float width = GetMousePosition().x - rectStart.x; @@ -75,10 +73,12 @@ void mouseInput(Game *game){ if(IsKeyPressed(KEY_G)){ // Baustelle adden + /* Sprite *new = SpriteCreate(game->textures, 3, inputHandler->cursorWorldPos.x, inputHandler->cursorWorldPos.y); MapObject *newObject = MapObjectInit(new, MO_Baustelle); SpriteListInsert(game->sprites, new); MapObjectListInsert(game->mapObjects, newObject); + */ } // hardcoded layer amount @@ -111,7 +111,7 @@ void mouseInput(Game *game){ inputHandler->pressed = 1; // Cursorsprite is changed to "down" - inputHandler->cursorSprite->texture = (inputHandler->cursorTextures) + 1; + game->cursorSprite->texture = &game->textures->textures[TE_CURSOR][1]; } } @@ -123,7 +123,7 @@ void mouseInput(Game *game){ if(IsMouseButtonReleased(MOUSE_BUTTON_LEFT)){ inputHandler->pressed = 0; // Cursorsprite is changed back to normal - inputHandler->cursorSprite->texture = (inputHandler->cursorTextures); + game->cursorSprite->texture = &game->textures->textures[TE_CURSOR][0]; float width = GetMousePosition().x - inputHandler->rectStart.x; float height = GetMousePosition().y - inputHandler->rectStart.y; @@ -137,8 +137,8 @@ void mouseInput(Game *game){ else if(inputHandler->cursorWorldPos.x > maxWidth){ printf("OutOfBoundsDestination Spawn\n");} else if(inputHandler->cursorWorldPos.y > maxHeight){ printf("OutOfBoundsDestination Spawn\n");} else { - Sprite *newSprite = SpriteCreate(game->textures, 1, inputHandler->cursorWorldPos.x, inputHandler->cursorWorldPos.y); - Entity *entity = EntityInit(newSprite, PR_BUILDER); + Sprite *newSprite = SpriteCreate(game->textures, TE_WORKER, inputHandler->cursorWorldPos.x, inputHandler->cursorWorldPos.y); + Entity *entity = EntityInit(newSprite, TE_WORKER, game->textures); EntityListInsert(game->entities, entity); SpriteListInsert(game->sprites, newSprite); //ListPrintForward(sprites); diff --git a/Input/inputHandler.h b/Input/inputHandler.h index c6c4afc..b718cb8 100644 --- a/Input/inputHandler.h +++ b/Input/inputHandler.h @@ -12,8 +12,6 @@ typedef struct InputHandler{ Vector2 cursorWorldPos; Vector2 cursorWorldTile; int selectedLayer; - Texture2D *cursorTextures; - Sprite *cursorSprite; } InputHandler; void mouseInput(Game *game); diff --git a/Sprite/sprite.c b/Sprite/sprite.c index debc33f..59e00d4 100644 --- a/Sprite/sprite.c +++ b/Sprite/sprite.c @@ -49,34 +49,11 @@ void SpriteUpdate(Sprite *sprite){ Sprite * SpriteCreate(TextureAtlas *atlas, int textureID, int x, int y){ Sprite *newSprite = malloc(sizeof(Sprite)); - //AnimationHandler create - Animation **animations = 0; - - if(textureID == TE_WORKER){ - animations = atlas->workerAnimations; - } - else if(textureID == TE_WORKER){ - animations = atlas->cursorAnimation; - } - else if(textureID == TE_BUILDING){ - animations = atlas->buildingAnimation; - } - else if(textureID == TE_BAUSTELLE){ - animations = atlas->baustelleAnimation; - } - else{ - 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); - - newSprite->animationHandler = newHandler; - newSprite->texture = newSprite->animationHandler->currentFrame->texture; + newSprite->texture = atlas->textures[textureID]; newSprite->x = x - newSprite->texture->width / 2; newSprite->y = y - newSprite->texture->height / 2; newSprite->z = 0; newSprite->depth = newSprite->x + newSprite->y; - newSprite->angle = 0; newSprite->next = 0; newSprite->prev = 0; diff --git a/Textures/animationHandler.c b/Textures/animationHandler.c index d832875..5226e9d 100644 --- a/Textures/animationHandler.c +++ b/Textures/animationHandler.c @@ -3,13 +3,15 @@ #include #include -AnimationHandler * AnimationHandlerInit(Animation **animations, Texture2D **spriteTexture){ +AnimationHandler * AnimationHandlerInit(Animation ***animations, Texture2D **spriteTexture){ AnimationHandler *new = malloc(sizeof(AnimationHandler)); new->spriteTexture = spriteTexture; new->animations = animations; - new->currentAnimation = 0; - new->currentFrame = new->animations[new->currentAnimation]->head; + new->currentType = 0; + new->currentDirection = 0; + new->currentFrame = new->animations[new->currentType][new->currentDirection]->head; + new->spriteTexture = spriteTexture; new->forward = 1; new->deltaElapsed = 0; @@ -34,13 +36,22 @@ void AnimationUpdate(AnimationHandler *animationHandler){ } void AnimationReset(AnimationHandler *animationHandler){ - animationHandler->currentFrame = animationHandler->animations[animationHandler->currentAnimation]->head; + animationHandler->currentFrame = animationHandler->animations[animationHandler->currentType][animationHandler->currentDirection]->head; *(animationHandler->spriteTexture) = animationHandler->currentFrame->texture; } -void AnimationChangeAnimation(AnimationHandler *animationHandler, int newAnimation){ - if(animationHandler->currentAnimation != newAnimation){ - animationHandler->currentAnimation = newAnimation; +void AnimationChangeAnimation(AnimationHandler *animationHandler, int animationType, int direction){ + if(animationHandler->currentType != animationType || animationHandler->currentDirection != direction){ + animationHandler->currentType = animationType; + animationHandler->currentDirection = direction; AnimationReset(animationHandler); } } + + +void AnimationChangeDirection(AnimationHandler *animationHandler, int direction){ + if(animationHandler->currentDirection != direction){ + animationHandler->currentDirection = direction; + AnimationReset(animationHandler); + } +} diff --git a/Textures/animationHandler.h b/Textures/animationHandler.h index 1dbd414..742f876 100644 --- a/Textures/animationHandler.h +++ b/Textures/animationHandler.h @@ -7,17 +7,19 @@ typedef struct AnimationHandler AnimationHandler; typedef struct AnimationHandler{ - Animation **animations; + Animation ***animations; AnimationFrame *currentFrame; Texture2D **spriteTexture; - int currentAnimation; + int currentType; + int currentDirection; int forward; float deltaElapsed; } AnimationHandler; -AnimationHandler * AnimationHandlerInit(Animation **animations, Texture2D **spriteTexture); +AnimationHandler * AnimationHandlerInit(Animation ***animations, Texture2D **spriteTexture); void AnimationUpdate(AnimationHandler *animationHandler); void AnimationReset(AnimationHandler *animationHandler); -void AnimationChangeAnimation(AnimationHandler *animationHandler, int newAnimation); +void AnimationChangeAnimation(AnimationHandler *animationHandler, int animationType, int direction); +void AnimationChangeDirection(AnimationHandler *animationHandler, int direction); #endif diff --git a/Textures/textureatlas.c b/Textures/textureatlas.c index 4653256..22cf718 100644 --- a/Textures/textureatlas.c +++ b/Textures/textureatlas.c @@ -8,39 +8,8 @@ TextureAtlas * TextureAtlasInit(){ TextureAtlas *new = malloc(sizeof(TextureAtlas)); TextureAtlasLoadTextures(new->textures); - //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; - */ + TextureAtlasLoadAnimations(new->animations, new->textures); return new; } @@ -50,16 +19,19 @@ void TextureAtlasLoadTextures(Texture2D **textures){ for(i = 0; i < TE_AMOUNT; i++){ switch(i){ case TE_CURSOR: - textures[TE_CURSOR] = malloc(2 * sizeof(Texture2D)); // So vielleicht + textures[TE_CURSOR] = malloc(2 * sizeof(Texture2D)); LoadCursorTextures(textures[TE_CURSOR]); break; case TE_WORKER: + textures[TE_WORKER] = malloc(TE_ENTITY_LENGTH * sizeof(Texture2D)); LoadEntityTextures(textures[TE_WORKER], "worker"); break; case TE_BUILDING: + textures[TE_BUILDING] = malloc(TE_MAPOBJECT_LENGTH * sizeof(Texture2D)); LoadMapObjectTextures(textures[TE_BUILDING], "building"); break; case TE_BAUSTELLE: + textures[TE_BAUSTELLE] = malloc(TE_MAPOBJECT_LENGTH * sizeof(Texture2D)); LoadMapObjectTextures(textures[TE_BAUSTELLE], "baustelle"); break; default: @@ -69,8 +41,6 @@ void TextureAtlasLoadTextures(Texture2D **textures){ } void LoadEntityTextures(Texture2D *atlasrow, char *directoryPrefix){ - // Das klappt so nicht - atlasrow = malloc(TE_ENTITY_LENGTH * sizeof(Texture2D)); // pathToFile wird erstellt. z.B. assets/entities/ + worker ---> assets/entities/worker/ char pathToFile[50] = "assets/entities/"; @@ -78,7 +48,7 @@ void LoadEntityTextures(Texture2D *atlasrow, char *directoryPrefix){ strcat(pathToFile, "/"); char animation[30] = "walk"; - char filename[100]; + char filename[100] = ""; char number[3] = ""; char ending[5] = ".png"; @@ -152,7 +122,6 @@ void LoadEntityTextures(Texture2D *atlasrow, char *directoryPrefix){ } void LoadMapObjectTextures(Texture2D *atlasrow, char *directoryPrefix){ - atlasrow = malloc(TE_MAPOBJECT_LENGTH * sizeof(Texture2D)); // pathToFile wird erstellt. z.B. assets/mapobjects/ + building ---> assets/mapobjects/building/ char pathToFile[50] = "assets/mapobjects/"; @@ -160,7 +129,7 @@ void LoadMapObjectTextures(Texture2D *atlasrow, char *directoryPrefix){ strcat(pathToFile, "/"); //char animation[30] = "walk"; - char filename[100]; + char filename[100] = ""; //char number[3] = ""; char ending[5] = ".png"; @@ -173,83 +142,52 @@ void LoadMapObjectTextures(Texture2D *atlasrow, char *directoryPrefix){ } void LoadCursorTextures(Texture2D *cursorTextures){ - cursorTextures = malloc(2 * sizeof(Texture2D)); cursorTextures[0] = LoadTexture("assets/cursor.gif"); cursorTextures[1] = LoadTexture("assets/cursor_down.gif"); } -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 +void TextureAtlasLoadAnimations(Animation ****animations, Texture2D **textures){ 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; + for(i = 0; i < AN_AMOUNT; i++){ + switch(i){ + case AN_WORKER: + animations[AN_WORKER] = malloc(AN_ENTITY_AMOUNT * sizeof(Animation *)); + LoadEntityAnimations(animations[AN_WORKER], textures[TE_WORKER], AN_WORKER); + break; + default: + printf("WARNING: TEXTUREATLAS TRIED LOADING NON DEFINED ANIMATION!!\n"); + } + } +} +void LoadEntityAnimations(Animation ***animationsrow, Texture2D *atlasrow, int id){ + int i; + int j; + int frame; + + for(i = 0; i < AN_ENTITY_AMOUNT; i++){ + animationsrow[i] = malloc(DIRECTIONS_AMOUNT * sizeof(Animation)); - // 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++; + int obergrenze; + if(i == AN_ENTITY_DIE){ + obergrenze = 3; } else{ - *(workerTextures + i) = LoadTexture(filename); - printf("\n"); + obergrenze = 5; } - strcpy(filename, ""); - strcpy(number, ""); + for(j = 0; j < DIRECTIONS_AMOUNT; j++){ + Animation *newAnimation = AnimationInit(); + frame = i * DIRECTIONS_AMOUNT * 5 + j; - if(i == 39){ - strcpy(beginning, "assets/worker/umackern-"); - file = 0; - } - else if(i == 79){ - strcpy(beginning, "assets/worker/die-"); - file = 0; + int frameCounter; + for(frameCounter = 0; frameCounter < obergrenze; frameCounter++){ + AnimationInsertBack(newAnimation, (atlasrow + frame)); + frame += 8; + } + + animationsrow[i][j] = newAnimation; } } } diff --git a/Textures/textureatlas.h b/Textures/textureatlas.h index 09d2ef8..90c8960 100644 --- a/Textures/textureatlas.h +++ b/Textures/textureatlas.h @@ -9,18 +9,10 @@ typedef struct TextureAtlas TextureAtlas; typedef struct TextureAtlas{ Texture2D *textures[TE_AMOUNT]; + Animation ***animations[AN_AMOUNT]; - Texture2D cursorTextures[2]; - Animation *cursorAnimation[1]; - - Texture2D workerTextures[104]; Animation *workerAnimations[24]; - Texture2D building; - Animation *buildingAnimation[8]; - - Texture2D baustelle; - Animation *baustelleAnimation[8]; } TextureAtlas; // Initialize the full TextureAtlas struct with all Textures used in the game @@ -30,7 +22,8 @@ void LoadCursorTextures(Texture2D *cursorTextures); void LoadEntityTextures(Texture2D *atlasrow, char *directoryPrefix); void LoadMapObjectTextures(Texture2D *atlasrow, char *directoryPrefix); -void LoadWorkerTextures(Texture2D *workerTextures); void LoadWorkerAnimations(Animation **workerAnimations, Texture2D *workerTextures); +void TextureAtlasLoadAnimations(Animation ****animations, Texture2D **textures); +void LoadEntityAnimations(Animation ***animationsrow, Texture2D *atlasrow, int id); #endif diff --git a/assets/construction.png b/assets/mapobjects/baustelle/idle.png similarity index 100% rename from assets/construction.png rename to assets/mapobjects/baustelle/idle.png diff --git a/definitions.h b/definitions.h index ce3c322..b6f4bc4 100644 --- a/definitions.h +++ b/definitions.h @@ -9,7 +9,9 @@ #define SW 6 #define W 4 #define NW 2 +#define DIRECTIONS_AMOUNT 8 +// Texture definitions #define TE_CURSOR 0 #define TE_WORKER 1 #define TE_BUILDING 2 @@ -19,4 +21,16 @@ #define TE_ENTITY_LENGTH 104 #define TE_MAPOBJECT_LENGTH 1 + +// Definitions for animations +#define AN_WORKER 0 +#define AN_AMOUNT 1 + +#define AN_ENTITY_AMOUNT 3 +#define AN_ENTITY_IDLE 0 +#define AN_ENTITY_ARBEITEN 1 +#define AN_ENTITY_DIE 2 + + + #endif diff --git a/game.c b/game.c index d67f67c..2b43079 100644 --- a/game.c +++ b/game.c @@ -17,7 +17,7 @@ Game *GameInit() game->textures = TextureAtlasInit(); - game->cursorSprite = SpriteCreate(game->textures, 0, 450, 225); + game->cursorSprite = SpriteCreate(game->textures, TE_CURSOR, 450, 225); game->inputHandler = malloc(sizeof(InputHandler)); game->inputHandler->pressed = 0; game->inputHandler->rectStart.x = 0; @@ -29,7 +29,7 @@ Game *GameInit() game->inputHandler->cursorWorldTile.x = 0; game->inputHandler->cursorWorldTile.y = 0; game->inputHandler->selectedLayer = -1; - game->inputHandler->cursorTextures = game->textures->cursorTextures; + game->inputHandler->cursorTextures = game->textures->textures[TE_CURSOR]; game->inputHandler->cursorSprite = game->cursorSprite; game->screen = SCREEN_MAINMENU; From b7df795fc95364eab6951ef9c97fa5615e24f1c4 Mon Sep 17 00:00:00 2001 From: Jonathan Hager Date: Sun, 22 Jan 2023 01:13:44 +0100 Subject: [PATCH 5/5] Fehler behoben --- game.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/game.c b/game.c index 2b43079..67b53e7 100644 --- a/game.c +++ b/game.c @@ -29,9 +29,6 @@ Game *GameInit() game->inputHandler->cursorWorldTile.x = 0; game->inputHandler->cursorWorldTile.y = 0; game->inputHandler->selectedLayer = -1; - game->inputHandler->cursorTextures = game->textures->textures[TE_CURSOR]; - game->inputHandler->cursorSprite = game->cursorSprite; - game->screen = SCREEN_MAINMENU; game->camera = malloc(sizeof(Camera2D));