From 86252225c9cbbed5dfd80c343ff242854ff7e854 Mon Sep 17 00:00:00 2001 From: JanEhehalt Date: Mon, 28 Nov 2022 22:52:56 +0100 Subject: [PATCH] bruh --- Input/inputHandler.c | 23 ++++---- IsometricMap/isometricMap.c | 97 +++++++++++++++---------------- IsometricMap/isometricMap.h | 46 +++++++++++---- IsometricMap/isometricRenderer.c | 22 ++++--- IsometricMap/isometricRenderer.h | 3 +- List/list.c | 6 +- README.md | 2 + game.c | 20 +++---- game.h | 1 - game.o | Bin 0 -> 5072 bytes inputHandler.o | Bin 0 -> 7016 bytes isometricMap.o | Bin 0 -> 5584 bytes isometricRenderer.o | Bin 0 -> 2944 bytes list.o | Bin 0 -> 4216 bytes main.c | 5 +- main.o | Bin 0 -> 2968 bytes spiel | Bin 0 -> 30808 bytes sprite.c | 12 ++-- sprite.o | Bin 0 -> 3416 bytes tile.o | Bin 0 -> 928 bytes 20 files changed, 126 insertions(+), 111 deletions(-) create mode 100644 game.o create mode 100644 inputHandler.o create mode 100644 isometricMap.o create mode 100644 isometricRenderer.o create mode 100644 list.o create mode 100644 main.o create mode 100755 spiel create mode 100644 sprite.o create mode 100644 tile.o diff --git a/Input/inputHandler.c b/Input/inputHandler.c index 269ea3d..958119e 100644 --- a/Input/inputHandler.c +++ b/Input/inputHandler.c @@ -66,7 +66,7 @@ void mouseInput(Game *game){ // resetting last selected Tile to grass texture if(inputHandler->selectedLayer != -1){ - IsometricMapChangeTextureIdOfTile(layers[inputHandler->selectedLayer], (int) inputHandler->cursorWorldTile.x, (int) inputHandler->cursorWorldTile.y, 0); + IsometricMapChangeTextureIdOfTile(layers, (int) inputHandler->cursorWorldTile.x, (int) inputHandler->cursorWorldTile.y, inputHandler->selectedLayer, 0); } /* TODO: n=9 no good style, Segmentation fault when n > layerAmount @@ -74,6 +74,7 @@ void mouseInput(Game *game){ -> Stash size in another variable. printf("%ld \n", sizeof(*layers) / sizeof(layers[0])); */ + // hardcoded layer amount int n = 9; for(n = 9; n >= 0 ; n--){ if(layers[n] != 0){ @@ -84,14 +85,14 @@ void mouseInput(Game *game){ IsometricMapProject(layers[n], camera, inputHandler->cursorPos.x + mouseAdjustmentX, inputHandler->cursorPos.y + mouseAdjustmentY, &inputHandler->cursorWorldPos); - Tile *selectedTile = IsometricMapGetTileFromWorldCoordinates(layers[n], inputHandler->cursorWorldPos.x, inputHandler->cursorWorldPos.y); + Tile *selectedTile = IsometricMapGetTileFromWorldCoordinates(layers, inputHandler->cursorWorldPos.x, inputHandler->cursorWorldPos.y, n); if(selectedTile != 0){ inputHandler->cursorWorldTile.x = selectedTile->x; inputHandler->cursorWorldTile.y = selectedTile->y; inputHandler->selectedLayer = n; // setting currently selected tile to tower - IsometricMapChangeTextureIdOfTile(layers[n], inputHandler->cursorWorldTile.x, inputHandler->cursorWorldTile.y, 1); + IsometricMapChangeTextureIdOfTile(layers, inputHandler->cursorWorldTile.x, inputHandler->cursorWorldTile.y, n, 1); break; } } @@ -123,8 +124,8 @@ void mouseInput(Game *game){ // Add Sprite if(abs(width) + abs(height) < 20){ - int maxWidth = (game->layers[0]->widthBounds-1) * game->layers[0]->textureWidth; - int maxHeight = (game->layers[0]->heightBounds-1) * game->layers[0]->textureHeight; + int maxWidth = (game->layers[0]->width-1) * game->layers[0]->textureWidth; + int maxHeight = (game->layers[0]->height-1) * game->layers[0]->textureHeight; if(inputHandler->cursorWorldPos.x < 0){ printf("OutOfBoundsDestination Spawn\n");} else if(inputHandler->cursorWorldPos.y < 0){ printf("OutOfBoundsDestination Spawn\n");} else if(inputHandler->cursorWorldPos.x > maxWidth){ printf("OutOfBoundsDestination Spawn\n");} @@ -150,8 +151,8 @@ void mouseInput(Game *game){ float deltaY; Node *current = sprites->head; while (current != 0){ - Vector2 currPos = {current->data.x, current->data.y}; - IsometricMapUnproject(layers[0], camera, currPos.x, currPos.y, &currPos); + Vector2 currPos = {current->data.x + current->data.texture->width, current->data.y + current->data.texture->height/2}; + IsometricMapUnproject(layers, camera, currPos.x, currPos.y, current->data.z, &currPos); deltaX = currPos.x - camera->target.x - (rect.x + camera->target.x); deltaY = currPos.y - camera->target.y - (rect.y + camera->target.y); @@ -175,10 +176,10 @@ void mouseInput(Game *game){ while (current != 0){ if(current->data.selected){ current->data.hasDestination = 1; - float destX = inputHandler->cursorWorldTile.x * game->layers[0]->textureWidth; - float destY = inputHandler->cursorWorldTile.y * game->layers[0]->textureHeight; - int maxWidth = (game->layers[0]->widthBounds-1) * game->layers[0]->textureWidth; - int maxHeight = (game->layers[0]->heightBounds-1) * game->layers[0]->textureHeight; + float destX = inputHandler->cursorWorldPos.x; + float destY = inputHandler->cursorWorldPos.y; + int maxWidth = (game->layers[0]->width-1) * game->layers[0]->textureWidth; + int maxHeight = (game->layers[0]->height-1) * game->layers[0]->textureHeight; if(destX < 0){ printf("OutOfBoundsDestination"); continue; } if(destY < 0){ printf("OutOfBoundsDestination"); continue; } if(destX > maxWidth){ printf("OutOfBoundsDestination"); continue; } diff --git a/IsometricMap/isometricMap.c b/IsometricMap/isometricMap.c index 7907eba..3b083ba 100644 --- a/IsometricMap/isometricMap.c +++ b/IsometricMap/isometricMap.c @@ -15,28 +15,28 @@ IsometricMap * IsometricMapInit(int layer){ //map->tileTextures[0] = LoadTexture("assets/desert.png"); //map->tileTextures[1] = LoadTexture("assets/bigtower.png"); - map->originX = 0; - map->originY = -layer * map->tileTextures[0].width / 4; - map->width = 100 * map->tileTextures[0].width; - map->height = 100 * map->tileTextures[0].height; - map->widthBounds = 100; - map->heightBounds = 100; - map->layer = layer; - + map->width = 100; + map->height = 100; map->textureWidth = map->tileTextures[0].width; map->textureHeight = map->tileTextures[0].height; + map->worldPixelWidth = map->width * map->textureWidth; + map->worldPixelWidth = map->height * map->textureHeight; + map->layer = layer; + - Tile*** tiles = (Tile***)malloc(map->widthBounds*sizeof(Tile*)); + // mallocating the twodimensional Tiles Array + Tile*** tiles = (Tile***)malloc(map->width*sizeof(Tile*)); int n = 0; - for(n=0; n < map->widthBounds; n++){ - tiles[n] = (Tile**)malloc(map->heightBounds*sizeof(Tile*)); + for(n=0; n < map->width; n++){ + tiles[n] = (Tile**)malloc(map->height*sizeof(Tile*)); } int i = 0; int j = 0; - for(i=0; i < map->widthBounds; i++){ - for(j=0; j < map->heightBounds; j++){ + for(i=0; i < map->width; i++){ + for(j=0; j < map->height; j++){ Tile *tmp = (Tile *) malloc(sizeof(Tile)); + // initially all the Tiles are "empty" tmp->textureId = -1; tmp->x = i; tmp->y = j; @@ -50,6 +50,7 @@ IsometricMap * IsometricMapInit(int layer){ return map; } +// Only works for tiles with texture width == height (and for 22.5 degree?) Vector2 * IsometricMapCalcOffsetForTileAt(int x, int y, int textureSize){ Vector2* offset = (Vector2 *)malloc(sizeof(Vector2)); offset->x = x * textureSize/2 - y * textureSize/2; @@ -61,11 +62,10 @@ Tile * IsometricMapGetTileFromArrayPosition(IsometricMap *map, int x, int y){ return map->tiles[x][y]; } -// Project: Screen Coordinates -> World Coordinates void IsometricMapProject(IsometricMap *isometricMap, Camera2D *camera, float x, float y, Vector2 *tmp){ - float tileWidthHalf = isometricMap->tileTextures[0].width / 2; - float tileHeightQuarter = isometricMap->tileTextures[0].height / 4; + float tileWidthHalf = isometricMap->textureWidth / 2; + float tileHeightQuarter = isometricMap->textureHeight / 4; x += camera->target.x; y += camera->target.y; @@ -73,7 +73,6 @@ void IsometricMapProject(IsometricMap *isometricMap, Camera2D *camera, float x, float xPos = (float) x; float yPos = (float) y; - float isoX = 0.5 * ( xPos / tileWidthHalf + yPos / tileHeightQuarter); float isoY = 0.5 * ( -xPos / tileWidthHalf + yPos / tileHeightQuarter); @@ -81,47 +80,47 @@ void IsometricMapProject(IsometricMap *isometricMap, Camera2D *camera, float x, tmp->y = isoY * isometricMap->tileTextures[0].height; } -// Unproject: World Coordinates -> Screen Coordinates -void IsometricMapUnproject(IsometricMap *isometricMap, Camera2D *camera, int x, int y, Vector2 *tmp){ +// Unproject: World Coordinates -> Screen Coordinates writes result in tmp Vector +void IsometricMapUnproject(IsometricMap **isometricMap, Camera2D *camera, int x, int y, float z, Vector2 *tmp){ float xPos = (float) x; float yPos = (float) y; - float worldX = (xPos - yPos) / 2; - float worldY = (xPos + yPos) / 4; + float screenX = (xPos - yPos) / 2; + float screenY = (xPos + yPos) / 4; + + screenX += camera->target.x; + screenY += camera->target.y; - worldX += camera->target.x; - worldY += camera->target.y; + // z is currently implemented as z=1 equals 1 layer, z=2 would be two layers height (could be smoothed) + // TODO drift + screenY -= z *(isometricMap[0]->textureHeight/2); - tmp->x = worldX; - tmp->y = worldY; + tmp->x = screenX; + tmp->y = screenY; } -Tile * IsometricMapGetTileFromWorldCoordinates(IsometricMap *isometricMap, float x, float y){ +Tile * IsometricMapGetTileFromWorldCoordinates(IsometricMap **isometricMap, float x, float y, float z){ - x = (int)(x / isometricMap->tileTextures->width); - y = (int)(y / isometricMap->tileTextures->height); - - Tile *ptr = (Tile *) malloc(sizeof(Tile *)); - ptr->x = 0; - ptr->y = 0; + int layer = (int) z; - if( x < isometricMap->widthBounds && y < isometricMap->heightBounds && - x >= 0 && y >= 0 ){ - if(isometricMap->tiles[(int)x][(int)y]->textureId != -1){ - ptr->x = isometricMap->tiles[(int)x][(int)y]->x; - ptr->y = isometricMap->tiles[(int)x][(int)y]->y; - return ptr; + x = (int)(x / isometricMap[layer]->textureWidth); + y = (int)(y / isometricMap[layer]->textureHeight); + + if( x < isometricMap[layer]->width && y < isometricMap[layer]->height && x >= 0 && y >= 0 ){ + if(isometricMap[layer]->tiles[(int)x][(int)y]->textureId != -1){ + return (isometricMap[layer]->tiles[(int)x][(int)y]); } } - ptr = 0; + Tile *ptr = 0; return ptr; } Tile * IsometricMapGetMostUpperTile(IsometricMap **isometricMap, Tile *tile){ Tile *ptr = (Tile *) malloc(sizeof(Tile *)); + // hardcoded layer amount int n = 9; for(n=9;n>=0;n--){ - if( tile->x < isometricMap[n]->widthBounds && tile->y < isometricMap[n]->heightBounds && + if( tile->x < isometricMap[n]->width && tile->y < isometricMap[n]->height && tile->x >= 0 && tile->y >= 0 ){ if(isometricMap[n]->tiles[tile->x][tile->y]->textureId != -1){ ptr->x = isometricMap[n]->tiles[tile->x][tile->y]->x; @@ -135,17 +134,13 @@ Tile * IsometricMapGetMostUpperTile(IsometricMap **isometricMap, Tile *tile){ return ptr; } -// IsometricMapAddTile and IsometricMapChangeTextureIdOfTile pretty much do the same by now... -void IsometricMapAddTile(IsometricMap *isometricMap, int x, int y, int textureId){ - isometricMap->tiles[x][y]->textureId = textureId; - isometricMap->tiles[x][y]->x = x; - isometricMap->tiles[x][y]->y = y; - isometricMap->tiles[x][y]->z = isometricMap->layer; -} -void IsometricMapChangeTextureIdOfTile(IsometricMap *map, int x, int y, int id){ - if( x < map->widthBounds && y < map->heightBounds && +void IsometricMapChangeTextureIdOfTile(IsometricMap **map, int x, int y, int layer, int id){ + if( x < map[layer]->width && y < map[layer]->height && x >= 0 && y >= 0 ){ - (map->tiles[x][y])->textureId = id; - } + (map[layer]->tiles[x][y])->textureId = id; + } + else{ + printf("WARNING: trying to change Texture of Tile which is out of bounds!\n"); + } } diff --git a/IsometricMap/isometricMap.h b/IsometricMap/isometricMap.h index 3471a1e..76265ed 100644 --- a/IsometricMap/isometricMap.h +++ b/IsometricMap/isometricMap.h @@ -4,31 +4,55 @@ #include "tile.c" typedef struct IsometricMap{ + // Array with all the needed textures for this layer Texture2D tileTextures[10]; + + // twodimensional array of all the tiles in this layer Tile ***tiles; - int originX; - int originY; - // TODO: überprüfen, ob width/height und widthBounds/heightBounds überhaupt noch unterschiedlich sind. Wenn nicht eins der beiden löschen + + // amount of tiles in x-direction int width; + + // amount of tiles in y-direction int height; - int widthBounds; - int heightBounds; + + // pixel width of a single tile texture int textureWidth; + + // pixel height of a single tile texture int textureHeight; + + // pixel width of the entire map + int worldPixelWidth; + + // pixel height of the entire map + int worldPixelHeight; + + // layer of the map int layer; } IsometricMap; +// returns pointer to IsometricMap Instance IsometricMap * IsometricMapInit(int layer); + +// For Rendering: calculates Vector2 * IsometricMapCalcOffsetForTileAt(int x, int y, int textureSize); + Tile * IsometricMapGetMostUpperTile(IsometricMap **isometricMap, Tile *tile); + Tile * IsometricMapGetTileFromArrayPosition(IsometricMap *isometricMap, int x, int y); -// Project: Screen Coordinates -> World Coordinates + +// Project: Screen Coordinates -> World Coordinates writes result in tmp Vector +// Currently only calcing coords on layer 0 void IsometricMapProject(IsometricMap *isometricMap, Camera2D *camera, float x, float y, Vector2 *tmp); -// Unproject: World Coordinates -> Screen Coordinates -void IsometricMapUnproject(IsometricMap *isometricMap, Camera2D *camera, int x, int y, Vector2 *tmp); -void IsometricMapAddTile(IsometricMap *isometricMap, int x, int y, int textureId); -void IsometricMapChangeTextureIdOfTile(IsometricMap *map, int x, int y, int id); -Tile * IsometricMapGetTileFromWorldCoordinates(IsometricMap *isometricMap, float x, float y); + +// Unproject: World Coordinates -> Screen Coordinates writes result in tmp Vector +void IsometricMapUnproject(IsometricMap **isometricMap, Camera2D *camera, int x, int y, float z, Vector2 *tmp); + +// changes to Texture ID of tile at x y on maplayer layer +void IsometricMapChangeTextureIdOfTile(IsometricMap **map, int x, int y, int layer, int id); + +Tile * IsometricMapGetTileFromWorldCoordinates(IsometricMap **isometricMap, float x, float y, float layer); #endif diff --git a/IsometricMap/isometricRenderer.c b/IsometricMap/isometricRenderer.c index f767d27..92080e5 100644 --- a/IsometricMap/isometricRenderer.c +++ b/IsometricMap/isometricRenderer.c @@ -4,6 +4,7 @@ #include "../Input/inputHandler.h" #include #include +#include "../game.h" // @param deprecated void IsometricRendererDrawMap(IsometricRenderer *renderer, int height){ @@ -38,23 +39,20 @@ void IsometricRendererDrawMap(IsometricRenderer *renderer, int height){ } } -void IsometricRendererRenderIsometricMap(IsometricMap **map, InputHandler *input){ +void IsometricRendererRenderIsometricMap(Game *game){ int n = 0; int i = 0; int j = 0; for(n = 0; n < 10; n++){ - for(i=0; i < map[n]->widthBounds; i++){ - for(j=0; j < map[n]->heightBounds; j++){ - if(map[n]->tiles[i][j]->textureId != -1){ - Vector2 *offset = IsometricMapCalcOffsetForTileAt(i,j, map[n]->textureWidth); + for(i=0; i < game->layers[n]->width; i++){ + for(j=0; j < game->layers[n]->height; j++){ + if(game->layers[n]->tiles[i][j]->textureId != -1){ + Vector2 *offset = IsometricMapCalcOffsetForTileAt(i,j, game->layers[n]->textureWidth); + offset->y -= n * (game->layers[n]->textureHeight/4); + + int textureId = game->layers[n]->tiles[i][j]->textureId; - int textureId = map[n]->tiles[i][j]->textureId; - - float x = map[n]->originX + offset->x; - float y = map[n]->originY + offset->y;// + map[n]->textureHeight - map[n]->tileTextures[textureId].height; - - - DrawTexture(map[n]->tileTextures[textureId], x, y, WHITE); + DrawTexture(game->layers[n]->tileTextures[textureId], offset->x, offset->y, WHITE); free(offset); } } diff --git a/IsometricMap/isometricRenderer.h b/IsometricMap/isometricRenderer.h index 7de86d0..d88db04 100644 --- a/IsometricMap/isometricRenderer.h +++ b/IsometricMap/isometricRenderer.h @@ -3,6 +3,7 @@ #include "raylib.h" #include "isometricMap.h" #include "../Input/inputHandler.h" +#include "../game.h" typedef struct IsometricRenderer{ Texture *texture; @@ -11,6 +12,6 @@ typedef struct IsometricRenderer{ // @param deprecated void IsometricRendererDrawMap(IsometricRenderer *renderer, int height); -void IsometricRendererRenderIsometricMap(IsometricMap **map, InputHandler *input); +void IsometricRendererRenderIsometricMap(Game *game); #endif \ No newline at end of file diff --git a/List/list.c b/List/list.c index 08affa7..dd40c19 100644 --- a/List/list.c +++ b/List/list.c @@ -115,9 +115,9 @@ void ListActAllSprites(Game *game){ } // updating z-position - Tile *floorTile = IsometricMapGetTileFromWorldCoordinates(game->layers[0], current->data.x, current->data.y); - floorTile = IsometricMapGetMostUpperTile(game->layers, floorTile); - current->data.z = floorTile->z; + Tile *floorTile = IsometricMapGetTileFromWorldCoordinates(game->layers, current->data.x, current->data.y, 0); + Tile *topTile = IsometricMapGetMostUpperTile(game->layers, floorTile); + current->data.z = topTile->z; current = current->next; } diff --git a/README.md b/README.md index 71dbf5c..c6ada51 100644 --- a/README.md +++ b/README.md @@ -26,6 +26,8 @@ Fantasy Welt oder Realistisch? + Parser für Map-Dateien + MapEditor + IsometricMap variablen auf Duplikate prüfen ++ IsometricMap struct erstellen, das den IsometricMap(+Layer) Array speichert ++ Sprites drift too high when going up mountain ### WiP diff --git a/game.c b/game.c index edf1d14..59d0db0 100644 --- a/game.c +++ b/game.c @@ -78,32 +78,32 @@ Game *GameInit() switch (n) { case 0: - IsometricMapAddTile(((game->layers))[n], i, j, 0); + IsometricMapChangeTextureIdOfTile(game->layers, i, j, n, 0); break; case 1: if (i > 35 && i < 50 && j > 45 && j < 60) { - IsometricMapAddTile(((game->layers))[n], i, j, 0); + IsometricMapChangeTextureIdOfTile(game->layers, i, j, n, 0); } break; case 2: if (i > 40 && i < 44 && j > 50 && j < 54) { - IsometricMapAddTile(((game->layers))[n], i, j, 2); + IsometricMapChangeTextureIdOfTile(game->layers, i, j, n, 2); } break; } if(i == j && n == 1){ - IsometricMapAddTile(((game->layers))[n], i, j, 0); + IsometricMapChangeTextureIdOfTile(game->layers, i, j, n, 0); } if(i == j && n == 2){ - IsometricMapAddTile(((game->layers))[n], i, j, 0); + IsometricMapChangeTextureIdOfTile(game->layers, i, j, n, 0); } if(i == j-1 && n == 1){ - IsometricMapAddTile(((game->layers))[n], i, j, 0); + IsometricMapChangeTextureIdOfTile(game->layers, i, j, n, 0); } if(i-1 == j && n == 1){ - IsometricMapAddTile(((game->layers))[n], i, j, 0); + IsometricMapChangeTextureIdOfTile(game->layers, i, j, n, 0); } } } @@ -115,11 +115,7 @@ Game *GameInit() { for (j = 0; j < 20 - n * 2; j++) { - IsometricMapAddTile(((game->layers))[n], i, j, 0); - if (n == 9) - { - IsometricMapAddTile(((game->layers))[n], i, j, 2); - } + IsometricMapChangeTextureIdOfTile(game->layers, i, j, n, 0); } } } diff --git a/game.h b/game.h index 3722fc5..16c8212 100644 --- a/game.h +++ b/game.h @@ -3,7 +3,6 @@ #include "raylib.h" -// So kann man die includes umgehen, also keine Circular dependencies mehr :) typedef struct Game{ Texture2D cursorTextures[2]; Texture2D worker[8]; diff --git a/game.o b/game.o new file mode 100644 index 0000000000000000000000000000000000000000..5225dd809f61b9809269c6c45fc2235b4e503959 GIT binary patch literal 5072 zcmbtXTWl0n7(UxAP_XT`S|gE4ngCkFF5QAkg~;l%?KG)UfyO3=EYsa-yResLc18+; z?ZPgmn{}}$COjDB$?(7fCdO2wwsJ`|@c|Q~_+mg~(x${qNW4WH|NqQ6yQjlUp!g>< z=l{R+-_K=sM}yrR6)qRy>a(XYulyTlU|@x0&mpuRC$E}LP6|%mvN*|JuQK%0hJMP>%hhHtHc6J{ z$i8p-`dILF(cj@LR4G4xg?0tcO9t6# zcyQ%Qz<}qMsT-bpf29ppWrJ1QU~r;t@z-F3Ew{lMZ7|p{C4bZY)o^MJ0g(!L*m|0+ zP~mlY{_;Jolgpt-OCPS5%SM)$%}W$9UZRNc5)r%MsapgCjP-tACgRK|@2&v(D<@!{ zr9{&|dKu)&o)TDEFHC#-*dZtx7&0Bqm_v>ZC48>UtbQET3lx@4NuOPHOU1?tQ|7l# z-kqiMuIwl1b!qxi+5PPAaEY-Pv)@sk2AZ7&-qf$~n@0!k$iv)LFlLfZmyiw61}E@U=ze=`HO3^NR~aPNftr zwLYw?sif*1j1J64LXqVDgb43Xs{0gmy*ae_yu*n>ZZUtV&3S5r^Hi(z)J8f*NM1Z(SFsR-08ma=a5;wsQ$lMVy8fY`s$i^i(r zw*BRXInk?co;rrPSJ0=q09FqV)@3EUo$YX}#}4;7;F}%r?GAXv0gpT2X$SnY15O6z zxZ(|yP8hlpQH{jqSS%SP-AOsJOBvC0RUtcv)u^TfR7KVlI?)xE2Ngo!9kJ-JlvJY! zlL<|ZiDn&YGHxn%M^hU0-IYql6-|wXpOc4g0RlsEVo+f*yCT~Mc12?f358Oc9NrfS z5A6#L$k7;-L1_&eanIrE{sUJx680AfZ%^Ed9PdC72=y1k!||691mgO&rbv#k(W?J} zfG+`_`}vaL+z-$1TR|W99M}I*z?Ta6&kW~&{7n9fjhK(>yr~0mP40(LQ_XRRbE*=Py&7C@#2b+{nRxqCDdJU=rVviX z<4OYN5=l+*!ndu3-at$qOz7TWH94%P+5xaZPs&heK!xkmjQc;|O<<2lg0-{c&CfXg zo#GSh_;8V|01kWYFCiu~ftv@Y3MYY3L|fKYg5Ni!hv7k-ZC`{ay~q_gz(#BQ#{fsw zyS2yfCip$f&4f#6b`lCy3&vCohXnBgo qA7TaL-GXtf_NZoEdw|Rh2g7?*D8H=ztA{B&`ztJet!zp;tNnkgpIqet literal 0 HcmV?d00001 diff --git a/inputHandler.o b/inputHandler.o new file mode 100644 index 0000000000000000000000000000000000000000..0b237e7c7d124c89034735674fb97e2b25cd349f GIT binary patch literal 7016 zcmbtYZ)_Y#6`zZp)=(#VPTk@j9iHmxE${{ zJL4U%Zqo=xTJOy7z4x0p@4cB>-?#LG`_}~mOtt{~8goYyWvuiWw;$!*DBH+3ux0IY z|LQU9zaBR7i{XTJSD!cR3v(rCBn<6hF`=c3%UZB=ep&0CTGkr$k}ET&${{JgC*_L? z?e9hHdA&6BC9=~oyrVrom3a=M68+f#ZtbW;1`yPcH0bm9e~ft@g2kad+(Z&=!)Vb% zfU%CbA!*R>J?LGv?iRh$kl}0jN&a})-(olZQmIrf&DitLRw}GQOWDcn+x9%xRIzW1 zd75X@A@1fmLD0N}4lT5~xX+%qXLt<9jl#?2J7nZ!fD%B_ysHLS2A8Ou;FqfhpVsck zSHzmjPVg~wgI^{e)Zk+bFMDUAVcKX4O)M+-i77PkfId%s`^Gbl zEEo-;PUK)K4VGvyx9adrBR2hSG>XSIx!$l##mRQh?fx*CS0h6-(S{_$ygfoQiiEXFq_aW zzUQv1UI`ebof(DBSuOl7W%M1xeosc8IPOqf#t?s*q$YF<+=)4wQwtMwYFb)Qfh-vL z3k%G8jr0~M$Z}bZeM5AsgV%ZS5a;~?rn0*pQXd8B4OI!wdO7oh#{AD<9LV3qi)r>B zKCV=5p)Po7jufqz`4nulm^Y3u6m@6ST(c)&J0Ia86CqgvAQ0)js}fddFJuTaW1R19tVv& zsWXDJWEjVz`si`yy!#FU;x~Kx=nF6P{ z1c!_E^J!bZR7LnZU$cAC>brg2Qow_QA zo}>H`bP8vKaN;AZ5*@m_o97OW>BN-7vgfD@XXG-u0)fz!YhUu$ne2Cw~6H?Fw!3YT^hBgq-^_gf0C&Gg##DLckUwD+Z z5(OZC;X2bsZ~uqR1t{{&jL=Q-x)aVK4nkX>ydQJMlZ9vq7s-AxoQZCQ8L^{gqf`nF z`eivHXBzY?Rkpz+?4GMt%pPI)Ttj`(@-GiP&UR1FUO59IA1W< zdhWjRr9&Tw^kH5y?A!t|^Ya1GUb%JD&7u`{Hk$L!K=et?pY%uV2{o{4xv_(RMZxyodV9V$mgWp}(w&5{7UsGcR zNXwB&h0bnOr)E1>fc*&}|B&=oIcok?2Z9hm!}Or7;E$YR-7@C~ww;See`u7oF!9( zIm?Kp;{9eO(#P5}u`}IfpT!QCR%bewHM`Q;B(~nFB$j%m-#nO1nOW#Smm_Qd+8tnH z9oh7NX=Rdqow32TQzSNzm}jkA#_Wh6N*qb{n`<<>GU-<_qiRLW(A%F$4;)Qr`r~cs zbS92NfM)H;a>rV8mX%I*Wz1~WjIRZ|&3-cml$^=3!-JWmWwvEZvStU9S*s(JH8WOg ztnc)iIeSur!V@w`SqXOhc-A7N<9(-2A5X-R{p_@P?qoWaiOW@f!#vlXrt^rr-JgjK zm`9QWCeH?A@@E&E8Q485^kI&+Tgbh5R^TXioH1V!<6rpTfAhg>D9>nKo-+c+ypPc% z{h3g3)z3*Ee94EuMeI}Wyr+HeVITa9;(+zWr_%@jse4*Nl7iPO`u|pNbS2Lw1f809U4se^nbbe8;P~-I;@1>h<^Q!0{=>&H zs~ZQ&^QOQt=SF%Ye$z+)Z6E!TkN%R6eh~K=HJKMVZJH;pH%$(m51jb$9zmoA|5g263a;w!Rd7}R zl!B}JuPL~yAHt;65Kla^wTq6#<#$HhgUj!X5f3i!R~E^h8?a(0>1}14_bJ)SnEkPc zMK>Ia#A8;BMNVe3ERsn(gTC~@fSDp$Ds7n&`j*_mZxu0qC6$ZNwKGT;(mApLlX>cR z0=J1=!vFOSku{ENaXhSYMMdu?BA!wpj(0g^Pg4)MjIJV1=PEW4wLx*-p&VcoE+eO2#-uvanky}I3m;T-e&FYQAlQ=5#x#9pNiIKB46V*aaAQM|qO zsKRRb4~h?*6T%Mp#}O;-W&W$p4U-Tq9cp3W7}9}xy!PPq=AIyCh(vXJ0_GX=v%Z@B Npzz-UnbN%W{{^{So3H=? literal 0 HcmV?d00001 diff --git a/isometricMap.o b/isometricMap.o new file mode 100644 index 0000000000000000000000000000000000000000..dd95ea4e28d86b326da41d2f2276a9522c0ef6cd GIT binary patch literal 5584 zcmb_gVQgDh6~2zM&OqAdOhu|_1)fA%wzY0EHmRK$b@6Wdf|@q!YPFTtX0H8`c(eV2 z{j8;Eh6ryJkGBX*{2-Iis1QGfkk}voZ0gjc%al}#P(TIcM}Jr-NEwNQp+Oi_DBrp7 zUie|SN!tdH5{8)@C?-rom;Zu8atnVWSCSBa1LlI~nu(x-S;pZcr|{Z6;%U8w`q zNlfc@P`6(QIsCdE4{wJa-wpmg!T;j6_|GcH$H7F;JWr>B0SPxbtkXvpKTKDDp6Wg%GMbAi?ZNBP`qH|F_*Yje@<#O&iq zOy;?O*3vh_n7P|y^BVMP^Xvf{jhw`SEz*P0qAl`*(G7d3$Keb5v_7@_BeDzXvK~NE z!VX^qOo0V%kpbQAs_;eW6@_w?FTOTa;R|h!E@*G&+!bL1VcAvk6Z$k=P3uqY7R6>g z2Fo?>X}wHpO$`O#n9=lGvyHB%o(J2c7o#fj`em0Jc4@;-)Ct!e5t73< zRC?TO)jd;osTGu6Mixp-@P{wrGq|AJ3G#5+t-xkT%6THLx^gN&kE343IvB7Sj)m|U zgy9RbVg&{F5WJvZ48me{UZ)YJy?ld4b*&GR%Y&;l0dkqILx<=OVQpL%7lm156I^_D z5~`h_-JaTg5k{=L<@iO)AIB#3ib`{0A+L=1B#U)d+Y-2n1lH`tU3+kuJil|w=4!9` zT|(;83Kw!WvU}Q#B1YjdB5Moe!e$XIUPFj(MiH@_QSw*7BBS>ej6s;+5ox%%019@D zIg_+ut$;4`J4hfUlY{=EaDY}32o?}IP~y!&Q(!Cj3}X4-1mX-+um@&rzTp;M>&UK( zBMS%UPJ;utaSDWC=u_YaW?EjsXh(JFe^VVRZ&t5$RHw^OEuW06cTVwNldub8ELy7;K;$T8&) z`bp22hA}`fb}}A+Hqw{4Qp#JUNPmCy%hAIJ`%7Zl|E;HmCB(x1q?8}Wnoa%SkpMAh{p(WxSL&Pg*PHfdr2JQH`X4p* zYf`?$8$7j{QXxe|@bto<1hGHBz9;c9iHm&!_O`@-M#Y0B_5=Md@gw_h zQ-Pt0eLzo7F5%gS31v*=AN}9)BfLQG1DeP?`n^c#R&lXR(aafEA(I+Rjz?2$z%w1l zXDpUWX0v9BoidYYdD7VMaM4PpUKvh}y)rzK%w*e?;>m34%*Y5%`w6o^2lBYpCO>Id zgq|pvx#NXG^6HRT%vc#S-$oiLm@nf(Xu}fu@hwn~x$|Zrn~s}iA)U!5Eu+|`4c?$x zv=ZavhVZIQ7#BB*3~wNPW`sOs<0Y%e_KPf1ExKp?KK;W8?TEyw>}e|%9+x=rcX;qo zi7USN^AcD=;(q=Qef-Dd{3jjw^i)&x`}yMz`0qR5HaRHmP-&^Se&NBX6czqBEr_P# zniMm}j`{F6CH|5RSNy;D@E=M3PFeTL{&k68lXXvOUVrv~+9fFdS0w+S#EGxrr~Hpd zIq~VI+VgUtaCN@ZK3tve*L}D;-#_)?>U_`naCN>{e7HK_-EzN_Kk9t5Xz^;!N?t*4 z72JMIjS5CK8MW{{vS>PKC0X=JvB;tY)19QuT+YZtmNzXUinr^aIMs4KnlD9h-f&v1 ztI#1!#@O&kA(=CzhyPy}fjWgmXT;lLa`KGaFC~-Vt0~)yQ8#|ECgKi`(B`7mq{3$~ zrXl^e0JS}C$G(J~aCr?&l(CX;T_y0Ze*glq`M>J-LzirNYYtO3Dc668CZ6WMyN^Of z`iDIn8un4ZXyl)_DgRafH3-$%%R49ay%>%C+_S*w2>SiMAoU}Vd7H|=!d}LJZ2I*l zl)i64zdlvrR{OuF*Ii-8?HHM(r%>su{oiVBQkm|dFZMyMPg7dQuTM7pdk={1*+pN* XB0m3pQ$}uXrN1oww}h3}$FKiy&Ca4m literal 0 HcmV?d00001 diff --git a/isometricRenderer.o b/isometricRenderer.o new file mode 100644 index 0000000000000000000000000000000000000000..94650e68bb17a889ccf68492344750972953d32f GIT binary patch literal 2944 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 - IsometricRendererRenderIsometricMap(game->layers, game->inputHandler); - + IsometricRendererRenderIsometricMap(game); ListDrawAllSprites(game->sprites, game->layers, game->camera); EndMode2D(); diff --git a/main.o b/main.o new file mode 100644 index 0000000000000000000000000000000000000000..d0bfc7d4c7ef610437d181e4314cf93ef2c92db7 GIT binary patch literal 2968 zcmbuAU1%It6vxjdHC;6y+gc@9kyTVG*dZGg(TB3hc9SWzMYF~}h?L3BH5t1*6J};< zBB;fvWLSit@1pq97oYl45Nc?PtuNw(NZwlUgNPzZh=_>m`QN#BcRK96=z%-;+~4`S zGxuZOs2-mg$mK{&j*d`oq$$yOzNeR^TBcDNp`Ee&|C%?WA8O{>FXQIBx4~pamoHuB zB%c)riMBy5;vqFNs%}f=rwV(R?drA}U6bI#?#10sr?Y-7+IqOtq0R`=E=5dshUdU$7SUzw|6M*Zvs*oReW1nImIsh3ybH+$)2rRW>& zEGMzHefrWJ?4p7siw(c!-r5{{`;&h<9XXcY+ibt|=NDHNtiY)k&pNK{oh6#BRGujw znqO$SVXIgw8IKzihf6IvEWJKCX-quvsKQ(ZvWHuN8y0r<^$_P^BR(f7+^_S@gY@Ytyt?blju9#m8bX9-Q!OF?p1Z1zuBxzEhtQt}T4w$9)%{ zu$E~M(?I`eFe zIGLVW{F1dLuhp0o!m6P0LTJ9%uVwffGprRtD1ig z$O1mfP4lO4VX%OYanl@s83;J`mF9MW?@Mqe!S^TlN`l{&;IAb(?n0ga%>=(Y!QV^p zdlJ0JIt1&8))gaIZHCqY8A0gB{gT#v(XfnAtb}CPR%ns25CmlSUOcFK&8BeK=6azp z`0hR&gnR zS;Lx@yChaN)fInT1z;~h)xQ(m-;hVRf$RSi806b@p%^Fr5HY|xLC*ggU*cGlx@9eS ztm|V>CnY_tr`ZTLk#u7HSLLYBu{P^?-A}VY>)HqXz3B-lW7>C)Iqre9dr^U+iqoC` z{(AfhE6ACSFDp>ij;c?`V;A;Y|8-1?MXxi~ANP-r*SueC#GO<152+q^4(g=iku$ya djOaX^Sq`K=SZYYPQ~Je!sOBHaEWJlM{$B%3_YD95 literal 0 HcmV?d00001 diff --git a/spiel b/spiel new file mode 100755 index 0000000000000000000000000000000000000000..c3231abd6cd62aa2d0403d85bbc28c38ade47725 GIT binary patch literal 30808 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 F{|9^0_NM>< literal 0 HcmV?d00001 diff --git a/sprite.c b/sprite.c index 251820f..317e203 100644 --- a/sprite.c +++ b/sprite.c @@ -28,20 +28,18 @@ void DrawSpriteToWorld(Sprite *sprite, IsometricMap **map, Camera2D *camera){ // Wir müssen beachten, dass sie nach den unprojezierten Screen-Koordinaten sortiert werden müssen. // Macht es vielleicht sinn den Sprites auch einen Vector mit ihren Screen Koordinaten zu geben? - Vector2 pos = {sprite->x, sprite->y}; - IsometricMapUnproject(map[0], camera, pos.x, pos.y, &pos); + Vector2 pos = {sprite->x - sprite->texture->width, sprite->y - sprite->texture->height/2}; + IsometricMapUnproject(map, camera, pos.x, pos.y, sprite->z, &pos); // Also erst ab hier sortieren, mit den Werten aus dem pos Vector - - pos.y -= sprite->z * (map[0]->textureHeight/2); - + // nvm, Isometric map muss mit reingerechnet werden pos.x -= camera->target.x; pos.y -= camera->target.y; if(sprite->selected){ - DrawTexture(*sprite->texture, pos.x - sprite->texture->width/4, pos.y - sprite->texture->height/4, BLACK); + DrawTexture(*sprite->texture, pos.x, pos.y, BLACK); //DrawTexture(*sprite->texture, sprite->x, sprite->y, BLACK); } else{ - DrawTexture(*sprite->texture, pos.x - sprite->texture->width/4, pos.y - sprite->texture->height/4, WHITE); + DrawTexture(*sprite->texture, pos.x, pos.y, WHITE); } //printf("%f %f \n", sprite->x, sprite->y); } diff --git a/sprite.o b/sprite.o new file mode 100644 index 0000000000000000000000000000000000000000..66a319c8b4194b0b6155c112c5756f9a8f49c75f GIT binary patch literal 3416 zcmbtX&2Jk;6rZ)z)D$P)R5=6{!Cs02O|7^f1PCF!v74#XAV}gAL7T*}HzcV)!g@_p zP|G0=%4mt2KOraR4FnvjUYd{6BsU|0WFZa)0+$D%J}XD?r7d9MP==wOWpL1C6psDXt$veog=2WnWRqFvOY6SAolRvYBmU3G_fV!qP zsR)-707NGB)SPky681{iHXqa$R?XSax8w$XZD~#GDKEN&|`Li%mcRbC4Kk3(7E%qqGCxQ=*uN) z4V0|Y+QPOu^R4v+x7=!?R4SDB3(JJ=i)Lr?@RZfbd5I<}dMK zkF=|wy87B$-JdH!AsRrh!$A45@x1>t_k4@{J0xjvHVy;j9{xxhk$Jc47qnvgxQb^W z8~7tRuA4Riu_l5pTgczlCP(mXc>18Yc^3BKhhTfSfzQ7cFw6_)%_&a-fPBg0-wxO@ z7|r;hhu{Mb!AAi{`&UJQc-{c}K;T&{9th7B%vWGE^GmX`#|*gN?N1e)O28gMV1OFJ5pK`<;48s7)`ZylF?l5pU% zzKafA)|dFRmr`bI0%p^&=P9`|^kmF$LT!jY5i?`NKatH6zmc&w@k}bEr{OG}f%?Op zKhBFM_V1^2ekk#*ZkU%q2QBGSW0OWKrHe@Z-=u*$mbTSlCMfnV^S>IXm+TvgHOpKkDP~!B z`O&PTc#**F6PW-@n+8}`=D8@4D@rLCUSrtEBzxBQp=eoEmzAjH(mU?2#1S^o-M5@Z z?qCD0F)M0-kvMlgTvh$x_8+5U2mQbOXV^=7M(DP24XAFLIp5?`D8f L8}4*A$$kGfOw%{6 literal 0 HcmV?d00001