main
JanEhehalt 3 years ago
parent 4a1a2cb4e3
commit 660ed03429

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

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

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

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

@ -1,6 +1,7 @@
#include "isometricRenderer.h"
#include "raylib.h"
#include "isometricMap.h"
#include "../Input/inputHandler.h"
#include <stdio.h>
//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){
float originX = 0.0f;
float originY = 0.0f;
void IsometricRendererRenderIsometricMap(IsometricMap *map, InputHandler *input){
int i = 0;
int j = 0;
@ -45,13 +43,13 @@ void IsometricRendererRenderIsometricMap(IsometricMap *map){
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;
float x = map->originX + offset->x;
float y = map->originY + offset->y;
// TODO -> results in Segmentation fault
//int textureId = map->tiles[i][j].textureId;
int textureId = 0;
if(i + j == 9){
if(i == input->selectedTile.x && j == input->selectedTile.y){
textureId = 1;
}
DrawTexture(map->tileTextures[textureId], x, y, WHITE);

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

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
list.o

Binary file not shown.

@ -28,7 +28,7 @@ int main(){
camera.rotation = 0.0f;
camera.zoom = 1.0f;
IsometricMap *map = IsometricMapInit(20, 10);
IsometricMap *map = IsometricMapInit(20, 20);
SetTargetFPS(60);
while(!WindowShouldClose()){
@ -40,6 +40,9 @@ int main(){
BeginMode2D(camera);
IsometricRendererRenderIsometricMap(map);
Vector2 tmp = IsometricMapProject(map, &camera, inputHandler.cursorPos.x, inputHandler.cursorPos.y);
printf("%f %f \n", tmp.x, tmp.y);
int i;
for(i=0; i < spriteAmount; i++){
@ -56,7 +59,7 @@ int main(){
DrawSprite(&cursorSprite);
// User Input Handling
mouseInput(&inputHandler, sprites, &spriteAmount, &texture, &camera);
mouseInput(&inputHandler, sprites, &spriteAmount, &texture, &camera, map);
keyboardInput(&inputHandler, &camera);
// Sprites move towards their destination

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