From dc3c3fd24833dbce7eb72c1eb3f1dd9c508ba99f Mon Sep 17 00:00:00 2001 From: NotifyDeadCushion Date: Sat, 12 Sep 2026 22:26:56 +0200 Subject: [PATCH] Add Lua-accessible zoom inertia factor --- src/xrGame/EffectorZoomInertion.cpp | 15 +++++++------- src/xrGame/EffectorZoomInertion.h | 7 +++++++ src/xrGame/script_game_object.h | 3 +++ .../script_game_object_inventory_owner.cpp | 20 +++++++++++++++++++ src/xrGame/script_game_object_script3.cpp | 3 +++ 5 files changed, 41 insertions(+), 7 deletions(-) diff --git a/src/xrGame/EffectorZoomInertion.cpp b/src/xrGame/EffectorZoomInertion.cpp index ee303859da..b03a052eae 100644 --- a/src/xrGame/EffectorZoomInertion.cpp +++ b/src/xrGame/EffectorZoomInertion.cpp @@ -74,13 +74,14 @@ void CEffectorZoomInertion::SetParams(float disp) { float old_disp = m_fDispRadius; - m_fDispRadius = disp * m_fZoomAimingDispK; - if (m_fDispRadius < m_fDispMin) - m_fDispRadius = m_fDispMin; - - m_fFloatSpeed = disp * m_fZoomAimingSpeedK; - if (m_fFloatSpeed < m_fSpeedMin) - m_fFloatSpeed = m_fSpeedMin; + // Boeker: adjust zoom inertia factor + m_fDispRadius = disp * m_fZoomAimingDispK * m_fUserFactor; + if (m_fDispRadius < m_fDispMin * m_fUserFactor) + m_fDispRadius = m_fDispMin * m_fUserFactor; + + m_fFloatSpeed = disp * m_fZoomAimingSpeedK * m_fUserFactor; + if (m_fFloatSpeed < m_fSpeedMin * m_fUserFactor) + m_fFloatSpeed = m_fSpeedMin * m_fUserFactor; //для того, чтоб сразу прошел пересчет направления //движения прицела diff --git a/src/xrGame/EffectorZoomInertion.h b/src/xrGame/EffectorZoomInertion.h index 92a9c3d679..c3c6ad471a 100644 --- a/src/xrGame/EffectorZoomInertion.h +++ b/src/xrGame/EffectorZoomInertion.h @@ -26,6 +26,10 @@ class CEffectorZoomInertion : public CEffectorCam float m_fSpeedMin; float m_fZoomAimingDispK; float m_fZoomAimingSpeedK; + + // Boeker: Lua-controlled zoom inertia factor + float m_fUserFactor = 1.0f; + //время через которое эффектор меняет направление движения u32 m_dwDeltaTime; @@ -40,6 +44,9 @@ class CEffectorZoomInertion : public CEffectorCam void Load(); void SetParams(float disp); + void SetUserFactor(float factor) { m_fUserFactor = factor; } + float GetUserFactor() const { return m_fUserFactor; } + virtual BOOL ProcessCam(SCamEffectorInfo& info); virtual void SetRndSeed(s32 Seed) { m_Random.seed(Seed); }; virtual void Init(CWeaponMagazined* pWeapon); diff --git a/src/xrGame/script_game_object.h b/src/xrGame/script_game_object.h index 71cc24df42..94fb8413c9 100644 --- a/src/xrGame/script_game_object.h +++ b/src/xrGame/script_game_object.h @@ -1201,6 +1201,9 @@ class CScriptGameObject float GetActorDamageStaggerTimeFactor() const; void SetActorDamageStaggerTimeFactor(float val); + // Boeker: adjust zoom inertia factor + void SetZoomInertionFactor(float factor); + float GetActorCrouchCoef() const; void SetActorCrouchCoef(float val); float GetActorClimbCoef() const; diff --git a/src/xrGame/script_game_object_inventory_owner.cpp b/src/xrGame/script_game_object_inventory_owner.cpp index f543d8cfce..75f625bdd1 100644 --- a/src/xrGame/script_game_object_inventory_owner.cpp +++ b/src/xrGame/script_game_object_inventory_owner.cpp @@ -60,6 +60,10 @@ #include "ai_space.h" #include "ActorBackpack.h" +// Boeker: zoom inertia factor support +#include "EffectorZoomInertion.h" +#include "ActorEffector.h" + // //-Alundaio @@ -2867,6 +2871,22 @@ void CScriptGameObject::SetActorDamageStaggerTimeFactor(float val) pActor->DamageStaggerTimeFactor = val; } +// Boeker: zoom inertia factor support +void CScriptGameObject::SetZoomInertionFactor(float factor) +{ + CActor* pActor = smart_cast(&object()); + if (!pActor) + return; + + CEffectorZoomInertion* eff = smart_cast( + pActor->Cameras().GetCamEffector(eCEZoom) + ); + if (!eff) + return; + + eff->SetUserFactor(clampr(factor, 0.f, 2.f)); +} + // demonized: Additional exports float CScriptGameObject::GetActorCrouchCoef() const { diff --git a/src/xrGame/script_game_object_script3.cpp b/src/xrGame/script_game_object_script3.cpp index 3e462a03b6..a0f3346471 100644 --- a/src/xrGame/script_game_object_script3.cpp +++ b/src/xrGame/script_game_object_script3.cpp @@ -675,6 +675,9 @@ class_ script_register_game_object2(class_ .def("get_actor_lookout_coef", SAFE_WRAP(&CScriptGameObject::GetActorLookoutCoef)) .def("set_actor_lookout_coef", SAFE_WRAP(&CScriptGameObject::SetActorLookoutCoef)) + // Boeker: adjust zoom inertia factor + .def("set_zoom_inertion_factor", SAFE_WRAP(&CScriptGameObject::SetZoomInertionFactor)) + // verdatim: Adjust damager stagger time factor .def("get_actor_damage_stagger_time_factor", SAFE_WRAP(&CScriptGameObject::GetActorDamageStaggerTimeFactor)) .def("set_actor_damage_stagger_time_factor", SAFE_WRAP(&CScriptGameObject::SetActorDamageStaggerTimeFactor))