Bug with 2-dimensional Tile Array in isometricRenderer.c

main
JanEhehalt 3 years ago
parent 6178a9fc57
commit 358d5e3481

@ -1,5 +1,6 @@
{ {
"files.associations": { "files.associations": {
"inputhandling.h": "c" "inputhandling.h": "c",
"isometricmap.h": "c"
} }
} }

@ -1,5 +1,5 @@
spiel: main.o sprite.o inputHandler.o isometricRenderer.o spiel: main.o sprite.o inputHandler.o isometricRenderer.o isometricMap.o tile.o
gcc -o spiel main.o sprite.o inputHandler.o isometricRenderer.o -lraylib -lGL -lm -lpthread -ldl -lrt -lX11 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 main.o: main.c
gcc -c main.c -lraylib -lGL -lm -lpthread -ldl -lrt -lX11 gcc -c main.c -lraylib -lGL -lm -lpthread -ldl -lrt -lX11
@ -13,5 +13,11 @@ inputHandler.o: inputHandler.c
isometricRenderer.o: isometricRenderer.c isometricRenderer.o: isometricRenderer.c
gcc -c isometricRenderer.c -lraylib -lGL -lm -lpthread -ldl -lrt -lX11 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: clean:
rm *.o spiel rm *.o spiel

Binary file not shown.

@ -0,0 +1,62 @@
#include "isometricMap.h"
#include <stdio.h>
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;
}

@ -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

@ -1,11 +1,12 @@
#include "isometricRenderer.h" #include "isometricRenderer.h"
#include "raylib.h" #include "raylib.h"
#include "isometricMap.h"
#include <stdio.h> #include <stdio.h>
//TODO: Isometric Tilemap Struct, which can be scanned for clicked Tile //TODO: Isometric Tilemap Struct, which can be scanned for clicked Tile
// General coordinate translation function // General coordinate translation function
void IsometricRendererRenderMap(IsometricRenderer *renderer, int height){ void IsometricRendererDrawMap(IsometricRenderer *renderer, int height){
float originX = 0.0f; float originX = 0.0f;
float originY = 0.0f; float originY = 0.0f;
@ -15,12 +16,12 @@ void IsometricRendererRenderMap(IsometricRenderer *renderer, int height){
int amount = 1; int amount = 1;
for(i=0; i<=height; i++){ for(i=0; i<=height; i++){
for(j=0; j<amount; j++){ for(j=0; j<amount; j++){
float x = originX - amount/2 * renderer->texture.width + j * renderer->texture.width; float x = originX - amount/2 * renderer->texture->width + j * renderer->texture->width;
if(amount%2 == 1){ if(amount%2 == 1){
x -= renderer->texture.width/2; 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); DrawTexture(*renderer->texture, x, y, WHITE);
} }
if(i < height/2){ 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);
}
}
} }

@ -1,11 +1,14 @@
#ifndef ISOMETRICRENDERER_H_ #ifndef ISOMETRICRENDERER_H_
#define ISOMETRICRENDERER_H_ #define ISOMETRICRENDERER_H_
#include "raylib.h" #include "raylib.h"
#include "isometricMap.h"
typedef struct IsometricRenderer{ typedef struct IsometricRenderer{
Texture texture; Texture *texture;
} IsometricRenderer; } IsometricRenderer;
void renderMap(int width, int height); void IsometricRendererDrawMap(IsometricRenderer *renderer, int height);
void IsometricRendererRenderIsometricMap(IsometricMap *map);
#endif #endif

Binary file not shown.

@ -4,6 +4,7 @@
#include "inputHandler.h" #include "inputHandler.h"
#include "raymath.h" #include "raymath.h"
#include "isometricRenderer.h" #include "isometricRenderer.h"
#include "isometricMap.h"
int main(){ int main(){
@ -15,7 +16,8 @@ int main(){
texture = LoadTexture("assets/amulet.png"); texture = LoadTexture("assets/amulet.png");
Texture2D isometricTexture = LoadTexture("assets/grass.png"); Texture2D isometricTexture = LoadTexture("assets/grass.png");
IsometricRenderer isometricRenderer = {isometricTexture}; IsometricRenderer *isometricRenderer = (IsometricRenderer *) malloc(sizeof(IsometricRenderer));
isometricRenderer->texture = &isometricTexture;
int spriteAmount = 0; int spriteAmount = 0;
Sprite cursorSprite = {&texture, 450, 225}; Sprite cursorSprite = {&texture, 450, 225};
@ -29,6 +31,8 @@ int main(){
SpriteAdd(sprites, &spriteAmount, &texture, 0, 0); SpriteAdd(sprites, &spriteAmount, &texture, 0, 0);
IsometricMap *map = IsometricMapInit(10, 10);
SetTargetFPS(60); SetTargetFPS(60);
while(!WindowShouldClose()){ while(!WindowShouldClose()){
@ -38,7 +42,9 @@ int main(){
BeginMode2D(camera); BeginMode2D(camera);
IsometricRendererRenderMap(&isometricRenderer, 50); //IsometricRendererRenderMap(&isometricRenderer, 50);
IsometricRendererRenderIsometricMap(map);
int i; int i;
//int length = sizeof(sprites)/sizeof(sprites[0]); //int length = sizeof(sprites)/sizeof(sprites[0]);

BIN
main.o

Binary file not shown.

BIN
spiel

Binary file not shown.

Binary file not shown.

@ -0,0 +1,2 @@
#include "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
Loading…
Cancel
Save