mirror of
https://github.com/zoriya/Bomberman.git
synced 2026-05-30 09:08:35 +00:00
static_cast and try find safe space
This commit is contained in:
+47
-9
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user