Add RotateCameraWorker

- Added ModMenuModule::RotateCameraWorker
- Updated ModMenuModule::MouseControlWorkerRegistry to use RotateCameraWorker when the player is driving a car
This commit is contained in:
izawartka 2026-05-24 22:31:20 +02:00
parent 9a415660b5
commit f09d2820c8
5 changed files with 106 additions and 2 deletions

View File

@ -654,6 +654,7 @@ echo Created $(ProjectDir)src\git.h with commit %GIT_HASH% (dirty=%GIT_DIRTY%)
<ClInclude Include="src\modules\modmenu\cheats\mouse-control\point-at-mouse-worker.h" />
<ClInclude Include="src\modules\modmenu\cheats\mouse-control\locked-mouse-worker.h" />
<ClInclude Include="src\modules\modmenu\cheats\mouse-control\attack-worker.h" />
<ClInclude Include="src\modules\modmenu\cheats\mouse-control\rotate-camera-worker.h" />
<ClInclude Include="src\modules\modmenu\cheats\native-cheats-keeper.h" />
<ClInclude Include="src\modules\modmenu\cheats\player-appearance.h" />
<ClInclude Include="src\modules\modmenu\cheats\player-pos.h" />
@ -902,6 +903,7 @@ echo Created $(ProjectDir)src\git.h with commit %GIT_HASH% (dirty=%GIT_DIRTY%)
<ClCompile Include="src\modules\modmenu\cheats\mouse-control\mouse-control.cpp" />
<ClCompile Include="src\modules\modmenu\cheats\mouse-control\point-at-mouse-worker.cpp" />
<ClCompile Include="src\modules\modmenu\cheats\mouse-control\locked-mouse-worker.cpp" />
<ClCompile Include="src\modules\modmenu\cheats\mouse-control\rotate-camera-worker.cpp" />
<ClCompile Include="src\modules\modmenu\cheats\native-cheats-keeper.cpp" />
<ClCompile Include="src\modules\modmenu\cheats\player-appearance.cpp" />
<ClCompile Include="src\modules\modmenu\cheats\player-pos.cpp" />

View File

@ -177,6 +177,7 @@
<ClCompile Include="src\modules\modmenu\cheats\mouse-control\attack-worker.cpp" />
<ClCompile Include="src\modules\modmenu\cheats\mouse-control\left-right-worker.cpp" />
<ClCompile Include="src\modules\modmenu\cheats\mouse-control\mouse-control-worker-registry.cpp" />
<ClCompile Include="src\modules\modmenu\cheats\mouse-control\rotate-camera-worker.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="src\converters\ammo.h" />
@ -471,6 +472,7 @@
<ClInclude Include="src\modules\modmenu\cheats\mouse-control\attack-worker.h" />
<ClInclude Include="src\modules\modmenu\cheats\mouse-control\left-right-worker.h" />
<ClInclude Include="src\modules\modmenu\cheats\mouse-control\mouse-control-worker-registry.h" />
<ClInclude Include="src\modules\modmenu\cheats\mouse-control\rotate-camera-worker.h" />
</ItemGroup>
<ItemGroup>
<None Include="GTA2.props" />

View File

