diff --git a/IsometricMap/isometricMap.c b/IsometricMap/isometricMap.c index cf25544..59dda45 100644 --- a/IsometricMap/isometricMap.c +++ b/IsometricMap/isometricMap.c @@ -16,8 +16,8 @@ IsometricMap * IsometricMapInit(int layer){ //map->tileTextures[0] = LoadTexture("assets/desert.png"); //map->tileTextures[1] = LoadTexture("assets/bigtower.png"); - map->width = 200; - map->height = 200; + map->width = 500; + map->height = 500; map->textureWidth = map->tileTextures[0].width; map->textureHeight = map->tileTextures[0].height; map->worldPixelWidth = map->width * map->textureWidth; @@ -34,6 +34,8 @@ IsometricMap * IsometricMapInit(int layer){ int i = 0; int j = 0; + int quarterTextureSize = map->textureWidth / 4; + int halfTextureSize = map->textureWidth / 2; for(i=0; i < map->width; i++){ for(j=0; j < map->height; j++){ Tile *tmp = (Tile *) malloc(sizeof(Tile)); @@ -42,6 +44,14 @@ IsometricMap * IsometricMapInit(int layer){ tmp->x = i; tmp->y = j; tmp->z = layer; + + Vector2 *offset = IsometricMapCalcOffsetForTileAtEfficient(i,j, halfTextureSize, quarterTextureSize); + // the higher the layer the higher it needs to be drawed + offset->y -= layer * quarterTextureSize; + tmp->offsetX = offset->x; + tmp->offsetY = offset->y; + free(offset); + tiles[i][j] = tmp; } } diff --git a/IsometricMap/isometricRenderer.c b/IsometricMap/isometricRenderer.c index 2719012..fbae409 100644 --- a/IsometricMap/isometricRenderer.c +++ b/IsometricMap/isometricRenderer.c @@ -7,10 +7,10 @@ #include "../game.h" // @param deprecated -void IsometricRendererDrawMap(IsometricRenderer *renderer, int height){ +void IsometricRendererDrawMap(IsometricRenderer *renderer, int height) +{ printf("WARNING: Using deprecated Function IsometricRendererDrawMap!\n"); - float originX = 0.0f; float originY = 0.0f; @@ -19,28 +19,33 @@ void IsometricRendererDrawMap(IsometricRenderer *renderer, int height){ int j = 0; int amount = 1; - for(i=0; i<=height; i++){ - for(j=0; jtexture->width + j * renderer->texture->width; - if(amount%2 == 1){ - x -= renderer->texture->width/2; + for (i = 0; i <= height; i++) + { + for (j = 0; j < amount; j++) + { + float x = originX - amount / 2 * renderer->texture->width + j * renderer->texture->width; + if (amount % 2 == 1) + { + x -= renderer->texture->width / 2; } - float y = i * renderer->texture->height/4; + float y = i * renderer->texture->height / 4; DrawTexture(*renderer->texture, x, y, WHITE); - } - if(i < height/2){ + if (i < height / 2) + { amount++; } - else{ + else + { amount--; } - } } // parameter could be changed to only IsometricMap[] -void IsometricRendererRenderIsometricMap(Game *game){ +void IsometricRendererRenderIsometricMap(Game *game) +{ + /* int n = 0; int i = 0; int j = 0; @@ -51,17 +56,74 @@ void IsometricRendererRenderIsometricMap(Game *game){ if(game->layers[n]->tiles[i][j]->textureId == -1){ } else{ - int quarterTextureSize = game->layers[n]->textureWidth / 4; - int halfTextureSize = game->layers[n]->textureWidth / 2; - // SHOULD BE SET ONCE INITIALLY - Vector2 *offset = IsometricMapCalcOffsetForTileAtEfficient(i,j, halfTextureSize, quarterTextureSize); - // the higher the layer the higher it needs to be drawed - offset->y -= n * quarterTextureSize; - - int textureId = game->layers[n]->tiles[i][j]->textureId; - - DrawTexture(game->layers[n]->tileTextures[textureId], offset->x, offset->y, WHITE); - free(offset); + DrawTexture( + game->layers[n]->tileTextures[game->layers[n]->tiles[i][j]->textureId], + game->layers[n]->tiles[i][j]->offsetX, + game->layers[n]->tiles[i][j]->offsetY, + WHITE); + } + } + } + } + */ + + int windowWidth = GetScreenWidth(); + int windowHeight = GetScreenHeight(); + + // HARDCODED + Vector2 topleft = {0, 0}; + IsometricMapProject(game->layers[0], game->camera, topleft.x, topleft.y, &topleft); + Vector2 topright = {windowWidth, 0}; + IsometricMapProject(game->layers[0], game->camera, topright.x, topright.y, &topright); + Vector2 botleft = {0, windowHeight}; + IsometricMapProject(game->layers[0], game->camera, botleft.x, botleft.y, &botleft); + Vector2 botright = {windowWidth, windowHeight}; + IsometricMapProject(game->layers[0], game->camera, botright.x, botright.y, &botright); + + printf("%f\n", topright.y); + // drawing some extra corner tiles + // if extraTiles == 0 you can see flickering in the corners + int extraTiles = 1; + int n = 0; + int itmp = (int)(topleft.x / game->layers[0]->textureWidth) - extraTiles; + int jtmp = (int)(topright.y / game->layers[0]->textureHeight) - extraTiles; + int maxI = (int)(botright.x / game->layers[0]->textureWidth) + extraTiles; + int maxJ = (int)(botleft.y / game->layers[0]->textureHeight) + extraTiles; + if (itmp < 0) + { + itmp = 0; + } + if (jtmp < 0) + { + jtmp = 0; + } + if (maxI > game->layers[0]->width) + { + maxI = game->layers[0]->width; + } + if (maxJ > game->layers[0]->height) + { + maxJ = game->layers[0]->height; + } + + int i = 0; + int j = 0; + for (n = 0; n < 10; n++) + { + for (i = itmp; i < maxI; i++) + { + for (j = jtmp; j < maxJ; j++) + { + if (game->layers[n]->tiles[i][j]->textureId == -1) + { + } + else + { + DrawTexture( + game->layers[n]->tileTextures[game->layers[n]->tiles[i][j]->textureId], + game->layers[n]->tiles[i][j]->offsetX, + game->layers[n]->tiles[i][j]->offsetY, + WHITE); } } } diff --git a/IsometricMap/tile.h b/IsometricMap/tile.h index 9154798..dd656b9 100644 --- a/IsometricMap/tile.h +++ b/IsometricMap/tile.h @@ -8,6 +8,8 @@ typedef struct Tile{ int x; int y; int z; + int offsetX; + int offsetY; } Tile; #endif \ No newline at end of file diff --git a/animation.o b/animation.o new file mode 100644 index 0000000..d2ba2c3 Binary files /dev/null and b/animation.o differ diff --git a/animationHandler.o b/animationHandler.o new file mode 100644 index 0000000..036ae10 Binary files /dev/null and b/animationHandler.o differ diff --git a/game.o b/game.o new file mode 100644 index 0000000..9537b71 Binary files /dev/null and b/game.o differ diff --git a/inputHandler.o b/inputHandler.o new file mode 100644 index 0000000..25dcc7e Binary files /dev/null and b/inputHandler.o differ diff --git a/isometricMap.o b/isometricMap.o new file mode 100644 index 0000000..9e64afb Binary files /dev/null and b/isometricMap.o differ diff --git a/isometricRenderer.o b/isometricRenderer.o new file mode 100644 index 0000000..84449d8 Binary files /dev/null and b/isometricRenderer.o differ diff --git a/list.o b/list.o new file mode 100644 index 0000000..e431ea4 Binary files /dev/null and b/list.o differ diff --git a/main.o b/main.o new file mode 100644 index 0000000..36c73be Binary files /dev/null and b/main.o differ diff --git a/spiel b/spiel new file mode 100755 index 0000000..b366e22 Binary files /dev/null and b/spiel differ diff --git a/sprite.o b/sprite.o new file mode 100644 index 0000000..8914cb1 Binary files /dev/null and b/sprite.o differ diff --git a/textureatlas.o b/textureatlas.o new file mode 100644 index 0000000..b318cd3 Binary files /dev/null and b/textureatlas.o differ diff --git a/tile.o b/tile.o new file mode 100644 index 0000000..ec204ad Binary files /dev/null and b/tile.o differ