JanEhehalt 3 years ago
commit afeae89cbc

@ -1,6 +1,7 @@
#include "inputHandler.h" #include "inputHandler.h"
#include "raylib.h" #include "raylib.h"
#include "../sprite.h" #include "../sprite.h"
#include "../IsometricMap/isometricMap.h"
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <math.h> #include <math.h>
@ -52,17 +53,20 @@ Vector2 GetRectangle(Vector2 rectStart){
return rectStart; return rectStart;
} }
void mouseInput(InputHandler *inputHandler, List *sprites, Texture2D *texture, Camera2D *camera){ void mouseInput(InputHandler *inputHandler, List *sprites, Texture2D *texture, Camera2D *camera, IsometricMap *map){
inputHandler->cursorPos.x = GetMousePosition().x; inputHandler->cursorPos.x = GetMousePosition().x;
inputHandler->cursorPos.y = GetMousePosition().y; inputHandler->cursorPos.y = GetMousePosition().y;
IsometricMapProject(map, camera, inputHandler->cursorPos.x, inputHandler->cursorPos.y, &inputHandler->selectedTile);
if(IsMouseButtonPressed(MOUSE_BUTTON_LEFT)){ if(IsMouseButtonPressed(MOUSE_BUTTON_LEFT)){
if(inputHandler->pressed == 0){ if(inputHandler->pressed == 0){
inputHandler->rectStart.x = GetMousePosition().x; inputHandler->rectStart.x = GetMousePosition().x;
inputHandler->rectStart.y = GetMousePosition().y; inputHandler->rectStart.y = GetMousePosition().y;
inputHandler->pressed = 1; inputHandler->pressed = 1;
} }
} }
if(inputHandler->pressed){ if(inputHandler->pressed){

@ -3,14 +3,16 @@
#include "raylib.h" #include "raylib.h"
#include "../sprite.h" #include "../sprite.h"
#include "../List/list.h" #include "../List/list.h"
#include "../IsometricMap/isometricMap.h"
typedef struct InputHandler{ typedef struct InputHandler{
int pressed; int pressed;
Vector2 rectStart; Vector2 rectStart;
Vector2 cursorPos; Vector2 cursorPos;
Vector2 selectedTile;
} InputHandler; } InputHandler;
void mouseInput(InputHandler *inputHandler, List *sprites, Texture2D *texture, Camera2D *camera); void mouseInput(InputHandler *inputHandler, List *sprites, Texture2D *texture, Camera2D *camera, IsometricMap *map);
void keyboardInput(InputHandler *inputHandler, Camera2D *camera); void keyboardInput(InputHandler *inputHandler, Camera2D *camera);

@ -1,12 +1,20 @@
#include "isometricMap.h" #include "isometricMap.h"
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include "tile.h"
#include "raymath.h"
#include "raylib.h"
IsometricMap * IsometricMapInit(int x, int y){ IsometricMap * IsometricMapInit(int x, int y){
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->originY = 0;
map->width = x * map->tileTextures[0].width;
map->height = y * map->tileTextures[0].height;
Tile* tiles[x]; Tile* tiles[x];
int n = 0; int n = 0;
for(n=0; n<x; n++){ for(n=0; n<x; n++){
@ -50,6 +58,38 @@ Vector2 * IsometricMapCalcOffsetForTileAt(int x, int y, int textureSize){
return offset; return offset;
} }
Tile * IsometricMapGetTileFromArrayPosition(IsometricMap *map, int x, int y){
return &(map->tiles[x][y]);
}
void IsometricMapProject(IsometricMap *isometricMap, Camera2D *camera, int x, int y, Vector2 *tmp){
int mouseAdjustmentX = -8;
int mouseAdjustmentY = -4;
float tileWidthHalf = isometricMap->tileTextures[0].width / 2;
float tileHeightHalf = isometricMap->tileTextures[0].height / 4;
x += camera->target.x + mouseAdjustmentX;
y += camera->target.y + mouseAdjustmentY;
float xPos = (float) x;
float yPos = (float) y;
int isoX = 0.5 * ( xPos / tileWidthHalf + yPos / tileHeightHalf);
int isoY = 0.5 * ( -xPos / tileWidthHalf + yPos / tileHeightHalf);
//Vector2 tmp = {isoX * tileWidthHalf * 2, isoY * tileHeightHalf * 2};
//Vector2* tmp = (Vector2 *) malloc(sizeof(Vector2));
tmp->x = isoX;
tmp->y = isoY;
//return tmp;
}

@ -8,15 +8,24 @@ typedef struct IsometricMap{
Tile **tiles; Tile **tiles;
int sizeX; int sizeX;
int sizeY; int sizeY;
int originX;
int originY;
int width;
int height;
} IsometricMap; } IsometricMap;
// TODO: // TODO:
void IsometricMapAddTile(IsometricMap isometricMap); void IsometricMapAddTile(IsometricMap *isometricMap, int x, int y, int textureId);
Tile IsometricMapGetTileFromArrayPosition(int x, int y); Tile * IsometricMapGetTileFromWorldCoordinates(IsometricMap *isometricMap, float x, float y);
Tile IsometricMapGetTileFromWorldCoordinates(float x, float y); // World Coordinates -> Screen Coordinates
Vector2 * IsometricMapCalcOffsetForTileAt(int x, int y, int textureSize); Vector2 IsometricMapUnproject(IsometricMap *isometricMap, Camera2D *camera, int x, int y);
// Working // Working
IsometricMap * IsometricMapInit(int x, int y); IsometricMap * IsometricMapInit(int x, int y);
Vector2 * IsometricMapCalcOffsetForTileAt(int x, int y, int textureSize);
Tile * IsometricMapGetTileFromArrayPosition(IsometricMap *isometricMap, int x, int y);
// Screen Coordinates -> World Coordinates
void IsometricMapProject(IsometricMap *isometricMap, Camera2D *camera, int x, int y, Vector2 *tmp);
#endif #endif

@ -1,6 +1,7 @@
#include "isometricRenderer.h" #include "isometricRenderer.h"
#include "raylib.h" #include "raylib.h"
#include "isometricMap.h" #include "isometricMap.h"
#include "../Input/inputHandler.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
@ -34,10 +35,7 @@ void IsometricRendererDrawMap(IsometricRenderer *renderer, int height){
} }
} }
void IsometricRendererRenderIsometricMap(IsometricMap *map){ void IsometricRendererRenderIsometricMap(IsometricMap *map, InputHandler *input){
float originX = 0.0f;
float originY = 0.0f;
int i = 0; int i = 0;
int j = 0; int j = 0;
@ -45,13 +43,13 @@ void IsometricRendererRenderIsometricMap(IsometricMap *map){
for(j=0; j < map->sizeY; j++){ for(j=0; j < map->sizeY; j++){
Vector2 *offset = IsometricMapCalcOffsetForTileAt(i,j, map->tileTextures[0].width); Vector2 *offset = IsometricMapCalcOffsetForTileAt(i,j, map->tileTextures[0].width);
float x = originX + offset->x; float x = map->originX + offset->x;
float y = 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; int textureId = 0;
if(i + j == 9){ if(i == input->selectedTile.x && j == input->selectedTile.y){
textureId = 1; textureId = 1;
} }
DrawTexture(map->tileTextures[textureId], x, y, WHITE); DrawTexture(map->tileTextures[textureId], x, y, WHITE);

@ -2,6 +2,7 @@
#define ISOMETRICRENDERER_H_ #define ISOMETRICRENDERER_H_
#include "raylib.h" #include "raylib.h"
#include "isometricMap.h" #include "isometricMap.h"
#include "../Input/inputHandler.h"
typedef struct IsometricRenderer{ typedef struct IsometricRenderer{
Texture *texture; Texture *texture;
@ -9,6 +10,6 @@ typedef struct IsometricRenderer{
void IsometricRendererDrawMap(IsometricRenderer *renderer, int height); void IsometricRendererDrawMap(IsometricRenderer *renderer, int height);
void IsometricRendererRenderIsometricMap(IsometricMap *map); void IsometricRendererRenderIsometricMap(IsometricMap *map, InputHandler *input);
#endif #endif

@ -28,7 +28,7 @@ int main(){
camera.rotation = 0.0f; camera.rotation = 0.0f;
camera.zoom = 1.0f; camera.zoom = 1.0f;
IsometricMap *map = IsometricMapInit(20, 10); IsometricMap *map = IsometricMapInit(20, 20);
SetTargetFPS(60); SetTargetFPS(60);
while(!WindowShouldClose()){ while(!WindowShouldClose()){
@ -39,10 +39,10 @@ int main(){
BeginMode2D(camera); BeginMode2D(camera);
IsometricRendererRenderIsometricMap(map); IsometricRendererRenderIsometricMap(map, &inputHandler);
ListDrawAllSprites(sprites); ListDrawAllSprites(sprites);
EndMode2D(); EndMode2D();
// Moving cursor Sprite to Mouse Pos and drawing it // Moving cursor Sprite to Mouse Pos and drawing it
@ -51,7 +51,7 @@ int main(){
DrawSprite(&cursorSprite); DrawSprite(&cursorSprite);
// User Input Handling // User Input Handling
mouseInput(&inputHandler, sprites, &texture, &camera); mouseInput(&inputHandler, sprites, &texture, &camera, map);
keyboardInput(&inputHandler, &camera); keyboardInput(&inputHandler, &camera);
// Sprites move towards their destination // Sprites move towards their destination

Loading…
Cancel
Save