@ -1,9 +1,10 @@
#include "mouse-control-worker-registry.h"
#include "mouse-control-worker.h"
#include "attack-worker.h"
#include "locked-mouse-worker.h"
#include "point-at-mouse-worker.h"
#include "left-right-worker.h"
#include "mouse-control-worker-registry.h"
#include "rotate-camera-worker.h"
namespace ModMenuModule::MouseControlWorkerRegistry {
namespace {
@ -22,6 +23,7 @@ namespace ModMenuModule::MouseControlWorkerRegistry {
{ GetWorkerType<LockedMouseWorker>(), &CreateWorkerInstance<LockedMouseWorker> },
{ GetWorkerType<PointAtMouseWorker>(), &CreateWorkerInstance<PointAtMouseWorker> },
{ GetWorkerType<LeftRightWorker>(), &CreateWorkerInstance<LeftRightWorker> },
{ GetWorkerType<RotateCameraWorker>(), &CreateWorkerInstance<RotateCameraWorker> },
};
return factories;
@ -31,7 +33,7 @@ namespace ModMenuModule::MouseControlWorkerRegistry {
{
static const std::unordered_map<WorkerSetType, MouseControlWorkerSetDef> workerSetDefs = {
{ WorkerSetType::RotateMode, MouseControlWorkerSetDef::Create<AttackWorker, LockedMouseWorker, LeftRightWorker>() },
{ WorkerSetType::RotateModeInCar, MouseControlWorkerSetDef::Create<AttackWorker, void, void>() },
{ WorkerSetType::RotateModeInCar, MouseControlWorkerSetDef::Create<AttackWorker, LockedMouseWorker, RotateCameraWorker>() },
{ WorkerSetType::PointAtMode, MouseControlWorkerSetDef::Create<AttackWorker, PointAtMouseWorker, LeftRightWorker>() },
{ WorkerSetType::PointAtModeInCar, MouseControlWorkerSetDef::Create<AttackWorker, void, void>() },
};

View File

@ -0,0 +1,74 @@
#include "rotate-camera-worker.h"
#include "mouse-control.h"
#include "../camera/camera.h"
#include "../../common.h"
#include "../../utils/angle-utils.h"
static constexpr float ROTATE_CAMERA_SENSITIVITY = 0.75f;
void ModMenuModule::RotateCameraWorker::Start()
{
spdlog::debug("RotateCameraWorker: Starting");
SaveInitialCameraOffset();
MouseControlCheat* mouseControlCheat = MouseControlCheat::GetInstance();
mouseControlCheat->SetDeltaX(0.0f);
m_running = true;
}
void ModMenuModule::RotateCameraWorker::Stop()
{
spdlog::debug("RotateCameraWorker: Stopping");
RestoreInitialCameraOffset();
m_running = false;
}
void ModMenuModule::RotateCameraWorker::Update()
{
MouseControlCheat* mouseControlCheat = MouseControlCheat::GetInstance();
CameraCheat* cameraCheat = CameraCheat::GetInstance();
float deltaX = mouseControlCheat->GetDeltaX();
if (deltaX == 0.0f) return;
mouseControlCheat->SetDeltaX(0.0f);
if (!cameraCheat->IsEnabled()) return;
CameraCheatOptions cameraOptions = cameraCheat->GetOptions();
if (!cameraOptions.followPedRotation) return;
float newOffset = cameraOptions.followPedRotationOffset - deltaX * ROTATE_CAMERA_SENSITIVITY;
cameraOptions.followPedRotationOffset = Utils::Angle::NormalizeAngle(newOffset);
cameraCheat->SetOptions(cameraOptions);
}
void ModMenuModule::RotateCameraWorker::SaveInitialCameraOffset()
{
MouseControlCheat* mouseControlCheat = MouseControlCheat::GetInstance();
CameraCheat* cameraCheat = CameraCheat::GetInstance();
if (!cameraCheat->IsEnabled()) return;
CameraCheatOptions cameraOptions = cameraCheat->GetOptions();
if (!cameraOptions.followPedRotation) return;
m_initialCameraOffset = cameraOptions.followPedRotationOffset;
}
void ModMenuModule::RotateCameraWorker::RestoreInitialCameraOffset() const
{
MouseControlCheat* mouseControlCheat = MouseControlCheat::GetInstance();
CameraCheat* cameraCheat = CameraCheat::GetInstance();
if (!cameraCheat->IsEnabled()) return;
CameraCheatOptions cameraOptions = cameraCheat->GetOptions();
if (!cameraOptions.followPedRotation) return;
cameraOptions.followPedRotationOffset = m_initialCameraOffset;
cameraCheat->SetOptions(cameraOptions);
}

View File

@ -0,0 +1,24 @@
#pragma once
#include "mouse-control-worker.h"
#include "../force-controls.h"
namespace ModMenuModule {
class RotateCameraWorker : public MouseControlWorker {
public:
RotateCameraWorker() = default;
RotateCameraWorker(const RotateCameraWorker&) = delete;
RotateCameraWorker& operator=(const RotateCameraWorker&) = delete;
void Start() override;
void Stop() override;
bool IsRunning() const override { return m_running; }
void Update() override;
void SaveInitialCameraOffset();
void RestoreInitialCameraOffset() const;
private:
bool m_running = false;
float m_initialCameraOffset = 0.0f;
};
}