forked from jaildesigner-jailgames/jaildoctors_dilemma
Resolviendo bug en setTopSurfaces con los -1
This commit is contained in:
@@ -49,7 +49,7 @@ void Debug::render()
|
|||||||
y = 0;
|
y = 0;
|
||||||
for (auto l : log)
|
for (auto l : log)
|
||||||
{
|
{
|
||||||
text->writeColored(x, y, l, {255, 255, 255});
|
text->writeColored(x + 10, y, l, {255, 255, 255});
|
||||||
y += text->getCharacterSize() + 1;
|
y += text->getCharacterSize() + 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -45,7 +45,6 @@ Room::Room(std::string file_path, SDL_Renderer *renderer, Screen *screen, Asset
|
|||||||
|
|
||||||
// Establece el color del borde
|
// Establece el color del borde
|
||||||
screen->setBorderColor(borderColor);
|
screen->setBorderColor(borderColor);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Destructor
|
// Destructor
|
||||||
@@ -142,8 +141,8 @@ bool Room::load(std::string file_path)
|
|||||||
std::stringstream ss(line);
|
std::stringstream ss(line);
|
||||||
std::string tmp;
|
std::string tmp;
|
||||||
while (getline(ss, tmp, ','))
|
while (getline(ss, tmp, ','))
|
||||||
{
|
{ // Se resta 1 ya que tiled numera los tiles de 1 a n
|
||||||
tilemap.push_back(std::stoi(tmp));
|
tilemap.push_back(std::stoi(tmp) - 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} while (line != "</data>");
|
} while (line != "</data>");
|
||||||
@@ -437,23 +436,29 @@ void Room::fillMapTexture()
|
|||||||
SDL_SetRenderDrawColor(renderer, 0x00, 0x00, 0x00, 0x00);
|
SDL_SetRenderDrawColor(renderer, 0x00, 0x00, 0x00, 0x00);
|
||||||
SDL_RenderClear(renderer);
|
SDL_RenderClear(renderer);
|
||||||
|
|
||||||
// Los tilesets son de 20x20 tiles. El primer tile es el 1. Cuentan hacia la derecha y hacia abajo
|
// Los tilesets son de 20x20 tiles. El primer tile es el 0. Cuentan hacia la derecha y hacia abajo
|
||||||
|
|
||||||
SDL_Rect clip = {0, 0, 8, 8};
|
SDL_Rect clip = {0, 0, 8, 8};
|
||||||
for (int y = 0; y < 16; y++)
|
for (int y = 0; y < 16; y++)
|
||||||
for (int x = 0; x < 32; x++)
|
for (int x = 0; x < 32; x++)
|
||||||
{
|
{
|
||||||
clip.x = ((tilemap[(y * 32) + x] - 1) % 20) * 8;
|
// Tiled pone los tiles vacios del mapa como cero y empieza a contar de 1 a n.
|
||||||
clip.y = ((tilemap[(y * 32) + x] - 1) / 20) * 8;
|
// Al cargar el mapa en memoria, se resta uno, por tanto los tiles vacios son -1
|
||||||
texture->render(renderer, x * 8, y * 8, &clip);
|
const int index = (y * 32) + x;
|
||||||
if (debug->getEnabled())
|
if (index > -1)
|
||||||
{
|
{
|
||||||
if (clip.x != -8)
|
clip.x = (tilemap[index] % 20) * 8;
|
||||||
|
clip.y = (tilemap[index] / 20) * 8;
|
||||||
|
texture->render(renderer, x * 8, y * 8, &clip);
|
||||||
|
if (debug->getEnabled())
|
||||||
{
|
{
|
||||||
clip.x = x * 8;
|
if (clip.x != -8)
|
||||||
clip.y = y * 8;
|
{
|
||||||
SDL_SetRenderDrawColor(renderer, 64, 64, 64, 224);
|
clip.x = x * 8;
|
||||||
SDL_RenderFillRect(renderer, &clip);
|
clip.y = y * 8;
|
||||||
|
SDL_SetRenderDrawColor(renderer, 64, 64, 64, 224);
|
||||||
|
SDL_RenderFillRect(renderer, &clip);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -467,6 +472,7 @@ void Room::fillMapTexture()
|
|||||||
for (auto l : bottomSurfaces)
|
for (auto l : bottomSurfaces)
|
||||||
{
|
{
|
||||||
SDL_SetRenderDrawColor(renderer, (rand() % 128) + 96, (rand() % 128) + 96, (rand() % 128) + 96, 0xFF);
|
SDL_SetRenderDrawColor(renderer, (rand() % 128) + 96, (rand() % 128) + 96, (rand() % 128) + 96, 0xFF);
|
||||||
|
SDL_SetRenderDrawColor(renderer, 255, 0, 0, 0xFF);
|
||||||
SDL_RenderDrawLine(renderer, l.x1, l.y, l.x2, l.y);
|
SDL_RenderDrawLine(renderer, l.x1, l.y, l.x2, l.y);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -477,6 +483,7 @@ void Room::fillMapTexture()
|
|||||||
for (auto l : topSurfaces)
|
for (auto l : topSurfaces)
|
||||||
{
|
{
|
||||||
SDL_SetRenderDrawColor(renderer, (rand() % 128) + 96, (rand() % 128) + 96, (rand() % 128) + 96, 0xFF);
|
SDL_SetRenderDrawColor(renderer, (rand() % 128) + 96, (rand() % 128) + 96, (rand() % 128) + 96, 0xFF);
|
||||||
|
SDL_SetRenderDrawColor(renderer, 0, 255, 0, 0xFF);
|
||||||
SDL_RenderDrawLine(renderer, l.x1, l.y, l.x2, l.y);
|
SDL_RenderDrawLine(renderer, l.x1, l.y, l.x2, l.y);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -604,7 +611,7 @@ tile_e Room::getTile(SDL_Point point)
|
|||||||
if (pos < maxTile)
|
if (pos < maxTile)
|
||||||
{
|
{
|
||||||
// Las filas 0-7 son de tiles t_wall
|
// Las filas 0-7 son de tiles t_wall
|
||||||
if ((tilemap[pos] > 0) && (tilemap[pos] < 8 * tilesetWidth))
|
if ((tilemap[pos] >= 0) && (tilemap[pos] < 8 * tilesetWidth))
|
||||||
{
|
{
|
||||||
return t_wall;
|
return t_wall;
|
||||||
}
|
}
|
||||||
@@ -640,7 +647,7 @@ tile_e Room::getTile(int index)
|
|||||||
if (index < maxTile)
|
if (index < maxTile)
|
||||||
{
|
{
|
||||||
// Las filas 0-7 son de tiles t_wall
|
// Las filas 0-7 son de tiles t_wall
|
||||||
if ((tilemap[index] > 0) && (tilemap[index] < 8 * tilesetWidth))
|
if ((tilemap[index] >= 0) && (tilemap[index] < 8 * tilesetWidth))
|
||||||
{
|
{
|
||||||
return t_wall;
|
return t_wall;
|
||||||
}
|
}
|
||||||
@@ -719,7 +726,7 @@ void Room::reLoadTexture()
|
|||||||
// Obten el tamaño del tile
|
// Obten el tamaño del tile
|
||||||
int Room::getTileSize()
|
int Room::getTileSize()
|
||||||
{
|
{
|
||||||
return 8;
|
return tileSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Obten la coordenada de la cuesta a partir de un punto perteneciente a ese tile
|
// Obten la coordenada de la cuesta a partir de un punto perteneciente a ese tile
|
||||||
@@ -784,6 +791,7 @@ void Room::setBottomSurfaces()
|
|||||||
line.x2 = ((tile[i] % mapWidth) * tileSize) + tileSize - 1;
|
line.x2 = ((tile[i] % mapWidth) * tileSize) + tileSize - 1;
|
||||||
bottomSurfaces.push_back(line);
|
bottomSurfaces.push_back(line);
|
||||||
i++;
|
i++;
|
||||||
|
debug->addToLog("B: " + std::to_string(line.x1) + "," + std::to_string(line.y) + "," + std::to_string(line.x2) + "," + std::to_string(line.y));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -792,6 +800,8 @@ void Room::setTopSurfaces()
|
|||||||
{
|
{
|
||||||
std::vector<int> tile;
|
std::vector<int> tile;
|
||||||
|
|
||||||
|
debug->addToLog(std::to_string(tilemap.size()));
|
||||||
|
|
||||||
// Busca todos los tiles de tipo muro o pasable que no tengan encima un muro
|
// Busca todos los tiles de tipo muro o pasable que no tengan encima un muro
|
||||||
// Hay que recorrer la habitación por filas (excepto los de la primera fila)
|
// Hay que recorrer la habitación por filas (excepto los de la primera fila)
|
||||||
for (int i = mapWidth; i < tilemap.size(); i++)
|
for (int i = mapWidth; i < tilemap.size(); i++)
|
||||||
@@ -822,6 +832,8 @@ void Room::setTopSurfaces()
|
|||||||
line.x2 = ((tile[i] % mapWidth) * tileSize) + tileSize - 1;
|
line.x2 = ((tile[i] % mapWidth) * tileSize) + tileSize - 1;
|
||||||
topSurfaces.push_back(line);
|
topSurfaces.push_back(line);
|
||||||
i++;
|
i++;
|
||||||
|
|
||||||
|
debug->addToLog("T: " + std::to_string(line.x1) + "," + std::to_string(line.y) + "," + std::to_string(line.x2) + "," + std::to_string(line.y));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -940,7 +952,7 @@ void Room::setLeftSlopes()
|
|||||||
line.x2 = ((lastOneFound % mapWidth) * tileSize) + tileSize - 1;
|
line.x2 = ((lastOneFound % mapWidth) * tileSize) + tileSize - 1;
|
||||||
line.y2 = ((lastOneFound / mapWidth) * tileSize) + tileSize - 1;
|
line.y2 = ((lastOneFound / mapWidth) * tileSize) + tileSize - 1;
|
||||||
leftSlopes.push_back(line);
|
leftSlopes.push_back(line);
|
||||||
debug->addToLog("LS: " + std::to_string(line.x1) + "," + std::to_string(line.y1) + "," + std::to_string(line.x2) + "," + std::to_string(line.y2));
|
// debug->addToLog("LS: " + std::to_string(line.x1) + "," + std::to_string(line.y1) + "," + std::to_string(line.x2) + "," + std::to_string(line.y2));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -982,7 +994,7 @@ void Room::setRightSlopes()
|
|||||||
line.x2 = (lastOneFound % mapWidth) * tileSize;
|
line.x2 = (lastOneFound % mapWidth) * tileSize;
|
||||||
line.y2 = ((lastOneFound / mapWidth) * tileSize) + tileSize - 1;
|
line.y2 = ((lastOneFound / mapWidth) * tileSize) + tileSize - 1;
|
||||||
rightSlopes.push_back(line);
|
rightSlopes.push_back(line);
|
||||||
debug->addToLog("RS: " + std::to_string(line.x1) + "," + std::to_string(line.y1) + "," + std::to_string(line.x2) + "," + std::to_string(line.y2));
|
// debug->addToLog("RS: " + std::to_string(line.x1) + "," + std::to_string(line.y1) + "," + std::to_string(line.x2) + "," + std::to_string(line.y2));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user