From a951996943382bc0952f19409bb5fa738f3cd58f Mon Sep 17 00:00:00 2001 From: Nikolay Korolev Date: Sat, 20 Jul 2019 18:00:57 +0300 Subject: [PATCH] added CPool --- .gitignore | 1 + src/audio/AudioManager.cpp | 6 ++++++ src/audio/AudioManager.h | 5 +++++ src/core/Pools.cpp | 2 ++ src/core/Pools.h | 5 ++++- 5 files changed, 18 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 61ed7035..d223f605 100644 --- a/.gitignore +++ b/.gitignore @@ -348,3 +348,4 @@ healthchecksdb # Backup folder for Package Reference Convert tool in Visual Studio 2017 MigrationBackup/ +/src/skel/win diff --git a/src/audio/AudioManager.cpp b/src/audio/AudioManager.cpp index 07469b87..368c08e8 100644 --- a/src/audio/AudioManager.cpp +++ b/src/audio/AudioManager.cpp @@ -13,6 +13,7 @@ #include "Physical.h" #include "Plane.h" #include "PlayerPed.h" +#include "Pools.h" #include "SampleManager.h" #include "Stats.h" #include "Vehicle.h" @@ -94,6 +95,11 @@ enum eVehicleModel { CAR159, }; +void *cAudioScriptObject::operator new(size_t sz) { return CPools::GetAudioScriptObjectPool()->New(); } +void *cAudioScriptObject::operator new(size_t sz, int handle) { return CPools::GetAudioScriptObjectPool()->New(handle); } +void cAudioScriptObject::operator delete(void *p, size_t sz) { CPools::GetAudioScriptObjectPool()->Delete((cAudioScriptObject*)p); } +void cAudioScriptObject::operator delete(void *p, int handle) { CPools::GetAudioScriptObjectPool()->Delete((cAudioScriptObject*)p); } + cAudioManager &AudioManager = *(cAudioManager *)0x880FC0; constexpr int totalAudioEntitiesSlots = 200; diff --git a/src/audio/AudioManager.h b/src/audio/AudioManager.h index 8e8a1d1d..1ae50b2f 100644 --- a/src/audio/AudioManager.h +++ b/src/audio/AudioManager.h @@ -178,6 +178,11 @@ struct cAudioScriptObject { char gap_2[2]; CVector m_vecPos; int m_nAudioEntityId; + + static void *operator new(size_t); + static void *operator new(size_t, int); + static void operator delete(void*, size_t); + static void operator delete(void*, int); }; static_assert(sizeof(cAudioScriptObject) == 0x14, "cAudioScriptObject: error"); diff --git a/src/core/Pools.cpp b/src/core/Pools.cpp index 1f07cf54..404cd558 100644 --- a/src/core/Pools.cpp +++ b/src/core/Pools.cpp @@ -9,6 +9,7 @@ CBuildingPool *&CPools::ms_pBuildingPool = *(CBuildingPool**)0x8F2C04; CTreadablePool *&CPools::ms_pTreadablePool = *(CTreadablePool**)0x8F2568; CObjectPool *&CPools::ms_pObjectPool = *(CObjectPool**)0x880E28; CDummyPool *&CPools::ms_pDummyPool = *(CDummyPool**)0x8F2C18; +CAudioScriptObjectPool *&CPools::ms_pAudioScriptObjectPool = *(CAudioScriptObjectPool**)0x8F1B6C; void CPools::Initialise(void) @@ -23,6 +24,7 @@ CPools::Initialise(void) ms_pTreadablePool = new CTreadablePool(NUMTREADABLES); ms_pObjectPool = new CObjectPool(NUMOBJECTS); ms_pDummyPool = new CDummyPool(NUMDUMMIES); + ms_pAudioScriptObjectPool = new CAudioScriptObjectPool(NUMAUDIOSCRIPTOBJECTS); } int32 CPools::GetPedRef(CPed *ped) { return ms_pPedPool->GetIndex(ped); } diff --git a/src/core/Pools.h b/src/core/Pools.h index e364798c..bdf668c2 100644 --- a/src/core/Pools.h +++ b/src/core/Pools.h @@ -8,6 +8,7 @@ #include "PlayerPed.h" #include "Automobile.h" #include "DummyPed.h" +#include "AudioManager.h" typedef CPool CCPtrNodePool; typedef CPool CEntryInfoNodePool; @@ -17,6 +18,7 @@ typedef CPool CBuildingPool; typedef CPool CTreadablePool; typedef CPool CObjectPool; typedef CPool CDummyPool; +typedef CPool CAudioScriptObjectPool; class CPools { @@ -28,7 +30,7 @@ class CPools static CTreadablePool *&ms_pTreadablePool; static CObjectPool *&ms_pObjectPool; static CDummyPool *&ms_pDummyPool; - // ms_pAudioScriptObjectPool + static CAudioScriptObjectPool *&ms_pAudioScriptObjectPool; public: static CCPtrNodePool *GetPtrNodePool(void) { return ms_pPtrNodePool; } static CEntryInfoNodePool *GetEntryInfoNodePool(void) { return ms_pEntryInfoNodePool; } @@ -38,6 +40,7 @@ public: static CTreadablePool *GetTreadablePool(void) { return ms_pTreadablePool; } static CObjectPool *GetObjectPool(void) { return ms_pObjectPool; } static CDummyPool *GetDummyPool(void) { return ms_pDummyPool; } + static CAudioScriptObjectPool *GetAudioScriptObjectPool(void) { return ms_pAudioScriptObjectPool; } static void Initialise(void); static int32 GetPedRef(CPed *ped);