Empezando a trabajar con los nuevos mapas
This commit is contained in:
@@ -7,7 +7,6 @@ Map::Map(std::string file, SDL_Renderer *renderer, Asset *asset, ItemTracker *it
|
||||
tile_size = 8;
|
||||
map_width = 40;
|
||||
map_height = 26;
|
||||
tileset_width = 34;
|
||||
name = file.substr(file.find_last_of("\\/") + 1);
|
||||
enemy_file = "";
|
||||
bgColor1 = bgColor2 = {0, 0, 0};
|
||||
@@ -21,6 +20,7 @@ Map::Map(std::string file, SDL_Renderer *renderer, Asset *asset, ItemTracker *it
|
||||
texture_tile = new LTexture();
|
||||
load(file);
|
||||
loadTextureFromFile(texture_tile, asset->get(tileset_img), renderer);
|
||||
tileset_width = texture_tile->getWidth() / tile_size;
|
||||
|
||||
// Crea la textura para el mapa de tiles de la habitación
|
||||
map_texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, GAMECANVAS_WIDTH, GAMECANVAS_HEIGHT);
|
||||
@@ -75,10 +75,11 @@ bool Map::load(std::string file_path)
|
||||
std::ifstream file2(asset->get(line)); // Abre el fichero tmx
|
||||
if (file2.good())
|
||||
{
|
||||
bool data_read = false;
|
||||
bool map1_read = false;
|
||||
bool map2_read = false;
|
||||
while (std::getline(file2, line)) // Lee el fichero linea a linea
|
||||
{
|
||||
if (!data_read)
|
||||
if (!map1_read)
|
||||
{ // Lee lineas hasta que encuentre donde empiezan los datos del mapa
|
||||
int pos = 0;
|
||||
do
|
||||
@@ -89,7 +90,7 @@ bool Map::load(std::string file_path)
|
||||
|
||||
do
|
||||
{ // Se introducen los valores separados por comas en un vector
|
||||
data_read = true;
|
||||
map1_read = true;
|
||||
std::getline(file2, line);
|
||||
if (line != "</data>")
|
||||
{
|
||||
@@ -102,6 +103,30 @@ bool Map::load(std::string file_path)
|
||||
}
|
||||
} while (line != "</data>");
|
||||
}
|
||||
if (!map2_read)
|
||||
{ // Lee lineas hasta que encuentre donde empiezan los datos del mapa
|
||||
int pos = 0;
|
||||
do
|
||||
{
|
||||
std::getline(file2, line);
|
||||
pos = line.find("data encoding");
|
||||
} while (pos == std::string::npos);
|
||||
|
||||
do
|
||||
{ // Se introducen los valores separados por comas en un vector
|
||||
map2_read = true;
|
||||
std::getline(file2, line);
|
||||
if (line != "</data>")
|
||||
{
|
||||
std::stringstream ss(line);
|
||||
std::string tmp;
|
||||
while (getline(ss, tmp, ','))
|
||||
{
|
||||
collisionmap.push_back(std::stoi(tmp));
|
||||
}
|
||||
}
|
||||
} while (line != "</data>");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -424,20 +449,20 @@ e_tile_map Map::getTile(SDL_Point p)
|
||||
const int y = std::max(getPlayArea(b_top), (std::min(p.y, getPlayArea(b_bottom) - 1)));
|
||||
|
||||
// Calcula el tile
|
||||
const int tile = tilemap[((y / tile_size) * map_width) + (x / tile_size)];
|
||||
const int tile = collisionmap[((y / tile_size) * map_width) + (x / tile_size)];
|
||||
|
||||
// Las 8 primeras filas son tiles de fondo
|
||||
if (tile >= 0 && tile < 8 * tileset_width)
|
||||
if (tile == 0)
|
||||
{
|
||||
return nothing;
|
||||
}
|
||||
// De la fila 8 a la 15 hay tiles de muro
|
||||
else if (tile >= (8 * tileset_width) && tile < 16 * tileset_width)
|
||||
|
||||
else if (tile == 5627)
|
||||
{
|
||||
return wall;
|
||||
}
|
||||
// A partir de la fila 16 son tiles atravesables
|
||||
else
|
||||
|
||||
else if (tile == 5628)
|
||||
{
|
||||
return passable;
|
||||
}
|
||||
|
||||
@@ -45,6 +45,7 @@ private:
|
||||
std::string enemy_file; // Fichero con los enemigos para la habitación
|
||||
std::string tileset_img; // Imagen con los graficos para la habitación
|
||||
std::vector<int> tilemap; // Indice de los tiles a dibujar en la habitación
|
||||
std::vector<int> collisionmap; // Indice con los tipos de tile de la habitación
|
||||
LTexture *texture_tile; // Textura con los graficos de los tiles habitación
|
||||
SDL_Texture *map_texture; // Textura para dibujar el mapa de la habitación
|
||||
std::vector<Actor *> actors; // Listado con los actores de la habitación
|
||||
|
||||
@@ -20,7 +20,7 @@ Player::Player(SDL_Renderer *renderer, Asset *asset, Input *input, Map *map)
|
||||
w = 16;
|
||||
h = 24;
|
||||
x = 3 * 16;
|
||||
y = 168;
|
||||
y = 20;
|
||||
vx = 0;
|
||||
vy = 0;
|
||||
lastPosition = {(int)x, (int)y};
|
||||
|
||||
Reference in New Issue
Block a user