static_cast and try find safe space

This commit is contained in:
Bluub
2021-06-19 13:41:48 +02:00
parent 64b4ac3d71
commit 1f1414c16e
3 changed files with 55 additions and 13 deletions
+47 -9
View File
@@ -139,6 +139,44 @@ namespace BBM
Vector2f LuaMap::findSafeSpace(void) const
{
int d = 1;
std::vector<std::vector<int>> distance(17, std::vector<int>(17, -1));
std::vector<std::vector<int>> direction(17, std::vector<int>(17, -1));
// -1 is empty, -2 is blocked
for (int i = 0; i < 17; i++)
for (int j = 0; j < 17; j++)
distance[i][j] = _map[i][j] == 0 ? -1 : -2;
distance[_roundedPlayer.y][_roundedPlayer.x] = 0;
for (int i = 0; i < 4; i++) {
Vector2f pos = _roundedPlayer + _dirs[i];
if (pos.x < 0 || pos.x > 16 || pos.y < 0 || pos.y > 16)
continue;
distance[pos.y][pos.x] = 1;
direction[pos.y][pos.x] = i;
}
int finalDir = -1;
while (d < 6) {
for (int i = 0; i < 17; i++) {
for (int j = 0; j < 17; j++) {
if (distance[j][i] != d)
continue;
auto currentDir = direction[j][i];
for (int k = 0; k < 4; k++) {
Vector2f pos = Vector2f(i, j) + _dirs[k];
if (pos.x < 0 || pos.x > 16 || pos.y < 0 || pos.y > 16)
continue;
if (distance[pos.y][pos.x] != -1)
continue;
if (_danger[pos.y][pos.x] == 0)
return _roundedPlayer + _dirs[currentDir];
direction[pos.y][pos.x] = currentDir;
distance[pos.y][pos.x] = d + 1;
}
}
}
d++;
}
return _roundedPlayer;
}
@@ -146,7 +184,7 @@ namespace BBM
{
LuaG::State state(L);
int index = 1;
const LuaMap *map = (const LuaMap *) state.getPointer(state.getFirstUpValueIdx());
const LuaMap *map = static_cast<const LuaMap *>(state.getPointer(state.getFirstUpValueIdx()));
state.newTable();
for (int i = 0; i < 17; i++) {
state.push(index++);
@@ -166,7 +204,7 @@ namespace BBM
{
LuaG::State state(L);
int index = 1;
const LuaMap *map = (const LuaMap *) state.getPointer(state.getFirstUpValueIdx());
const LuaMap *map = static_cast<const LuaMap *>(state.getPointer(state.getFirstUpValueIdx()));
state.newTable();
for (int i = 0; i < 17; i++) {
state.push(index++);
@@ -189,7 +227,7 @@ namespace BBM
auto x2 = state.getNumber(-2);
auto y1 = state.getNumber(-3);
auto x1 = state.getNumber(-4);
const LuaMap *map = (const LuaMap *) state.getPointer(state.getFirstUpValueIdx());
const LuaMap *map = static_cast<const LuaMap *>(state.getPointer(state.getFirstUpValueIdx()));
Vector2f fst(x1, y1);
Vector2f snd(x2, y2);
auto path = map->pathfind(fst, snd);
@@ -212,7 +250,7 @@ namespace BBM
int LuaMap::getPlayer(lua_State *L)
{
LuaG::State state(L);
const LuaMap *map = (const LuaMap *) state.getPointer(state.getFirstUpValueIdx());
const LuaMap *map = static_cast<const LuaMap *>(state.getPointer(state.getFirstUpValueIdx()));
state.newTable();
state.push("x");
state.push(map->_player.x);
@@ -226,7 +264,7 @@ namespace BBM
int LuaMap::getPlayerRound(lua_State *L)
{
LuaG::State state(L);
const LuaMap *map = (const LuaMap *) state.getPointer(state.getFirstUpValueIdx());
const LuaMap *map = static_cast<const LuaMap *>(state.getPointer(state.getFirstUpValueIdx()));
state.newTable();
state.push("x");
state.push(map->_roundedPlayer.x);
@@ -240,7 +278,7 @@ namespace BBM
int LuaMap::getClosestSafeSpace(lua_State *L)
{
LuaG::State state(L);
const LuaMap *map = (const LuaMap *) state.getPointer(state.getFirstUpValueIdx());
const LuaMap *map = static_cast<const LuaMap *>(state.getPointer(state.getFirstUpValueIdx()));
Vector2f closest = map->findSafeSpace();
state.newTable();
state.push("x");
@@ -255,7 +293,7 @@ namespace BBM
int LuaMap::getDangerLevelPlayer(lua_State *L)
{
LuaG::State state(L);
const LuaMap *map = (const LuaMap *) state.getPointer(state.getFirstUpValueIdx());
const LuaMap *map = static_cast<const LuaMap *>(state.getPointer(state.getFirstUpValueIdx()));
lua_pushboolean(L, map->_danger[map->_roundedPlayer.y][map->_roundedPlayer.x] > 0);
return 1;
}
@@ -265,7 +303,7 @@ namespace BBM
LuaG::State state(L);
auto y = state.getNumber(-1);
auto x = state.getNumber(-2);
const LuaMap *map = (const LuaMap *) state.getPointer(state.getFirstUpValueIdx());
const LuaMap *map = static_cast<const LuaMap *>(state.getPointer(state.getFirstUpValueIdx()));
state.push(map->_danger[y][x]);
return 1;
}
@@ -275,7 +313,7 @@ namespace BBM
LuaG::State state(L);
auto y = state.getNumber(-1);
auto x = state.getNumber(-2);
const LuaMap *map = (const LuaMap *) state.getPointer(state.getFirstUpValueIdx());
const LuaMap *map = static_cast<const LuaMap *>(state.getPointer(state.getFirstUpValueIdx()));
state.push(map->_map[y][x]);
return 1;
}