| 41 | } |
| 42 | |
| 43 | void CHudItem::Load(LPCSTR section) |
| 44 | { |
| 45 | world_sect = section; |
| 46 | |
| 47 | //загрузить hud, если он нужен |
| 48 | if (pSettings->line_exist(section, "hud")) |
| 49 | { |
| 50 | hud_sect = pSettings->r_string(section, "hud"); |
| 51 | |
| 52 | if (pSettings->line_exist(hud_sect, "allow_inertion")) |
| 53 | EnableHudInertion(pSettings->r_bool(hud_sect, "allow_inertion")); |
| 54 | |
| 55 | if (pSettings->line_exist(hud_sect, "allow_bobbing")) |
| 56 | allow_bobbing = pSettings->r_bool(hud_sect, "allow_bobbing"); |
| 57 | |
| 58 | hud_recalc_koef = READ_IF_EXISTS(pSettings, r_float, hud_sect, "hud_recalc_koef", |
| 59 | 1.35f); //На калаше при 1.35 вроде норм смотрится, другим стволам возможно придется подбирать другие значения. |
| 60 | } |
| 61 | |
| 62 | m_animation_slot = pSettings->r_u32(section, "animation_slot"); |
| 63 | |
| 64 | m_nearwall_on = READ_IF_EXISTS(pSettings, r_bool, section, "nearwall_on", IS_OGSR_GA ? true : READ_IF_EXISTS(pSettings, r_bool, "features", "default_nearwall_on", true)); |
| 65 | //AimAlt = READ_IF_EXISTS(pSettings, r_bool, section, "use_alt_aim_hud", false); |
| 66 | |
| 67 | if (m_nearwall_on) |
| 68 | { |
| 69 | // Координаты офсетов для сдвига худа нашел в интернетах :) |
| 70 | static std::array<std::tuple<float, float, Fvector, Fvector, float, float>, _CollisionWeaponTypesCount_> CollisionParamsBase{{ |
| 71 | // Min, Max dist, offset, rotate, HudFov, HudFov Aim |
| 72 | {0.25f, 0.95f, {-0.0615f, -0.4380f, 0.1235f}, {-0.9219f, -0.0972f, 0.2525f}, IS_OGSR_GA ? 0.5f : 0.25f, IS_OGSR_GA ? 0.25f : 0.15f}, // Общие для всех оружий |
| 73 | {0.25f, 0.70f, {-0.1000f, -0.5537f, 0.0350f}, {-1.0630f, 0.1751f, -0.0600f}, IS_OGSR_GA ? 0.5f : 0.25f, IS_OGSR_GA ? 0.20f : 0.10f}, // Пистолеты |
| 74 | {0.30f, 1.30f, {-0.0615f, -0.4380f, 0.1235f}, {-0.9219f, -0.0972f, 0.2525f}, IS_OGSR_GA ? 0.5f : 0.25f, IS_OGSR_GA ? 0.25f : 0.15f}, // СВД и прочие длинные снайперки |
| 75 | {0.35f, 1.85f, {-0.0399f, 0.0929f, -0.0589f}, {0.3908f, 0.0488f, -0.0193f}, IS_OGSR_GA ? 0.5f : 0.25f, IS_OGSR_GA ? 0.25f : 0.15f}, // РПГ |
| 76 | {0.25f, 0.80f, {0.0015f, -0.5655f, 0.1240f}, {-1.0319f, 0.0678f, 0.0700f}, IS_OGSR_GA ? 0.5f : 0.25f, IS_OGSR_GA ? 0.25f : 0.15f}, // РГ-6 |
| 77 | {0.25f, 0.80f, {-0.0406f, -0.4191f, 0.1718f}, {-0.8981f, -0.1101f, 0.4420f}, IS_OGSR_GA ? 0.5f : 0.25f, IS_OGSR_GA ? 0.25f : 0.15f}, // Гроза |
| 78 | {0.25f, 0.80f, {-0.0335f, -0.4618f, 0.1098f}, {-0.9119f, -0.0973f, 0.4143f}, IS_OGSR_GA ? 0.5f : 0.25f, IS_OGSR_GA ? 0.25f : 0.15f}, // ФН2000 |
| 79 | {0.25f, 0.60f, {-0.0650f, -0.5170f, 0.0465f}, {-1.0405f, 0.1051f, -0.0350f}, IS_OGSR_GA ? 0.5f : 0.25f, IS_OGSR_GA ? 0.25f : 0.15f}, // БМ-16 |
| 80 | {0.30f, 0.50f, {-0.0025f, -0.4045f, -0.1415f}, {-0.7900f, 0.0100f, 0.f}, IS_OGSR_GA ? 0.5f : 0.25f, IS_OGSR_GA ? 0.25f : 0.15f}, // Болт |
| 81 | {0.25f, 0.65f, {0.0120f, -0.4780f, -0.1150f}, {-0.6250f, -0.0725f, -0.1950f}, 0.5f, 1.f}, //Детектор |
| 82 | {0.30f, 0.50f, {-0.0025f, -0.4045f, -0.1415f}, {-0.7900f, 0.0100f, 0.f}, IS_OGSR_GA ? 0.5f : 0.25f, IS_OGSR_GA ? 0.25f : 0.15f}, // Нож, гранаты и прочее |
| 83 | {0.25f, 0.70f, {0.f, 0.f, 0.f}, {0.f, 0.f, 0.f}, IS_OGSR_GA ? 0.5f : 0.25f, IS_OGSR_GA ? 0.40f : 0.30f}, // Бинокль |
| 84 | }}; |
| 85 | const size_t type = GetWeaponTypeForCollision(); |
| 86 | const auto& CollisionParams = CollisionParamsBase.at(type); |
| 87 | |
| 88 | // Параметры изменения коллизии когда игрок стоит вплотную к стене |
| 89 | m_nearwall_hud_offset_speed = READ_IF_EXISTS(pSettings, r_float, section, "nearwall_hud_offset_speed", 0.1f); // Скорость поднятия\опускания ствола |
| 90 | m_nearwall_dist_min = READ_IF_EXISTS(pSettings, r_float, section, "nearwall_dist_min", std::get<0>(CollisionParams)); //Максимальное расстояние, на которое камера ГГ может упереться к стене |
| 91 | m_nearwall_dist_max = READ_IF_EXISTS(pSettings, r_float, section, "nearwall_dist_max", std::get<1>(CollisionParams)); //Расстояние, ближе которого начинаем поднимать ствол |
| 92 | m_nearwall_target_hud_offset = READ_IF_EXISTS(pSettings, r_fvector3, section, "nearwall_target_hud_offset", std::get<2>(CollisionParams)); //Максимальный оффсет худа |
| 93 | m_nearwall_target_hud_rotate = READ_IF_EXISTS(pSettings, r_fvector3, section, "nearwall_target_hud_rotate", std::get<3>(CollisionParams)); //Максимальный поворот худа |
| 94 | m_nearwall_target_hud_fov = READ_IF_EXISTS(pSettings, r_float, section, "nearwall_target_hud_fov", std::get<4>(CollisionParams)); |
| 95 | m_nearwall_target_aim_hud_fov = READ_IF_EXISTS(pSettings, r_float, section, "nearwall_target_aim_hud_fov", std::get<5>(CollisionParams)); |
| 96 | m_nearwall_speed_mod = READ_IF_EXISTS(pSettings, r_float, section, "nearwall_speed_mod", 10.f); |
| 97 | } |
| 98 | |
| 99 | //if (pSettings->line_exist(hud_sect, "hud_fov")) |
| 100 | // m_base_fov = READ_IF_EXISTS(pSettings, r_float, hud_sect, "hud_fov", 0.0f); |
nothing calls this directly
no test coverage detected