From 7dcd80785a171e3568f3b34e7ad600c4e843cdad Mon Sep 17 00:00:00 2001 From: yukani Date: Sun, 6 Oct 2024 14:51:28 +0300 Subject: [PATCH] fix build and improve code --- source/game_sa/Cam.cpp | 150 +++++++++++++++++++++++------------------ source/game_sa/Cam.h | 75 ++++++++------------- 2 files changed, 115 insertions(+), 110 deletions(-) diff --git a/source/game_sa/Cam.cpp b/source/game_sa/Cam.cpp index f94989ba9..2c0c4afa6 100644 --- a/source/game_sa/Cam.cpp +++ b/source/game_sa/Cam.cpp @@ -1,6 +1,8 @@ #include "StdInc.h" #include "Cam.h" +#include "TimeCycle.h" +#include "Camera.h" bool& gbFirstPersonRunThisFrame = *reinterpret_cast(0xB6EC20); @@ -160,17 +162,17 @@ void CCam::DoCamBump(float horizontal, float vertical) { // 0x50DD70 void CCam::Finalise_DW_CineyCams(CVector*, CVector*, float, float, float, float) { - assert(0); + NOTSA_UNREACHABLE(); } // 0x517130 void CCam::GetCoreDataForDWCineyCamMode(CEntity**, CVehicle**, CVector*, CVector*, CVector*, CVector*, CVector*, CVector*, float*, CVector*, float*, CColSphere*) { - assert(0); + NOTSA_UNREACHABLE(); } // 0x5161A0 void CCam::GetLookFromLampPostPos(CEntity*, CPed*, CVector&, CVector&) { - assert(0); + NOTSA_UNREACHABLE(); } // 0x509CE0 @@ -185,32 +187,33 @@ void CCam::GetVectorsReadyForRW() { // 0x513E40 void CCam::Get_TwoPlayer_AimVector(CVector& out) { - assert(0); + NOTSA_UNREACHABLE(); } // 0x517400 bool CCam::IsTimeToExitThisDWCineyCamMode(int32 camId, const CVector& src, const CVector& dst, float t, bool lineOfSightCheck) { - assert(0); + NOTSA_UNREACHABLE(); + return false; } // 0x509DF0 void CCam::KeepTrackOfTheSpeed(const CVector&, const CVector&, const CVector&, const float&, const float&, const float&) { - assert(0); + NOTSA_UNREACHABLE(); } // 0x520690 void CCam::LookBehind() { - assert(0); + NOTSA_UNREACHABLE(); } // 0x520E40 void CCam::LookRight(bool bLookRight) { - assert(0); + NOTSA_UNREACHABLE(); } // 0x50A4F0 void CCam::RotCamIfInFrontCar(const CVector&, float) { - assert(0); + NOTSA_UNREACHABLE(); } // 0x50A850 @@ -224,102 +227,102 @@ bool CCam::GetWeaponFirstPersonOn() { } // 0x526FC0 -bool CCam::Process() { - assert(0); return false; +void CCam::Process() { + NOTSA_UNREACHABLE(); } // 0x518500 -bool CCam::ProcessArrestCamOne() { - assert(0); return false; +void CCam::ProcessArrestCamOne() { + NOTSA_UNREACHABLE(); } // 0x519250 -bool CCam::ProcessPedsDeadBaby() { - assert(0); return false; +void CCam::ProcessPedsDeadBaby() { + NOTSA_UNREACHABLE(); } // 0x50EB70 -bool CCam::Process_1rstPersonPedOnPC(const CVector&, float, float, float) { - assert(0); return false; +void CCam::Process_1rstPersonPedOnPC(const CVector&, float, float, float) { + NOTSA_UNREACHABLE(); } // 0x517EA0 -bool CCam::Process_1stPerson(const CVector&, float, float, float) { - assert(0); return false; +void CCam::Process_1stPerson(const CVector&, float, float, float) { + NOTSA_UNREACHABLE(); } // 0x521500 -bool CCam::Process_AimWeapon(const CVector&, float, float, float) { - assert(0); return false; +void CCam::Process_AimWeapon(const CVector&, float, float, float) { + NOTSA_UNREACHABLE(); } // 0x512B10 -bool CCam::Process_AttachedCam() { - assert(0); return false; +void CCam::Process_AttachedCam() { + NOTSA_UNREACHABLE(); } // 0x525E50 -bool CCam::Process_Cam_TwoPlayer() { - assert(0); return false; +void CCam::Process_Cam_TwoPlayer() { + NOTSA_UNREACHABLE(); } // 0x519810 -bool CCam::Process_Cam_TwoPlayer_InCarAndShooting() { - assert(0); return false; +void CCam::Process_Cam_TwoPlayer_InCarAndShooting() { + NOTSA_UNREACHABLE(); } // 0x513510 -bool CCam::Process_Cam_TwoPlayer_Separate_Cars() { - assert(0); return false; +void CCam::Process_Cam_TwoPlayer_Separate_Cars() { + NOTSA_UNREACHABLE(); } // 0x513BE0 -bool CCam::Process_Cam_TwoPlayer_Separate_Cars_TopDown() { - assert(0); return false; +void CCam::Process_Cam_TwoPlayer_Separate_Cars_TopDown() { + NOTSA_UNREACHABLE(); } // 0x51B850 -bool CCam::Process_DW_BirdyCam(bool) { - assert(0); return false; +void CCam::Process_DW_BirdyCam(bool) { + NOTSA_UNREACHABLE(); } // 0x51B120 -bool CCam::Process_DW_CamManCam(bool) { - assert(0); return false; +void CCam::Process_DW_CamManCam(bool) { + NOTSA_UNREACHABLE(); } // 0x51A740 -bool CCam::Process_DW_HeliChaseCam(bool) { - assert(0); return false; +void CCam::Process_DW_HeliChaseCam(bool) { + NOTSA_UNREACHABLE(); } // 0x51C760 -bool CCam::Process_DW_PlaneCam1(bool) { - assert(0); return false; +void CCam::Process_DW_PlaneCam1(bool) { + NOTSA_UNREACHABLE(); } // 0x51CC30 -bool CCam::Process_DW_PlaneCam2(bool) { - assert(0); return false; +void CCam::Process_DW_PlaneCam2(bool) { + NOTSA_UNREACHABLE(); } // 0x51D100 -bool CCam::Process_DW_PlaneCam3(bool) { - assert(0); return false; +void CCam::Process_DW_PlaneCam3(bool) { + NOTSA_UNREACHABLE(); } // 0x51C250 -bool CCam::Process_DW_PlaneSpotterCam(bool) { - assert(0); return false; +void CCam::Process_DW_PlaneSpotterCam(bool) { + NOTSA_UNREACHABLE(); } // 0x50F3F0 -bool CCam::Process_Editor(const CVector&, float, float, float) { - assert(0); return false; +void CCam::Process_Editor(const CVector&, float, float, float) { + NOTSA_UNREACHABLE(); } // 0x51D470 -bool CCam::Process_Fixed(const CVector& target, float orientation, float speedVar, float speedVarWanted) { +void CCam::Process_Fixed(const CVector& target, float orientation, float speedVar, float speedVarWanted) { if (m_nDirectionWasLooking != 3) { m_nDirectionWasLooking = 3; // todo: enum } @@ -360,41 +363,60 @@ bool CCam::Process_Fixed(const CVector& target, float orientation, float speedVa } // 0x5B25F0 -bool CCam::Process_FlyBy(const CVector&, float, float, float) { - assert(0); return false; +void CCam::Process_FlyBy(const CVector&, float, float, float) { + NOTSA_UNREACHABLE(); } // 0x5245B0 -bool CCam::Process_FollowCar_SA(const CVector&, float, float, float, bool) { - assert(0); return false; +void CCam::Process_FollowCar_SA(const CVector&, float, float, float, bool) { + NOTSA_UNREACHABLE(); } // 0x50F970 -bool CCam::Process_FollowPedWithMouse(const CVector&, float, float, float) { - assert(0); return false; +void CCam::Process_FollowPedWithMouse(const CVector&, float, float, float) { + NOTSA_UNREACHABLE(); } // 0x522D40 -bool CCam::Process_FollowPed_SA(const CVector&, float, float, float, bool) { - assert(0); return false; +void CCam::Process_FollowPed_SA(const CVector&, float, float, float, bool) { + NOTSA_UNREACHABLE(); } // 0x5105C0 -bool CCam::Process_M16_1stPerson(const CVector&, float, float, float) { - assert(0); return false; +void CCam::Process_M16_1stPerson(const CVector&, float, float, float) { + NOTSA_UNREACHABLE(); } // 0x511B50 -bool CCam::Process_Rocket(const CVector&, float, float, float, bool) { - assert(0); return false; +void CCam::Process_Rocket(const CVector&, float, float, float, bool) { + NOTSA_UNREACHABLE(); } // 0x517500 -bool CCam::Process_SpecialFixedForSyphon(const CVector&, float, float, float) { - assert(0); return false; +void CCam::Process_SpecialFixedForSyphon(const CVector&, float, float, float) { + NOTSA_UNREACHABLE(); } // 0x512110 -bool CCam::Process_WheelCam(const CVector&, float, float, float) { - assert(0); return false; +void CCam::Process_WheelCam(const CVector&, float, float, float) { + NOTSA_UNREACHABLE(); +} + +void CCam::ApplyUnderwaterBlur() { + static constexpr uint32 UNDERWATER_CAM_BLUR = 20; // 0x8CC7A4 + static constexpr float UNDERWATER_CAM_MAG_LIMIT = 10.0f; // 0x8CC7A8 + + const auto colorMag = std::sqrt( + sq(CTimeCycle::m_CurrentColours.m_fWaterRed) + + sq(CTimeCycle::m_CurrentColours.m_fWaterGreen) + + sq(CTimeCycle::m_CurrentColours.m_fWaterBlue) + ); + + const auto factor = (colorMag <= UNDERWATER_CAM_MAG_LIMIT) ? 1.0f : UNDERWATER_CAM_MAG_LIMIT / colorMag; + + TheCamera.m_nBlurRed = static_cast(factor * CTimeCycle::m_CurrentColours.m_fWaterRed); + TheCamera.m_nBlurGreen = static_cast(factor * CTimeCycle::m_CurrentColours.m_fWaterGreen); + TheCamera.m_nBlurBlue = static_cast(factor * CTimeCycle::m_CurrentColours.m_fWaterBlue); + TheCamera.m_nBlurType = 2; // TODO: enum + TheCamera.m_nMotionBlur = UNDERWATER_CAM_BLUR; } diff --git a/source/game_sa/Cam.h b/source/game_sa/Cam.h index 8ff08de3a..d98424bb3 100644 --- a/source/game_sa/Cam.h +++ b/source/game_sa/Cam.h @@ -151,54 +151,37 @@ class CCam { bool Using3rdPersonMouseCam(); bool GetWeaponFirstPersonOn(); - bool Process(); - bool ProcessArrestCamOne(); - bool ProcessPedsDeadBaby(); - bool Process_1rstPersonPedOnPC(const CVector&, float, float, float); - bool Process_1stPerson(const CVector&, float, float, float); - bool Process_AimWeapon(const CVector&, float, float, float); - bool Process_AttachedCam(); - bool Process_Cam_TwoPlayer(); - bool Process_Cam_TwoPlayer_InCarAndShooting(); - bool Process_Cam_TwoPlayer_Separate_Cars(); - bool Process_Cam_TwoPlayer_Separate_Cars_TopDown(); - bool Process_DW_BirdyCam(bool); - bool Process_DW_CamManCam(bool); - bool Process_DW_HeliChaseCam(bool); - bool Process_DW_PlaneCam1(bool); - bool Process_DW_PlaneCam2(bool); - bool Process_DW_PlaneCam3(bool); - bool Process_DW_PlaneSpotterCam(bool); - bool Process_Editor(const CVector&, float, float, float); - bool Process_Fixed(const CVector&, float, float, float); - bool Process_FlyBy(const CVector&, float, float, float); - bool Process_FollowCar_SA(const CVector&, float, float, float, bool); - bool Process_FollowPedWithMouse(const CVector&, float, float, float); - bool Process_FollowPed_SA(const CVector&, float, float, float, bool); - bool Process_M16_1stPerson(const CVector&, float, float, float); - bool Process_Rocket(const CVector&, float, float, float, bool); - bool Process_SpecialFixedForSyphon(const CVector&, float, float, float); - bool Process_WheelCam(const CVector&, float, float, float); + void Process(); + void ProcessArrestCamOne(); + void ProcessPedsDeadBaby(); + void Process_1rstPersonPedOnPC(const CVector&, float, float, float); + void Process_1stPerson(const CVector&, float, float, float); + void Process_AimWeapon(const CVector&, float, float, float); + void Process_AttachedCam(); + void Process_Cam_TwoPlayer(); + void Process_Cam_TwoPlayer_InCarAndShooting(); + void Process_Cam_TwoPlayer_Separate_Cars(); + void Process_Cam_TwoPlayer_Separate_Cars_TopDown(); + void Process_DW_BirdyCam(bool); + void Process_DW_CamManCam(bool); + void Process_DW_HeliChaseCam(bool); + void Process_DW_PlaneCam1(bool); + void Process_DW_PlaneCam2(bool); + void Process_DW_PlaneCam3(bool); + void Process_DW_PlaneSpotterCam(bool); + void Process_Editor(const CVector&, float, float, float); + void Process_Fixed(const CVector&, float, float, float); + void Process_FlyBy(const CVector&, float, float, float); + void Process_FollowCar_SA(const CVector&, float, float, float, bool); + void Process_FollowPedWithMouse(const CVector&, float, float, float); + void Process_FollowPed_SA(const CVector&, float, float, float, bool); + void Process_M16_1stPerson(const CVector&, float, float, float); + void Process_Rocket(const CVector&, float, float, float, bool); + void Process_SpecialFixedForSyphon(const CVector&, float, float, float); + void Process_WheelCam(const CVector&, float, float, float); // NOTSA: inlined - void ApplyUnderwaterBlur() { - static constexpr float UNDERWATER_CAM_BLUR = 20; // 0x8CC7A4 - static constexpr float UNDERWATER_CAM_MAG_LIMIT = 10.0f; // 0x8CC7A8 - - const auto colorMag = std::sqrt( - sq(CTimeCycle::m_CurrentColours.m_fWaterRed) + - sq(CTimeCycle::m_CurrentColours.m_fWaterGreen) + - sq(CTimeCycle::m_CurrentColours.m_fWaterBlue) - ); - - const auto factor = (colorMag <= UNDERWATER_CAM_MAG_LIMIT) ? 1.0f : UNDERWATER_CAM_MAG_LIMIT / colorMag; - - TheCamera.m_nBlurRed = factor * CTimeCycle::m_CurrentColours.m_fWaterRed; - TheCamera.m_nBlurGreen = factor * CTimeCycle::m_CurrentColours.m_fWaterGreen; - TheCamera.m_nBlurBlue = factor * CTimeCycle::m_CurrentColours.m_fWaterBlue; - TheCamera.m_nBlurType = 2; // TODO: enum - TheCamera.m_nMotionBlur = UNDERWATER_CAM_BLUR; - } + void ApplyUnderwaterBlur(); }; VALIDATE_SIZE(CCam, 0x238);