Проверка одиночки ставила отряд в стену
Она сажала бойца в точку «+3 по X» от твари, не глядя на карту. Стоило комнатам стать другими - точка попала в стену: боец не видел цель, клинок её не брал, и проверка объявила первый этаж непроходимым, хотя мерила собственную раскладку. Теперь ищется свободная клетка с прямой видимостью - тем же способом, что и в проверке триггеров, где эта же ошибка уже вылезала. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
da670af6dc
commit
aa9a175751
@ -2036,7 +2036,24 @@ int RunDescend(const RoomLibrary& rooms, const EntityCatalog& catalog, uint32_t
|
|||||||
return n;
|
return n;
|
||||||
}();
|
}();
|
||||||
|
|
||||||
game.PlaceSquad(game.targets[size_t(victim)].pos + Vec2{3.0f, 0.0f}, true);
|
// Ставим отряд в СВОБОДНУЮ клетку рядом с тварью и с прямой
|
||||||
|
// видимостью. Слепое «+3 по X» попадало в стену, стоило
|
||||||
|
// комнатам измениться: боец не видел цель, клинок её не брал, и
|
||||||
|
// проверка объявляла непроходимым первый этаж — хотя мерила
|
||||||
|
// собственную раскладку.
|
||||||
|
const Vec2 foePos = game.targets[size_t(victim)].pos;
|
||||||
|
Vec2 spot = foePos + Vec2{3.0f, 0.0f};
|
||||||
|
const Vec2 around[8] = {{3, 0}, {-3, 0}, {0, 3}, {0, -3},
|
||||||
|
{2, 2}, {-2, 2}, {2, -2}, {-2, -2}};
|
||||||
|
for (const Vec2& d : around)
|
||||||
|
{
|
||||||
|
const Vec2 test = foePos + d;
|
||||||
|
if (game.map.IsWallAt(test)) continue;
|
||||||
|
if (game.map.RaycastBlocked(test, foePos)) continue;
|
||||||
|
spot = test;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
game.PlaceSquad(spot, true);
|
||||||
game.Step(FIXED_DT); // SyncLoadout: здоровье по надетому
|
game.Step(FIXED_DT); // SyncLoadout: здоровье по надетому
|
||||||
game.squad.agents[0].hp = game.squad.agents[0].maxHp;
|
game.squad.agents[0].hp = game.squad.agents[0].maxHp;
|
||||||
hpStart = game.squad.agents[0].hp;
|
hpStart = game.squad.agents[0].hp;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user