forked from jaildesigner-jailgames/jaildoctors_dilemma
Resueltos muchos bugs de vector out of range en la busqueda de superficies
This commit is contained in:
207
source/room.cpp
207
source/room.cpp
@@ -882,33 +882,42 @@ void Room::setBottomSurfaces()
|
||||
}
|
||||
|
||||
// Recorre el vector de tiles buscando tiles consecutivos para localizar las superficies
|
||||
int i = 0;
|
||||
int lastOne = 0;
|
||||
do
|
||||
if ((int)tile.size() > 0)
|
||||
{
|
||||
h_line_t line;
|
||||
line.x1 = (tile.at(i) % mapWidth) * tileSize;
|
||||
line.y = ((tile.at(i) / mapWidth) * tileSize) + tileSize - 1;
|
||||
lastOne = i;
|
||||
i++;
|
||||
|
||||
while (tile.at(i) == tile.at(i - 1) + 1)
|
||||
int i = 0;
|
||||
int lastOne = 0;
|
||||
do
|
||||
{
|
||||
h_line_t line;
|
||||
line.x1 = (tile.at(i) % mapWidth) * tileSize;
|
||||
line.y = ((tile.at(i) / mapWidth) * tileSize) + tileSize - 1;
|
||||
lastOne = i;
|
||||
if (i == (int)tile.size() - 1)
|
||||
{
|
||||
break;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
|
||||
line.x2 = ((tile[lastOne] % mapWidth) * tileSize) + tileSize - 1;
|
||||
bottomSurfaces.push_back(line);
|
||||
if (tile.at(i) == -1)
|
||||
{ // Si el siguiente elemento es un separador, hay que saltarlo
|
||||
i++;
|
||||
}
|
||||
} while (i < (int)tile.size() - 1);
|
||||
if (i < (int)tile.size() - 1)
|
||||
{
|
||||
while (tile.at(i) == tile.at(i - 1) + 1)
|
||||
{
|
||||
lastOne = i;
|
||||
if (i == (int)tile.size() - 1)
|
||||
{
|
||||
break;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
line.x2 = ((tile[lastOne] % mapWidth) * tileSize) + tileSize - 1;
|
||||
bottomSurfaces.push_back(line);
|
||||
if (i < (int)tile.size() - 1)
|
||||
{
|
||||
if (tile.at(i) == -1)
|
||||
{ // Si el siguiente elemento es un separador, hay que saltarlo
|
||||
i++;
|
||||
}
|
||||
}
|
||||
} while (i < (int)tile.size() - 1);
|
||||
}
|
||||
}
|
||||
|
||||
// Calcula las superficies superiores
|
||||
@@ -933,33 +942,42 @@ void Room::setTopSurfaces()
|
||||
}
|
||||
|
||||
// Recorre el vector de tiles buscando tiles consecutivos para localizar las superficies
|
||||
int i = 0;
|
||||
int lastOne = 0;
|
||||
do
|
||||
if ((int)tile.size() > 0)
|
||||
{
|
||||
h_line_t line;
|
||||
line.x1 = (tile.at(i) % mapWidth) * tileSize;
|
||||
line.y = (tile.at(i) / mapWidth) * tileSize;
|
||||
lastOne = i;
|
||||
i++;
|
||||
|
||||
while (tile.at(i) == tile.at(i - 1) + 1)
|
||||
int i = 0;
|
||||
int lastOne = 0;
|
||||
do
|
||||
{
|
||||
h_line_t line;
|
||||
line.x1 = (tile.at(i) % mapWidth) * tileSize;
|
||||
line.y = (tile.at(i) / mapWidth) * tileSize;
|
||||
lastOne = i;
|
||||
if (i == (int)tile.size() - 1)
|
||||
{
|
||||
break;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
|
||||
line.x2 = ((tile[lastOne] % mapWidth) * tileSize) + tileSize - 1;
|
||||
topSurfaces.push_back(line);
|
||||
if (tile.at(i) == -1)
|
||||
{ // Si el siguiente elemento es un separador, hay que saltarlo
|
||||
i++;
|
||||
}
|
||||
} while (i < (int)tile.size() - 1);
|
||||
if (i < (int)tile.size() - 1)
|
||||
{
|
||||
while (tile.at(i) == tile.at(i - 1) + 1)
|
||||
{
|
||||
lastOne = i;
|
||||
if (i == (int)tile.size() - 1)
|
||||
{
|
||||
break;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
line.x2 = ((tile[lastOne] % mapWidth) * tileSize) + tileSize - 1;
|
||||
topSurfaces.push_back(line);
|
||||
if (i < (int)tile.size() - 1)
|
||||
{
|
||||
if (tile.at(i) == -1)
|
||||
{ // Si el siguiente elemento es un separador, hay que saltarlo
|
||||
i++;
|
||||
}
|
||||
}
|
||||
} while (i < (int)tile.size() - 1);
|
||||
}
|
||||
}
|
||||
|
||||
// Calcula las superficies laterales izquierdas
|
||||
@@ -984,24 +1002,27 @@ void Room::setLeftSurfaces()
|
||||
// Recorre el vector de tiles buscando tiles consecutivos
|
||||
// (Los tiles de la misma columna, la diferencia entre ellos es de mapWidth)
|
||||
// para localizar las superficies
|
||||
int i = 0;
|
||||
do
|
||||
if ((int)tile.size() > 0)
|
||||
{
|
||||
v_line_t line;
|
||||
line.x = (tile.at(i) % mapWidth) * tileSize;
|
||||
line.y1 = ((tile.at(i) / mapWidth) * tileSize);
|
||||
while (tile.at(i) + mapWidth == tile[i + 1])
|
||||
int i = 0;
|
||||
do
|
||||
{
|
||||
if (i == (int)tile.size() - 1)
|
||||
v_line_t line;
|
||||
line.x = (tile.at(i) % mapWidth) * tileSize;
|
||||
line.y1 = ((tile.at(i) / mapWidth) * tileSize);
|
||||
while (tile.at(i) + mapWidth == tile[i + 1])
|
||||
{
|
||||
break;
|
||||
if (i == (int)tile.size() - 1)
|
||||
{
|
||||
break;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
line.y2 = ((tile.at(i) / mapWidth) * tileSize) + tileSize - 1;
|
||||
leftSurfaces.push_back(line);
|
||||
i++;
|
||||
}
|
||||
line.y2 = ((tile.at(i) / mapWidth) * tileSize) + tileSize - 1;
|
||||
leftSurfaces.push_back(line);
|
||||
i++;
|
||||
} while (i < (int)tile.size() - 1);
|
||||
} while (i < (int)tile.size() - 1);
|
||||
}
|
||||
}
|
||||
|
||||
// Calcula las superficies laterales derechas
|
||||
@@ -1026,24 +1047,27 @@ void Room::setRightSurfaces()
|
||||
// Recorre el vector de tiles buscando tiles consecutivos
|
||||
// (Los tiles de la misma columna, la diferencia entre ellos es de mapWidth)
|
||||
// para localizar las superficies
|
||||
int i = 0;
|
||||
do
|
||||
if ((int)tile.size() > 0)
|
||||
{
|
||||
v_line_t line;
|
||||
line.x = ((tile.at(i) % mapWidth) * tileSize) + tileSize - 1;
|
||||
line.y1 = ((tile.at(i) / mapWidth) * tileSize);
|
||||
while (tile.at(i) + mapWidth == tile[i + 1])
|
||||
int i = 0;
|
||||
do
|
||||
{
|
||||
if (i == (int)tile.size() - 1)
|
||||
v_line_t line;
|
||||
line.x = ((tile.at(i) % mapWidth) * tileSize) + tileSize - 1;
|
||||
line.y1 = ((tile.at(i) / mapWidth) * tileSize);
|
||||
while (tile.at(i) + mapWidth == tile[i + 1])
|
||||
{
|
||||
break;
|
||||
if (i == (int)tile.size() - 1)
|
||||
{
|
||||
break;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
line.y2 = ((tile.at(i) / mapWidth) * tileSize) + tileSize - 1;
|
||||
rightSurfaces.push_back(line);
|
||||
i++;
|
||||
}
|
||||
line.y2 = ((tile.at(i) / mapWidth) * tileSize) + tileSize - 1;
|
||||
rightSurfaces.push_back(line);
|
||||
i++;
|
||||
} while (i < (int)tile.size() - 1);
|
||||
} while (i < (int)tile.size() - 1);
|
||||
}
|
||||
}
|
||||
|
||||
// Encuentra todas las rampas que suben hacia la izquierda
|
||||
@@ -1152,26 +1176,39 @@ void Room::setAutoSurfaces()
|
||||
// Recorre el vector de tiles buscando tiles consecutivos para localizar las superficies
|
||||
int i = 0;
|
||||
int lastOne = 0;
|
||||
while (i < (int)tile.size())
|
||||
if ((int)tile.size() > 0)
|
||||
{
|
||||
h_line_t line;
|
||||
line.x1 = (tile.at(i) % mapWidth) * tileSize;
|
||||
line.y = (tile.at(i) / mapWidth) * tileSize;
|
||||
lastOne = i;
|
||||
i++;
|
||||
|
||||
while (tile.at(i) == tile.at(i - 1) + 1)
|
||||
do
|
||||
{
|
||||
h_line_t line;
|
||||
line.x1 = (tile.at(i) % mapWidth) * tileSize;
|
||||
line.y = (tile.at(i) / mapWidth) * tileSize;
|
||||
lastOne = i;
|
||||
i++;
|
||||
}
|
||||
|
||||
line.x2 = ((tile[lastOne] % mapWidth) * tileSize) + tileSize - 1;
|
||||
autoSurfaces.push_back(line);
|
||||
if (tile.at(i) == -1)
|
||||
{ // Si el siguiente elemento es un separador, hay que saltarlo
|
||||
i++;
|
||||
}
|
||||
if (i < (int)tile.size() - 1)
|
||||
{
|
||||
while (tile.at(i) == tile.at(i - 1) + 1)
|
||||
{
|
||||
lastOne = i;
|
||||
if (i == (int)tile.size() - 1)
|
||||
{
|
||||
break;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
line.x2 = ((tile[lastOne] % mapWidth) * tileSize) + tileSize - 1;
|
||||
autoSurfaces.push_back(line);
|
||||
if (i < (int)tile.size() - 1)
|
||||
{
|
||||
if (tile.at(i) == -1)
|
||||
{ // Si el siguiente elemento es un separador, hay que saltarlo
|
||||
i++;
|
||||
}
|
||||
}
|
||||
} while (i < (int)tile.size() - 1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user