[FIXED] Bug in isometricRenderer.c -> Segmentation Fault

main
JanEhehalt 3 years ago
parent afeae89cbc
commit 8a48a85b2b

@ -129,15 +129,15 @@ void mouseInput(InputHandler *inputHandler, List *sprites, Texture2D *texture, C
void keyboardInput(InputHandler *inputHandler, Camera2D *camera){ void keyboardInput(InputHandler *inputHandler, Camera2D *camera){
if(IsKeyDown(KEY_W)){ if(IsKeyDown(KEY_W)){
(*camera).target.y -= 100.0f * GetFrameTime(); (*camera).target.y -= 1000.0f * GetFrameTime();
} }
if(IsKeyDown(KEY_S)){ if(IsKeyDown(KEY_S)){
(*camera).target.y += 100.0f * GetFrameTime(); (*camera).target.y += 1000.0f * GetFrameTime();
} }
if(IsKeyDown(KEY_D)){ if(IsKeyDown(KEY_D)){
(*camera).target.x += 100.0f * GetFrameTime(); (*camera).target.x += 1000.0f * GetFrameTime();
} }
if(IsKeyDown(KEY_A)){ if(IsKeyDown(KEY_A)){
(*camera).target.x -= 100.0f * GetFrameTime(); (*camera).target.x -= 1000.0f * GetFrameTime();
} }
} }

@ -5,20 +5,20 @@
#include "raymath.h" #include "raymath.h"
#include "raylib.h" #include "raylib.h"
IsometricMap * IsometricMapInit(int x, int y){ IsometricMap * IsometricMapInit(int x, int y, int layer){
IsometricMap* map = (IsometricMap *) malloc(sizeof(IsometricMap)); IsometricMap* map = (IsometricMap *) malloc(sizeof(IsometricMap));
map->tileTextures[0] = LoadTexture("assets/grass.png"); map->tileTextures[0] = LoadTexture("assets/grass.png");
map->tileTextures[1] = LoadTexture("assets/tower.png"); map->tileTextures[1] = LoadTexture("assets/tower.png");
map->originX = 0; map->originX = 0;
map->originY = 0; map->originY = -layer * map->tileTextures[0].width / 4;
map->width = x * map->tileTextures[0].width; map->width = x * map->tileTextures[0].width;
map->height = y * map->tileTextures[0].height; map->height = y * map->tileTextures[0].height;
Tile* tiles[x]; Tile*** tiles = (Tile***)malloc(x*sizeof(Tile*));
int n = 0; int n = 0;
for(n=0; n<x; n++){ for(n=0; n<x; n++){
tiles[n] = (Tile*)malloc(y*sizeof(Tile)); tiles[n] = (Tile**)malloc(y*sizeof(Tile*));
} }
map->sizeX = x; map->sizeX = x;
@ -29,14 +29,11 @@ IsometricMap * IsometricMapInit(int x, int y){
for(i=0; i < x; i++){ for(i=0; i < x; i++){
for(j=0; j < y; j++){ for(j=0; j < y; j++){
if(i != j){ Tile *tmp = (Tile *) malloc(sizeof(Tile));
Tile tmp = {0, i, j}; tmp->textureId = 0;
tiles[i][j] = tmp; tmp->x = i;
} tmp->y = j;
else{ tiles[i][j] = tmp;
Tile tmp = {1, i, j};
tiles[i][j] = tmp;
}
} }
} }
map->tiles = tiles; map->tiles = tiles;
@ -59,7 +56,7 @@ Vector2 * IsometricMapCalcOffsetForTileAt(int x, int y, int textureSize){
} }
Tile * IsometricMapGetTileFromArrayPosition(IsometricMap *map, int x, int y){ Tile * IsometricMapGetTileFromArrayPosition(IsometricMap *map, int x, int y){
return &(map->tiles[x][y]); return map->tiles[x][y];
} }
void IsometricMapProject(IsometricMap *isometricMap, Camera2D *camera, int x, int y, Vector2 *tmp){ void IsometricMapProject(IsometricMap *isometricMap, Camera2D *camera, int x, int y, Vector2 *tmp){
@ -90,6 +87,21 @@ void IsometricMapProject(IsometricMap *isometricMap, Camera2D *camera, int x, in
} }
void IsometricMapAddTile(IsometricMap *isometricMap, int x, int y, int textureId){
//if(x < isometricMap->sizeX && y < isometricMap->sizeY){
Tile *tile = (Tile *) malloc(sizeof(Tile));
tile->textureId = textureId;
tile->x = x;
tile->y = y;
//Tile tile = {textureId, x, y};
isometricMap->tiles[x][y] = tile;
//}
}

@ -5,7 +5,7 @@
typedef struct IsometricMap{ typedef struct IsometricMap{
Texture2D tileTextures[10]; Texture2D tileTextures[10];
Tile **tiles; Tile ***tiles;
int sizeX; int sizeX;
int sizeY; int sizeY;
int originX; int originX;
@ -15,17 +15,17 @@ typedef struct IsometricMap{
} IsometricMap; } IsometricMap;
// TODO: // TODO:
void IsometricMapAddTile(IsometricMap *isometricMap, int x, int y, int textureId);
Tile * IsometricMapGetTileFromWorldCoordinates(IsometricMap *isometricMap, float x, float y); Tile * IsometricMapGetTileFromWorldCoordinates(IsometricMap *isometricMap, float x, float y);
// World Coordinates -> Screen Coordinates // World Coordinates -> Screen Coordinates
Vector2 IsometricMapUnproject(IsometricMap *isometricMap, Camera2D *camera, int x, int y); Vector2 IsometricMapUnproject(IsometricMap *isometricMap, Camera2D *camera, int x, int y);
// Working // Working
IsometricMap * IsometricMapInit(int x, int y); IsometricMap * IsometricMapInit(int x, int y, int layer);
Vector2 * IsometricMapCalcOffsetForTileAt(int x, int y, int textureSize); Vector2 * IsometricMapCalcOffsetForTileAt(int x, int y, int textureSize);
Tile * IsometricMapGetTileFromArrayPosition(IsometricMap *isometricMap, int x, int y); Tile * IsometricMapGetTileFromArrayPosition(IsometricMap *isometricMap, int x, int y);
// Screen Coordinates -> World Coordinates // Screen Coordinates -> World Coordinates
void IsometricMapProject(IsometricMap *isometricMap, Camera2D *camera, int x, int y, Vector2 *tmp); void IsometricMapProject(IsometricMap *isometricMap, Camera2D *camera, int x, int y, Vector2 *tmp);
void IsometricMapAddTile(IsometricMap *isometricMap, int x, int y, int textureId);
#endif #endif

@ -47,11 +47,13 @@ void IsometricRendererRenderIsometricMap(IsometricMap *map, InputHandler *input)
float y = map->originY + offset->y; float y = map->originY + offset->y;
// TODO -> results in Segmentation fault // TODO -> results in Segmentation fault
//int textureId = map->tiles[i][j].textureId; int textureId = map->tiles[i][j]->textureId;
int textureId = 0;
if(i == input->selectedTile.x && j == input->selectedTile.y){ //int textureId = 0;
textureId = 1; //if(i == input->selectedTile.x && j == input->selectedTile.y){
} // textureId = 1;
//}
DrawTexture(map->tileTextures[textureId], x, y, WHITE); DrawTexture(map->tileTextures[textureId], x, y, WHITE);
} }
} }

@ -13,6 +13,5 @@ Fantasy Welt oder Realistisch?
## TODO ## TODO
+ Bug in isometricRenderer.c -> Segmentation Fault
+ Sprites in LinkedList speichern + Sprites in LinkedList speichern
+ LinkedList erweitern + LinkedList erweitern

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
list.o

Binary file not shown.

@ -28,7 +28,16 @@ int main(){
camera.rotation = 0.0f; camera.rotation = 0.0f;
camera.zoom = 1.0f; camera.zoom = 1.0f;
IsometricMap *map = IsometricMapInit(20, 20); // TODO -> Isometric Map Array for multiple Layers
// -> Make only most upper layer selectable
// take selected Tile, if that tile has one above select a tile in the upper layer
IsometricMap *map = IsometricMapInit(50, 80, 0);
IsometricMap *Layer1 = IsometricMapInit(20, 20, 1);
IsometricMap *Layer2 = IsometricMapInit(15, 15, 2);
IsometricMap *Layer3 = IsometricMapInit(10, 10, 3);
IsometricMap *Layer4 = IsometricMapInit(4, 4, 4);
IsometricMapAddTile(Layer4, 2, 2, 1);
SetTargetFPS(60); SetTargetFPS(60);
while(!WindowShouldClose()){ while(!WindowShouldClose()){
@ -40,6 +49,10 @@ int main(){
BeginMode2D(camera); BeginMode2D(camera);
IsometricRendererRenderIsometricMap(map, &inputHandler); IsometricRendererRenderIsometricMap(map, &inputHandler);
IsometricRendererRenderIsometricMap(Layer1, &inputHandler);
IsometricRendererRenderIsometricMap(Layer2, &inputHandler);
IsometricRendererRenderIsometricMap(Layer3, &inputHandler);
IsometricRendererRenderIsometricMap(Layer4, &inputHandler);
ListDrawAllSprites(sprites); ListDrawAllSprites(sprites);

BIN
main.o

Binary file not shown.

BIN
spiel

Binary file not shown.

Binary file not shown.

BIN
tile.o

Binary file not shown.
Loading…
Cancel
Save