Всем привет. пишу мод и столкнулся с проблемой в реализации.
Суть: Пытаюсь сделать проверку, если игрок стоит прям у окна или у дверного проёма он должен получать урон.
Делал вот так.
int wallHits = 0;
float d = 2.2; // Дистанция до стены. Если стена дальше — считаем, что там окно или проем.
// 8 направлений "снежинкой" для проверки стен вокруг игрока
// Используем Vector(x, y, z) для точности
ref array<vector> checkDirs = {
Vector(d,0,0), Vector(-d,0,0), Vector(0,0,d), Vector(0,0,-d),
Vector(d,0,d), Vector(-d,0,-d), Vector(d,0,-d), Vector(-d,0,d)
};
foreach (vector dir : checkDirs)
{
// Пускаем горизонтальные лучи от позиции игрока (from)
if (DayZPhysics.RayCastBullet(from, from + dir, collisionLayerMask, this, hitObject, hitPosition, hitNormal, hitFraction))
{
// ПРОВЕРКА: Это должна быть вертикальная стена (Y нормали < 0.5)
// Чтобы не засчитать низкий потолок за стену
if (Math.AbsFloat(hitNormal[1]) < 0.5)
{
wallHits++;
}
}
}
// УСЛОВИЕ БЕЗОПАСНОСТИ:
// В комнате wallHits будет 6-8. У окна или в проеме — 1-4.
if (wallHits < 5)
{
hasSafeCeiling = false; // Слишком открытое пространство (окно/дверь)
}
Пытался менять дистанции, но всё ровно не как не хочет работать.
Что я делаю не так, или я вообще делаю не то?
Мне нужно проверять игрока, в укрытии он или нет.
С высотой я разобрался, а вот с боковыми лучами у меня траблы и не во всех помещениях работает как нужно.
В некоторых помещениях вообще не работает, удаляешь строки проверки, начинает работать и то по высоте.
Просто забегаешь по навес и игрок под защитой, так не должно быть.
Помогите пожалуйста решить задачу.