diff --git a/.vscode/settings.json b/.vscode/settings.json index 23106ef..ab7a5ec 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,5 +1,6 @@ { "files.associations": { - "inputhandling.h": "c" + "inputhandling.h": "c", + "isometricmap.h": "c" } } \ No newline at end of file diff --git a/Makefile b/Makefile index d2ca802..38630de 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ -spiel: main.o sprite.o inputHandler.o isometricRenderer.o - gcc -o spiel main.o sprite.o inputHandler.o isometricRenderer.o -lraylib -lGL -lm -lpthread -ldl -lrt -lX11 +spiel: main.o sprite.o inputHandler.o isometricRenderer.o isometricMap.o tile.o + gcc -o spiel main.o sprite.o inputHandler.o isometricRenderer.o isometricMap.o tile.o -lraylib -lGL -lm -lpthread -ldl -lrt -lX11 main.o: main.c gcc -c main.c -lraylib -lGL -lm -lpthread -ldl -lrt -lX11 @@ -13,5 +13,11 @@ inputHandler.o: inputHandler.c isometricRenderer.o: isometricRenderer.c gcc -c isometricRenderer.c -lraylib -lGL -lm -lpthread -ldl -lrt -lX11 +isometricMap.o: isometricMap.c + gcc -c isometricMap.c -lraylib -lGL -lm -lpthread -ldl -lrt -lX11 + +tile.o: tile.c + gcc -c tile.c -lraylib -lGL -lm -lpthread -ldl -lrt -lX11 + clean: rm *.o spiel diff --git a/inputHandler.o b/inputHandler.o deleted file mode 100644 index 91d79f0..0000000 Binary files a/inputHandler.o and /dev/null differ diff --git a/isometricMap.c b/isometricMap.c new file mode 100644 index 0000000..cae96be --- /dev/null +++ b/isometricMap.c @@ -0,0 +1,62 @@ +#include "isometricMap.h" +#include + +IsometricMap * IsometricMapInit(int x, int y){ + IsometricMap *map = (IsometricMap *) malloc(sizeof(IsometricMap)); + Texture textures[10]; + textures[0] = LoadTexture("assets/grass.png"); + textures[1] = LoadTexture("assets/tower.png"); + map->tileTextures = &textures; + + //Tile *tiles[x][y]; + Tile **tiles = (Tile **)malloc(x * sizeof(Tile *)); + int n = 0; + for(n = 0; n < x; ++n){ + tiles[n] = (Tile *)malloc(y * sizeof(Tile)); + } + + map->sizeX = x; + map->sizeY = y; + + int i = 0; + int j = 0; + + for(i=0; i < x; i++){ + for(i=0; i < y; i++){ + if(i != j){ + Tile tmp = {0, i, j}; + tiles[i][j] = tmp; + } + else{ + Tile tmp = {1, i, j}; + tiles[i][j] = tmp; + } + } + } + map->tiles = tiles; + + return map; +} + + +Vector2 * IsometricMapCalcOffsetForTileAt(int x, int y, int textureSize){ + + Vector2 offset = {0, 0}; + + offset.x = x * textureSize/2; + offset.y = x * textureSize/4; + + offset.x -= y * textureSize/2; + offset.y += y * textureSize/4; + + return &offset; +} + + + + + + + + + diff --git a/isometricMap.h b/isometricMap.h new file mode 100644 index 0000000..edadb8f --- /dev/null +++ b/isometricMap.h @@ -0,0 +1,24 @@ +#ifndef ISOMETRICMAP_H_ +#define ISOMETRICMAP_H_ +#include "raylib.h" +#include "tile.c" + +typedef struct IsometricMap{ + Texture *tileTextures; + //tiles -> two dimensional Array + Tile *tiles; + int sizeX; + int sizeY; +} IsometricMap; + +void IsometricMapAddTile(IsometricMap isometricMap); + +Tile IsometricMapGetTileFromArrayPosition(int x, int y); + +Tile IsometricMapGetTileFromWorldCoordinates(float x, float y); + +Vector2 * IsometricMapCalcOffsetForTileAt(int x, int y, int textureSize); + +IsometricMap * IsometricMapInit(int x, int y); + +#endif \ No newline at end of file diff --git a/isometricRenderer.c b/isometricRenderer.c index 7d6ebc5..8996691 100644 --- a/isometricRenderer.c +++ b/isometricRenderer.c @@ -1,11 +1,12 @@ #include "isometricRenderer.h" #include "raylib.h" +#include "isometricMap.h" #include //TODO: Isometric Tilemap Struct, which can be scanned for clicked Tile // General coordinate translation function -void IsometricRendererRenderMap(IsometricRenderer *renderer, int height){ +void IsometricRendererDrawMap(IsometricRenderer *renderer, int height){ float originX = 0.0f; float originY = 0.0f; @@ -15,12 +16,12 @@ void IsometricRendererRenderMap(IsometricRenderer *renderer, int height){ int amount = 1; for(i=0; i<=height; i++){ for(j=0; jtexture.width + j * renderer->texture.width; + float x = originX - amount/2 * renderer->texture->width + j * renderer->texture->width; if(amount%2 == 1){ - x -= renderer->texture.width/2; + x -= renderer->texture->width/2; } - float y = i * renderer->texture.height/4; - DrawTexture(renderer->texture, x, y, WHITE); + float y = i * renderer->texture->height/4; + DrawTexture(*renderer->texture, x, y, WHITE); } if(i < height/2){ @@ -31,6 +32,30 @@ void IsometricRendererRenderMap(IsometricRenderer *renderer, int height){ } } +} + +void IsometricRendererRenderIsometricMap(IsometricMap *map){ + + float originX = 0.0f; + float originY = 0.0f; + + int i = 0; + int j = 0; + for(i=0; i < map->sizeX; i++){ + for(j=0; j < map->sizeY; j++){ + Vector2 *offset = IsometricMapCalcOffsetForTileAt(i,j, map->tileTextures[0].width); + float x = originX + offset->x; + float y = originY + offset->y; + + // TODO: Komischer "Bug" + // map sollte ein 2-dimensionaler Array aus Tiles sein + // -> 2 Dimensionaler Array aus pointern + // wird in IsometricMapInit erzeugt + int textureId = (*(*map->tiles[i])[j]).textureId; + + DrawTexture(map->tileTextures[textureId], x, y, WHITE); + } + } } diff --git a/isometricRenderer.h b/isometricRenderer.h index c774421..148d444 100644 --- a/isometricRenderer.h +++ b/isometricRenderer.h @@ -1,11 +1,14 @@ #ifndef ISOMETRICRENDERER_H_ #define ISOMETRICRENDERER_H_ #include "raylib.h" +#include "isometricMap.h" typedef struct IsometricRenderer{ - Texture texture; + Texture *texture; } IsometricRenderer; -void renderMap(int width, int height); +void IsometricRendererDrawMap(IsometricRenderer *renderer, int height); + +void IsometricRendererRenderIsometricMap(IsometricMap *map); #endif \ No newline at end of file diff --git a/isometricRenderer.o b/isometricRenderer.o deleted file mode 100644 index 8f76c45..0000000 Binary files a/isometricRenderer.o and /dev/null differ diff --git a/main.c b/main.c index 839d8ab..9f57f96 100644 --- a/main.c +++ b/main.c @@ -4,6 +4,7 @@ #include "inputHandler.h" #include "raymath.h" #include "isometricRenderer.h" +#include "isometricMap.h" int main(){ @@ -15,7 +16,8 @@ int main(){ texture = LoadTexture("assets/amulet.png"); Texture2D isometricTexture = LoadTexture("assets/grass.png"); - IsometricRenderer isometricRenderer = {isometricTexture}; + IsometricRenderer *isometricRenderer = (IsometricRenderer *) malloc(sizeof(IsometricRenderer)); + isometricRenderer->texture = &isometricTexture; int spriteAmount = 0; Sprite cursorSprite = {&texture, 450, 225}; @@ -29,6 +31,8 @@ int main(){ SpriteAdd(sprites, &spriteAmount, &texture, 0, 0); + IsometricMap *map = IsometricMapInit(10, 10); + SetTargetFPS(60); while(!WindowShouldClose()){ @@ -38,7 +42,9 @@ int main(){ BeginMode2D(camera); - IsometricRendererRenderMap(&isometricRenderer, 50); + //IsometricRendererRenderMap(&isometricRenderer, 50); + + IsometricRendererRenderIsometricMap(map); int i; //int length = sizeof(sprites)/sizeof(sprites[0]); diff --git a/main.o b/main.o deleted file mode 100644 index 6f1bac3..0000000 Binary files a/main.o and /dev/null differ diff --git a/spiel b/spiel deleted file mode 100755 index 5ea7537..0000000 Binary files a/spiel and /dev/null differ diff --git a/sprite.o b/sprite.o deleted file mode 100644 index a7d1287..0000000 Binary files a/sprite.o and /dev/null differ diff --git a/tile.c b/tile.c new file mode 100644 index 0000000..240246b --- /dev/null +++ b/tile.c @@ -0,0 +1,2 @@ +#include "tile.h" + diff --git a/tile.h b/tile.h new file mode 100644 index 0000000..62c052b --- /dev/null +++ b/tile.h @@ -0,0 +1,11 @@ +#ifndef TILE_H_ +#define TILE_H_ +#include "raylib.h" + +typedef struct Tile{ + int textureId; + int x; + int y; +} Tile; + +#endif \ No newline at end of file