|
|
|
|
@ -5,39 +5,37 @@
|
|
|
|
|
#include "raymath.h"
|
|
|
|
|
#include "raylib.h"
|
|
|
|
|
|
|
|
|
|
IsometricMap * IsometricMapInit(int x, int y, int layer){
|
|
|
|
|
IsometricMap * IsometricMapInit(int layer){
|
|
|
|
|
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 = -layer * map->tileTextures[0].width / 4;
|
|
|
|
|
map->width = x * map->tileTextures[0].width;
|
|
|
|
|
map->height = y * map->tileTextures[0].height;
|
|
|
|
|
map->width = 100 * map->tileTextures[0].width;
|
|
|
|
|
map->height = 100 * map->tileTextures[0].height;
|
|
|
|
|
map->widthBounds = 100;
|
|
|
|
|
map->heightBounds = 100;
|
|
|
|
|
map->layer = layer;
|
|
|
|
|
|
|
|
|
|
Tile*** tiles = (Tile***)malloc(x*sizeof(Tile*));
|
|
|
|
|
Tile*** tiles = (Tile***)malloc(map->widthBounds*sizeof(Tile*));
|
|
|
|
|
int n = 0;
|
|
|
|
|
for(n=0; n<x; n++){
|
|
|
|
|
tiles[n] = (Tile**)malloc(y*sizeof(Tile*));
|
|
|
|
|
for(n=0; n < map->widthBounds; n++){
|
|
|
|
|
tiles[n] = (Tile**)malloc(map->heightBounds*sizeof(Tile*));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
map->sizeX = x;
|
|
|
|
|
map->sizeY = y;
|
|
|
|
|
|
|
|
|
|
int i = 0;
|
|
|
|
|
int j = 0;
|
|
|
|
|
|
|
|
|
|
for(i=0; i < x; i++){
|
|
|
|
|
for(j=0; j < y; j++){
|
|
|
|
|
for(i=0; i < map->widthBounds; i++){
|
|
|
|
|
for(j=0; j < map->heightBounds; j++){
|
|
|
|
|
Tile *tmp = (Tile *) malloc(sizeof(Tile));
|
|
|
|
|
tmp->textureId = 0;
|
|
|
|
|
tmp->textureId = -1;
|
|
|
|
|
tmp->x = i;
|
|
|
|
|
tmp->y = j;
|
|
|
|
|
tiles[i][j] = tmp;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
map->tiles = tiles;
|
|
|
|
|
|
|
|
|
|
return map;
|
|
|
|
|
@ -63,12 +61,13 @@ Tile * IsometricMapGetTileFromArrayPosition(IsometricMap *map, int x, int y){
|
|
|
|
|
|
|
|
|
|
void IsometricMapProject(IsometricMap *isometricMap, Camera2D *camera, float x, float y, Vector2 *tmp){
|
|
|
|
|
|
|
|
|
|
int mouseAdjustmentX = -8;
|
|
|
|
|
int mouseAdjustmentY = -4;
|
|
|
|
|
|
|
|
|
|
float tileWidthHalf = isometricMap->tileTextures[0].width / 2;
|
|
|
|
|
float tileHeightQuarter = isometricMap->tileTextures[0].height / 4;
|
|
|
|
|
|
|
|
|
|
int mouseAdjustmentX = -tileWidthHalf;
|
|
|
|
|
int mouseAdjustmentY = -tileHeightQuarter + (tileHeightQuarter * isometricMap->layer);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
x += camera->target.x + mouseAdjustmentX;
|
|
|
|
|
y += camera->target.y + mouseAdjustmentY;
|
|
|
|
|
|
|
|
|
|
@ -92,12 +91,14 @@ Tile * IsometricMapGetTileFromWorldCoordinates(IsometricMap *isometricMap, float
|
|
|
|
|
ptr->x = 0;
|
|
|
|
|
ptr->y = 0;
|
|
|
|
|
|
|
|
|
|
if( x < isometricMap->sizeX && y < isometricMap->sizeY &&
|
|
|
|
|
if( x < isometricMap->widthBounds && y < isometricMap->heightBounds &&
|
|
|
|
|
x >= 0 && y >= 0 ){
|
|
|
|
|
if(isometricMap->tiles[(int)x][(int)y]->textureId != -1){
|
|
|
|
|
ptr->x = isometricMap->tiles[(int)x][(int)y]->x;
|
|
|
|
|
ptr->y = isometricMap->tiles[(int)x][(int)y]->y;
|
|
|
|
|
return ptr;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
ptr = 0;
|
|
|
|
|
return ptr;
|
|
|
|
|
}
|
|
|
|
|
@ -105,23 +106,14 @@ Tile * IsometricMapGetTileFromWorldCoordinates(IsometricMap *isometricMap, float
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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;
|
|
|
|
|
|
|
|
|
|
//}
|
|
|
|
|
isometricMap->tiles[x][y]->textureId = textureId;
|
|
|
|
|
isometricMap->tiles[x][y]->x = x;
|
|
|
|
|
isometricMap->tiles[x][y]->y = y;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void IsometricMapChangeTextureIdOfTile(IsometricMap *map, int x, int y, int id){
|
|
|
|
|
if( x < map->sizeX && y < map->sizeY &&
|
|
|
|
|
if( x < map->widthBounds && y < map->heightBounds &&
|
|
|
|
|
x >= 0 && y >= 0 ){
|
|
|
|
|
(map->tiles[x][y])->textureId = id;
|
|
|
|
|
}
|
|
|
|
|
|