mirror of
https://github.com/zoriya/Bomberman.git
synced 2026-05-27 16:22:09 +00:00
updating danger map correctly
This commit is contained in:
@@ -36,109 +36,38 @@ namespace BBM
|
||||
for (auto &[other, pos, _] : _wal.getScene()->view<PositionComponent, TagComponent<Hole>>())
|
||||
_luamap._map[pos.position.z][pos.position.x] = MapGenerator::HOLE;
|
||||
for (auto &[other, pos, bomb, timer] : _wal.getScene()->view<PositionComponent, BasicBombComponent, TimerComponent>())
|
||||
_bombs.push_back(std::make_tuple(pos.position, bomb.explosionRadius, timer.ringIn));
|
||||
updateDangerBomb(pos.position, bomb.explosionRadius, timer.ringIn);
|
||||
_cached = true;
|
||||
|
||||
}
|
||||
|
||||
void IAControllableSystem::pushInfoPlayer(LuaG::State &state, MapInfo &player, BombHolderComponent &bombHolder)
|
||||
void IAControllableSystem::updateDangerBomb(Vector3f bombPos, int radius, std::chrono::nanoseconds ringIn)
|
||||
{
|
||||
state.push("player");
|
||||
state.newTable();
|
||||
state.push("x");
|
||||
state.push(player.x);
|
||||
state.setTable();
|
||||
state.push("y");
|
||||
state.push(player.z);
|
||||
state.setTable();
|
||||
state.push("bombCount");
|
||||
state.push(bombHolder.bombCount);
|
||||
state.setTable();
|
||||
state.push("radius");
|
||||
state.push(bombHolder.explosionRadius);
|
||||
state.setTable();
|
||||
state.setTable();
|
||||
}
|
||||
|
||||
void IAControllableSystem::pushInfoRaw(LuaG::State &state)
|
||||
{
|
||||
int index = 0;
|
||||
state.push("raw");
|
||||
state.newTable();
|
||||
for (auto &info : _map) {
|
||||
state.push(index++);
|
||||
state.newTable();
|
||||
state.push("x");
|
||||
state.push(info.x);
|
||||
state.setTable();
|
||||
state.push("y");
|
||||
state.push(info.z);
|
||||
state.setTable();
|
||||
state.push("type");
|
||||
state.push(info.type);
|
||||
state.setTable();
|
||||
state.setTable();
|
||||
Vector3f pos;
|
||||
int dangerLevel = std::chrono::duration_cast<std::chrono::seconds>(ringIn).count();
|
||||
if (dangerLevel == 0)
|
||||
dangerLevel = 1;
|
||||
std::cout << "bomb: " <<bombPos << std::endl << std::flush;
|
||||
_luamap._danger[bombPos.z][bombPos.x] = dangerLevel;
|
||||
for (auto i = 1; i < radius; i++) {
|
||||
pos = bombPos - Vector3f(i, 0, 0);
|
||||
if (!_luamap.setDanger(pos.x, pos.z, dangerLevel))
|
||||
break;
|
||||
}
|
||||
for (auto &bomb : _bombs) {
|
||||
Vector3f bombPos = std::get<0>(bomb);
|
||||
state.push(index++);
|
||||
state.newTable();
|
||||
state.push("x");
|
||||
state.push(bombPos.x);
|
||||
state.setTable();
|
||||
state.push("y");
|
||||
state.push(bombPos.z);
|
||||
state.setTable();
|
||||
state.push("type");
|
||||
state.push(10);
|
||||
state.setTable();
|
||||
state.setTable();
|
||||
for (auto i = 1; i < radius; i++) {
|
||||
pos = bombPos - Vector3f(-i, 0, 0);
|
||||
if (!_luamap.setDanger(pos.x, pos.z, dangerLevel))
|
||||
break;
|
||||
}
|
||||
state.setTable();
|
||||
}
|
||||
|
||||
void IAControllableSystem::pushInfoDangerPos(LuaG::State &state, int &index, float xpos, float ypos, int dangerLevel)
|
||||
{
|
||||
state.push(index++);
|
||||
state.newTable();
|
||||
state.push("x");
|
||||
state.push(xpos);
|
||||
state.setTable();
|
||||
state.push("y");
|
||||
state.push(ypos);
|
||||
state.setTable();
|
||||
state.push("level");
|
||||
state.push(dangerLevel);
|
||||
state.setTable();
|
||||
state.setTable();
|
||||
}
|
||||
|
||||
void IAControllableSystem::pushInfoDanger(LuaG::State &state)
|
||||
{
|
||||
int index = 0;
|
||||
state.push("danger");
|
||||
state.newTable();
|
||||
for (auto &bomb : _bombs) {
|
||||
Vector3f bombPos = std::get<0>(bomb);
|
||||
int bombRadius = std::get<1>(bomb);
|
||||
std::chrono::nanoseconds timeleft = std::get<2>(bomb);
|
||||
int dangerLevel = std::chrono::duration_cast<std::chrono::seconds>(timeleft).count();
|
||||
if (dangerLevel == 0)
|
||||
dangerLevel = 1;
|
||||
pushInfoDangerPos(state, index, bombPos.x, bombPos.z, dangerLevel);
|
||||
pushInfoDangerPos(state, index, bombPos.x, bombPos.z, dangerLevel);
|
||||
for (int i = 1; i < bombRadius; i++) {
|
||||
Vector3f pos = bombPos - Vector3f(i, 0, 0);
|
||||
pushInfoDangerPos(state, index, pos.x, pos.z, dangerLevel);
|
||||
pos = bombPos - Vector3f(-i, 0, 0);
|
||||
pushInfoDangerPos(state, index, pos.x, pos.z, dangerLevel);
|
||||
pos = bombPos - Vector3f(0, 0, i);
|
||||
pushInfoDangerPos(state, index, pos.x, pos.z, dangerLevel);
|
||||
pos = bombPos - Vector3f(0, 0, -i);
|
||||
pushInfoDangerPos(state, index, pos.x, pos.z, dangerLevel);
|
||||
}
|
||||
for (auto i = 1; i < radius; i++) {
|
||||
pos = bombPos - Vector3f(0, 0, i);
|
||||
if (!_luamap.setDanger(pos.x, pos.z, dangerLevel))
|
||||
break;
|
||||
}
|
||||
for (auto i = 1; i < radius; i++) {
|
||||
pos = bombPos - Vector3f(0, 0, -i);
|
||||
if (!_luamap.setDanger(pos.x, pos.z, dangerLevel))
|
||||
break;
|
||||
}
|
||||
state.setTable();
|
||||
}
|
||||
|
||||
void IAControllableSystem::pushInfoEnemies(LuaG::State &state)
|
||||
@@ -163,9 +92,6 @@ namespace BBM
|
||||
void IAControllableSystem::pushInfo(LuaG::State &state, MapInfo &player, BombHolderComponent &bombHolder)
|
||||
{
|
||||
state.newTable();
|
||||
pushInfoPlayer(state, player, bombHolder);
|
||||
pushInfoRaw(state);
|
||||
pushInfoDanger(state);
|
||||
pushInfoEnemies(state);
|
||||
}
|
||||
|
||||
@@ -210,7 +136,6 @@ namespace BBM
|
||||
void IAControllableSystem::onSelfUpdate()
|
||||
{
|
||||
_cached = false;
|
||||
_map.clear();
|
||||
_bombs.clear();
|
||||
_luamap.clearDanger();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user