From 2df44208dd21bd8b86bea0214afe61c0c0bf432d Mon Sep 17 00:00:00 2001 From: Sergeanur Date: Wed, 3 Jun 2020 04:45:25 +0300 Subject: [PATCH 1/3] Range2D and Range3D --- src/core/Range2D.cpp | 22 ++++++++++++++++++++++ src/core/Range2D.h | 11 +++++++++++ src/core/Range3D.cpp | 23 +++++++++++++++++++++++ src/core/Range3D.h | 11 +++++++++++ 4 files changed, 67 insertions(+) create mode 100644 src/core/Range2D.cpp create mode 100644 src/core/Range2D.h create mode 100644 src/core/Range3D.cpp create mode 100644 src/core/Range3D.h diff --git a/src/core/Range2D.cpp b/src/core/Range2D.cpp new file mode 100644 index 00000000..daa36d6a --- /dev/null +++ b/src/core/Range2D.cpp @@ -0,0 +1,22 @@ +#include "common.h" +#include "Range2D.h" +#include "General.h" + +CRange2D::CRange2D(CVector2D _min, CVector2D _max) : min(_min), max(_max) {} + +bool +CRange2D::IsInRange(CVector2D vec) +{ + return min.x < vec.x && max.x > vec.x && min.y < vec.y && max.y > vec.y; +} + +void +CRange2D::DebugShowRange(float, int) +{ +} + +CVector2D +CRange2D::GetRandomPointInRange() +{ + return CVector2D(CGeneral::GetRandomNumberInRange(min.x, max.x), CGeneral::GetRandomNumberInRange(min.y, max.y)); +} diff --git a/src/core/Range2D.h b/src/core/Range2D.h new file mode 100644 index 00000000..f239e7de --- /dev/null +++ b/src/core/Range2D.h @@ -0,0 +1,11 @@ +#pragma once + +class CRange2D +{ + CVector2D min, max; +public: + CRange2D(CVector2D _min, CVector2D _max); + bool IsInRange(CVector2D vec); + void DebugShowRange(float, int); + CVector2D GetRandomPointInRange(); +}; \ No newline at end of file diff --git a/src/core/Range3D.cpp b/src/core/Range3D.cpp new file mode 100644 index 00000000..14d2dbd2 --- /dev/null +++ b/src/core/Range3D.cpp @@ -0,0 +1,23 @@ +#include "common.h" +#include "Range3D.h" +#include "General.h" + +CRange3D::CRange3D(CVector _min, CVector _max) : min(_min), max(_max) {} + +bool +CRange3D::IsInRange(CVector vec) +{ + return min.x < vec.x && max.x > vec.x && min.y < vec.y && max.y > vec.y && min.z < vec.z && max.z > vec.z; +} + +void +CRange3D::DebugShowRange(float, int) +{ +} + +CVector +CRange3D::GetRandomPointInRange() +{ + return CVector(CGeneral::GetRandomNumberInRange(min.x, max.x), CGeneral::GetRandomNumberInRange(min.y, max.y), + CGeneral::GetRandomNumberInRange(min.z, max.z)); +} diff --git a/src/core/Range3D.h b/src/core/Range3D.h new file mode 100644 index 00000000..f42b523b --- /dev/null +++ b/src/core/Range3D.h @@ -0,0 +1,11 @@ +#pragma once + +class CRange3D +{ + CVector min, max; +public: + CRange3D(CVector _min, CVector _max); + bool IsInRange(CVector vec); + void DebugShowRange(float, int); + CVector GetRandomPointInRange(); +}; \ No newline at end of file From 04de93796bf6b19e10d46cbca3db3d296dd1612f Mon Sep 17 00:00:00 2001 From: aap Date: Wed, 3 Jun 2020 09:24:02 +0200 Subject: [PATCH 2/3] fix accident~ --- src/vehicles/Automobile.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/vehicles/Automobile.cpp b/src/vehicles/Automobile.cpp index 9aa5ae7c..9fe172fa 100644 --- a/src/vehicles/Automobile.cpp +++ b/src/vehicles/Automobile.cpp @@ -2648,6 +2648,8 @@ CAutomobile::HydraulicControl(void) if(m_hydraulicState < 20 && m_fVelocityChangeForAudio > 0.2f){ if(m_hydraulicState == 0){ m_hydraulicState = 20; + for(i = 0; i < 4; i++) + m_aWheelPosition[i] -= 0.06f; DMAudio.PlayOneShot(m_audioEntityId, SOUND_CAR_HYDRAULIC_1, 0.0f); setPrevRatio = true; }else{ From 12717917cc67c7fa854991b606b7ea71499ec602 Mon Sep 17 00:00:00 2001 From: Sergeanur Date: Thu, 4 Jun 2020 04:31:04 +0300 Subject: [PATCH 3/3] Restore original logic of CPed::WanderRange --- src/core/Range2D.cpp | 8 +++++++- src/core/Range3D.cpp | 11 +++++++++-- src/peds/Ped.cpp | 15 ++++----------- src/peds/Ped.h | 2 +- 4 files changed, 21 insertions(+), 15 deletions(-) diff --git a/src/core/Range2D.cpp b/src/core/Range2D.cpp index daa36d6a..33eafd0e 100644 --- a/src/core/Range2D.cpp +++ b/src/core/Range2D.cpp @@ -18,5 +18,11 @@ CRange2D::DebugShowRange(float, int) CVector2D CRange2D::GetRandomPointInRange() { - return CVector2D(CGeneral::GetRandomNumberInRange(min.x, max.x), CGeneral::GetRandomNumberInRange(min.y, max.y)); + int distX = Abs(max.x - min.x); + int distY = Abs(max.y - min.y); + + float outX = CGeneral::GetRandomNumber() % distX + min.x; + float outY = CGeneral::GetRandomNumber() % distY + min.y; + + return CVector2D(outX, outY); } diff --git a/src/core/Range3D.cpp b/src/core/Range3D.cpp index 14d2dbd2..7fa28d67 100644 --- a/src/core/Range3D.cpp +++ b/src/core/Range3D.cpp @@ -18,6 +18,13 @@ CRange3D::DebugShowRange(float, int) CVector CRange3D::GetRandomPointInRange() { - return CVector(CGeneral::GetRandomNumberInRange(min.x, max.x), CGeneral::GetRandomNumberInRange(min.y, max.y), - CGeneral::GetRandomNumberInRange(min.z, max.z)); + int distX = Abs(max.x - min.x); + int distY = Abs(max.y - min.y); + int distZ = Abs(max.z - min.z); + + float outX = CGeneral::GetRandomNumber() % distX + min.x; + float outY = CGeneral::GetRandomNumber() % distY + min.y; + float outZ = CGeneral::GetRandomNumber() % distZ + min.z; + + return CVector(outX, outY, outZ); } diff --git a/src/peds/Ped.cpp b/src/peds/Ped.cpp index 055581ad..88b09e91 100644 --- a/src/peds/Ped.cpp +++ b/src/peds/Ped.cpp @@ -57,6 +57,7 @@ #include "Timecycle.h" #include "ParticleObject.h" #include "Floater.h" +#include "Range2D.h" #define CAN_SEE_ENTITY_ANGLE_THRESHOLD DEGTORAD(60.0f) @@ -14927,17 +14928,9 @@ CPed::WanderRange(void) bool arrived = Seek(); if (arrived) { Idle(); - if (((m_randomSeed % 256) + 3 * CTimer::GetFrameCounter()) % 1000 > 997) { - - int xDiff = Abs(m_wanderRangeBounds[1].x - m_wanderRangeBounds[0].x); - int yDiff = Abs(m_wanderRangeBounds[1].y - m_wanderRangeBounds[0].y); - - CVector newCoords( - (CGeneral::GetRandomNumber() % xDiff) + m_wanderRangeBounds[0].x, - (CGeneral::GetRandomNumber() % yDiff) + m_wanderRangeBounds[0].y, - GetPosition().z); - - SetSeek(newCoords, 2.5f); + if ((m_randomSeed + 3 * CTimer::GetFrameCounter()) % 1000 > 997) { + CVector2D newCoords2D = m_wanderRangeBounds->GetRandomPointInRange(); + SetSeek(CVector(newCoords2D.x, newCoords2D.y, GetPosition().z), 2.5f); } } } diff --git a/src/peds/Ped.h b/src/peds/Ped.h index 56e527c5..31a75ace 100644 --- a/src/peds/Ped.h +++ b/src/peds/Ped.h @@ -468,7 +468,7 @@ public: CEntity *m_pCollidingEntity; uint8 m_stateUnused; uint32 m_timerUnused; - CVector2D *m_wanderRangeBounds; // array with 2 CVector2D (actually unused CRange2D class) - unused + class CRange2D *m_wanderRangeBounds; CWeapon m_weapons[WEAPONTYPE_TOTAL_INVENTORY_WEAPONS]; eWeaponType m_storedWeapon; uint8 m_currentWeapon; // eWeaponType