From fc2c5a154412fd13499f2f2e4ff76c843f3c64e2 Mon Sep 17 00:00:00 2001 From: Kamil Marciniak Date: Wed, 16 Jan 2019 01:47:22 +0100 Subject: [PATCH 01/29] Basic implementation of required classes --- Client/game_sa/CGameSA.cpp | 15 ++ Client/game_sa/CGameSA.h | 8 +- Client/game_sa/CObjectDynamicInfoSA.cpp | 228 ++++++++++++++++++++++++ Client/game_sa/CObjectDynamicInfoSA.h | 94 ++++++++++ Client/sdk/game/CGame.h | 6 +- Client/sdk/game/CObjectDynamicInfo.h | 55 ++++++ 6 files changed, 402 insertions(+), 4 deletions(-) create mode 100644 Client/game_sa/CObjectDynamicInfoSA.cpp create mode 100644 Client/game_sa/CObjectDynamicInfoSA.h create mode 100644 Client/sdk/game/CObjectDynamicInfo.h diff --git a/Client/game_sa/CGameSA.cpp b/Client/game_sa/CGameSA.cpp index 5b8c4e833fd..4eb58c6740b 100644 --- a/Client/game_sa/CGameSA.cpp +++ b/Client/game_sa/CGameSA.cpp @@ -65,6 +65,12 @@ CGameSA::CGameSA() ModelInfo[i].SetModelID(i); } + // Prepare all object dynamic infos for CObjectDynamicInfoSA instances + for (unsigned char i = 0; i < OBJECTDYNAMICINFO_MAX; i++) + { + ObjectDynamicInfo[i].SetObjectGroup(i); + } + DEBUG_TRACE("CGameSA::CGameSA()"); this->m_pAudioEngine = new CAudioEngineSA((CAudioEngineSAInterface*)CLASS_CAudioEngine); this->m_pAEAudioHardware = new CAEAudioHardwareSA((CAEAudioHardwareSAInterface*)CLASS_CAEAudioHardware); @@ -314,6 +320,15 @@ CModelInfo* CGameSA::GetModelInfo(DWORD dwModelID) } } +CObjectDynamicInfo* CGameSA::GetObjectDynamicInfo(unsigned char ucObjectGroup) +{ + DEBUG_TRACE("CObjectDynamicInfo * CGameSA::GetObjectDynamicInfo(unsigned char ucObjectGroup)"); + if (ucObjectGroup < OBJECTDYNAMICINFO_MAX && ObjectDynamicInfo[ucObjectGroup].IsValid()) + return &ObjectDynamicInfo[ucObjectGroup]; + + return nullptr; +} + /** * Starts the game * \todo make addresses into constants diff --git a/Client/game_sa/CGameSA.h b/Client/game_sa/CGameSA.h index 06e1ce65d86..dd7fac3b2f4 100644 --- a/Client/game_sa/CGameSA.h +++ b/Client/game_sa/CGameSA.h @@ -33,6 +33,7 @@ #define NUM_WeaponInfosTotal (NUM_WeaponInfosStdSkill + (3*NUM_WeaponInfosOtherSkill)) // std, (poor, pro, special) #define MODELINFO_MAX 26000 // Actual max is 25755 +#define OBJECTDYNAMICINFO_MAX 256 #define FUNC_GetLevelFromPosition 0x4DD300 @@ -103,6 +104,7 @@ class CGameSA : public CGame private: CWeaponInfo* WeaponInfos[NUM_WeaponInfosTotal]; CModelInfoSA ModelInfo[MODELINFO_MAX]; + CObjectDynamicInfoSA ObjectDynamicInfo[OBJECTDYNAMICINFO_MAX]; public: ZERO_ON_NEW @@ -305,8 +307,9 @@ class CGameSA : public CGame CRenderWareSA* GetRenderWareSA() { return m_pRenderWare; } CFxManagerSA* GetFxManagerSA() { return m_pFxManager; } - CWeaponInfo* GetWeaponInfo(eWeaponType weapon, eWeaponSkill skill = WEAPONSKILL_STD); - CModelInfo* GetModelInfo(DWORD dwModelID); + CWeaponInfo* GetWeaponInfo(eWeaponType weapon, eWeaponSkill skill = WEAPONSKILL_STD); + CModelInfo* GetModelInfo(DWORD dwModelID); + CObjectDynamicInfo* GetObjectDynamicInfo(unsigned char ucObjectGroup); DWORD GetSystemTime() { @@ -446,6 +449,7 @@ class CGameSA : public CGame CWorld* m_pWorld; CCamera* m_pCamera; CModelInfo* m_pModelInfo; + CObjectDynamicInfo* m_pObjectDynamicInfo; CPickups* m_pPickups; CWeaponInfo* m_pWeaponInfo; CExplosionManager* m_pExplosionManager; diff --git a/Client/game_sa/CObjectDynamicInfoSA.cpp b/Client/game_sa/CObjectDynamicInfoSA.cpp new file mode 100644 index 00000000000..eabe512775f --- /dev/null +++ b/Client/game_sa/CObjectDynamicInfoSA.cpp @@ -0,0 +1,228 @@ +/***************************************************************************** + * + * PROJECT: Multi Theft Auto v1.0 + * LICENSE: See LICENSE in the top level directory + * FILE: game_sa/CObjectDynamicInfoSA.cpp + * PURPOSE: Objects dynamic physical properties handler class + * + * Multi Theft Auto is available from http://www.multitheftauto.com/ + * + *****************************************************************************/ + +#include "StdInc.h" +#include "CObjectDynamicInfoSA.h" + +CObjectDynamicInfoSAInterface* pObjectInfo = (CObjectDynamicInfoSAInterface*)ARRAY_ObjectGroupsDynamicInfo; + +CObjectDynamicInfoSA::CObjectDynamicInfoSA() +{ + m_pInterface = nullptr; + m_pOriginalCopy = nullptr; +} + +CObjectDynamicInfoSA::CObjectDynamicInfoSA(unsigned char ucObjectGroup) : m_ucObjectGroup(ucObjectGroup) +{ + m_pInterface = &pObjectInfo[ucObjectGroup]; + // Make copy of original + m_pOriginalCopy = new CObjectDynamicInfoSAInterface; + memcpy(m_pOriginalCopy, m_pInterface, sizeof(CObjectDynamicInfoSAInterface)); +} + +CObjectDynamicInfoSA::~CObjectDynamicInfoSA() +{ + if (m_pOriginalCopy != nullptr) + { + delete m_pOriginalCopy; + m_pOriginalCopy = nullptr; + } +} + +CObjectDynamicInfoSAInterface* CObjectDynamicInfoSA::GetInterface() +{ + return m_pInterface; +} + +void CObjectDynamicInfoSA::SetObjectGroup(unsigned char ucObjectGroup) +{ + if (m_pOriginalCopy) + RestoreDefaultValues(); + + m_pInterface = &pObjectInfo[ucObjectGroup]; + // Make copy of original + memcpy(m_pOriginalCopy, m_pInterface, sizeof(CObjectDynamicInfoSAInterface)); +} + +unsigned char CObjectDynamicInfoSA::GetObjectGroup() +{ + return m_ucObjectGroup; +} + +bool CObjectDynamicInfoSA::IsValid() +{ + return m_pInterface && m_pOriginalCopy; +} + +void CObjectDynamicInfoSA::SetMass(float fMass) +{ + m_pInterface->fMass = fMass; +} + +float CObjectDynamicInfoSA::GetMass() +{ + return m_pInterface->fMass; +} + +void CObjectDynamicInfoSA::SetTurnMass(float fTurnMass) +{ + m_pInterface->fTurnMass = fTurnMass; +} + +float CObjectDynamicInfoSA::GetTurnMass() +{ + return m_pInterface->fTurnMass; +} + +void CObjectDynamicInfoSA::SetAirResistance(float fAirResistance) +{ + m_pInterface->fAirResistance = fAirResistance; +} + +float CObjectDynamicInfoSA::GetAirResistance() +{ + return m_pInterface->fAirResistance; +} + +void CObjectDynamicInfoSA::SetElasticity(float fElasticity) +{ + m_pInterface->fElasticity = fElasticity; +} + +float CObjectDynamicInfoSA::GetElasticity() +{ + return m_pInterface->fElasticity; +} + +void CObjectDynamicInfoSA::SetUprootLimit(float fUprootLimit) +{ + m_pInterface->fUprootLimit = fUprootLimit; +} + +float CObjectDynamicInfoSA::GetUprootLimit() +{ + return m_pInterface->fUprootLimit; +} + +void CObjectDynamicInfoSA::SetColissionDamageMultiplier(float fColMult) +{ + m_pInterface->fColDamageMultiplier = fColMult; +} + +float CObjectDynamicInfoSA::GetColissionDamageMultiplier() +{ + return m_pInterface->fColDamageMultiplier; +} + +void CObjectDynamicInfoSA::SetColissionDamageEffect(unsigned char ucDamageEffect) +{ + m_pInterface->ucColDamageEffect = ucDamageEffect; +} + +unsigned char CObjectDynamicInfoSA::GetCollisionDamageEffect() +{ + return m_pInterface->ucColDamageEffect; +} + +void CObjectDynamicInfoSA::SetCollisionSpecialResponseCase(unsigned char ucResponseCase) +{ + m_pInterface->ucSpecialColResponse = ucResponseCase; +} + +unsigned char CObjectDynamicInfoSA::GetCollisionSpecialResponseCase() +{ + return m_pInterface->ucSpecialColResponse; +} + +void CObjectDynamicInfoSA::SetCameraAvoidObject(bool bAvoid) +{ + m_pInterface->bCameraAvoidObject = bAvoid; +} + +bool CObjectDynamicInfoSA::GetCameraAvoidObject() +{ + return m_pInterface->bCameraAvoidObject; +} + +void CObjectDynamicInfoSA::SetCausesExplosion(bool bExplodes) +{ + m_pInterface->bCausesExplosion = bExplodes; +} + +bool CObjectDynamicInfoSA::GetCausesExplosion() +{ + return m_pInterface->bCausesExplosion; +} + +void CObjectDynamicInfoSA::SetFxOffset(CVector vecOffset) +{ + m_pInterface->vecFxOffset = vecOffset; +} + +CVector CObjectDynamicInfoSA::GetFxOffset() +{ + return m_pInterface->vecFxOffset; +} + +void CObjectDynamicInfoSA::SetSmashMultiplier(float fMult) +{ + m_pInterface->fSmashMultiplier = fMult; +} + +float CObjectDynamicInfoSA::GetSmashMultiplier() +{ + return m_pInterface->fSmashMultiplier; +} + +void CObjectDynamicInfoSA::SetBreakVelocity(CVector vecVelocity) +{ + m_pInterface->vecBreakVelocity = vecVelocity; +} + +CVector CObjectDynamicInfoSA::GetBreakVelocity() +{ + return m_pInterface->vecBreakVelocity; +} + +void CObjectDynamicInfoSA::SetBreakVelocityRandomness(float fRand) +{ + m_pInterface->fBreakVelocityRand = fRand; +} + +float CObjectDynamicInfoSA::GetBreakVelocityRandomness() +{ + return m_pInterface->fBreakVelocityRand; +} + +void CObjectDynamicInfoSA::SetGunBreakMode(DWORD dwBreakMode){ + m_pInterface->dwGunBreakMode = dwBreakMode; +} + +DWORD CObjectDynamicInfoSA::GetGunBreakMode() +{ + return m_pInterface->dwGunBreakMode; +} + +void CObjectDynamicInfoSA::SetSparksOnImpact(DWORD dwSparks) +{ + m_pInterface->dwSparksOnImpact = dwSparks; +} + +DWORD CObjectDynamicInfoSA::GetSparksOnImpact() +{ + return m_pInterface->dwSparksOnImpact; +} + +void CObjectDynamicInfoSA::RestoreDefaultValues() +{ + assert(m_pOriginalCopy && m_pInterface); + memcpy(m_pInterface, m_pOriginalCopy, sizeof(CObjectDynamicInfoSAInterface)); +} diff --git a/Client/game_sa/CObjectDynamicInfoSA.h b/Client/game_sa/CObjectDynamicInfoSA.h new file mode 100644 index 00000000000..9d1877c28a0 --- /dev/null +++ b/Client/game_sa/CObjectDynamicInfoSA.h @@ -0,0 +1,94 @@ +/***************************************************************************** + * + * PROJECT: Multi Theft Auto v1.0 + * LICENSE: See LICENSE in the top level directory + * FILE: game_sa/CObjectDynamicInfoSA.h + * PURPOSE: Header file for objects dynamic physical properties handler class + * + * Multi Theft Auto is available from http://www.multitheftauto.com/ + * + *****************************************************************************/ + +#pragma once + +#include +#include "Common.h" + +#define ARRAY_ObjectGroupsDynamicInfo 0xBB4A90 + +class CObjectDynamicInfoSAInterface +{ +public: + float fMass; + float fTurnMass; + float fAirResistance; + float fElasticity; + float fBuoyancy; + float fUprootLimit; + float fColDamageMultiplier; + unsigned char ucColDamageEffect; + unsigned char ucSpecialColResponse; + bool bCameraAvoidObject; + bool bCausesExplosion; + unsigned char ucFxType; + unsigned char pad[3]; + CVector vecFxOffset; + DWORD pad2; + float fSmashMultiplier; + CVector vecBreakVelocity; + float fBreakVelocityRand; + DWORD dwGunBreakMode; + DWORD dwSparksOnImpact; +}; + +class CObjectDynamicInfoSA : public CObjectDynamicInfo +{ +protected: + CObjectDynamicInfoSAInterface* m_pInterface; + CObjectDynamicInfoSAInterface* m_pOriginalCopy; + unsigned char m_ucObjectGroup; + +public: + CObjectDynamicInfoSA(); + CObjectDynamicInfoSA(unsigned char ucObjectGroup); + ~CObjectDynamicInfoSA(); + + CObjectDynamicInfoSAInterface* GetInterface(); + void SetObjectGroup(unsigned char ucObjectGroup); + unsigned char GetObjectGroup(); + bool IsValid(); + + void SetMass(float fMass); + float GetMass(); + void SetTurnMass(float fTurnMass); + float GetTurnMass(); + void SetAirResistance(float fAirResistance); + float GetAirResistance(); + void SetElasticity(float fElasticity); + float GetElasticity(); + void SetUprootLimit(float fUprootLimit); + float GetUprootLimit(); + void SetColissionDamageMultiplier(float fColMult); + float GetColissionDamageMultiplier(); + void SetColissionDamageEffect(unsigned char ucDamageEffect); + unsigned char GetCollisionDamageEffect(); + void SetCollisionSpecialResponseCase(unsigned char ucResponseCase); + unsigned char GetCollisionSpecialResponseCase(); + void SetCameraAvoidObject(bool bAvoid); + bool GetCameraAvoidObject(); + void SetCausesExplosion(bool bExplodes); + bool GetCausesExplosion(); + void SetFxOffset(CVector vecOffset); + CVector GetFxOffset(); + void SetSmashMultiplier(float fMult); + float GetSmashMultiplier(); + void SetBreakVelocity(CVector vecVelocity); + CVector GetBreakVelocity(); + void SetBreakVelocityRandomness(float fRand); + float GetBreakVelocityRandomness(); + void SetGunBreakMode(DWORD dwBreakMode); + DWORD GetGunBreakMode(); + void SetSparksOnImpact(DWORD dwSparks); + DWORD GetSparksOnImpact(); + void RestoreDefaultValues(); +}; diff --git a/Client/sdk/game/CGame.h b/Client/sdk/game/CGame.h index 554f183d48a..784b4a2b06b 100644 --- a/Client/sdk/game/CGame.h +++ b/Client/sdk/game/CGame.h @@ -50,6 +50,7 @@ typedef void(InRenderer)(); #include "CKeyGen.h" #include "CMenuManager.h" #include "CModelInfo.h" +#include "CObjectDynamicInfo.h" #include "CPad.h" #include "CPathFind.h" #include "CPedDamageResponse.h" @@ -167,8 +168,9 @@ class __declspec(novtable) CGame virtual CWeaponStatManager* GetWeaponStatManager() = 0; virtual CPointLights* GetPointLights() = 0; - virtual CWeaponInfo* GetWeaponInfo(eWeaponType weapon, eWeaponSkill skill = WEAPONSKILL_STD) = 0; - virtual CModelInfo* GetModelInfo(DWORD dwModelID) = 0; + virtual CWeaponInfo* GetWeaponInfo(eWeaponType weapon, eWeaponSkill skill = WEAPONSKILL_STD) = 0; + virtual CModelInfo* GetModelInfo(DWORD dwModelID) = 0; + virtual CObjectDynamicInfo* GetObjectDynamicInfo(unsigned char ucObjectGroup) = 0; virtual DWORD GetSystemTime() = 0; virtual BOOL IsAtMenu() = 0; diff --git a/Client/sdk/game/CObjectDynamicInfo.h b/Client/sdk/game/CObjectDynamicInfo.h new file mode 100644 index 00000000000..b9ed06b865f --- /dev/null +++ b/Client/sdk/game/CObjectDynamicInfo.h @@ -0,0 +1,55 @@ +/***************************************************************************** + * + * PROJECT: Multi Theft Auto v1.0 + * LICENSE: See LICENSE in the top level directory + * FILE: sdk/game/CObjectDynamicInfoSA.cpp + * PURPOSE: Objects dynamic physical properties handler interface + * + * Multi Theft Auto is available from http://www.multitheftauto.com/ + * + *****************************************************************************/ + +#include "Common.h" +#include + +class CObjectDynamicInfo +{ +public: + virtual class CObjectDynamicInfoSAInterface* GetInterface() = 0; + virtual unsigned char GetObjectGroup() = 0; + + virtual void SetMass(float fMass) = 0; + virtual float GetMass() = 0; + virtual void SetTurnMass(float fTurnMass) = 0; + virtual float GetTurnMass() = 0; + virtual void SetAirResistance(float fAirResistance) = 0; + virtual float GetAirResistance() = 0; + virtual void SetElasticity(float fElasticity) = 0; + virtual float GetElasticity() = 0; + virtual void SetUprootLimit(float fUprootLimit) = 0; + virtual float GetUprootLimit() = 0; + virtual void SetColissionDamageMultiplier(float fColMult) = 0; + virtual float GetColissionDamageMultiplier() = 0; + virtual void SetColissionDamageEffect(unsigned char ucDamageEffect) = 0; + virtual unsigned char GetCollisionDamageEffect() = 0; + virtual void SetCollisionSpecialResponseCase(unsigned char ucResponseCase) = 0; + virtual unsigned char GetCollisionSpecialResponseCase() = 0; + virtual void SetCameraAvoidObject(bool bAvoid) = 0; + virtual bool GetCameraAvoidObject() = 0; + virtual void SetCausesExplosion(bool bExplodes) = 0; + virtual bool GetCausesExplosion() = 0; + virtual void SetFxOffset(CVector vecOffset) = 0; + virtual CVector GetFxOffset() = 0; + virtual void SetSmashMultiplier(float fMult) = 0; + virtual float GetSmashMultiplier() = 0; + virtual void SetBreakVelocity(CVector vecVelocity) = 0; + virtual CVector GetBreakVelocity() = 0; + virtual void SetBreakVelocityRandomness(float fRand) = 0; + virtual float GetBreakVelocityRandomness() = 0; + virtual void SetGunBreakMode(DWORD dwBreakMode) = 0; + virtual DWORD GetGunBreakMode() = 0; + virtual void SetSparksOnImpact(DWORD dwSparks) = 0; + virtual DWORD GetSparksOnImpact() = 0; + + virtual void RestoreDefaultValues() = 0; +}; From 4cfec481b8e499ca8c6c006272215525d93374bc Mon Sep 17 00:00:00 2001 From: Kamil Marciniak Date: Wed, 16 Jan 2019 01:49:57 +0100 Subject: [PATCH 02/29] Possibility to get object properties group from CModelInfo --- Client/game_sa/CModelInfoSA.cpp | 5 +++++ Client/game_sa/CModelInfoSA.h | 2 ++ Client/sdk/game/CModelInfo.h | 2 ++ 3 files changed, 9 insertions(+) diff --git a/Client/game_sa/CModelInfoSA.cpp b/Client/game_sa/CModelInfoSA.cpp index d821a9b49af..82d23ad3859 100644 --- a/Client/game_sa/CModelInfoSA.cpp +++ b/Client/game_sa/CModelInfoSA.cpp @@ -1367,6 +1367,11 @@ void CModelInfoSA::ResetSupportedUpgrades() m_ModelSupportedUpgrades.Reset(); } +unsigned char CModelInfoSA::GetObjectPropertiesGroup() +{ + return m_pInterface->ucDynamicIndex; +} + eModelInfoType CModelInfoSA::GetModelType() { return ((eModelInfoType(*)())m_pInterface->VFTBL->GetModelType)(); diff --git a/Client/game_sa/CModelInfoSA.h b/Client/game_sa/CModelInfoSA.h index 41dcd27e855..2eef42b29a7 100644 --- a/Client/game_sa/CModelInfoSA.h +++ b/Client/game_sa/CModelInfoSA.h @@ -375,6 +375,8 @@ class CModelInfoSA : public CModelInfo void InitialiseSupportedUpgrades(RpClump* pClump); void ResetSupportedUpgrades(); + unsigned char GetObjectPropertiesGroup(); + private: void RwSetSupportedUpgrades(RwFrame* parent, DWORD dwModel); }; diff --git a/Client/sdk/game/CModelInfo.h b/Client/sdk/game/CModelInfo.h index afd09775863..c87979bb90a 100644 --- a/Client/sdk/game/CModelInfo.h +++ b/Client/sdk/game/CModelInfo.h @@ -172,4 +172,6 @@ class CModelInfo virtual SVehicleSupportedUpgrades GetVehicleSupportedUpgrades() = 0; virtual void ResetSupportedUpgrades() = 0; + + virtual unsigned char GetObjectPropertiesGroup() = 0; }; From 1f4dd9eb155dca5d48e05d57d66c1bb6419b40c5 Mon Sep 17 00:00:00 2001 From: Kamil Marciniak Date: Wed, 16 Jan 2019 02:14:08 +0100 Subject: [PATCH 03/29] Ability to change model id -> object properties group relations --- Client/game_sa/CGameSA.cpp | 6 +++++ Client/game_sa/CGameSA.h | 1 + Client/game_sa/CModelInfoSA.cpp | 40 +++++++++++++++++++++++++++++++++ Client/game_sa/CModelInfoSA.h | 4 ++++ Client/sdk/game/CModelInfo.h | 2 ++ 5 files changed, 53 insertions(+) diff --git a/Client/game_sa/CGameSA.cpp b/Client/game_sa/CGameSA.cpp index 4eb58c6740b..3a2b0f104f0 100644 --- a/Client/game_sa/CGameSA.cpp +++ b/Client/game_sa/CGameSA.cpp @@ -479,6 +479,12 @@ void CGameSA::Reset() // Restore model dummies' positions CModelInfoSA::ResetAllVehicleDummies(); + CModelInfoSA::RestoreAllObjectsPropertiesGroups(); + // restore default properties of all CObjectDynamicInfoSA instances + for (unsigned char i = 0; i < OBJECTDYNAMICINFO_MAX; i++) + { + ObjectDynamicInfo[i].RestoreDefaultValues(); + } } } diff --git a/Client/game_sa/CGameSA.h b/Client/game_sa/CGameSA.h index dd7fac3b2f4..41bd366860d 100644 --- a/Client/game_sa/CGameSA.h +++ b/Client/game_sa/CGameSA.h @@ -12,6 +12,7 @@ #pragma once #include "CModelInfoSA.h" +#include "CObjectDynamicInfoSA.h" #include "CFxManagerSA.h" #define MAX_MEMORY_OFFSET_1_0 0xCAF008 diff --git a/Client/game_sa/CModelInfoSA.cpp b/Client/game_sa/CModelInfoSA.cpp index 82d23ad3859..c07e29beb68 100644 --- a/Client/game_sa/CModelInfoSA.cpp +++ b/Client/game_sa/CModelInfoSA.cpp @@ -20,6 +20,7 @@ std::map std::map CModelInfoSA::ms_ModelDefaultLodDistanceMap; std::map CModelInfoSA::ms_ModelDefaultAlphaTransparencyMap; std::unordered_map> CModelInfoSA::ms_ModelDefaultDummiesPosition; +std::map CModelInfoSA::ms_OriginalObjectPropertiesGroups; CModelInfoSA::CModelInfoSA() { @@ -1367,11 +1368,50 @@ void CModelInfoSA::ResetSupportedUpgrades() m_ModelSupportedUpgrades.Reset(); } +void CModelInfoSA::SetObjectPropertiesGroup(unsigned char ucNewGroup) +{ + if (!m_pInterface) + return; + + unsigned char ucOrgGroup = GetObjectPropertiesGroup(); + unsigned char* ucGroupInMap = MapFind(ms_OriginalObjectPropertiesGroups, m_dwModelID); + if (ucGroupInMap) + ucOrgGroup = *ucGroupInMap; + + m_pInterface->ucDynamicIndex = ucNewGroup; + MapSet(ms_OriginalObjectPropertiesGroups, m_dwModelID, ucOrgGroup); +} + unsigned char CModelInfoSA::GetObjectPropertiesGroup() { + if (!m_pInterface) + return; + return m_pInterface->ucDynamicIndex; } +void CModelInfoSA::RestoreObjectPropertiesGroup() +{ + if (!m_pInterface) + return; + + unsigned char* ucGroupInMap = MapFind(ms_OriginalObjectPropertiesGroups, m_dwModelID); + if (ucGroupInMap) + { + m_pInterface->ucDynamicIndex = *ucGroupInMap; + MapRemove(ms_OriginalObjectPropertiesGroups, m_dwModelID); + } +} + +void CModelInfoSA::RestoreAllObjectsPropertiesGroups() +{ + for (auto& pair : ms_OriginalObjectPropertiesGroups) + { + pGame->GetModelInfo(pair.first)->GetInterface()->ucDynamicIndex = pair.second; + } + ms_OriginalObjectPropertiesGroups.clear(); +} + eModelInfoType CModelInfoSA::GetModelType() { return ((eModelInfoType(*)())m_pInterface->VFTBL->GetModelType)(); diff --git a/Client/game_sa/CModelInfoSA.h b/Client/game_sa/CModelInfoSA.h index 2eef42b29a7..78355a91636 100644 --- a/Client/game_sa/CModelInfoSA.h +++ b/Client/game_sa/CModelInfoSA.h @@ -277,6 +277,7 @@ class CModelInfoSA : public CModelInfo static std::map ms_ModelDefaultLodDistanceMap; static std::map ms_ModelDefaultAlphaTransparencyMap; static std::unordered_map> ms_ModelDefaultDummiesPosition; + static std::map ms_OriginalObjectPropertiesGroups; bool m_bAddedRefForCollision; SVehicleSupportedUpgrades m_ModelSupportedUpgrades; @@ -375,7 +376,10 @@ class CModelInfoSA : public CModelInfo void InitialiseSupportedUpgrades(RpClump* pClump); void ResetSupportedUpgrades(); + void SetObjectPropertiesGroup(unsigned char ucObjectGroup); unsigned char GetObjectPropertiesGroup(); + void RestoreObjectPropertiesGroup(); + static void RestoreAllObjectsPropertiesGroups(); private: void RwSetSupportedUpgrades(RwFrame* parent, DWORD dwModel); diff --git a/Client/sdk/game/CModelInfo.h b/Client/sdk/game/CModelInfo.h index c87979bb90a..561f52ed742 100644 --- a/Client/sdk/game/CModelInfo.h +++ b/Client/sdk/game/CModelInfo.h @@ -173,5 +173,7 @@ class CModelInfo virtual SVehicleSupportedUpgrades GetVehicleSupportedUpgrades() = 0; virtual void ResetSupportedUpgrades() = 0; + virtual void SetObjectPropertiesGroup(unsigned char ucObjectGroup) = 0; virtual unsigned char GetObjectPropertiesGroup() = 0; + virtual void RestoreObjectPropertiesGroup() = 0; }; From 26091b00ec4a6abf1efba5e85cdc73aca37a85ce Mon Sep 17 00:00:00 2001 From: Kamil Marciniak Date: Wed, 16 Jan 2019 02:24:25 +0100 Subject: [PATCH 04/29] enum definition --- .../logic/lua/CLuaFunctionParseHelpers.cpp | 21 ++++++++++++++++++ .../logic/lua/CLuaFunctionParseHelpers.h | 5 +++++ Client/sdk/game/Common.h | 22 +++++++++++++++++++ 3 files changed, 48 insertions(+) diff --git a/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.cpp b/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.cpp index b344555b27a..89ea958dc4c 100644 --- a/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.cpp +++ b/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.cpp @@ -380,6 +380,27 @@ ADD_ENUM(OBJECT_PROPERTY_CENTEROFMASS, "center_of_mass") ADD_ENUM(OBJECT_PROPERTY_BUOYANCY, "buoyancy") IMPLEMENT_ENUM_END("object-property") +IMPLEMENT_ENUM_BEGIN(eObjectGroupDynamicProperty) +ADD_ENUM(MASS, "mass") +ADD_ENUM(TURNMASS, "turn_mass") +ADD_ENUM(AIRRESISTANCE, "air_resistance") +ADD_ENUM(ELASTICITY, "elasticity") +ADD_ENUM(BUOYANCY, "buoyancy") +ADD_ENUM(UPROOTLIMIT, "uproot_limit") +ADD_ENUM(COLDAMAGEMULTIPLIER, "col_damage_mult") +ADD_ENUM(COLDAMAGEEFFECT, "col_damage_effect") +ADD_ENUM(SPECIALCOLRESPONSE, "special_col_response") +ADD_ENUM(CAMERAAVOID, "avoid_camera") +ADD_ENUM(EXPLOSION, "cause_explosion") +ADD_ENUM(FXTYPE, "fx_type") +ADD_ENUM(FXOFFSET, "fx_offset") +ADD_ENUM(SMASHMULTIPLIER, "smash_multiplier") +ADD_ENUM(BREAKVELOCITY, "break_velocity") +ADD_ENUM(BREAKVELOCITYRAND, "break_velocity_randomness") +ADD_ENUM(GUNBREAKMODE, "gun_break_mode") +ADD_ENUM(SPARKSONIMPACT, "sparks_on_impact") +IMPLEMENT_ENUM_END("objectgroup-dynamic-property") + IMPLEMENT_ENUM_BEGIN(eFontType) ADD_ENUM(FONT_DEFAULT, "default") ADD_ENUM(FONT_DEFAULT_BOLD, "default-bold") diff --git a/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.h b/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.h index dcb5f095972..b6833b9dfa1 100644 --- a/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.h +++ b/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.h @@ -40,6 +40,7 @@ DECLARE_ENUM(eWeaponState); DECLARE_ENUM(eWeaponFlags); DECLARE_ENUM(eVehicleComponent); DECLARE_ENUM(eObjectProperty); +DECLARE_ENUM(eObjectGroupDynamicProperty); DECLARE_ENUM(eFontType); DECLARE_ENUM(eFontQuality); DECLARE_ENUM(eAudioLookupIndex); @@ -383,6 +384,10 @@ inline SString GetClassTypeName(eVehicleDummies*) { return "vehicle-dummy"; } +inline SString GetClassByTypeName(eObjectGroupDynamicProperty*) +{ + return "objectgroup-dynamic-property"; +} // // CResource from userdata diff --git a/Client/sdk/game/Common.h b/Client/sdk/game/Common.h index c5484791026..5083d1228e3 100644 --- a/Client/sdk/game/Common.h +++ b/Client/sdk/game/Common.h @@ -1547,3 +1547,25 @@ enum eObjectProperty OBJECT_PROPERTY_BUOYANCY, OBJECT_PROPERTY_MAX, }; + +enum eObjectGroupDynamicProperty +{ + MASS, + TURNMASS, + AIRRESISTANCE, + ELASTICITY, + BUOYANCY, + UPROOTLIMIT, + COLDAMAGEMULTIPLIER, + COLDAMAGEEFFECT, + SPECIALCOLRESPONSE, + CAMERAAVOID, + EXPLOSION, + FXTYPE, + FXOFFSET, + SMASHMULTIPLIER, + BREAKVELOCITY, + BREAKVELOCITYRAND, + GUNBREAKMODE, + SPARKSONIMPACT +}; From e2f08f9a2f363ebe45dcc5224c01cadd058270c5 Mon Sep 17 00:00:00 2001 From: Kamil Marciniak Date: Wed, 16 Jan 2019 19:18:56 +0100 Subject: [PATCH 05/29] moved function to the end of CGame*, small cleanup --- Client/game_sa/CGameSA.cpp | 18 +++++++++--------- Client/game_sa/CGameSA.h | 4 +++- Client/game_sa/CModelInfoSA.cpp | 2 +- Client/game_sa/CObjectDynamicInfoSA.h | 2 +- Client/sdk/game/CGame.h | 5 +++-- Client/sdk/game/CObjectDynamicInfo.h | 4 ++-- 6 files changed, 19 insertions(+), 16 deletions(-) diff --git a/Client/game_sa/CGameSA.cpp b/Client/game_sa/CGameSA.cpp index 3a2b0f104f0..60498ec5e3a 100644 --- a/Client/game_sa/CGameSA.cpp +++ b/Client/game_sa/CGameSA.cpp @@ -320,15 +320,6 @@ CModelInfo* CGameSA::GetModelInfo(DWORD dwModelID) } } -CObjectDynamicInfo* CGameSA::GetObjectDynamicInfo(unsigned char ucObjectGroup) -{ - DEBUG_TRACE("CObjectDynamicInfo * CGameSA::GetObjectDynamicInfo(unsigned char ucObjectGroup)"); - if (ucObjectGroup < OBJECTDYNAMICINFO_MAX && ObjectDynamicInfo[ucObjectGroup].IsValid()) - return &ObjectDynamicInfo[ucObjectGroup]; - - return nullptr; -} - /** * Starts the game * \todo make addresses into constants @@ -883,3 +874,12 @@ CPed* CGameSA::GetPedContext() m_pPedContext = pGame->GetPools()->GetPedFromRef((DWORD)1); return m_pPedContext; } + +CObjectDynamicInfo* CGameSA::GetObjectDynamicInfo(unsigned char ucObjectGroup) +{ + DEBUG_TRACE("CObjectDynamicInfo * CGameSA::GetObjectDynamicInfo(unsigned char ucObjectGroup)"); + if (ucObjectGroup < OBJECTDYNAMICINFO_MAX && ObjectDynamicInfo[ucObjectGroup].IsValid()) + return &ObjectDynamicInfo[ucObjectGroup]; + + return nullptr; +} diff --git a/Client/game_sa/CGameSA.h b/Client/game_sa/CGameSA.h index 41bd366860d..2d528a29b99 100644 --- a/Client/game_sa/CGameSA.h +++ b/Client/game_sa/CGameSA.h @@ -310,7 +310,6 @@ class CGameSA : public CGame CWeaponInfo* GetWeaponInfo(eWeaponType weapon, eWeaponSkill skill = WEAPONSKILL_STD); CModelInfo* GetModelInfo(DWORD dwModelID); - CObjectDynamicInfo* GetObjectDynamicInfo(unsigned char ucObjectGroup); DWORD GetSystemTime() { @@ -428,10 +427,13 @@ class CGameSA : public CGame void SetPostWeaponFireHandler(PostWeaponFireHandler* pPostWeaponFireHandler) { m_pPostWeaponFireHandler = pPostWeaponFireHandler; } void SetTaskSimpleBeHitHandler(TaskSimpleBeHitHandler* pTaskSimpleBeHitHandler) { m_pTaskSimpleBeHitHandler = pTaskSimpleBeHitHandler; } + CObjectDynamicInfo* GetObjectDynamicInfo(unsigned char ucObjectGroup); + PreWeaponFireHandler* m_pPreWeaponFireHandler; PostWeaponFireHandler* m_pPostWeaponFireHandler; TaskSimpleBeHitHandler* m_pTaskSimpleBeHitHandler; + private: CPools* m_pPools; CPlayerInfo* m_pPlayerInfo; diff --git a/Client/game_sa/CModelInfoSA.cpp b/Client/game_sa/CModelInfoSA.cpp index c07e29beb68..63e68dd841a 100644 --- a/Client/game_sa/CModelInfoSA.cpp +++ b/Client/game_sa/CModelInfoSA.cpp @@ -1385,7 +1385,7 @@ void CModelInfoSA::SetObjectPropertiesGroup(unsigned char ucNewGroup) unsigned char CModelInfoSA::GetObjectPropertiesGroup() { if (!m_pInterface) - return; + return 0; return m_pInterface->ucDynamicIndex; } diff --git a/Client/game_sa/CObjectDynamicInfoSA.h b/Client/game_sa/CObjectDynamicInfoSA.h index 9d1877c28a0..0140daec34e 100644 --- a/Client/game_sa/CObjectDynamicInfoSA.h +++ b/Client/game_sa/CObjectDynamicInfoSA.h @@ -12,7 +12,7 @@ #pragma once #include -#include "Common.h" +#include #define ARRAY_ObjectGroupsDynamicInfo 0xBB4A90 diff --git a/Client/sdk/game/CGame.h b/Client/sdk/game/CGame.h index 784b4a2b06b..e33bad52aa7 100644 --- a/Client/sdk/game/CGame.h +++ b/Client/sdk/game/CGame.h @@ -50,7 +50,6 @@ typedef void(InRenderer)(); #include "CKeyGen.h" #include "CMenuManager.h" #include "CModelInfo.h" -#include "CObjectDynamicInfo.h" #include "CPad.h" #include "CPathFind.h" #include "CPedDamageResponse.h" @@ -80,6 +79,7 @@ typedef void(InRenderer)(); #include "CWeaponInfo.h" #include "CWorld.h" #include "TaskCarAccessories.h" +#include "CObjectDynamicInfo.h" #include @@ -170,7 +170,6 @@ class __declspec(novtable) CGame virtual CWeaponInfo* GetWeaponInfo(eWeaponType weapon, eWeaponSkill skill = WEAPONSKILL_STD) = 0; virtual CModelInfo* GetModelInfo(DWORD dwModelID) = 0; - virtual CObjectDynamicInfo* GetObjectDynamicInfo(unsigned char ucObjectGroup) = 0; virtual DWORD GetSystemTime() = 0; virtual BOOL IsAtMenu() = 0; @@ -249,4 +248,6 @@ class __declspec(novtable) CGame virtual void SetPreWeaponFireHandler(PreWeaponFireHandler* pPreWeaponFireHandler) = 0; virtual void SetPostWeaponFireHandler(PostWeaponFireHandler* pPostWeaponFireHandler) = 0; virtual void SetTaskSimpleBeHitHandler(TaskSimpleBeHitHandler* pTaskSimpleBeHitHandler) = 0; + + virtual CObjectDynamicInfo* GetObjectDynamicInfo(unsigned char ucObjectGroup) = 0; }; diff --git a/Client/sdk/game/CObjectDynamicInfo.h b/Client/sdk/game/CObjectDynamicInfo.h index b9ed06b865f..eeb4ef2598e 100644 --- a/Client/sdk/game/CObjectDynamicInfo.h +++ b/Client/sdk/game/CObjectDynamicInfo.h @@ -2,14 +2,14 @@ * * PROJECT: Multi Theft Auto v1.0 * LICENSE: See LICENSE in the top level directory - * FILE: sdk/game/CObjectDynamicInfoSA.cpp + * FILE: sdk/game/CObjectDynamicInfo.h * PURPOSE: Objects dynamic physical properties handler interface * * Multi Theft Auto is available from http://www.multitheftauto.com/ * *****************************************************************************/ +#pragma once -#include "Common.h" #include class CObjectDynamicInfo From 553724a46e7e7463aaeaf83500b015c3f7ab82f7 Mon Sep 17 00:00:00 2001 From: Kamil Marciniak Date: Thu, 17 Jan 2019 19:13:34 +0100 Subject: [PATCH 06/29] Fixed issues with not starting, a lot of changes - changed the way of how backup ObjectDynamicInfo works - added functions to get/set/restore model dynamic properties group - some other small changes --- Client/game_sa/CGameSA.cpp | 9 +- Client/game_sa/CModelInfoSA.cpp | 23 ++--- Client/game_sa/CModelInfoSA.h | 2 +- Client/game_sa/CObjectDynamicInfoSA.cpp | 77 ++++++++++------ Client/game_sa/CObjectDynamicInfoSA.h | 11 +-- .../logic/luadefs/CLuaEngineDefs.cpp | 88 +++++++++++++++++++ .../deathmatch/logic/luadefs/CLuaEngineDefs.h | 3 + Client/sdk/game/CObjectDynamicInfo.h | 4 +- 8 files changed, 157 insertions(+), 60 deletions(-) diff --git a/Client/game_sa/CGameSA.cpp b/Client/game_sa/CGameSA.cpp index 60498ec5e3a..13b664708b3 100644 --- a/Client/game_sa/CGameSA.cpp +++ b/Client/game_sa/CGameSA.cpp @@ -66,9 +66,9 @@ CGameSA::CGameSA() } // Prepare all object dynamic infos for CObjectDynamicInfoSA instances - for (unsigned char i = 0; i < OBJECTDYNAMICINFO_MAX; i++) + for (int i = 0; i < OBJECTDYNAMICINFO_MAX; i++) { - ObjectDynamicInfo[i].SetObjectGroup(i); + ObjectDynamicInfo[i].SetGroup(i); } DEBUG_TRACE("CGameSA::CGameSA()"); @@ -472,10 +472,7 @@ void CGameSA::Reset() CModelInfoSA::ResetAllVehicleDummies(); CModelInfoSA::RestoreAllObjectsPropertiesGroups(); // restore default properties of all CObjectDynamicInfoSA instances - for (unsigned char i = 0; i < OBJECTDYNAMICINFO_MAX; i++) - { - ObjectDynamicInfo[i].RestoreDefaultValues(); - } + CObjectDynamicInfoSA::RestoreDefaultValues(); } } diff --git a/Client/game_sa/CModelInfoSA.cpp b/Client/game_sa/CModelInfoSA.cpp index 63e68dd841a..56313a528cb 100644 --- a/Client/game_sa/CModelInfoSA.cpp +++ b/Client/game_sa/CModelInfoSA.cpp @@ -20,7 +20,7 @@ std::map std::map CModelInfoSA::ms_ModelDefaultLodDistanceMap; std::map CModelInfoSA::ms_ModelDefaultAlphaTransparencyMap; std::unordered_map> CModelInfoSA::ms_ModelDefaultDummiesPosition; -std::map CModelInfoSA::ms_OriginalObjectPropertiesGroups; +std::unordered_map CModelInfoSA::ms_OriginalObjectPropertiesGroups; CModelInfoSA::CModelInfoSA() { @@ -1370,35 +1370,24 @@ void CModelInfoSA::ResetSupportedUpgrades() void CModelInfoSA::SetObjectPropertiesGroup(unsigned char ucNewGroup) { - if (!m_pInterface) - return; - unsigned char ucOrgGroup = GetObjectPropertiesGroup(); - unsigned char* ucGroupInMap = MapFind(ms_OriginalObjectPropertiesGroups, m_dwModelID); - if (ucGroupInMap) - ucOrgGroup = *ucGroupInMap; + if (!MapFind(ms_OriginalObjectPropertiesGroups, m_dwModelID)) + MapSet(ms_OriginalObjectPropertiesGroups, m_dwModelID, ucOrgGroup); - m_pInterface->ucDynamicIndex = ucNewGroup; - MapSet(ms_OriginalObjectPropertiesGroups, m_dwModelID, ucOrgGroup); + GetInterface()->ucDynamicIndex = ucNewGroup; } unsigned char CModelInfoSA::GetObjectPropertiesGroup() { - if (!m_pInterface) - return 0; - - return m_pInterface->ucDynamicIndex; + return GetInterface()->ucDynamicIndex; } void CModelInfoSA::RestoreObjectPropertiesGroup() { - if (!m_pInterface) - return; - unsigned char* ucGroupInMap = MapFind(ms_OriginalObjectPropertiesGroups, m_dwModelID); if (ucGroupInMap) { - m_pInterface->ucDynamicIndex = *ucGroupInMap; + GetInterface()->ucDynamicIndex = *ucGroupInMap; MapRemove(ms_OriginalObjectPropertiesGroups, m_dwModelID); } } diff --git a/Client/game_sa/CModelInfoSA.h b/Client/game_sa/CModelInfoSA.h index 78355a91636..12d2da403c6 100644 --- a/Client/game_sa/CModelInfoSA.h +++ b/Client/game_sa/CModelInfoSA.h @@ -277,7 +277,7 @@ class CModelInfoSA : public CModelInfo static std::map ms_ModelDefaultLodDistanceMap; static std::map ms_ModelDefaultAlphaTransparencyMap; static std::unordered_map> ms_ModelDefaultDummiesPosition; - static std::map ms_OriginalObjectPropertiesGroups; + static std::unordered_map ms_OriginalObjectPropertiesGroups; bool m_bAddedRefForCollision; SVehicleSupportedUpgrades m_ModelSupportedUpgrades; diff --git a/Client/game_sa/CObjectDynamicInfoSA.cpp b/Client/game_sa/CObjectDynamicInfoSA.cpp index eabe512775f..f3f3d7aa276 100644 --- a/Client/game_sa/CObjectDynamicInfoSA.cpp +++ b/Client/game_sa/CObjectDynamicInfoSA.cpp @@ -13,28 +13,17 @@ #include "CObjectDynamicInfoSA.h" CObjectDynamicInfoSAInterface* pObjectInfo = (CObjectDynamicInfoSAInterface*)ARRAY_ObjectGroupsDynamicInfo; +std::unordered_map CObjectDynamicInfoSA::ms_OriginalGroupProperties; CObjectDynamicInfoSA::CObjectDynamicInfoSA() { m_pInterface = nullptr; - m_pOriginalCopy = nullptr; } CObjectDynamicInfoSA::CObjectDynamicInfoSA(unsigned char ucObjectGroup) : m_ucObjectGroup(ucObjectGroup) { m_pInterface = &pObjectInfo[ucObjectGroup]; - // Make copy of original - m_pOriginalCopy = new CObjectDynamicInfoSAInterface; - memcpy(m_pOriginalCopy, m_pInterface, sizeof(CObjectDynamicInfoSAInterface)); -} - -CObjectDynamicInfoSA::~CObjectDynamicInfoSA() -{ - if (m_pOriginalCopy != nullptr) - { - delete m_pOriginalCopy; - m_pOriginalCopy = nullptr; - } + m_bModified = MapFind(ms_OriginalGroupProperties, ucObjectGroup); } CObjectDynamicInfoSAInterface* CObjectDynamicInfoSA::GetInterface() @@ -42,28 +31,49 @@ CObjectDynamicInfoSAInterface* CObjectDynamicInfoSA::GetInterface() return m_pInterface; } -void CObjectDynamicInfoSA::SetObjectGroup(unsigned char ucObjectGroup) +void CObjectDynamicInfoSA::SetGroup(unsigned char ucObjectGroup) { - if (m_pOriginalCopy) - RestoreDefaultValues(); - m_pInterface = &pObjectInfo[ucObjectGroup]; - // Make copy of original - memcpy(m_pOriginalCopy, m_pInterface, sizeof(CObjectDynamicInfoSAInterface)); + m_ucObjectGroup = ucObjectGroup; + m_bModified = MapFind(ms_OriginalGroupProperties, ucObjectGroup); } -unsigned char CObjectDynamicInfoSA::GetObjectGroup() +unsigned char CObjectDynamicInfoSA::GetGroup() { return m_ucObjectGroup; } bool CObjectDynamicInfoSA::IsValid() { - return m_pInterface && m_pOriginalCopy; + return m_pInterface; +} + +void CObjectDynamicInfoSA::ChangeSafeguard() +{ + if (m_bModified) + return; + + m_bModified = true; + // Make copy of original + if (!MapFind(ms_OriginalGroupProperties, m_ucObjectGroup)) + { + auto pOriginalCopy = new CObjectDynamicInfoSAInterface; + memcpy(pOriginalCopy, m_pInterface, sizeof(CObjectDynamicInfoSAInterface)); + MapSet(ms_OriginalGroupProperties, m_ucObjectGroup, pOriginalCopy); + } +} + +void CObjectDynamicInfoSA::RestoreDefaultValues() +{ + for (auto& entry : ms_OriginalGroupProperties) + { + memcpy(&pObjectInfo[entry.first], entry.second, sizeof(CObjectDynamicInfoSAInterface)); + } } void CObjectDynamicInfoSA::SetMass(float fMass) { + ChangeSafeguard(); m_pInterface->fMass = fMass; } @@ -74,6 +84,7 @@ float CObjectDynamicInfoSA::GetMass() void CObjectDynamicInfoSA::SetTurnMass(float fTurnMass) { + ChangeSafeguard(); m_pInterface->fTurnMass = fTurnMass; } @@ -84,16 +95,19 @@ float CObjectDynamicInfoSA::GetTurnMass() void CObjectDynamicInfoSA::SetAirResistance(float fAirResistance) { + ChangeSafeguard(); m_pInterface->fAirResistance = fAirResistance; } float CObjectDynamicInfoSA::GetAirResistance() { + ChangeSafeguard(); return m_pInterface->fAirResistance; } void CObjectDynamicInfoSA::SetElasticity(float fElasticity) { + ChangeSafeguard(); m_pInterface->fElasticity = fElasticity; } @@ -104,6 +118,7 @@ float CObjectDynamicInfoSA::GetElasticity() void CObjectDynamicInfoSA::SetUprootLimit(float fUprootLimit) { + ChangeSafeguard(); m_pInterface->fUprootLimit = fUprootLimit; } @@ -114,6 +129,7 @@ float CObjectDynamicInfoSA::GetUprootLimit() void CObjectDynamicInfoSA::SetColissionDamageMultiplier(float fColMult) { + ChangeSafeguard(); m_pInterface->fColDamageMultiplier = fColMult; } @@ -124,6 +140,7 @@ float CObjectDynamicInfoSA::GetColissionDamageMultiplier() void CObjectDynamicInfoSA::SetColissionDamageEffect(unsigned char ucDamageEffect) { + ChangeSafeguard(); m_pInterface->ucColDamageEffect = ucDamageEffect; } @@ -134,6 +151,7 @@ unsigned char CObjectDynamicInfoSA::GetCollisionDamageEffect() void CObjectDynamicInfoSA::SetCollisionSpecialResponseCase(unsigned char ucResponseCase) { + ChangeSafeguard(); m_pInterface->ucSpecialColResponse = ucResponseCase; } @@ -144,6 +162,7 @@ unsigned char CObjectDynamicInfoSA::GetCollisionSpecialResponseCase() void CObjectDynamicInfoSA::SetCameraAvoidObject(bool bAvoid) { + ChangeSafeguard(); m_pInterface->bCameraAvoidObject = bAvoid; } @@ -154,6 +173,7 @@ bool CObjectDynamicInfoSA::GetCameraAvoidObject() void CObjectDynamicInfoSA::SetCausesExplosion(bool bExplodes) { + ChangeSafeguard(); m_pInterface->bCausesExplosion = bExplodes; } @@ -164,6 +184,7 @@ bool CObjectDynamicInfoSA::GetCausesExplosion() void CObjectDynamicInfoSA::SetFxOffset(CVector vecOffset) { + ChangeSafeguard(); m_pInterface->vecFxOffset = vecOffset; } @@ -174,6 +195,7 @@ CVector CObjectDynamicInfoSA::GetFxOffset() void CObjectDynamicInfoSA::SetSmashMultiplier(float fMult) { + ChangeSafeguard(); m_pInterface->fSmashMultiplier = fMult; } @@ -184,6 +206,7 @@ float CObjectDynamicInfoSA::GetSmashMultiplier() void CObjectDynamicInfoSA::SetBreakVelocity(CVector vecVelocity) { + ChangeSafeguard(); m_pInterface->vecBreakVelocity = vecVelocity; } @@ -194,6 +217,7 @@ CVector CObjectDynamicInfoSA::GetBreakVelocity() void CObjectDynamicInfoSA::SetBreakVelocityRandomness(float fRand) { + ChangeSafeguard(); m_pInterface->fBreakVelocityRand = fRand; } @@ -202,7 +226,9 @@ float CObjectDynamicInfoSA::GetBreakVelocityRandomness() return m_pInterface->fBreakVelocityRand; } -void CObjectDynamicInfoSA::SetGunBreakMode(DWORD dwBreakMode){ +void CObjectDynamicInfoSA::SetGunBreakMode(DWORD dwBreakMode) +{ + ChangeSafeguard(); m_pInterface->dwGunBreakMode = dwBreakMode; } @@ -213,6 +239,7 @@ DWORD CObjectDynamicInfoSA::GetGunBreakMode() void CObjectDynamicInfoSA::SetSparksOnImpact(DWORD dwSparks) { + ChangeSafeguard(); m_pInterface->dwSparksOnImpact = dwSparks; } @@ -220,9 +247,3 @@ DWORD CObjectDynamicInfoSA::GetSparksOnImpact() { return m_pInterface->dwSparksOnImpact; } - -void CObjectDynamicInfoSA::RestoreDefaultValues() -{ - assert(m_pOriginalCopy && m_pInterface); - memcpy(m_pInterface, m_pOriginalCopy, sizeof(CObjectDynamicInfoSAInterface)); -} diff --git a/Client/game_sa/CObjectDynamicInfoSA.h b/Client/game_sa/CObjectDynamicInfoSA.h index 0140daec34e..974e23e83b0 100644 --- a/Client/game_sa/CObjectDynamicInfoSA.h +++ b/Client/game_sa/CObjectDynamicInfoSA.h @@ -45,18 +45,20 @@ class CObjectDynamicInfoSA : public CObjectDynamicInfo { protected: CObjectDynamicInfoSAInterface* m_pInterface; - CObjectDynamicInfoSAInterface* m_pOriginalCopy; unsigned char m_ucObjectGroup; + bool m_bModified; + static std::unordered_map ms_OriginalGroupProperties; public: CObjectDynamicInfoSA(); CObjectDynamicInfoSA(unsigned char ucObjectGroup); - ~CObjectDynamicInfoSA(); CObjectDynamicInfoSAInterface* GetInterface(); - void SetObjectGroup(unsigned char ucObjectGroup); - unsigned char GetObjectGroup(); + void SetGroup(unsigned char ucObjectGroup); + unsigned char GetGroup(); bool IsValid(); + void ChangeSafeguard(); + static void RestoreDefaultValues(); void SetMass(float fMass); float GetMass(); @@ -90,5 +92,4 @@ class CObjectDynamicInfoSA : public CObjectDynamicInfo DWORD GetGunBreakMode(); void SetSparksOnImpact(DWORD dwSparks); DWORD GetSparksOnImpact(); - void RestoreDefaultValues(); }; diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp b/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp index d14088ee520..79e3113d2d3 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp +++ b/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp @@ -34,6 +34,9 @@ void CLuaEngineDefs::LoadFunctions() {"engineGetModelIDFromName", EngineGetModelIDFromName}, {"engineGetModelTextureNames", EngineGetModelTextureNames}, {"engineGetVisibleTextureNames", EngineGetVisibleTextureNames}, + {"engineGetModelPhysicalPropertiesGroup", EngineGetModelPhysicalPropertiesGroup}, + {"engineSetModelPhysicalPropertiesGroup", EngineSetModelPhysicalPropertiesGroup}, + {"engineRestoreModelPhysicalPropertiesGroup", EngineRestoreModelPhysicalPropertiesGroup} // CLuaCFunctions::AddFunction ( "engineReplaceMatchingAtomics", EngineReplaceMatchingAtomics ); // CLuaCFunctions::AddFunction ( "engineReplaceWheelAtomics", EngineReplaceWheelAtomics ); @@ -64,6 +67,9 @@ void CLuaEngineDefs::AddClass(lua_State* luaVM) lua_classfunction(luaVM, "getModelTextureNames", "engineGetModelTextureNames"); lua_classfunction(luaVM, "getModelIDFromName", "engineGetModelIDFromName"); lua_classfunction(luaVM, "getModelNameFromID", "engineGetModelNameFromID"); + lua_classfunction(luaVM, "getModelPhysicalPropertiesGroup", "engineGetModelPhysicalPropertiesGroup"); + lua_classfunction(luaVM, "setModelPhysicalPropertiesGroup", "engineSetModelPhysicalPropertiesGroup"); + lua_classfunction(luaVM, "restoreModelPhysicalPropertiesGroup", "engineRestoreModelPhysicalPropertiesGroup"); // lua_classvariable ( luaVM, "modelLODDistance", "engineSetModelLODDistance", "engineGetModelLODDistance" ); .modelLODDistance[model] = distance // lua_classvariable ( luaVM, "modelNameFromID", NULL, "engineGetModelNameFromID" ); .modelNameFromID[id] = "name" @@ -913,3 +919,85 @@ int CLuaEngineDefs::EngineGetVisibleTextureNames(lua_State* luaVM) lua_pushboolean(luaVM, false); return 1; } + +int CLuaEngineDefs::EngineGetModelPhysicalPropertiesGroup(lua_State* luaVM) +{ + // int engineGetModelPhysicalPropertiesGroup ( int modelID ) + int iModelID; + + CScriptArgReader argStream(luaVM); + argStream.ReadNumber(iModelID); + + if (!argStream.HasErrors()) + { + auto pModelInfo = g_pGame->GetModelInfo(iModelID); + if (pModelInfo) + { + lua_pushnumber(luaVM, pModelInfo->GetObjectPropertiesGroup()); + return 1; + } + argStream.SetCustomError("Expected valid model ID at argument 1"); + } + if (argStream.HasErrors()) + m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); + + // We failed + lua_pushboolean(luaVM, false); + return 1; +} + +int CLuaEngineDefs::EngineSetModelPhysicalPropertiesGroup(lua_State* luaVM) +{ + // bool engineSetModelPhysicalPropertiesGroup ( int modelID, int newGroup ) + int iModelID; + unsigned char ucNewGroup; + + CScriptArgReader argStream(luaVM); + argStream.ReadNumber(iModelID); + argStream.ReadNumber(ucNewGroup); + + if (!argStream.HasErrors()) + { + auto pModelInfo = g_pGame->GetModelInfo(iModelID); + if (pModelInfo) + { + pModelInfo->SetObjectPropertiesGroup(ucNewGroup); + lua_pushboolean(luaVM, true); + return 1; + } + argStream.SetCustomError("Expected valid model ID at argument 1"); + } + if (argStream.HasErrors()) + m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); + + // We failed + lua_pushboolean(luaVM, false); + return 1; +} + +int CLuaEngineDefs::EngineRestoreModelPhysicalPropertiesGroup(lua_State* luaVM) +{ + // bool engineRestoreModelPhysicalPropertiesGroup ( int modelID ) + int iModelID; + + CScriptArgReader argStream(luaVM); + argStream.ReadNumber(iModelID); + + if (!argStream.HasErrors()) + { + auto pModelInfo = g_pGame->GetModelInfo(iModelID); + if (pModelInfo) + { + pModelInfo->RestoreObjectPropertiesGroup(); + lua_pushboolean(luaVM, true); + return 1; + } + argStream.SetCustomError("Expected valid model ID at argument 1"); + } + if (argStream.HasErrors()) + m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); + + // We failed + lua_pushboolean(luaVM, false); + return 1; +} diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.h b/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.h index 4b0d6eccc80..d9c53585604 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.h +++ b/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.h @@ -44,6 +44,9 @@ class CLuaEngineDefs : public CLuaDefs LUA_DECLARE(EngineGetModelIDFromName); LUA_DECLARE(EngineGetModelTextureNames); LUA_DECLARE(EngineGetVisibleTextureNames); + LUA_DECLARE(EngineGetModelPhysicalPropertiesGroup) + LUA_DECLARE(EngineSetModelPhysicalPropertiesGroup) + LUA_DECLARE(EngineRestoreModelPhysicalPropertiesGroup) private: static void AddEngineColClass(lua_State* luaVM); diff --git a/Client/sdk/game/CObjectDynamicInfo.h b/Client/sdk/game/CObjectDynamicInfo.h index eeb4ef2598e..1c96b84dea0 100644 --- a/Client/sdk/game/CObjectDynamicInfo.h +++ b/Client/sdk/game/CObjectDynamicInfo.h @@ -16,7 +16,7 @@ class CObjectDynamicInfo { public: virtual class CObjectDynamicInfoSAInterface* GetInterface() = 0; - virtual unsigned char GetObjectGroup() = 0; + virtual unsigned char GetGroup() = 0; virtual void SetMass(float fMass) = 0; virtual float GetMass() = 0; @@ -50,6 +50,4 @@ class CObjectDynamicInfo virtual DWORD GetGunBreakMode() = 0; virtual void SetSparksOnImpact(DWORD dwSparks) = 0; virtual DWORD GetSparksOnImpact() = 0; - - virtual void RestoreDefaultValues() = 0; }; From c7340b03fbea0c58b5291995c410952a4664c3c9 Mon Sep 17 00:00:00 2001 From: Kamil Marciniak Date: Thu, 17 Jan 2019 20:24:32 +0100 Subject: [PATCH 07/29] Basic functions, starting renaming --- Client/game_sa/CObjectDynamicInfoSA.cpp | 2 +- Client/game_sa/CObjectDynamicInfoSA.h | 16 +++---- .../logic/CStaticFunctionDefinitions.cpp | 9 ++++ .../logic/CStaticFunctionDefinitions.h | 3 ++ .../logic/luadefs/CLuaEngineDefs.cpp | 42 ++++++++++++++++++- .../deathmatch/logic/luadefs/CLuaEngineDefs.h | 1 + ...nfo.h => CObjectGroupPhysicalProperties.h} | 6 +-- 7 files changed, 66 insertions(+), 13 deletions(-) rename Client/sdk/game/{CObjectDynamicInfo.h => CObjectGroupPhysicalProperties.h} (92%) diff --git a/Client/game_sa/CObjectDynamicInfoSA.cpp b/Client/game_sa/CObjectDynamicInfoSA.cpp index f3f3d7aa276..a400db59165 100644 --- a/Client/game_sa/CObjectDynamicInfoSA.cpp +++ b/Client/game_sa/CObjectDynamicInfoSA.cpp @@ -10,7 +10,7 @@ *****************************************************************************/ #include "StdInc.h" -#include "CObjectDynamicInfoSA.h" +#include "CObjectGroupPhysicalPropertiesSA.h" CObjectDynamicInfoSAInterface* pObjectInfo = (CObjectDynamicInfoSAInterface*)ARRAY_ObjectGroupsDynamicInfo; std::unordered_map CObjectDynamicInfoSA::ms_OriginalGroupProperties; diff --git a/Client/game_sa/CObjectDynamicInfoSA.h b/Client/game_sa/CObjectDynamicInfoSA.h index 974e23e83b0..1963be0b3a1 100644 --- a/Client/game_sa/CObjectDynamicInfoSA.h +++ b/Client/game_sa/CObjectDynamicInfoSA.h @@ -16,7 +16,7 @@ #define ARRAY_ObjectGroupsDynamicInfo 0xBB4A90 -class CObjectDynamicInfoSAInterface +class CObjectGroupPhysicalPropertiesInterface { public: float fMass; @@ -47,18 +47,18 @@ class CObjectDynamicInfoSA : public CObjectDynamicInfo CObjectDynamicInfoSAInterface* m_pInterface; unsigned char m_ucObjectGroup; bool m_bModified; - static std::unordered_map ms_OriginalGroupProperties; + static std::unordered_map ms_OriginalGroupProperties; public: CObjectDynamicInfoSA(); CObjectDynamicInfoSA(unsigned char ucObjectGroup); - CObjectDynamicInfoSAInterface* GetInterface(); - void SetGroup(unsigned char ucObjectGroup); - unsigned char GetGroup(); - bool IsValid(); - void ChangeSafeguard(); - static void RestoreDefaultValues(); + CObjectGroupPhysicalPropertiesInterface* GetInterface(); + void SetGroup(unsigned char ucObjectGroup); + unsigned char GetGroup(); + bool IsValid(); + void ChangeSafeguard(); + static void RestoreDefaultValues(); void SetMass(float fMass); float GetMass(); diff --git a/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp b/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp index 33e65d83b2f..b3ae779d60e 100644 --- a/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp +++ b/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp @@ -9684,3 +9684,12 @@ CClientSearchLight* CStaticFunctionDefinitions::CreateSearchLight(CResource& Res return nullptr; } + +bool CStaticFunctionDefinitions::SetDynamicPropertiesGroupCausesExplosion(CObjectDynamicInfo* pGroup, bool bExplode) +{ + if (!pGroup) + return false; + + pGroup->SetCausesExplosion(bExplode); + return true; +} diff --git a/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.h b/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.h index 1c82baf9d1a..b4d1aa02f77 100644 --- a/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.h +++ b/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.h @@ -794,4 +794,7 @@ class CStaticFunctionDefinitions static const char* GetOperatingSystemName(); static const char* GetVersionBuildTag(); static SString GetVersionSortable(); + + // Model groups physical properties funcs + static bool SetDynamicPropertiesGroupCausesExplosion(CObjectDynamicInfo* pGroup, bool bExplodes); }; diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp b/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp index 79e3113d2d3..78329338b5c 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp +++ b/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp @@ -36,7 +36,8 @@ void CLuaEngineDefs::LoadFunctions() {"engineGetVisibleTextureNames", EngineGetVisibleTextureNames}, {"engineGetModelPhysicalPropertiesGroup", EngineGetModelPhysicalPropertiesGroup}, {"engineSetModelPhysicalPropertiesGroup", EngineSetModelPhysicalPropertiesGroup}, - {"engineRestoreModelPhysicalPropertiesGroup", EngineRestoreModelPhysicalPropertiesGroup} + {"engineRestoreModelPhysicalPropertiesGroup", EngineRestoreModelPhysicalPropertiesGroup}, + {"engineSetModelGroupPhysicalProperty", EngineSetModelGroupPhysicalProperty} // CLuaCFunctions::AddFunction ( "engineReplaceMatchingAtomics", EngineReplaceMatchingAtomics ); // CLuaCFunctions::AddFunction ( "engineReplaceWheelAtomics", EngineReplaceWheelAtomics ); @@ -70,6 +71,7 @@ void CLuaEngineDefs::AddClass(lua_State* luaVM) lua_classfunction(luaVM, "getModelPhysicalPropertiesGroup", "engineGetModelPhysicalPropertiesGroup"); lua_classfunction(luaVM, "setModelPhysicalPropertiesGroup", "engineSetModelPhysicalPropertiesGroup"); lua_classfunction(luaVM, "restoreModelPhysicalPropertiesGroup", "engineRestoreModelPhysicalPropertiesGroup"); + lua_classfunction(luaVM, "setModelGroupPhysicalProperty", "engineSetModelGroupPhysicalProperty"); // lua_classvariable ( luaVM, "modelLODDistance", "engineSetModelLODDistance", "engineGetModelLODDistance" ); .modelLODDistance[model] = distance // lua_classvariable ( luaVM, "modelNameFromID", NULL, "engineGetModelNameFromID" ); .modelNameFromID[id] = "name" @@ -1001,3 +1003,41 @@ int CLuaEngineDefs::EngineRestoreModelPhysicalPropertiesGroup(lua_State* luaVM) lua_pushboolean(luaVM, false); return 1; } + +int CLuaEngineDefs::EngineSetModelGroupPhysicalProperty(lua_State* luaVM) +{ + // bool engineSetModelGroupPhysicalProperty ( int groupID, string property, ...) + unsigned char ucNewGroup; + eObjectGroupDynamicProperty eProperty; + + CScriptArgReader argStream(luaVM); + argStream.ReadNumber(ucNewGroup); + argStream.ReadEnumString(eProperty); + + if (!argStream.HasErrors()) + { + auto pGroup = g_pGame->GetObjectDynamicInfo(ucNewGroup); + switch (eProperty) + { + case EXPLOSION: + { + bool bExplode; + argStream.ReadBool(bExplode); + if (CStaticFunctionDefinitions::SetDynamicPropertiesGroupCausesExplosion(pGroup, bExplode)) + { + lua_pushboolean(luaVM, true); + return 1; + } + break; + } + } + + argStream.SetCustomError("Expected valid group ID at argument 1"); + } + if (argStream.HasErrors()) + m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); + + // We failed + lua_pushboolean(luaVM, false); + return 1; +} diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.h b/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.h index d9c53585604..5f751f3e73e 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.h +++ b/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.h @@ -47,6 +47,7 @@ class CLuaEngineDefs : public CLuaDefs LUA_DECLARE(EngineGetModelPhysicalPropertiesGroup) LUA_DECLARE(EngineSetModelPhysicalPropertiesGroup) LUA_DECLARE(EngineRestoreModelPhysicalPropertiesGroup) + LUA_DECLARE(EngineSetModelGroupPhysicalProperty) private: static void AddEngineColClass(lua_State* luaVM); diff --git a/Client/sdk/game/CObjectDynamicInfo.h b/Client/sdk/game/CObjectGroupPhysicalProperties.h similarity index 92% rename from Client/sdk/game/CObjectDynamicInfo.h rename to Client/sdk/game/CObjectGroupPhysicalProperties.h index 1c96b84dea0..82a3beabc56 100644 --- a/Client/sdk/game/CObjectDynamicInfo.h +++ b/Client/sdk/game/CObjectGroupPhysicalProperties.h @@ -12,11 +12,11 @@ #include -class CObjectDynamicInfo +class CObjectGroupPhysicalProperties { public: - virtual class CObjectDynamicInfoSAInterface* GetInterface() = 0; - virtual unsigned char GetGroup() = 0; + virtual class CObjectGroupPhysicalPropertiesSAInterface* GetInterface() = 0; + virtual unsigned char GetGroup() = 0; virtual void SetMass(float fMass) = 0; virtual float GetMass() = 0; From c616185d55be41943da8866d61991bfc113183dd Mon Sep 17 00:00:00 2001 From: Kamil Marciniak Date: Thu, 17 Jan 2019 20:39:33 +0100 Subject: [PATCH 08/29] The giant renaming --- Client/game_sa/CGameSA.cpp | 10 +- Client/game_sa/CGameSA.h | 8 +- Client/game_sa/CObjectDynamicInfoSA.cpp | 249 ------------------ .../CObjectGroupPhysicalPropertiesSA.cpp | 249 ++++++++++++++++++ ...A.h => CObjectGroupPhysicalPropertiesSA.h} | 22 +- .../logic/CStaticFunctionDefinitions.cpp | 2 +- .../logic/CStaticFunctionDefinitions.h | 2 +- Client/sdk/game/CGame.h | 4 +- .../sdk/game/CObjectGroupPhysicalProperties.h | 2 +- 9 files changed, 274 insertions(+), 274 deletions(-) delete mode 100644 Client/game_sa/CObjectDynamicInfoSA.cpp create mode 100644 Client/game_sa/CObjectGroupPhysicalPropertiesSA.cpp rename Client/game_sa/{CObjectDynamicInfoSA.h => CObjectGroupPhysicalPropertiesSA.h} (80%) diff --git a/Client/game_sa/CGameSA.cpp b/Client/game_sa/CGameSA.cpp index 13b664708b3..5da9d1624ad 100644 --- a/Client/game_sa/CGameSA.cpp +++ b/Client/game_sa/CGameSA.cpp @@ -65,7 +65,7 @@ CGameSA::CGameSA() ModelInfo[i].SetModelID(i); } - // Prepare all object dynamic infos for CObjectDynamicInfoSA instances + // Prepare all object dynamic infos for CObjectGroupPhysicalPropertiesSA instances for (int i = 0; i < OBJECTDYNAMICINFO_MAX; i++) { ObjectDynamicInfo[i].SetGroup(i); @@ -471,8 +471,8 @@ void CGameSA::Reset() // Restore model dummies' positions CModelInfoSA::ResetAllVehicleDummies(); CModelInfoSA::RestoreAllObjectsPropertiesGroups(); - // restore default properties of all CObjectDynamicInfoSA instances - CObjectDynamicInfoSA::RestoreDefaultValues(); + // restore default properties of all CObjectGroupPhysicalPropertiesSA instances + CObjectGroupPhysicalPropertiesSA::RestoreDefaultValues(); } } @@ -872,9 +872,9 @@ CPed* CGameSA::GetPedContext() return m_pPedContext; } -CObjectDynamicInfo* CGameSA::GetObjectDynamicInfo(unsigned char ucObjectGroup) +CObjectGroupPhysicalProperties* CGameSA::GetObjectDynamicInfo(unsigned char ucObjectGroup) { - DEBUG_TRACE("CObjectDynamicInfo * CGameSA::GetObjectDynamicInfo(unsigned char ucObjectGroup)"); + DEBUG_TRACE("CObjectGroupPhysicalProperties * CGameSA::GetObjectDynamicInfo(unsigned char ucObjectGroup)"); if (ucObjectGroup < OBJECTDYNAMICINFO_MAX && ObjectDynamicInfo[ucObjectGroup].IsValid()) return &ObjectDynamicInfo[ucObjectGroup]; diff --git a/Client/game_sa/CGameSA.h b/Client/game_sa/CGameSA.h index 2d528a29b99..e25f47f5661 100644 --- a/Client/game_sa/CGameSA.h +++ b/Client/game_sa/CGameSA.h @@ -12,7 +12,7 @@ #pragma once #include "CModelInfoSA.h" -#include "CObjectDynamicInfoSA.h" +#include "CObjectGroupPhysicalPropertiesSA.h" #include "CFxManagerSA.h" #define MAX_MEMORY_OFFSET_1_0 0xCAF008 @@ -105,7 +105,7 @@ class CGameSA : public CGame private: CWeaponInfo* WeaponInfos[NUM_WeaponInfosTotal]; CModelInfoSA ModelInfo[MODELINFO_MAX]; - CObjectDynamicInfoSA ObjectDynamicInfo[OBJECTDYNAMICINFO_MAX]; + CObjectGroupPhysicalPropertiesSA ObjectDynamicInfo[OBJECTDYNAMICINFO_MAX]; public: ZERO_ON_NEW @@ -427,7 +427,7 @@ class CGameSA : public CGame void SetPostWeaponFireHandler(PostWeaponFireHandler* pPostWeaponFireHandler) { m_pPostWeaponFireHandler = pPostWeaponFireHandler; } void SetTaskSimpleBeHitHandler(TaskSimpleBeHitHandler* pTaskSimpleBeHitHandler) { m_pTaskSimpleBeHitHandler = pTaskSimpleBeHitHandler; } - CObjectDynamicInfo* GetObjectDynamicInfo(unsigned char ucObjectGroup); + CObjectGroupPhysicalProperties* GetObjectDynamicInfo(unsigned char ucObjectGroup); PreWeaponFireHandler* m_pPreWeaponFireHandler; PostWeaponFireHandler* m_pPostWeaponFireHandler; @@ -452,7 +452,7 @@ class CGameSA : public CGame CWorld* m_pWorld; CCamera* m_pCamera; CModelInfo* m_pModelInfo; - CObjectDynamicInfo* m_pObjectDynamicInfo; + CObjectGroupPhysicalProperties* m_pObjectDynamicInfo; CPickups* m_pPickups; CWeaponInfo* m_pWeaponInfo; CExplosionManager* m_pExplosionManager; diff --git a/Client/game_sa/CObjectDynamicInfoSA.cpp b/Client/game_sa/CObjectDynamicInfoSA.cpp deleted file mode 100644 index a400db59165..00000000000 --- a/Client/game_sa/CObjectDynamicInfoSA.cpp +++ /dev/null @@ -1,249 +0,0 @@ -/***************************************************************************** - * - * PROJECT: Multi Theft Auto v1.0 - * LICENSE: See LICENSE in the top level directory - * FILE: game_sa/CObjectDynamicInfoSA.cpp - * PURPOSE: Objects dynamic physical properties handler class - * - * Multi Theft Auto is available from http://www.multitheftauto.com/ - * - *****************************************************************************/ - -#include "StdInc.h" -#include "CObjectGroupPhysicalPropertiesSA.h" - -CObjectDynamicInfoSAInterface* pObjectInfo = (CObjectDynamicInfoSAInterface*)ARRAY_ObjectGroupsDynamicInfo; -std::unordered_map CObjectDynamicInfoSA::ms_OriginalGroupProperties; - -CObjectDynamicInfoSA::CObjectDynamicInfoSA() -{ - m_pInterface = nullptr; -} - -CObjectDynamicInfoSA::CObjectDynamicInfoSA(unsigned char ucObjectGroup) : m_ucObjectGroup(ucObjectGroup) -{ - m_pInterface = &pObjectInfo[ucObjectGroup]; - m_bModified = MapFind(ms_OriginalGroupProperties, ucObjectGroup); -} - -CObjectDynamicInfoSAInterface* CObjectDynamicInfoSA::GetInterface() -{ - return m_pInterface; -} - -void CObjectDynamicInfoSA::SetGroup(unsigned char ucObjectGroup) -{ - m_pInterface = &pObjectInfo[ucObjectGroup]; - m_ucObjectGroup = ucObjectGroup; - m_bModified = MapFind(ms_OriginalGroupProperties, ucObjectGroup); -} - -unsigned char CObjectDynamicInfoSA::GetGroup() -{ - return m_ucObjectGroup; -} - -bool CObjectDynamicInfoSA::IsValid() -{ - return m_pInterface; -} - -void CObjectDynamicInfoSA::ChangeSafeguard() -{ - if (m_bModified) - return; - - m_bModified = true; - // Make copy of original - if (!MapFind(ms_OriginalGroupProperties, m_ucObjectGroup)) - { - auto pOriginalCopy = new CObjectDynamicInfoSAInterface; - memcpy(pOriginalCopy, m_pInterface, sizeof(CObjectDynamicInfoSAInterface)); - MapSet(ms_OriginalGroupProperties, m_ucObjectGroup, pOriginalCopy); - } -} - -void CObjectDynamicInfoSA::RestoreDefaultValues() -{ - for (auto& entry : ms_OriginalGroupProperties) - { - memcpy(&pObjectInfo[entry.first], entry.second, sizeof(CObjectDynamicInfoSAInterface)); - } -} - -void CObjectDynamicInfoSA::SetMass(float fMass) -{ - ChangeSafeguard(); - m_pInterface->fMass = fMass; -} - -float CObjectDynamicInfoSA::GetMass() -{ - return m_pInterface->fMass; -} - -void CObjectDynamicInfoSA::SetTurnMass(float fTurnMass) -{ - ChangeSafeguard(); - m_pInterface->fTurnMass = fTurnMass; -} - -float CObjectDynamicInfoSA::GetTurnMass() -{ - return m_pInterface->fTurnMass; -} - -void CObjectDynamicInfoSA::SetAirResistance(float fAirResistance) -{ - ChangeSafeguard(); - m_pInterface->fAirResistance = fAirResistance; -} - -float CObjectDynamicInfoSA::GetAirResistance() -{ - ChangeSafeguard(); - return m_pInterface->fAirResistance; -} - -void CObjectDynamicInfoSA::SetElasticity(float fElasticity) -{ - ChangeSafeguard(); - m_pInterface->fElasticity = fElasticity; -} - -float CObjectDynamicInfoSA::GetElasticity() -{ - return m_pInterface->fElasticity; -} - -void CObjectDynamicInfoSA::SetUprootLimit(float fUprootLimit) -{ - ChangeSafeguard(); - m_pInterface->fUprootLimit = fUprootLimit; -} - -float CObjectDynamicInfoSA::GetUprootLimit() -{ - return m_pInterface->fUprootLimit; -} - -void CObjectDynamicInfoSA::SetColissionDamageMultiplier(float fColMult) -{ - ChangeSafeguard(); - m_pInterface->fColDamageMultiplier = fColMult; -} - -float CObjectDynamicInfoSA::GetColissionDamageMultiplier() -{ - return m_pInterface->fColDamageMultiplier; -} - -void CObjectDynamicInfoSA::SetColissionDamageEffect(unsigned char ucDamageEffect) -{ - ChangeSafeguard(); - m_pInterface->ucColDamageEffect = ucDamageEffect; -} - -unsigned char CObjectDynamicInfoSA::GetCollisionDamageEffect() -{ - return m_pInterface->ucColDamageEffect; -} - -void CObjectDynamicInfoSA::SetCollisionSpecialResponseCase(unsigned char ucResponseCase) -{ - ChangeSafeguard(); - m_pInterface->ucSpecialColResponse = ucResponseCase; -} - -unsigned char CObjectDynamicInfoSA::GetCollisionSpecialResponseCase() -{ - return m_pInterface->ucSpecialColResponse; -} - -void CObjectDynamicInfoSA::SetCameraAvoidObject(bool bAvoid) -{ - ChangeSafeguard(); - m_pInterface->bCameraAvoidObject = bAvoid; -} - -bool CObjectDynamicInfoSA::GetCameraAvoidObject() -{ - return m_pInterface->bCameraAvoidObject; -} - -void CObjectDynamicInfoSA::SetCausesExplosion(bool bExplodes) -{ - ChangeSafeguard(); - m_pInterface->bCausesExplosion = bExplodes; -} - -bool CObjectDynamicInfoSA::GetCausesExplosion() -{ - return m_pInterface->bCausesExplosion; -} - -void CObjectDynamicInfoSA::SetFxOffset(CVector vecOffset) -{ - ChangeSafeguard(); - m_pInterface->vecFxOffset = vecOffset; -} - -CVector CObjectDynamicInfoSA::GetFxOffset() -{ - return m_pInterface->vecFxOffset; -} - -void CObjectDynamicInfoSA::SetSmashMultiplier(float fMult) -{ - ChangeSafeguard(); - m_pInterface->fSmashMultiplier = fMult; -} - -float CObjectDynamicInfoSA::GetSmashMultiplier() -{ - return m_pInterface->fSmashMultiplier; -} - -void CObjectDynamicInfoSA::SetBreakVelocity(CVector vecVelocity) -{ - ChangeSafeguard(); - m_pInterface->vecBreakVelocity = vecVelocity; -} - -CVector CObjectDynamicInfoSA::GetBreakVelocity() -{ - return m_pInterface->vecBreakVelocity; -} - -void CObjectDynamicInfoSA::SetBreakVelocityRandomness(float fRand) -{ - ChangeSafeguard(); - m_pInterface->fBreakVelocityRand = fRand; -} - -float CObjectDynamicInfoSA::GetBreakVelocityRandomness() -{ - return m_pInterface->fBreakVelocityRand; -} - -void CObjectDynamicInfoSA::SetGunBreakMode(DWORD dwBreakMode) -{ - ChangeSafeguard(); - m_pInterface->dwGunBreakMode = dwBreakMode; -} - -DWORD CObjectDynamicInfoSA::GetGunBreakMode() -{ - return m_pInterface->dwGunBreakMode; -} - -void CObjectDynamicInfoSA::SetSparksOnImpact(DWORD dwSparks) -{ - ChangeSafeguard(); - m_pInterface->dwSparksOnImpact = dwSparks; -} - -DWORD CObjectDynamicInfoSA::GetSparksOnImpact() -{ - return m_pInterface->dwSparksOnImpact; -} diff --git a/Client/game_sa/CObjectGroupPhysicalPropertiesSA.cpp b/Client/game_sa/CObjectGroupPhysicalPropertiesSA.cpp new file mode 100644 index 00000000000..33edfc7a8f5 --- /dev/null +++ b/Client/game_sa/CObjectGroupPhysicalPropertiesSA.cpp @@ -0,0 +1,249 @@ +/***************************************************************************** + * + * PROJECT: Multi Theft Auto v1.0 + * LICENSE: See LICENSE in the top level directory + * FILE: game_sa/CObjectGroupPhysicalPropertiesSA.cpp + * PURPOSE: Objects dynamic physical properties handler class + * + * Multi Theft Auto is available from http://www.multitheftauto.com/ + * + *****************************************************************************/ + +#include "StdInc.h" +#include "CObjectGroupPhysicalPropertiesSA.h" + +CObjectGroupPhysicalPropertiesSAInterface* pObjectInfo = (CObjectGroupPhysicalPropertiesSAInterface*)ARRAY_ObjectGroupsDynamicInfo; +std::unordered_map CObjectGroupPhysicalPropertiesSA::ms_OriginalGroupProperties; + +CObjectGroupPhysicalPropertiesSA::CObjectGroupPhysicalPropertiesSA() +{ + m_pInterface = nullptr; +} + +CObjectGroupPhysicalPropertiesSA::CObjectGroupPhysicalPropertiesSA(unsigned char ucObjectGroup) : m_ucObjectGroup(ucObjectGroup) +{ + m_pInterface = &pObjectInfo[ucObjectGroup]; + m_bModified = MapFind(ms_OriginalGroupProperties, ucObjectGroup); +} + +CObjectGroupPhysicalPropertiesSAInterface* CObjectGroupPhysicalPropertiesSA::GetInterface() +{ + return m_pInterface; +} + +void CObjectGroupPhysicalPropertiesSA::SetGroup(unsigned char ucObjectGroup) +{ + m_pInterface = &pObjectInfo[ucObjectGroup]; + m_ucObjectGroup = ucObjectGroup; + m_bModified = MapFind(ms_OriginalGroupProperties, ucObjectGroup); +} + +unsigned char CObjectGroupPhysicalPropertiesSA::GetGroup() +{ + return m_ucObjectGroup; +} + +bool CObjectGroupPhysicalPropertiesSA::IsValid() +{ + return m_pInterface; +} + +void CObjectGroupPhysicalPropertiesSA::ChangeSafeguard() +{ + if (m_bModified) + return; + + m_bModified = true; + // Make copy of original + if (!MapFind(ms_OriginalGroupProperties, m_ucObjectGroup)) + { + auto pOriginalCopy = new CObjectGroupPhysicalPropertiesSAInterface; + memcpy(pOriginalCopy, m_pInterface, sizeof(CObjectGroupPhysicalPropertiesSAInterface)); + MapSet(ms_OriginalGroupProperties, m_ucObjectGroup, pOriginalCopy); + } +} + +void CObjectGroupPhysicalPropertiesSA::RestoreDefaultValues() +{ + for (auto& entry : ms_OriginalGroupProperties) + { + memcpy(&pObjectInfo[entry.first], entry.second, sizeof(CObjectGroupPhysicalPropertiesSAInterface)); + } +} + +void CObjectGroupPhysicalPropertiesSA::SetMass(float fMass) +{ + ChangeSafeguard(); + m_pInterface->fMass = fMass; +} + +float CObjectGroupPhysicalPropertiesSA::GetMass() +{ + return m_pInterface->fMass; +} + +void CObjectGroupPhysicalPropertiesSA::SetTurnMass(float fTurnMass) +{ + ChangeSafeguard(); + m_pInterface->fTurnMass = fTurnMass; +} + +float CObjectGroupPhysicalPropertiesSA::GetTurnMass() +{ + return m_pInterface->fTurnMass; +} + +void CObjectGroupPhysicalPropertiesSA::SetAirResistance(float fAirResistance) +{ + ChangeSafeguard(); + m_pInterface->fAirResistance = fAirResistance; +} + +float CObjectGroupPhysicalPropertiesSA::GetAirResistance() +{ + ChangeSafeguard(); + return m_pInterface->fAirResistance; +} + +void CObjectGroupPhysicalPropertiesSA::SetElasticity(float fElasticity) +{ + ChangeSafeguard(); + m_pInterface->fElasticity = fElasticity; +} + +float CObjectGroupPhysicalPropertiesSA::GetElasticity() +{ + return m_pInterface->fElasticity; +} + +void CObjectGroupPhysicalPropertiesSA::SetUprootLimit(float fUprootLimit) +{ + ChangeSafeguard(); + m_pInterface->fUprootLimit = fUprootLimit; +} + +float CObjectGroupPhysicalPropertiesSA::GetUprootLimit() +{ + return m_pInterface->fUprootLimit; +} + +void CObjectGroupPhysicalPropertiesSA::SetColissionDamageMultiplier(float fColMult) +{ + ChangeSafeguard(); + m_pInterface->fColDamageMultiplier = fColMult; +} + +float CObjectGroupPhysicalPropertiesSA::GetColissionDamageMultiplier() +{ + return m_pInterface->fColDamageMultiplier; +} + +void CObjectGroupPhysicalPropertiesSA::SetColissionDamageEffect(unsigned char ucDamageEffect) +{ + ChangeSafeguard(); + m_pInterface->ucColDamageEffect = ucDamageEffect; +} + +unsigned char CObjectGroupPhysicalPropertiesSA::GetCollisionDamageEffect() +{ + return m_pInterface->ucColDamageEffect; +} + +void CObjectGroupPhysicalPropertiesSA::SetCollisionSpecialResponseCase(unsigned char ucResponseCase) +{ + ChangeSafeguard(); + m_pInterface->ucSpecialColResponse = ucResponseCase; +} + +unsigned char CObjectGroupPhysicalPropertiesSA::GetCollisionSpecialResponseCase() +{ + return m_pInterface->ucSpecialColResponse; +} + +void CObjectGroupPhysicalPropertiesSA::SetCameraAvoidObject(bool bAvoid) +{ + ChangeSafeguard(); + m_pInterface->bCameraAvoidObject = bAvoid; +} + +bool CObjectGroupPhysicalPropertiesSA::GetCameraAvoidObject() +{ + return m_pInterface->bCameraAvoidObject; +} + +void CObjectGroupPhysicalPropertiesSA::SetCausesExplosion(bool bExplodes) +{ + ChangeSafeguard(); + m_pInterface->bCausesExplosion = bExplodes; +} + +bool CObjectGroupPhysicalPropertiesSA::GetCausesExplosion() +{ + return m_pInterface->bCausesExplosion; +} + +void CObjectGroupPhysicalPropertiesSA::SetFxOffset(CVector vecOffset) +{ + ChangeSafeguard(); + m_pInterface->vecFxOffset = vecOffset; +} + +CVector CObjectGroupPhysicalPropertiesSA::GetFxOffset() +{ + return m_pInterface->vecFxOffset; +} + +void CObjectGroupPhysicalPropertiesSA::SetSmashMultiplier(float fMult) +{ + ChangeSafeguard(); + m_pInterface->fSmashMultiplier = fMult; +} + +float CObjectGroupPhysicalPropertiesSA::GetSmashMultiplier() +{ + return m_pInterface->fSmashMultiplier; +} + +void CObjectGroupPhysicalPropertiesSA::SetBreakVelocity(CVector vecVelocity) +{ + ChangeSafeguard(); + m_pInterface->vecBreakVelocity = vecVelocity; +} + +CVector CObjectGroupPhysicalPropertiesSA::GetBreakVelocity() +{ + return m_pInterface->vecBreakVelocity; +} + +void CObjectGroupPhysicalPropertiesSA::SetBreakVelocityRandomness(float fRand) +{ + ChangeSafeguard(); + m_pInterface->fBreakVelocityRand = fRand; +} + +float CObjectGroupPhysicalPropertiesSA::GetBreakVelocityRandomness() +{ + return m_pInterface->fBreakVelocityRand; +} + +void CObjectGroupPhysicalPropertiesSA::SetGunBreakMode(DWORD dwBreakMode) +{ + ChangeSafeguard(); + m_pInterface->dwGunBreakMode = dwBreakMode; +} + +DWORD CObjectGroupPhysicalPropertiesSA::GetGunBreakMode() +{ + return m_pInterface->dwGunBreakMode; +} + +void CObjectGroupPhysicalPropertiesSA::SetSparksOnImpact(DWORD dwSparks) +{ + ChangeSafeguard(); + m_pInterface->dwSparksOnImpact = dwSparks; +} + +DWORD CObjectGroupPhysicalPropertiesSA::GetSparksOnImpact() +{ + return m_pInterface->dwSparksOnImpact; +} diff --git a/Client/game_sa/CObjectDynamicInfoSA.h b/Client/game_sa/CObjectGroupPhysicalPropertiesSA.h similarity index 80% rename from Client/game_sa/CObjectDynamicInfoSA.h rename to Client/game_sa/CObjectGroupPhysicalPropertiesSA.h index 1963be0b3a1..e245b53d41f 100644 --- a/Client/game_sa/CObjectDynamicInfoSA.h +++ b/Client/game_sa/CObjectGroupPhysicalPropertiesSA.h @@ -2,7 +2,7 @@ * * PROJECT: Multi Theft Auto v1.0 * LICENSE: See LICENSE in the top level directory - * FILE: game_sa/CObjectDynamicInfoSA.h + * FILE: game_sa/CObjectGroupPhysicalPropertiesSA.h * PURPOSE: Header file for objects dynamic physical properties handler class * * Multi Theft Auto is available from http://www.multitheftauto.com/ @@ -11,12 +11,12 @@ #pragma once -#include +#include #include #define ARRAY_ObjectGroupsDynamicInfo 0xBB4A90 -class CObjectGroupPhysicalPropertiesInterface +class CObjectGroupPhysicalPropertiesSAInterface { public: float fMass; @@ -41,19 +41,19 @@ class CObjectGroupPhysicalPropertiesInterface DWORD dwSparksOnImpact; }; -class CObjectDynamicInfoSA : public CObjectDynamicInfo +class CObjectGroupPhysicalPropertiesSA : public CObjectGroupPhysicalProperties { protected: - CObjectDynamicInfoSAInterface* m_pInterface; - unsigned char m_ucObjectGroup; - bool m_bModified; - static std::unordered_map ms_OriginalGroupProperties; + CObjectGroupPhysicalPropertiesSAInterface* m_pInterface; + unsigned char m_ucObjectGroup; + bool m_bModified; + static std::unordered_map ms_OriginalGroupProperties; public: - CObjectDynamicInfoSA(); - CObjectDynamicInfoSA(unsigned char ucObjectGroup); + CObjectGroupPhysicalPropertiesSA(); + CObjectGroupPhysicalPropertiesSA(unsigned char ucObjectGroup); - CObjectGroupPhysicalPropertiesInterface* GetInterface(); + CObjectGroupPhysicalPropertiesSAInterface* GetInterface(); void SetGroup(unsigned char ucObjectGroup); unsigned char GetGroup(); bool IsValid(); diff --git a/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp b/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp index b3ae779d60e..362788a7a69 100644 --- a/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp +++ b/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp @@ -9685,7 +9685,7 @@ CClientSearchLight* CStaticFunctionDefinitions::CreateSearchLight(CResource& Res return nullptr; } -bool CStaticFunctionDefinitions::SetDynamicPropertiesGroupCausesExplosion(CObjectDynamicInfo* pGroup, bool bExplode) +bool CStaticFunctionDefinitions::SetDynamicPropertiesGroupCausesExplosion(CObjectGroupPhysicalProperties* pGroup, bool bExplode) { if (!pGroup) return false; diff --git a/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.h b/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.h index b4d1aa02f77..eda02c01acb 100644 --- a/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.h +++ b/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.h @@ -796,5 +796,5 @@ class CStaticFunctionDefinitions static SString GetVersionSortable(); // Model groups physical properties funcs - static bool SetDynamicPropertiesGroupCausesExplosion(CObjectDynamicInfo* pGroup, bool bExplodes); + static bool SetDynamicPropertiesGroupCausesExplosion(CObjectGroupPhysicalProperties* pGroup, bool bExplodes); }; diff --git a/Client/sdk/game/CGame.h b/Client/sdk/game/CGame.h index e33bad52aa7..ee2fdd142b3 100644 --- a/Client/sdk/game/CGame.h +++ b/Client/sdk/game/CGame.h @@ -79,7 +79,7 @@ typedef void(InRenderer)(); #include "CWeaponInfo.h" #include "CWorld.h" #include "TaskCarAccessories.h" -#include "CObjectDynamicInfo.h" +#include "CObjectGroupPhysicalProperties.h" #include @@ -249,5 +249,5 @@ class __declspec(novtable) CGame virtual void SetPostWeaponFireHandler(PostWeaponFireHandler* pPostWeaponFireHandler) = 0; virtual void SetTaskSimpleBeHitHandler(TaskSimpleBeHitHandler* pTaskSimpleBeHitHandler) = 0; - virtual CObjectDynamicInfo* GetObjectDynamicInfo(unsigned char ucObjectGroup) = 0; + virtual CObjectGroupPhysicalProperties* GetObjectDynamicInfo(unsigned char ucObjectGroup) = 0; }; diff --git a/Client/sdk/game/CObjectGroupPhysicalProperties.h b/Client/sdk/game/CObjectGroupPhysicalProperties.h index 82a3beabc56..1caaacdc84c 100644 --- a/Client/sdk/game/CObjectGroupPhysicalProperties.h +++ b/Client/sdk/game/CObjectGroupPhysicalProperties.h @@ -2,7 +2,7 @@ * * PROJECT: Multi Theft Auto v1.0 * LICENSE: See LICENSE in the top level directory - * FILE: sdk/game/CObjectDynamicInfo.h + * FILE: sdk/game/CObjectGroupPhysicalProperties.h * PURPOSE: Objects dynamic physical properties handler interface * * Multi Theft Auto is available from http://www.multitheftauto.com/ From 4ffc705723fc6a26856374dc7187cf68a1c47936 Mon Sep 17 00:00:00 2001 From: Kamil Marciniak Date: Thu, 17 Jan 2019 22:07:32 +0100 Subject: [PATCH 09/29] model update --- Client/game_sa/CGameSA.cpp | 2 +- .../CObjectGroupPhysicalPropertiesSA.h | 50 +++++++++---------- .../logic/lua/CLuaFunctionParseHelpers.cpp | 29 +++++++++++ .../logic/lua/CLuaFunctionParseHelpers.h | 12 +++++ .../logic/luadefs/CLuaEngineDefs.cpp | 48 +++++++++++------- Client/sdk/game/Common.h | 32 ++++++++++++ 6 files changed, 129 insertions(+), 44 deletions(-) diff --git a/Client/game_sa/CGameSA.cpp b/Client/game_sa/CGameSA.cpp index 5da9d1624ad..01a7d8caf86 100644 --- a/Client/game_sa/CGameSA.cpp +++ b/Client/game_sa/CGameSA.cpp @@ -875,7 +875,7 @@ CPed* CGameSA::GetPedContext() CObjectGroupPhysicalProperties* CGameSA::GetObjectDynamicInfo(unsigned char ucObjectGroup) { DEBUG_TRACE("CObjectGroupPhysicalProperties * CGameSA::GetObjectDynamicInfo(unsigned char ucObjectGroup)"); - if (ucObjectGroup < OBJECTDYNAMICINFO_MAX && ObjectDynamicInfo[ucObjectGroup].IsValid()) + if (ObjectDynamicInfo[ucObjectGroup].IsValid()) return &ObjectDynamicInfo[ucObjectGroup]; return nullptr; diff --git a/Client/game_sa/CObjectGroupPhysicalPropertiesSA.h b/Client/game_sa/CObjectGroupPhysicalPropertiesSA.h index e245b53d41f..39dadfb62bd 100644 --- a/Client/game_sa/CObjectGroupPhysicalPropertiesSA.h +++ b/Client/game_sa/CObjectGroupPhysicalPropertiesSA.h @@ -19,26 +19,26 @@ class CObjectGroupPhysicalPropertiesSAInterface { public: - float fMass; - float fTurnMass; - float fAirResistance; - float fElasticity; - float fBuoyancy; - float fUprootLimit; - float fColDamageMultiplier; - unsigned char ucColDamageEffect; - unsigned char ucSpecialColResponse; - bool bCameraAvoidObject; - bool bCausesExplosion; - unsigned char ucFxType; - unsigned char pad[3]; - CVector vecFxOffset; - DWORD pad2; - float fSmashMultiplier; - CVector vecBreakVelocity; - float fBreakVelocityRand; - DWORD dwGunBreakMode; - DWORD dwSparksOnImpact; + float fMass; + float fTurnMass; + float fAirResistance; + float fElasticity; + float fBuoyancy; + float fUprootLimit; + float fColDamageMultiplier; + eDynamicObjectDamageEffect ucColDamageEffect; + eDynamicObjectCollisionResponse ucSpecialColResponse; + bool bCameraAvoidObject; + bool bCausesExplosion; + eDynamicPropertyFxType ucFxType; + unsigned char pad[3]; + CVector vecFxOffset; + void* pFxSystemPtr; + float fSmashMultiplier; + CVector vecBreakVelocity; + float fBreakVelocityRand; + DWORD dwGunBreakMode; + DWORD dwSparksOnImpact; }; class CObjectGroupPhysicalPropertiesSA : public CObjectGroupPhysicalProperties @@ -54,11 +54,11 @@ class CObjectGroupPhysicalPropertiesSA : public CObjectGroupPhysicalProperties CObjectGroupPhysicalPropertiesSA(unsigned char ucObjectGroup); CObjectGroupPhysicalPropertiesSAInterface* GetInterface(); - void SetGroup(unsigned char ucObjectGroup); - unsigned char GetGroup(); - bool IsValid(); - void ChangeSafeguard(); - static void RestoreDefaultValues(); + void SetGroup(unsigned char ucObjectGroup); + unsigned char GetGroup(); + bool IsValid(); + void ChangeSafeguard(); + static void RestoreDefaultValues(); void SetMass(float fMass); float GetMass(); diff --git a/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.cpp b/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.cpp index 89ea958dc4c..fb72c458919 100644 --- a/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.cpp +++ b/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.cpp @@ -401,6 +401,35 @@ ADD_ENUM(GUNBREAKMODE, "gun_break_mode") ADD_ENUM(SPARKSONIMPACT, "sparks_on_impact") IMPLEMENT_ENUM_END("objectgroup-dynamic-property") +IMPLEMENT_ENUM_BEGIN(eDynamicObjectDamageEffect) +ADD_ENUM(NONE, "none") +ADD_ENUM(CHANGE_MODEL, "change_model") +ADD_ENUM(SMASH_COMPLETELY, "smash") +ADD_ENUM(CHANGE_THEN_SMASH, "change_smash") +ADD_ENUM(BREAKABLE, "breakable") +ADD_ENUM(BREAKABLE_REMOVED, "breakable_remove") +IMPLEMENT_ENUM_END("objectgroup-property-damageeffect") + +IMPLEMENT_ENUM_BEGIN(eDynamicObjectCollisionResponse) +ADD_ENUM(NONE, "none") +ADD_ENUM(LAMPPOST, "lamppost") +ADD_ENUM(SMALLBOX, "small_box") +ADD_ENUM(BIGBOX, "big_box") +ADD_ENUM(FENCEPART, "fence_part") +ADD_ENUM(GRENADE, "grenade") +ADD_ENUM(SWINGDOOR, "swingdoor") +ADD_ENUM(LOCKDOOR, "lockdoor") +ADD_ENUM(HANGING, "hanging") +ADD_ENUM(POOLBALL, "poolball") +IMPLEMENT_ENUM_END("objectgroup-property-colissionresponse") + +IMPLEMENT_ENUM_BEGIN(eDynamicPropertyFxType) +ADD_ENUM(NONE, "none") +ADD_ENUM(PLAY_ON_HIT, "play_on_hit") +ADD_ENUM(PLAY_ON_DESTROYED, "play_on_destroyed") +ADD_ENUM(PLAY_ON_HIT_DESTROYED, "play_on_hitdestroyed") +IMPLEMENT_ENUM_END("objectgroup-property-fxtype") + IMPLEMENT_ENUM_BEGIN(eFontType) ADD_ENUM(FONT_DEFAULT, "default") ADD_ENUM(FONT_DEFAULT_BOLD, "default-bold") diff --git a/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.h b/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.h index b6833b9dfa1..5691cc364f8 100644 --- a/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.h +++ b/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.h @@ -388,6 +388,18 @@ inline SString GetClassByTypeName(eObjectGroupDynamicProperty*) { return "objectgroup-dynamic-property"; } +inline SString GetClassByTypeName(eDynamicObjectDamageEffect*) +{ + return "objectgroup-property-damageeffect"; +} +inline SString GetClassByTypeName(eDynamicObjectCollisionResponse*) +{ + return "objectgroup-property-colissionresponse"; +} +inline SString GetClassByTypeName(eDynamicPropertyFxType*) +{ + return "objectgroup-property-fxtype"; +} // // CResource from userdata diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp b/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp index 78329338b5c..7bd4b8fa842 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp +++ b/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp @@ -1014,30 +1014,42 @@ int CLuaEngineDefs::EngineSetModelGroupPhysicalProperty(lua_State* luaVM) argStream.ReadNumber(ucNewGroup); argStream.ReadEnumString(eProperty); - if (!argStream.HasErrors()) + if (argStream.HasErrors()) + { + // We failed + m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); + lua_pushboolean(luaVM, false); + return 1; + } + + auto pGroup = g_pGame->GetObjectDynamicInfo(ucNewGroup); + if (!pGroup) { - auto pGroup = g_pGame->GetObjectDynamicInfo(ucNewGroup); - switch (eProperty) + argStream.SetCustomError("Expected valid group ID at argument 1"); + m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); + lua_pushboolean(luaVM, false); + return 1; + } + + switch (eProperty) + { + case EXPLOSION: { - case EXPLOSION: - { - bool bExplode; - argStream.ReadBool(bExplode); - if (CStaticFunctionDefinitions::SetDynamicPropertiesGroupCausesExplosion(pGroup, bExplode)) - { - lua_pushboolean(luaVM, true); - return 1; - } + bool bExplode; + argStream.ReadBool(bExplode); + if (argStream.HasErrors()) break; + + if (CStaticFunctionDefinitions::SetDynamicPropertiesGroupCausesExplosion(pGroup, bExplode)) + { + lua_pushboolean(luaVM, true); + return 1; } + break; } - - argStream.SetCustomError("Expected valid group ID at argument 1"); } - if (argStream.HasErrors()) - m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); - // We failed + m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); lua_pushboolean(luaVM, false); - return 1; + return 1; } diff --git a/Client/sdk/game/Common.h b/Client/sdk/game/Common.h index 5083d1228e3..5d2efa5084f 100644 --- a/Client/sdk/game/Common.h +++ b/Client/sdk/game/Common.h @@ -1569,3 +1569,35 @@ enum eObjectGroupDynamicProperty GUNBREAKMODE, SPARKSONIMPACT }; + +enum eDynamicObjectDamageEffect : unsigned char +{ + NONE = 0, + CHANGE_MODEL = 1, + SMASH_COMPLETELY = 20, + CHANGE_THEN_SMASH = 21, + BREAKABLE = 200, + BREAKABLE_REMOVED = 202 +}; + +enum eDynamicObjectCollisionResponse : unsigned char +{ + NONE, + LAMPPOST, + SMALLBOX, + BIGBOX, + FENCEPART, + GRENADE, + SWINGDOOR, + LOCKDOOR, + HANGING, + POOLBALL +}; + +enum eDynamicPropertyFxType : unsigned char +{ + NONE, + PLAY_ON_HIT, + PLAY_ON_DESTROYED, + PLAY_ON_HIT_DESTROYED +}; From 4c37121c5d15845651e3dda7df5bf3a9e5f04142 Mon Sep 17 00:00:00 2001 From: Kamil Marciniak Date: Thu, 17 Jan 2019 23:57:04 +0100 Subject: [PATCH 10/29] model/naming changes, rest of setters from lua. --- Client/game_sa/CGameSA.cpp | 2 +- Client/game_sa/CGameSA.h | 7 +- .../CObjectGroupPhysicalPropertiesSA.cpp | 54 +++-- .../CObjectGroupPhysicalPropertiesSA.h | 76 ++++--- .../logic/CStaticFunctionDefinitions.cpp | 9 - .../logic/CStaticFunctionDefinitions.h | 3 - .../logic/lua/CLuaFunctionParseHelpers.cpp | 9 +- .../logic/lua/CLuaFunctionParseHelpers.h | 4 + .../logic/luadefs/CLuaEngineDefs.cpp | 206 ++++++++++++++++-- Client/sdk/game/CGame.h | 2 +- .../sdk/game/CObjectGroupPhysicalProperties.h | 68 +++--- Client/sdk/game/Common.h | 10 +- 12 files changed, 328 insertions(+), 122 deletions(-) diff --git a/Client/game_sa/CGameSA.cpp b/Client/game_sa/CGameSA.cpp index 01a7d8caf86..db9f70ed8e5 100644 --- a/Client/game_sa/CGameSA.cpp +++ b/Client/game_sa/CGameSA.cpp @@ -872,7 +872,7 @@ CPed* CGameSA::GetPedContext() return m_pPedContext; } -CObjectGroupPhysicalProperties* CGameSA::GetObjectDynamicInfo(unsigned char ucObjectGroup) +CObjectGroupPhysicalProperties* CGameSA::ObjectGroupPhysicalProperties(unsigned char ucObjectGroup) { DEBUG_TRACE("CObjectGroupPhysicalProperties * CGameSA::GetObjectDynamicInfo(unsigned char ucObjectGroup)"); if (ObjectDynamicInfo[ucObjectGroup].IsValid()) diff --git a/Client/game_sa/CGameSA.h b/Client/game_sa/CGameSA.h index e25f47f5661..52cb64534cf 100644 --- a/Client/game_sa/CGameSA.h +++ b/Client/game_sa/CGameSA.h @@ -308,8 +308,9 @@ class CGameSA : public CGame CRenderWareSA* GetRenderWareSA() { return m_pRenderWare; } CFxManagerSA* GetFxManagerSA() { return m_pFxManager; } - CWeaponInfo* GetWeaponInfo(eWeaponType weapon, eWeaponSkill skill = WEAPONSKILL_STD); - CModelInfo* GetModelInfo(DWORD dwModelID); + CWeaponInfo* GetWeaponInfo(eWeaponType weapon, eWeaponSkill skill = WEAPONSKILL_STD); + CModelInfo* GetModelInfo(DWORD dwModelID); + CObjectGroupPhysicalProperties* ObjectGroupPhysicalProperties(unsigned char ucObjectGroup); DWORD GetSystemTime() { @@ -427,8 +428,6 @@ class CGameSA : public CGame void SetPostWeaponFireHandler(PostWeaponFireHandler* pPostWeaponFireHandler) { m_pPostWeaponFireHandler = pPostWeaponFireHandler; } void SetTaskSimpleBeHitHandler(TaskSimpleBeHitHandler* pTaskSimpleBeHitHandler) { m_pTaskSimpleBeHitHandler = pTaskSimpleBeHitHandler; } - CObjectGroupPhysicalProperties* GetObjectDynamicInfo(unsigned char ucObjectGroup); - PreWeaponFireHandler* m_pPreWeaponFireHandler; PostWeaponFireHandler* m_pPostWeaponFireHandler; TaskSimpleBeHitHandler* m_pTaskSimpleBeHitHandler; diff --git a/Client/game_sa/CObjectGroupPhysicalPropertiesSA.cpp b/Client/game_sa/CObjectGroupPhysicalPropertiesSA.cpp index 33edfc7a8f5..843b8402e87 100644 --- a/Client/game_sa/CObjectGroupPhysicalPropertiesSA.cpp +++ b/Client/game_sa/CObjectGroupPhysicalPropertiesSA.cpp @@ -116,6 +116,17 @@ float CObjectGroupPhysicalPropertiesSA::GetElasticity() return m_pInterface->fElasticity; } +void CObjectGroupPhysicalPropertiesSA::SetBuoyancy(float fBuoyancy) +{ + ChangeSafeguard(); + m_pInterface->fBuoyancy = fBuoyancy; +} + +float CObjectGroupPhysicalPropertiesSA::GetBuoyancy() +{ + return m_pInterface->fBuoyancy; +} + void CObjectGroupPhysicalPropertiesSA::SetUprootLimit(float fUprootLimit) { ChangeSafeguard(); @@ -138,26 +149,26 @@ float CObjectGroupPhysicalPropertiesSA::GetColissionDamageMultiplier() return m_pInterface->fColDamageMultiplier; } -void CObjectGroupPhysicalPropertiesSA::SetColissionDamageEffect(unsigned char ucDamageEffect) +void CObjectGroupPhysicalPropertiesSA::SetColissionDamageEffect(eDynamicObjectDamageEffect eDamageEffect) { ChangeSafeguard(); - m_pInterface->ucColDamageEffect = ucDamageEffect; + m_pInterface->eColDamageEffect = eDamageEffect; } -unsigned char CObjectGroupPhysicalPropertiesSA::GetCollisionDamageEffect() +eDynamicObjectDamageEffect CObjectGroupPhysicalPropertiesSA::GetCollisionDamageEffect() { - return m_pInterface->ucColDamageEffect; + return m_pInterface->eColDamageEffect; } -void CObjectGroupPhysicalPropertiesSA::SetCollisionSpecialResponseCase(unsigned char ucResponseCase) +void CObjectGroupPhysicalPropertiesSA::SetCollisionSpecialResponseCase(eDynamicObjectCollisionResponse eResponseCase) { ChangeSafeguard(); - m_pInterface->ucSpecialColResponse = ucResponseCase; + m_pInterface->eSpecialColResponse = eResponseCase; } -unsigned char CObjectGroupPhysicalPropertiesSA::GetCollisionSpecialResponseCase() +eDynamicObjectCollisionResponse CObjectGroupPhysicalPropertiesSA::GetCollisionSpecialResponseCase() { - return m_pInterface->ucSpecialColResponse; + return m_pInterface->eSpecialColResponse; } void CObjectGroupPhysicalPropertiesSA::SetCameraAvoidObject(bool bAvoid) @@ -182,6 +193,17 @@ bool CObjectGroupPhysicalPropertiesSA::GetCausesExplosion() return m_pInterface->bCausesExplosion; } +bool CObjectGroupPhysicalPropertiesSA::SetFxType(eDynamicPropertyFxType eFxType) +{ + ChangeSafeguard(); + m_pInterface->eFxType = eFxType; +} + +eDynamicPropertyFxType CObjectGroupPhysicalPropertiesSA::GetFxType() +{ + return m_pInterface->eFxType; +} + void CObjectGroupPhysicalPropertiesSA::SetFxOffset(CVector vecOffset) { ChangeSafeguard(); @@ -226,24 +248,24 @@ float CObjectGroupPhysicalPropertiesSA::GetBreakVelocityRandomness() return m_pInterface->fBreakVelocityRand; } -void CObjectGroupPhysicalPropertiesSA::SetGunBreakMode(DWORD dwBreakMode) +void CObjectGroupPhysicalPropertiesSA::SetBreakMode(eDynamicPropertyBreakMode eBreakMode) { ChangeSafeguard(); - m_pInterface->dwGunBreakMode = dwBreakMode; + m_pInterface->eBreakMode = eBreakMode; } -DWORD CObjectGroupPhysicalPropertiesSA::GetGunBreakMode() +eDynamicPropertyBreakMode CObjectGroupPhysicalPropertiesSA::GetBreakMode() { - return m_pInterface->dwGunBreakMode; + return m_pInterface->eBreakMode; } -void CObjectGroupPhysicalPropertiesSA::SetSparksOnImpact(DWORD dwSparks) +void CObjectGroupPhysicalPropertiesSA::SetSparksOnImpact(bool bSparks) { ChangeSafeguard(); - m_pInterface->dwSparksOnImpact = dwSparks; + m_pInterface->dwSparksOnImpact = static_cast(bSparks); } -DWORD CObjectGroupPhysicalPropertiesSA::GetSparksOnImpact() +bool CObjectGroupPhysicalPropertiesSA::GetSparksOnImpact() { - return m_pInterface->dwSparksOnImpact; + return static_cast(m_pInterface->dwSparksOnImpact); } diff --git a/Client/game_sa/CObjectGroupPhysicalPropertiesSA.h b/Client/game_sa/CObjectGroupPhysicalPropertiesSA.h index 39dadfb62bd..8192b32f9ca 100644 --- a/Client/game_sa/CObjectGroupPhysicalPropertiesSA.h +++ b/Client/game_sa/CObjectGroupPhysicalPropertiesSA.h @@ -26,18 +26,18 @@ class CObjectGroupPhysicalPropertiesSAInterface float fBuoyancy; float fUprootLimit; float fColDamageMultiplier; - eDynamicObjectDamageEffect ucColDamageEffect; - eDynamicObjectCollisionResponse ucSpecialColResponse; + eDynamicObjectDamageEffect eColDamageEffect; + eDynamicObjectCollisionResponse eSpecialColResponse; bool bCameraAvoidObject; bool bCausesExplosion; - eDynamicPropertyFxType ucFxType; + eDynamicPropertyFxType eFxType; unsigned char pad[3]; CVector vecFxOffset; void* pFxSystemPtr; float fSmashMultiplier; CVector vecBreakVelocity; float fBreakVelocityRand; - DWORD dwGunBreakMode; + eDynamicPropertyBreakMode eBreakMode; DWORD dwSparksOnImpact; }; @@ -60,36 +60,40 @@ class CObjectGroupPhysicalPropertiesSA : public CObjectGroupPhysicalProperties void ChangeSafeguard(); static void RestoreDefaultValues(); - void SetMass(float fMass); - float GetMass(); - void SetTurnMass(float fTurnMass); - float GetTurnMass(); - void SetAirResistance(float fAirResistance); - float GetAirResistance(); - void SetElasticity(float fElasticity); - float GetElasticity(); - void SetUprootLimit(float fUprootLimit); - float GetUprootLimit(); - void SetColissionDamageMultiplier(float fColMult); - float GetColissionDamageMultiplier(); - void SetColissionDamageEffect(unsigned char ucDamageEffect); - unsigned char GetCollisionDamageEffect(); - void SetCollisionSpecialResponseCase(unsigned char ucResponseCase); - unsigned char GetCollisionSpecialResponseCase(); - void SetCameraAvoidObject(bool bAvoid); - bool GetCameraAvoidObject(); - void SetCausesExplosion(bool bExplodes); - bool GetCausesExplosion(); - void SetFxOffset(CVector vecOffset); - CVector GetFxOffset(); - void SetSmashMultiplier(float fMult); - float GetSmashMultiplier(); - void SetBreakVelocity(CVector vecVelocity); - CVector GetBreakVelocity(); - void SetBreakVelocityRandomness(float fRand); - float GetBreakVelocityRandomness(); - void SetGunBreakMode(DWORD dwBreakMode); - DWORD GetGunBreakMode(); - void SetSparksOnImpact(DWORD dwSparks); - DWORD GetSparksOnImpact(); + void SetMass(float fMass); + float GetMass(); + void SetTurnMass(float fTurnMass); + float GetTurnMass(); + void SetAirResistance(float fAirResistance); + float GetAirResistance(); + void SetElasticity(float fElasticity); + float GetElasticity(); + void SetBuoyancy(float fBuoyancy); + float GetBuoyancy() override; + void SetUprootLimit(float fUprootLimit); + float GetUprootLimit(); + void SetColissionDamageMultiplier(float fColMult); + float GetColissionDamageMultiplier(); + void SetColissionDamageEffect(eDynamicObjectDamageEffect ucDamageEffect); + eDynamicObjectDamageEffect GetCollisionDamageEffect(); + void SetCollisionSpecialResponseCase(eDynamicObjectCollisionResponse ucResponseCase); + eDynamicObjectCollisionResponse GetCollisionSpecialResponseCase(); + void SetCameraAvoidObject(bool bAvoid); + bool GetCameraAvoidObject(); + void SetCausesExplosion(bool bExplodes); + bool GetCausesExplosion(); + bool SetFxType(eDynamicPropertyFxType eFxType); + eDynamicPropertyFxType GetFxType(); + void SetFxOffset(CVector vecOffset); + CVector GetFxOffset(); + void SetSmashMultiplier(float fMult); + float GetSmashMultiplier(); + void SetBreakVelocity(CVector vecVelocity); + CVector GetBreakVelocity(); + void SetBreakVelocityRandomness(float fRand); + float GetBreakVelocityRandomness(); + void SetBreakMode(eDynamicPropertyBreakMode eBreakMode); + eDynamicPropertyBreakMode GetBreakMode(); + void SetSparksOnImpact(bool bSparks); + bool GetSparksOnImpact(); }; diff --git a/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp b/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp index 362788a7a69..33e65d83b2f 100644 --- a/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp +++ b/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp @@ -9684,12 +9684,3 @@ CClientSearchLight* CStaticFunctionDefinitions::CreateSearchLight(CResource& Res return nullptr; } - -bool CStaticFunctionDefinitions::SetDynamicPropertiesGroupCausesExplosion(CObjectGroupPhysicalProperties* pGroup, bool bExplode) -{ - if (!pGroup) - return false; - - pGroup->SetCausesExplosion(bExplode); - return true; -} diff --git a/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.h b/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.h index eda02c01acb..1c82baf9d1a 100644 --- a/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.h +++ b/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.h @@ -794,7 +794,4 @@ class CStaticFunctionDefinitions static const char* GetOperatingSystemName(); static const char* GetVersionBuildTag(); static SString GetVersionSortable(); - - // Model groups physical properties funcs - static bool SetDynamicPropertiesGroupCausesExplosion(CObjectGroupPhysicalProperties* pGroup, bool bExplodes); }; diff --git a/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.cpp b/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.cpp index fb72c458919..4b57c1460fd 100644 --- a/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.cpp +++ b/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.cpp @@ -393,11 +393,10 @@ ADD_ENUM(SPECIALCOLRESPONSE, "special_col_response") ADD_ENUM(CAMERAAVOID, "avoid_camera") ADD_ENUM(EXPLOSION, "cause_explosion") ADD_ENUM(FXTYPE, "fx_type") -ADD_ENUM(FXOFFSET, "fx_offset") ADD_ENUM(SMASHMULTIPLIER, "smash_multiplier") ADD_ENUM(BREAKVELOCITY, "break_velocity") ADD_ENUM(BREAKVELOCITYRAND, "break_velocity_randomness") -ADD_ENUM(GUNBREAKMODE, "gun_break_mode") +ADD_ENUM(BREAKMODE, "break_mode") ADD_ENUM(SPARKSONIMPACT, "sparks_on_impact") IMPLEMENT_ENUM_END("objectgroup-dynamic-property") @@ -430,6 +429,12 @@ ADD_ENUM(PLAY_ON_DESTROYED, "play_on_destroyed") ADD_ENUM(PLAY_ON_HIT_DESTROYED, "play_on_hitdestroyed") IMPLEMENT_ENUM_END("objectgroup-property-fxtype") +IMPLEMENT_ENUM_BEGIN(eDynamicPropertyBreakMode) +ADD_ENUM(NOT_BY_GUN, "not_by_gun") +ADD_ENUM(BY_GUN, "by_gun") +ADD_ENUM(SMASHABLE, "smashable") +IMPLEMENT_ENUM_END("objectgroup-property-breakmode") + IMPLEMENT_ENUM_BEGIN(eFontType) ADD_ENUM(FONT_DEFAULT, "default") ADD_ENUM(FONT_DEFAULT_BOLD, "default-bold") diff --git a/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.h b/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.h index 5691cc364f8..a8911d0ecb7 100644 --- a/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.h +++ b/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.h @@ -400,6 +400,10 @@ inline SString GetClassByTypeName(eDynamicPropertyFxType*) { return "objectgroup-property-fxtype"; } +inline SString GetClassByTypeName(eDynamicPropertyBreakMode*) +{ + return "objectgroup-property-breakmode"; +} // // CResource from userdata diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp b/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp index 7bd4b8fa842..5a02063f81a 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp +++ b/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp @@ -313,12 +313,13 @@ int CLuaEngineDefs::EngineLoadIFP(lua_State* luaVM) CResource* pResource = pLuaMain->GetResource(); if (pResource) { - bool bIsRawData = CIFPEngine::IsIFPData(strFile); + bool bIsRawData = CIFPEngine::IsIFPData(strFile); SString strPath; // Is this a legal filepath? if (bIsRawData || CResourceManager::ParseResourcePathInput(strFile, pResource, &strPath)) { - std::shared_ptr pIFP = CIFPEngine::EngineLoadIFP(pResource, m_pManager, bIsRawData ? strFile : strPath, bIsRawData, strBlockName); + std::shared_ptr pIFP = + CIFPEngine::EngineLoadIFP(pResource, m_pManager, bIsRawData ? strFile : strPath, bIsRawData, strBlockName); if (pIFP != nullptr) { // Return the IFP element @@ -937,7 +938,7 @@ int CLuaEngineDefs::EngineGetModelPhysicalPropertiesGroup(lua_State* luaVM) { lua_pushnumber(luaVM, pModelInfo->GetObjectPropertiesGroup()); return 1; - } + } argStream.SetCustomError("Expected valid model ID at argument 1"); } if (argStream.HasErrors()) @@ -951,7 +952,7 @@ int CLuaEngineDefs::EngineGetModelPhysicalPropertiesGroup(lua_State* luaVM) int CLuaEngineDefs::EngineSetModelPhysicalPropertiesGroup(lua_State* luaVM) { // bool engineSetModelPhysicalPropertiesGroup ( int modelID, int newGroup ) - int iModelID; + int iModelID; unsigned char ucNewGroup; CScriptArgReader argStream(luaVM); @@ -1007,11 +1008,11 @@ int CLuaEngineDefs::EngineRestoreModelPhysicalPropertiesGroup(lua_State* luaVM) int CLuaEngineDefs::EngineSetModelGroupPhysicalProperty(lua_State* luaVM) { // bool engineSetModelGroupPhysicalProperty ( int groupID, string property, ...) - unsigned char ucNewGroup; + unsigned char ucGroup; eObjectGroupDynamicProperty eProperty; CScriptArgReader argStream(luaVM); - argStream.ReadNumber(ucNewGroup); + argStream.ReadNumber(ucGroup); argStream.ReadEnumString(eProperty); if (argStream.HasErrors()) @@ -1021,11 +1022,11 @@ int CLuaEngineDefs::EngineSetModelGroupPhysicalProperty(lua_State* luaVM) lua_pushboolean(luaVM, false); return 1; } - - auto pGroup = g_pGame->GetObjectDynamicInfo(ucNewGroup); + + auto pGroup = g_pGame->ObjectGroupPhysicalProperties(ucGroup); if (!pGroup) { - argStream.SetCustomError("Expected valid group ID at argument 1"); + argStream.SetCustomError("Expected valid group ID at argument 1"); m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); lua_pushboolean(luaVM, false); return 1; @@ -1033,6 +1034,116 @@ int CLuaEngineDefs::EngineSetModelGroupPhysicalProperty(lua_State* luaVM) switch (eProperty) { + case MASS: + { + float fMass; + argStream.ReadNumber(fMass); + if (argStream.HasErrors()) + break; + + pGroup->SetMass(fMass); + lua_pushboolean(luaVM, true); + return 1; + } + case TURNMASS: + { + float fTurnMass; + argStream.ReadNumber(fTurnMass); + if (argStream.HasErrors()) + break; + + pGroup->SetTurnMass(fTurnMass); + lua_pushboolean(luaVM, true); + return 1; + } + case AIRRESISTANCE: + { + float fAirResistance; + argStream.ReadNumber(fAirResistance); + if (argStream.HasErrors()) + break; + + pGroup->SetAirResistance(fAirResistance); + lua_pushboolean(luaVM, true); + return 1; + } + case ELASTICITY: + { + float fElasticity; + argStream.ReadNumber(fElasticity); + if (argStream.HasErrors()) + break; + + pGroup->SetElasticity(fElasticity); + lua_pushboolean(luaVM, true); + return 1; + } + case BUOYANCY: + { + float fBuoyancy; + argStream.ReadNumber(fBuoyancy); + if (argStream.HasErrors()) + break; + + pGroup->SetBuoyancy(fBuoyancy); + lua_pushboolean(luaVM, true); + return 1; + } + case UPROOTLIMIT: + { + float fUprootLimit; + argStream.ReadNumber(fUprootLimit); + if (argStream.HasErrors()) + break; + + pGroup->SetUprootLimit(fUprootLimit); + lua_pushboolean(luaVM, true); + return 1; + } + case COLDAMAGEMULTIPLIER: + { + float fDamMultiplier; + argStream.ReadNumber(fDamMultiplier); + if (argStream.HasErrors()) + break; + + pGroup->SetColissionDamageMultiplier(fDamMultiplier); + lua_pushboolean(luaVM, true); + return 1; + } + case COLDAMAGEEFFECT: + { + eDynamicObjectDamageEffect eDamEffect; + argStream.ReadEnumString(eDamEffect); + if (argStream.HasErrors()) + break; + + pGroup->SetColissionDamageEffect(eDamEffect); + lua_pushboolean(luaVM, true); + return 1; + } + case SPECIALCOLRESPONSE: + { + eDynamicObjectCollisionResponse eColRepsonse; + argStream.ReadEnumString(eColRepsonse); + if (argStream.HasErrors()) + break; + + pGroup->SetCollisionSpecialResponseCase(eColRepsonse); + lua_pushboolean(luaVM, true); + return 1; + } + case CAMERAAVOID: + { + bool bAvoid; + argStream.ReadBool(bAvoid); + if (argStream.HasErrors()) + break; + + pGroup->SetCameraAvoidObject(bAvoid); + lua_pushboolean(luaVM, true); + return 1; + } case EXPLOSION: { bool bExplode; @@ -1040,16 +1151,79 @@ int CLuaEngineDefs::EngineSetModelGroupPhysicalProperty(lua_State* luaVM) if (argStream.HasErrors()) break; - if (CStaticFunctionDefinitions::SetDynamicPropertiesGroupCausesExplosion(pGroup, bExplode)) - { - lua_pushboolean(luaVM, true); - return 1; - } - break; + pGroup->SetCausesExplosion(bExplode); + lua_pushboolean(luaVM, true); + return 1; + } + case FXTYPE: + { + eDynamicPropertyFxType eFxType; + argStream.ReadEnumString(eFxType); + if (argStream.HasErrors()) + break; + + pGroup->SetFxType(eFxType); + lua_pushboolean(luaVM, true); + return 1; + } + case SMASHMULTIPLIER: + { + float fSmashMultiplier; + argStream.ReadNumber(fSmashMultiplier); + if (argStream.HasErrors()) + break; + + pGroup->SetSmashMultiplier(fSmashMultiplier); + lua_pushboolean(luaVM, true); + return 1; + } + case BREAKVELOCITY: + { + CVector vecVelocity; + argStream.ReadVector3D(vecVelocity); + if (argStream.HasErrors()) + break; + + pGroup->SetBreakVelocity(vecVelocity); + lua_pushboolean(luaVM, true); + return 1; + } + case BREAKVELOCITYRAND: + { + float fRandomness; + argStream.ReadNumber(fRandomness); + if (argStream.HasErrors()) + break; + + pGroup->SetBreakVelocityRandomness(fRandomness); + lua_pushboolean(luaVM, true); + return 1; + } + case BREAKMODE: + { + eDynamicPropertyBreakMode eBreakMode; + argStream.ReadEnumString(eBreakMode); + if (argStream.HasErrors()) + break; + + pGroup->SetBreakMode(eBreakMode); + lua_pushboolean(luaVM, true); + return 1; + } + case SPARKSONIMPACT: + { + bool bSparks; + argStream.ReadBool(bSparks); + if (argStream.HasErrors()) + break; + + pGroup->SetSparksOnImpact(bSparks); + lua_pushboolean(luaVM, true); + return 1; } } m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); lua_pushboolean(luaVM, false); - return 1; + return 1; } diff --git a/Client/sdk/game/CGame.h b/Client/sdk/game/CGame.h index ee2fdd142b3..3836c3aaef7 100644 --- a/Client/sdk/game/CGame.h +++ b/Client/sdk/game/CGame.h @@ -249,5 +249,5 @@ class __declspec(novtable) CGame virtual void SetPostWeaponFireHandler(PostWeaponFireHandler* pPostWeaponFireHandler) = 0; virtual void SetTaskSimpleBeHitHandler(TaskSimpleBeHitHandler* pTaskSimpleBeHitHandler) = 0; - virtual CObjectGroupPhysicalProperties* GetObjectDynamicInfo(unsigned char ucObjectGroup) = 0; + virtual CObjectGroupPhysicalProperties* ObjectGroupPhysicalProperties(unsigned char ucObjectGroup) = 0; }; diff --git a/Client/sdk/game/CObjectGroupPhysicalProperties.h b/Client/sdk/game/CObjectGroupPhysicalProperties.h index 1caaacdc84c..01822ca5f04 100644 --- a/Client/sdk/game/CObjectGroupPhysicalProperties.h +++ b/Client/sdk/game/CObjectGroupPhysicalProperties.h @@ -18,36 +18,40 @@ class CObjectGroupPhysicalProperties virtual class CObjectGroupPhysicalPropertiesSAInterface* GetInterface() = 0; virtual unsigned char GetGroup() = 0; - virtual void SetMass(float fMass) = 0; - virtual float GetMass() = 0; - virtual void SetTurnMass(float fTurnMass) = 0; - virtual float GetTurnMass() = 0; - virtual void SetAirResistance(float fAirResistance) = 0; - virtual float GetAirResistance() = 0; - virtual void SetElasticity(float fElasticity) = 0; - virtual float GetElasticity() = 0; - virtual void SetUprootLimit(float fUprootLimit) = 0; - virtual float GetUprootLimit() = 0; - virtual void SetColissionDamageMultiplier(float fColMult) = 0; - virtual float GetColissionDamageMultiplier() = 0; - virtual void SetColissionDamageEffect(unsigned char ucDamageEffect) = 0; - virtual unsigned char GetCollisionDamageEffect() = 0; - virtual void SetCollisionSpecialResponseCase(unsigned char ucResponseCase) = 0; - virtual unsigned char GetCollisionSpecialResponseCase() = 0; - virtual void SetCameraAvoidObject(bool bAvoid) = 0; - virtual bool GetCameraAvoidObject() = 0; - virtual void SetCausesExplosion(bool bExplodes) = 0; - virtual bool GetCausesExplosion() = 0; - virtual void SetFxOffset(CVector vecOffset) = 0; - virtual CVector GetFxOffset() = 0; - virtual void SetSmashMultiplier(float fMult) = 0; - virtual float GetSmashMultiplier() = 0; - virtual void SetBreakVelocity(CVector vecVelocity) = 0; - virtual CVector GetBreakVelocity() = 0; - virtual void SetBreakVelocityRandomness(float fRand) = 0; - virtual float GetBreakVelocityRandomness() = 0; - virtual void SetGunBreakMode(DWORD dwBreakMode) = 0; - virtual DWORD GetGunBreakMode() = 0; - virtual void SetSparksOnImpact(DWORD dwSparks) = 0; - virtual DWORD GetSparksOnImpact() = 0; + virtual void SetMass(float fMass) = 0; + virtual float GetMass() = 0; + virtual void SetTurnMass(float fTurnMass) = 0; + virtual float GetTurnMass() = 0; + virtual void SetAirResistance(float fAirResistance) = 0; + virtual float GetAirResistance() = 0; + virtual void SetElasticity(float fElasticity) = 0; + virtual float GetElasticity() = 0; + virtual void SetBuoyancy(float fBuoyancy) = 0; + virtual float GetBuoyancy() = 0; + virtual void SetUprootLimit(float fUprootLimit) = 0; + virtual float GetUprootLimit() = 0; + virtual void SetColissionDamageMultiplier(float fColMult) = 0; + virtual float GetColissionDamageMultiplier() = 0; + virtual void SetColissionDamageEffect(eDynamicObjectDamageEffect eDamageEffect) = 0; + virtual eDynamicObjectDamageEffect GetCollisionDamageEffect() = 0; + virtual void SetCollisionSpecialResponseCase(eDynamicObjectCollisionResponse eResponseCase) = 0; + virtual eDynamicObjectCollisionResponse GetCollisionSpecialResponseCase() = 0; + virtual void SetCameraAvoidObject(bool bAvoid) = 0; + virtual bool GetCameraAvoidObject() = 0; + virtual void SetCausesExplosion(bool bExplodes) = 0; + virtual bool GetCausesExplosion() = 0; + virtual bool SetFxType(eDynamicPropertyFxType eFxType) = 0; + virtual eDynamicPropertyFxType GetFxType() = 0; + virtual void SetFxOffset(CVector vecOffset) = 0; + virtual CVector GetFxOffset() = 0; + virtual void SetSmashMultiplier(float fMult) = 0; + virtual float GetSmashMultiplier() = 0; + virtual void SetBreakVelocity(CVector vecVelocity) = 0; + virtual CVector GetBreakVelocity() = 0; + virtual void SetBreakVelocityRandomness(float fRand) = 0; + virtual float GetBreakVelocityRandomness() = 0; + virtual void SetBreakMode(eDynamicPropertyBreakMode eBreakMode) = 0; + virtual eDynamicPropertyBreakMode GetBreakMode() = 0; + virtual void SetSparksOnImpact(bool bSparks) = 0; + virtual bool GetSparksOnImpact() = 0; }; diff --git a/Client/sdk/game/Common.h b/Client/sdk/game/Common.h index 5d2efa5084f..6e62fe72691 100644 --- a/Client/sdk/game/Common.h +++ b/Client/sdk/game/Common.h @@ -1562,11 +1562,10 @@ enum eObjectGroupDynamicProperty CAMERAAVOID, EXPLOSION, FXTYPE, - FXOFFSET, SMASHMULTIPLIER, BREAKVELOCITY, BREAKVELOCITYRAND, - GUNBREAKMODE, + BREAKMODE, SPARKSONIMPACT }; @@ -1601,3 +1600,10 @@ enum eDynamicPropertyFxType : unsigned char PLAY_ON_DESTROYED, PLAY_ON_HIT_DESTROYED }; + +enum eDynamicPropertyBreakMode +{ + NOT_BY_GUN, + BY_GUN, + SMASHABLE, +}; From e8c257325f82862c118d7bfc992b61c556884901 Mon Sep 17 00:00:00 2001 From: Kamil Marciniak Date: Fri, 18 Jan 2019 00:06:33 +0100 Subject: [PATCH 11/29] naming, code shortening thanks to botder --- .../logic/lua/CLuaFunctionParseHelpers.cpp | 10 +- .../logic/lua/CLuaFunctionParseHelpers.h | 10 +- .../logic/luadefs/CLuaEngineDefs.cpp | 178 ++++++------------ 3 files changed, 71 insertions(+), 127 deletions(-) diff --git a/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.cpp b/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.cpp index 4b57c1460fd..e0da401f72c 100644 --- a/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.cpp +++ b/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.cpp @@ -398,7 +398,7 @@ ADD_ENUM(BREAKVELOCITY, "break_velocity") ADD_ENUM(BREAKVELOCITYRAND, "break_velocity_randomness") ADD_ENUM(BREAKMODE, "break_mode") ADD_ENUM(SPARKSONIMPACT, "sparks_on_impact") -IMPLEMENT_ENUM_END("objectgroup-dynamic-property") +IMPLEMENT_ENUM_END("objectgroup-property") IMPLEMENT_ENUM_BEGIN(eDynamicObjectDamageEffect) ADD_ENUM(NONE, "none") @@ -407,7 +407,7 @@ ADD_ENUM(SMASH_COMPLETELY, "smash") ADD_ENUM(CHANGE_THEN_SMASH, "change_smash") ADD_ENUM(BREAKABLE, "breakable") ADD_ENUM(BREAKABLE_REMOVED, "breakable_remove") -IMPLEMENT_ENUM_END("objectgroup-property-damageeffect") +IMPLEMENT_ENUM_END("objectgroup-damageeffect") IMPLEMENT_ENUM_BEGIN(eDynamicObjectCollisionResponse) ADD_ENUM(NONE, "none") @@ -420,20 +420,20 @@ ADD_ENUM(SWINGDOOR, "swingdoor") ADD_ENUM(LOCKDOOR, "lockdoor") ADD_ENUM(HANGING, "hanging") ADD_ENUM(POOLBALL, "poolball") -IMPLEMENT_ENUM_END("objectgroup-property-colissionresponse") +IMPLEMENT_ENUM_END("objectgroup-colissionresponse") IMPLEMENT_ENUM_BEGIN(eDynamicPropertyFxType) ADD_ENUM(NONE, "none") ADD_ENUM(PLAY_ON_HIT, "play_on_hit") ADD_ENUM(PLAY_ON_DESTROYED, "play_on_destroyed") ADD_ENUM(PLAY_ON_HIT_DESTROYED, "play_on_hitdestroyed") -IMPLEMENT_ENUM_END("objectgroup-property-fxtype") +IMPLEMENT_ENUM_END("objectgroup-fxtype") IMPLEMENT_ENUM_BEGIN(eDynamicPropertyBreakMode) ADD_ENUM(NOT_BY_GUN, "not_by_gun") ADD_ENUM(BY_GUN, "by_gun") ADD_ENUM(SMASHABLE, "smashable") -IMPLEMENT_ENUM_END("objectgroup-property-breakmode") +IMPLEMENT_ENUM_END("objectgroup-breakmode") IMPLEMENT_ENUM_BEGIN(eFontType) ADD_ENUM(FONT_DEFAULT, "default") diff --git a/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.h b/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.h index a8911d0ecb7..6126bfdf54e 100644 --- a/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.h +++ b/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.h @@ -386,23 +386,23 @@ inline SString GetClassTypeName(eVehicleDummies*) } inline SString GetClassByTypeName(eObjectGroupDynamicProperty*) { - return "objectgroup-dynamic-property"; + return "objectgroup-property"; } inline SString GetClassByTypeName(eDynamicObjectDamageEffect*) { - return "objectgroup-property-damageeffect"; + return "objectgroup-damageeffect"; } inline SString GetClassByTypeName(eDynamicObjectCollisionResponse*) { - return "objectgroup-property-colissionresponse"; + return "objectgroup-colissionresponse"; } inline SString GetClassByTypeName(eDynamicPropertyFxType*) { - return "objectgroup-property-fxtype"; + return "objectgroup-fxtype"; } inline SString GetClassByTypeName(eDynamicPropertyBreakMode*) { - return "objectgroup-property-breakmode"; + return "objectgroup-breakmode"; } // diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp b/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp index 5a02063f81a..fbf62420882 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp +++ b/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp @@ -1035,79 +1035,89 @@ int CLuaEngineDefs::EngineSetModelGroupPhysicalProperty(lua_State* luaVM) switch (eProperty) { case MASS: - { - float fMass; - argStream.ReadNumber(fMass); - if (argStream.HasErrors()) - break; - - pGroup->SetMass(fMass); - lua_pushboolean(luaVM, true); - return 1; - } case TURNMASS: - { - float fTurnMass; - argStream.ReadNumber(fTurnMass); - if (argStream.HasErrors()) - break; - - pGroup->SetTurnMass(fTurnMass); - lua_pushboolean(luaVM, true); - return 1; - } case AIRRESISTANCE: - { - float fAirResistance; - argStream.ReadNumber(fAirResistance); - if (argStream.HasErrors()) - break; - - pGroup->SetAirResistance(fAirResistance); - lua_pushboolean(luaVM, true); - return 1; - } case ELASTICITY: - { - float fElasticity; - argStream.ReadNumber(fElasticity); - if (argStream.HasErrors()) - break; - - pGroup->SetElasticity(fElasticity); - lua_pushboolean(luaVM, true); - return 1; - } case BUOYANCY: + case UPROOTLIMIT: + case COLDAMAGEMULTIPLIER: + case SMASHMULTIPLIER: + case BREAKVELOCITYRAND: { - float fBuoyancy; - argStream.ReadNumber(fBuoyancy); + float fValue; + argStream.ReadNumber(fValue); + if (argStream.HasErrors()) break; - pGroup->SetBuoyancy(fBuoyancy); + switch (eProperty) + { + case MASS: + pGroup->SetMass(fValue); + break; + case TURNMASS: + pGroup->SetTurnMass(fValue); + break; + case AIRRESISTANCE: + pGroup->SetAirResistance(fValue); + break; + case ELASTICITY: + pGroup->SetElasticity(fValue); + break; + case BUOYANCY: + pGroup->SetBuoyancy(fValue); + break; + case UPROOTLIMIT: + pGroup->SetUprootLimit(fValue); + break; + case COLDAMAGEMULTIPLIER: + pGroup->SetColissionDamageMultiplier(fValue); + break; + case SMASHMULTIPLIER: + pGroup->SetSmashMultiplier(fValue); + break; + case BREAKVELOCITYRAND: + pGroup->SetBreakVelocityRandomness(fValue); + break; + } + lua_pushboolean(luaVM, true); return 1; } - case UPROOTLIMIT: + case CAMERAAVOID: + case EXPLOSION: + case SPARKSONIMPACT: { - float fUprootLimit; - argStream.ReadNumber(fUprootLimit); + bool bValue; + argStream.ReadBool(bValue); + if (argStream.HasErrors()) break; - pGroup->SetUprootLimit(fUprootLimit); + switch (eProperty) + { + case CAMERAAVOID: + pGroup->SetCameraAvoidObject(bValue); + break; + case EXPLOSION: + pGroup->SetCausesExplosion(bValue); + break; + case SPARKSONIMPACT: + pGroup->SetSparksOnImpact(bValue); + break; + } + lua_pushboolean(luaVM, true); return 1; } - case COLDAMAGEMULTIPLIER: + case BREAKVELOCITY: { - float fDamMultiplier; - argStream.ReadNumber(fDamMultiplier); + CVector vecVelocity; + argStream.ReadVector3D(vecVelocity); if (argStream.HasErrors()) break; - pGroup->SetColissionDamageMultiplier(fDamMultiplier); + pGroup->SetBreakVelocity(vecVelocity); lua_pushboolean(luaVM, true); return 1; } @@ -1133,28 +1143,6 @@ int CLuaEngineDefs::EngineSetModelGroupPhysicalProperty(lua_State* luaVM) lua_pushboolean(luaVM, true); return 1; } - case CAMERAAVOID: - { - bool bAvoid; - argStream.ReadBool(bAvoid); - if (argStream.HasErrors()) - break; - - pGroup->SetCameraAvoidObject(bAvoid); - lua_pushboolean(luaVM, true); - return 1; - } - case EXPLOSION: - { - bool bExplode; - argStream.ReadBool(bExplode); - if (argStream.HasErrors()) - break; - - pGroup->SetCausesExplosion(bExplode); - lua_pushboolean(luaVM, true); - return 1; - } case FXTYPE: { eDynamicPropertyFxType eFxType; @@ -1166,39 +1154,6 @@ int CLuaEngineDefs::EngineSetModelGroupPhysicalProperty(lua_State* luaVM) lua_pushboolean(luaVM, true); return 1; } - case SMASHMULTIPLIER: - { - float fSmashMultiplier; - argStream.ReadNumber(fSmashMultiplier); - if (argStream.HasErrors()) - break; - - pGroup->SetSmashMultiplier(fSmashMultiplier); - lua_pushboolean(luaVM, true); - return 1; - } - case BREAKVELOCITY: - { - CVector vecVelocity; - argStream.ReadVector3D(vecVelocity); - if (argStream.HasErrors()) - break; - - pGroup->SetBreakVelocity(vecVelocity); - lua_pushboolean(luaVM, true); - return 1; - } - case BREAKVELOCITYRAND: - { - float fRandomness; - argStream.ReadNumber(fRandomness); - if (argStream.HasErrors()) - break; - - pGroup->SetBreakVelocityRandomness(fRandomness); - lua_pushboolean(luaVM, true); - return 1; - } case BREAKMODE: { eDynamicPropertyBreakMode eBreakMode; @@ -1210,17 +1165,6 @@ int CLuaEngineDefs::EngineSetModelGroupPhysicalProperty(lua_State* luaVM) lua_pushboolean(luaVM, true); return 1; } - case SPARKSONIMPACT: - { - bool bSparks; - argStream.ReadBool(bSparks); - if (argStream.HasErrors()) - break; - - pGroup->SetSparksOnImpact(bSparks); - lua_pushboolean(luaVM, true); - return 1; - } } m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); From 597ffa8749678beafcd6f48c5df819d75cece458 Mon Sep 17 00:00:00 2001 From: Kamil Marciniak Date: Fri, 18 Jan 2019 00:55:52 +0100 Subject: [PATCH 12/29] Enums cleanup, to their own namespace they go also added missing property change --- .../CObjectGroupPhysicalPropertiesSA.cpp | 16 +-- .../CObjectGroupPhysicalPropertiesSA.h | 112 ++++++++-------- .../logic/lua/CLuaFunctionParseHelpers.cpp | 109 ++++++++-------- .../logic/lua/CLuaFunctionParseHelpers.h | 26 ++-- .../logic/luadefs/CLuaEngineDefs.cpp | 86 +++++++------ .../sdk/game/CObjectGroupPhysicalProperties.h | 72 +++++------ Client/sdk/game/Common.h | 120 +++++++++--------- 7 files changed, 280 insertions(+), 261 deletions(-) diff --git a/Client/game_sa/CObjectGroupPhysicalPropertiesSA.cpp b/Client/game_sa/CObjectGroupPhysicalPropertiesSA.cpp index 843b8402e87..a868caec455 100644 --- a/Client/game_sa/CObjectGroupPhysicalPropertiesSA.cpp +++ b/Client/game_sa/CObjectGroupPhysicalPropertiesSA.cpp @@ -149,24 +149,24 @@ float CObjectGroupPhysicalPropertiesSA::GetColissionDamageMultiplier() return m_pInterface->fColDamageMultiplier; } -void CObjectGroupPhysicalPropertiesSA::SetColissionDamageEffect(eDynamicObjectDamageEffect eDamageEffect) +void CObjectGroupPhysicalPropertiesSA::SetColissionDamageEffect(eModelGroup::DamageEffect eDamageEffect) { ChangeSafeguard(); m_pInterface->eColDamageEffect = eDamageEffect; } -eDynamicObjectDamageEffect CObjectGroupPhysicalPropertiesSA::GetCollisionDamageEffect() +eModelGroup::DamageEffect CObjectGroupPhysicalPropertiesSA::GetCollisionDamageEffect() { return m_pInterface->eColDamageEffect; } -void CObjectGroupPhysicalPropertiesSA::SetCollisionSpecialResponseCase(eDynamicObjectCollisionResponse eResponseCase) +void CObjectGroupPhysicalPropertiesSA::SetCollisionSpecialResponseCase(eModelGroup::CollisionResponse eResponseCase) { ChangeSafeguard(); m_pInterface->eSpecialColResponse = eResponseCase; } -eDynamicObjectCollisionResponse CObjectGroupPhysicalPropertiesSA::GetCollisionSpecialResponseCase() +eModelGroup::CollisionResponse CObjectGroupPhysicalPropertiesSA::GetCollisionSpecialResponseCase() { return m_pInterface->eSpecialColResponse; } @@ -193,13 +193,13 @@ bool CObjectGroupPhysicalPropertiesSA::GetCausesExplosion() return m_pInterface->bCausesExplosion; } -bool CObjectGroupPhysicalPropertiesSA::SetFxType(eDynamicPropertyFxType eFxType) +void CObjectGroupPhysicalPropertiesSA::SetFxType(eModelGroup::FxType eFxType) { ChangeSafeguard(); m_pInterface->eFxType = eFxType; } -eDynamicPropertyFxType CObjectGroupPhysicalPropertiesSA::GetFxType() +eModelGroup::FxType CObjectGroupPhysicalPropertiesSA::GetFxType() { return m_pInterface->eFxType; } @@ -248,13 +248,13 @@ float CObjectGroupPhysicalPropertiesSA::GetBreakVelocityRandomness() return m_pInterface->fBreakVelocityRand; } -void CObjectGroupPhysicalPropertiesSA::SetBreakMode(eDynamicPropertyBreakMode eBreakMode) +void CObjectGroupPhysicalPropertiesSA::SetBreakMode(eModelGroup::BreakMode eBreakMode) { ChangeSafeguard(); m_pInterface->eBreakMode = eBreakMode; } -eDynamicPropertyBreakMode CObjectGroupPhysicalPropertiesSA::GetBreakMode() +eModelGroup::BreakMode CObjectGroupPhysicalPropertiesSA::GetBreakMode() { return m_pInterface->eBreakMode; } diff --git a/Client/game_sa/CObjectGroupPhysicalPropertiesSA.h b/Client/game_sa/CObjectGroupPhysicalPropertiesSA.h index 8192b32f9ca..1d7f31298e4 100644 --- a/Client/game_sa/CObjectGroupPhysicalPropertiesSA.h +++ b/Client/game_sa/CObjectGroupPhysicalPropertiesSA.h @@ -19,26 +19,26 @@ class CObjectGroupPhysicalPropertiesSAInterface { public: - float fMass; - float fTurnMass; - float fAirResistance; - float fElasticity; - float fBuoyancy; - float fUprootLimit; - float fColDamageMultiplier; - eDynamicObjectDamageEffect eColDamageEffect; - eDynamicObjectCollisionResponse eSpecialColResponse; - bool bCameraAvoidObject; - bool bCausesExplosion; - eDynamicPropertyFxType eFxType; - unsigned char pad[3]; - CVector vecFxOffset; - void* pFxSystemPtr; - float fSmashMultiplier; - CVector vecBreakVelocity; - float fBreakVelocityRand; - eDynamicPropertyBreakMode eBreakMode; - DWORD dwSparksOnImpact; + float fMass; + float fTurnMass; + float fAirResistance; + float fElasticity; + float fBuoyancy; + float fUprootLimit; + float fColDamageMultiplier; + eModelGroup::DamageEffect eColDamageEffect; + eModelGroup::CollisionResponse eSpecialColResponse; + bool bCameraAvoidObject; + bool bCausesExplosion; + eModelGroup::FxType eFxType; + unsigned char pad[3]; + CVector vecFxOffset; + void* pFxSystemPtr; + float fSmashMultiplier; + CVector vecBreakVelocity; + float fBreakVelocityRand; + eModelGroup::BreakMode eBreakMode; + DWORD dwSparksOnImpact; }; class CObjectGroupPhysicalPropertiesSA : public CObjectGroupPhysicalProperties @@ -60,40 +60,40 @@ class CObjectGroupPhysicalPropertiesSA : public CObjectGroupPhysicalProperties void ChangeSafeguard(); static void RestoreDefaultValues(); - void SetMass(float fMass); - float GetMass(); - void SetTurnMass(float fTurnMass); - float GetTurnMass(); - void SetAirResistance(float fAirResistance); - float GetAirResistance(); - void SetElasticity(float fElasticity); - float GetElasticity(); - void SetBuoyancy(float fBuoyancy); - float GetBuoyancy() override; - void SetUprootLimit(float fUprootLimit); - float GetUprootLimit(); - void SetColissionDamageMultiplier(float fColMult); - float GetColissionDamageMultiplier(); - void SetColissionDamageEffect(eDynamicObjectDamageEffect ucDamageEffect); - eDynamicObjectDamageEffect GetCollisionDamageEffect(); - void SetCollisionSpecialResponseCase(eDynamicObjectCollisionResponse ucResponseCase); - eDynamicObjectCollisionResponse GetCollisionSpecialResponseCase(); - void SetCameraAvoidObject(bool bAvoid); - bool GetCameraAvoidObject(); - void SetCausesExplosion(bool bExplodes); - bool GetCausesExplosion(); - bool SetFxType(eDynamicPropertyFxType eFxType); - eDynamicPropertyFxType GetFxType(); - void SetFxOffset(CVector vecOffset); - CVector GetFxOffset(); - void SetSmashMultiplier(float fMult); - float GetSmashMultiplier(); - void SetBreakVelocity(CVector vecVelocity); - CVector GetBreakVelocity(); - void SetBreakVelocityRandomness(float fRand); - float GetBreakVelocityRandomness(); - void SetBreakMode(eDynamicPropertyBreakMode eBreakMode); - eDynamicPropertyBreakMode GetBreakMode(); - void SetSparksOnImpact(bool bSparks); - bool GetSparksOnImpact(); + void SetMass(float fMass); + float GetMass(); + void SetTurnMass(float fTurnMass); + float GetTurnMass(); + void SetAirResistance(float fAirResistance); + float GetAirResistance(); + void SetElasticity(float fElasticity); + float GetElasticity(); + void SetBuoyancy(float fBuoyancy); + float GetBuoyancy() override; + void SetUprootLimit(float fUprootLimit); + float GetUprootLimit(); + void SetColissionDamageMultiplier(float fColMult); + float GetColissionDamageMultiplier(); + void SetColissionDamageEffect(eModelGroup::DamageEffect ucDamageEffect); + eModelGroup::DamageEffect GetCollisionDamageEffect(); + void SetCollisionSpecialResponseCase(eModelGroup::CollisionResponse ucResponseCase); + eModelGroup::CollisionResponse GetCollisionSpecialResponseCase(); + void SetCameraAvoidObject(bool bAvoid); + bool GetCameraAvoidObject(); + void SetCausesExplosion(bool bExplodes); + bool GetCausesExplosion(); + void SetFxType(eModelGroup::FxType eFxType); + eModelGroup::FxType GetFxType(); + void SetFxOffset(CVector vecOffset); + CVector GetFxOffset(); + void SetSmashMultiplier(float fMult); + float GetSmashMultiplier(); + void SetBreakVelocity(CVector vecVelocity); + CVector GetBreakVelocity(); + void SetBreakVelocityRandomness(float fRand); + float GetBreakVelocityRandomness(); + void SetBreakMode(eModelGroup::BreakMode eBreakMode); + eModelGroup::BreakMode GetBreakMode(); + void SetSparksOnImpact(bool bSparks); + bool GetSparksOnImpact(); }; diff --git a/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.cpp b/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.cpp index e0da401f72c..9faf754d2fc 100644 --- a/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.cpp +++ b/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.cpp @@ -380,60 +380,61 @@ ADD_ENUM(OBJECT_PROPERTY_CENTEROFMASS, "center_of_mass") ADD_ENUM(OBJECT_PROPERTY_BUOYANCY, "buoyancy") IMPLEMENT_ENUM_END("object-property") -IMPLEMENT_ENUM_BEGIN(eObjectGroupDynamicProperty) -ADD_ENUM(MASS, "mass") -ADD_ENUM(TURNMASS, "turn_mass") -ADD_ENUM(AIRRESISTANCE, "air_resistance") -ADD_ENUM(ELASTICITY, "elasticity") -ADD_ENUM(BUOYANCY, "buoyancy") -ADD_ENUM(UPROOTLIMIT, "uproot_limit") -ADD_ENUM(COLDAMAGEMULTIPLIER, "col_damage_mult") -ADD_ENUM(COLDAMAGEEFFECT, "col_damage_effect") -ADD_ENUM(SPECIALCOLRESPONSE, "special_col_response") -ADD_ENUM(CAMERAAVOID, "avoid_camera") -ADD_ENUM(EXPLOSION, "cause_explosion") -ADD_ENUM(FXTYPE, "fx_type") -ADD_ENUM(SMASHMULTIPLIER, "smash_multiplier") -ADD_ENUM(BREAKVELOCITY, "break_velocity") -ADD_ENUM(BREAKVELOCITYRAND, "break_velocity_randomness") -ADD_ENUM(BREAKMODE, "break_mode") -ADD_ENUM(SPARKSONIMPACT, "sparks_on_impact") -IMPLEMENT_ENUM_END("objectgroup-property") - -IMPLEMENT_ENUM_BEGIN(eDynamicObjectDamageEffect) -ADD_ENUM(NONE, "none") -ADD_ENUM(CHANGE_MODEL, "change_model") -ADD_ENUM(SMASH_COMPLETELY, "smash") -ADD_ENUM(CHANGE_THEN_SMASH, "change_smash") -ADD_ENUM(BREAKABLE, "breakable") -ADD_ENUM(BREAKABLE_REMOVED, "breakable_remove") -IMPLEMENT_ENUM_END("objectgroup-damageeffect") - -IMPLEMENT_ENUM_BEGIN(eDynamicObjectCollisionResponse) -ADD_ENUM(NONE, "none") -ADD_ENUM(LAMPPOST, "lamppost") -ADD_ENUM(SMALLBOX, "small_box") -ADD_ENUM(BIGBOX, "big_box") -ADD_ENUM(FENCEPART, "fence_part") -ADD_ENUM(GRENADE, "grenade") -ADD_ENUM(SWINGDOOR, "swingdoor") -ADD_ENUM(LOCKDOOR, "lockdoor") -ADD_ENUM(HANGING, "hanging") -ADD_ENUM(POOLBALL, "poolball") -IMPLEMENT_ENUM_END("objectgroup-colissionresponse") - -IMPLEMENT_ENUM_BEGIN(eDynamicPropertyFxType) -ADD_ENUM(NONE, "none") -ADD_ENUM(PLAY_ON_HIT, "play_on_hit") -ADD_ENUM(PLAY_ON_DESTROYED, "play_on_destroyed") -ADD_ENUM(PLAY_ON_HIT_DESTROYED, "play_on_hitdestroyed") -IMPLEMENT_ENUM_END("objectgroup-fxtype") - -IMPLEMENT_ENUM_BEGIN(eDynamicPropertyBreakMode) -ADD_ENUM(NOT_BY_GUN, "not_by_gun") -ADD_ENUM(BY_GUN, "by_gun") -ADD_ENUM(SMASHABLE, "smashable") -IMPLEMENT_ENUM_END("objectgroup-breakmode") +IMPLEMENT_ENUM_BEGIN(eModelGroup::Modifiable) +ADD_ENUM(eModelGroup::MASS, "mass") +ADD_ENUM(eModelGroup::TURNMASS, "turn_mass") +ADD_ENUM(eModelGroup::AIRRESISTANCE, "air_resistance") +ADD_ENUM(eModelGroup::ELASTICITY, "elasticity") +ADD_ENUM(eModelGroup::BUOYANCY, "buoyancy") +ADD_ENUM(eModelGroup::UPROOTLIMIT, "uproot_limit") +ADD_ENUM(eModelGroup::COLDAMAGEMULTIPLIER, "col_damage_mult") +ADD_ENUM(eModelGroup::COLDAMAGEEFFECT, "col_damage_effect") +ADD_ENUM(eModelGroup::SPECIALCOLRESPONSE, "special_col_response") +ADD_ENUM(eModelGroup::CAMERAAVOID, "avoid_camera") +ADD_ENUM(eModelGroup::EXPLOSION, "cause_explosion") +ADD_ENUM(eModelGroup::FXTYPE, "fx_type") +ADD_ENUM(eModelGroup::FXOFFSET, "fx_offset") +ADD_ENUM(eModelGroup::SMASHMULTIPLIER, "smash_multiplier") +ADD_ENUM(eModelGroup::BREAKVELOCITY, "break_velocity") +ADD_ENUM(eModelGroup::BREAKVELOCITYRAND, "break_velocity_randomness") +ADD_ENUM(eModelGroup::BREAKMODE, "break_mode") +ADD_ENUM(eModelGroup::SPARKSONIMPACT, "sparks_on_impact") +IMPLEMENT_ENUM_END("modelgroup-modifiable") + +IMPLEMENT_ENUM_BEGIN(eModelGroup::DamageEffect) +ADD_ENUM(eModelGroup::NO_EFFECT, "none") +ADD_ENUM(eModelGroup::CHANGE_MODEL, "change_model") +ADD_ENUM(eModelGroup::SMASH_COMPLETELY, "smash") +ADD_ENUM(eModelGroup::CHANGE_THEN_SMASH, "change_smash") +ADD_ENUM(eModelGroup::BREAKABLE, "breakable") +ADD_ENUM(eModelGroup::BREAKABLE_REMOVED, "breakable_remove") +IMPLEMENT_ENUM_END("modelgroup-damageeffect") + +IMPLEMENT_ENUM_BEGIN(eModelGroup::CollisionResponse) +ADD_ENUM(eModelGroup::NO_RESPONSE, "none") +ADD_ENUM(eModelGroup::LAMPPOST, "lamppost") +ADD_ENUM(eModelGroup::SMALLBOX, "small_box") +ADD_ENUM(eModelGroup::BIGBOX, "big_box") +ADD_ENUM(eModelGroup::FENCEPART, "fence_part") +ADD_ENUM(eModelGroup::GRENADE, "grenade") +ADD_ENUM(eModelGroup::SWINGDOOR, "swingdoor") +ADD_ENUM(eModelGroup::LOCKDOOR, "lockdoor") +ADD_ENUM(eModelGroup::HANGING, "hanging") +ADD_ENUM(eModelGroup::POOLBALL, "poolball") +IMPLEMENT_ENUM_END("modelgroup-collisionresponse") + +IMPLEMENT_ENUM_BEGIN(eModelGroup::FxType) +ADD_ENUM(eModelGroup::NO_FX, "none") +ADD_ENUM(eModelGroup::PLAY_ON_HIT, "play_on_hit") +ADD_ENUM(eModelGroup::PLAY_ON_DESTROYED, "play_on_destroyed") +ADD_ENUM(eModelGroup::PLAY_ON_HIT_DESTROYED, "play_on_hitdestroyed") +IMPLEMENT_ENUM_END("modelgroup-fxtype") + +IMPLEMENT_ENUM_BEGIN(eModelGroup::BreakMode) +ADD_ENUM(eModelGroup::NOT_BY_GUN, "not_by_gun") +ADD_ENUM(eModelGroup::BY_GUN, "by_gun") +ADD_ENUM(eModelGroup::SMASHABLE, "smashable") +IMPLEMENT_ENUM_END("modelgroup-breakmode") IMPLEMENT_ENUM_BEGIN(eFontType) ADD_ENUM(FONT_DEFAULT, "default") diff --git a/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.h b/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.h index 6126bfdf54e..616081b2e42 100644 --- a/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.h +++ b/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.h @@ -40,7 +40,11 @@ DECLARE_ENUM(eWeaponState); DECLARE_ENUM(eWeaponFlags); DECLARE_ENUM(eVehicleComponent); DECLARE_ENUM(eObjectProperty); -DECLARE_ENUM(eObjectGroupDynamicProperty); +DECLARE_ENUM(eModelGroup::Modifiable); +DECLARE_ENUM(eModelGroup::DamageEffect); +DECLARE_ENUM(eModelGroup::CollisionResponse); +DECLARE_ENUM(eModelGroup::FxType); +DECLARE_ENUM(eModelGroup::BreakMode); DECLARE_ENUM(eFontType); DECLARE_ENUM(eFontQuality); DECLARE_ENUM(eAudioLookupIndex); @@ -384,25 +388,25 @@ inline SString GetClassTypeName(eVehicleDummies*) { return "vehicle-dummy"; } -inline SString GetClassByTypeName(eObjectGroupDynamicProperty*) +inline SString GetClassByTypeName(eModelGroup::Modifiable*) { - return "objectgroup-property"; + return "modelgroup-modifiable"; } -inline SString GetClassByTypeName(eDynamicObjectDamageEffect*) +inline SString GetClassByTypeName(eModelGroup::DamageEffect*) { - return "objectgroup-damageeffect"; + return "modelgroup-damageeffect"; } -inline SString GetClassByTypeName(eDynamicObjectCollisionResponse*) +inline SString GetClassByTypeName(eModelGroup::CollisionResponse*) { - return "objectgroup-colissionresponse"; + return "modelgroup-collisionresponse"; } -inline SString GetClassByTypeName(eDynamicPropertyFxType*) +inline SString GetClassByTypeName(eModelGroup::FxType*) { - return "objectgroup-fxtype"; + return "modelgroup-fxtype"; } -inline SString GetClassByTypeName(eDynamicPropertyBreakMode*) +inline SString GetClassByTypeName(eModelGroup::BreakMode*) { - return "objectgroup-breakmode"; + return "modelgroup-breakmode"; } // diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp b/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp index fbf62420882..5e3b242632d 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp +++ b/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp @@ -1008,8 +1008,8 @@ int CLuaEngineDefs::EngineRestoreModelPhysicalPropertiesGroup(lua_State* luaVM) int CLuaEngineDefs::EngineSetModelGroupPhysicalProperty(lua_State* luaVM) { // bool engineSetModelGroupPhysicalProperty ( int groupID, string property, ...) - unsigned char ucGroup; - eObjectGroupDynamicProperty eProperty; + unsigned char ucGroup; + eModelGroup::Modifiable eProperty; CScriptArgReader argStream(luaVM); argStream.ReadNumber(ucGroup); @@ -1034,15 +1034,15 @@ int CLuaEngineDefs::EngineSetModelGroupPhysicalProperty(lua_State* luaVM) switch (eProperty) { - case MASS: - case TURNMASS: - case AIRRESISTANCE: - case ELASTICITY: - case BUOYANCY: - case UPROOTLIMIT: - case COLDAMAGEMULTIPLIER: - case SMASHMULTIPLIER: - case BREAKVELOCITYRAND: + case eModelGroup::Modifiable::MASS: + case eModelGroup::Modifiable::TURNMASS: + case eModelGroup::Modifiable::AIRRESISTANCE: + case eModelGroup::Modifiable::ELASTICITY: + case eModelGroup::Modifiable::BUOYANCY: + case eModelGroup::Modifiable::UPROOTLIMIT: + case eModelGroup::Modifiable::COLDAMAGEMULTIPLIER: + case eModelGroup::Modifiable::SMASHMULTIPLIER: + case eModelGroup::Modifiable::BREAKVELOCITYRAND: { float fValue; argStream.ReadNumber(fValue); @@ -1052,31 +1052,31 @@ int CLuaEngineDefs::EngineSetModelGroupPhysicalProperty(lua_State* luaVM) switch (eProperty) { - case MASS: + case eModelGroup::Modifiable::MASS: pGroup->SetMass(fValue); break; - case TURNMASS: + case eModelGroup::Modifiable::TURNMASS: pGroup->SetTurnMass(fValue); break; - case AIRRESISTANCE: + case eModelGroup::Modifiable::AIRRESISTANCE: pGroup->SetAirResistance(fValue); break; - case ELASTICITY: + case eModelGroup::Modifiable::ELASTICITY: pGroup->SetElasticity(fValue); break; - case BUOYANCY: + case eModelGroup::Modifiable::BUOYANCY: pGroup->SetBuoyancy(fValue); break; - case UPROOTLIMIT: + case eModelGroup::Modifiable::UPROOTLIMIT: pGroup->SetUprootLimit(fValue); break; - case COLDAMAGEMULTIPLIER: + case eModelGroup::Modifiable::COLDAMAGEMULTIPLIER: pGroup->SetColissionDamageMultiplier(fValue); break; - case SMASHMULTIPLIER: + case eModelGroup::Modifiable::SMASHMULTIPLIER: pGroup->SetSmashMultiplier(fValue); break; - case BREAKVELOCITYRAND: + case eModelGroup::Modifiable::BREAKVELOCITYRAND: pGroup->SetBreakVelocityRandomness(fValue); break; } @@ -1084,9 +1084,9 @@ int CLuaEngineDefs::EngineSetModelGroupPhysicalProperty(lua_State* luaVM) lua_pushboolean(luaVM, true); return 1; } - case CAMERAAVOID: - case EXPLOSION: - case SPARKSONIMPACT: + case eModelGroup::Modifiable::CAMERAAVOID: + case eModelGroup::Modifiable::EXPLOSION: + case eModelGroup::Modifiable::SPARKSONIMPACT: { bool bValue; argStream.ReadBool(bValue); @@ -1096,13 +1096,13 @@ int CLuaEngineDefs::EngineSetModelGroupPhysicalProperty(lua_State* luaVM) switch (eProperty) { - case CAMERAAVOID: + case eModelGroup::Modifiable::CAMERAAVOID: pGroup->SetCameraAvoidObject(bValue); break; - case EXPLOSION: + case eModelGroup::Modifiable::EXPLOSION: pGroup->SetCausesExplosion(bValue); break; - case SPARKSONIMPACT: + case eModelGroup::Modifiable::SPARKSONIMPACT: pGroup->SetSparksOnImpact(bValue); break; } @@ -1110,20 +1110,30 @@ int CLuaEngineDefs::EngineSetModelGroupPhysicalProperty(lua_State* luaVM) lua_pushboolean(luaVM, true); return 1; } - case BREAKVELOCITY: + case eModelGroup::Modifiable::FXOFFSET: + case eModelGroup::Modifiable::BREAKVELOCITY: { - CVector vecVelocity; - argStream.ReadVector3D(vecVelocity); + CVector vecValue; + argStream.ReadVector3D(vecValue); if (argStream.HasErrors()) break; - pGroup->SetBreakVelocity(vecVelocity); + switch (eProperty) + { + case eModelGroup::Modifiable::FXOFFSET: + pGroup->SetFxOffset(vecValue); + break; + case eModelGroup::Modifiable::BREAKVELOCITY: + pGroup->SetBreakVelocity(vecValue); + break; + } + lua_pushboolean(luaVM, true); return 1; } - case COLDAMAGEEFFECT: + case eModelGroup::Modifiable::COLDAMAGEEFFECT: { - eDynamicObjectDamageEffect eDamEffect; + eModelGroup::DamageEffect eDamEffect; argStream.ReadEnumString(eDamEffect); if (argStream.HasErrors()) break; @@ -1132,9 +1142,9 @@ int CLuaEngineDefs::EngineSetModelGroupPhysicalProperty(lua_State* luaVM) lua_pushboolean(luaVM, true); return 1; } - case SPECIALCOLRESPONSE: + case eModelGroup::Modifiable::SPECIALCOLRESPONSE: { - eDynamicObjectCollisionResponse eColRepsonse; + eModelGroup::CollisionResponse eColRepsonse; argStream.ReadEnumString(eColRepsonse); if (argStream.HasErrors()) break; @@ -1143,9 +1153,9 @@ int CLuaEngineDefs::EngineSetModelGroupPhysicalProperty(lua_State* luaVM) lua_pushboolean(luaVM, true); return 1; } - case FXTYPE: + case eModelGroup::Modifiable::FXTYPE: { - eDynamicPropertyFxType eFxType; + eModelGroup::FxType eFxType; argStream.ReadEnumString(eFxType); if (argStream.HasErrors()) break; @@ -1154,9 +1164,9 @@ int CLuaEngineDefs::EngineSetModelGroupPhysicalProperty(lua_State* luaVM) lua_pushboolean(luaVM, true); return 1; } - case BREAKMODE: + case eModelGroup::Modifiable::BREAKMODE: { - eDynamicPropertyBreakMode eBreakMode; + eModelGroup::BreakMode eBreakMode; argStream.ReadEnumString(eBreakMode); if (argStream.HasErrors()) break; diff --git a/Client/sdk/game/CObjectGroupPhysicalProperties.h b/Client/sdk/game/CObjectGroupPhysicalProperties.h index 01822ca5f04..dc98aae4385 100644 --- a/Client/sdk/game/CObjectGroupPhysicalProperties.h +++ b/Client/sdk/game/CObjectGroupPhysicalProperties.h @@ -18,40 +18,40 @@ class CObjectGroupPhysicalProperties virtual class CObjectGroupPhysicalPropertiesSAInterface* GetInterface() = 0; virtual unsigned char GetGroup() = 0; - virtual void SetMass(float fMass) = 0; - virtual float GetMass() = 0; - virtual void SetTurnMass(float fTurnMass) = 0; - virtual float GetTurnMass() = 0; - virtual void SetAirResistance(float fAirResistance) = 0; - virtual float GetAirResistance() = 0; - virtual void SetElasticity(float fElasticity) = 0; - virtual float GetElasticity() = 0; - virtual void SetBuoyancy(float fBuoyancy) = 0; - virtual float GetBuoyancy() = 0; - virtual void SetUprootLimit(float fUprootLimit) = 0; - virtual float GetUprootLimit() = 0; - virtual void SetColissionDamageMultiplier(float fColMult) = 0; - virtual float GetColissionDamageMultiplier() = 0; - virtual void SetColissionDamageEffect(eDynamicObjectDamageEffect eDamageEffect) = 0; - virtual eDynamicObjectDamageEffect GetCollisionDamageEffect() = 0; - virtual void SetCollisionSpecialResponseCase(eDynamicObjectCollisionResponse eResponseCase) = 0; - virtual eDynamicObjectCollisionResponse GetCollisionSpecialResponseCase() = 0; - virtual void SetCameraAvoidObject(bool bAvoid) = 0; - virtual bool GetCameraAvoidObject() = 0; - virtual void SetCausesExplosion(bool bExplodes) = 0; - virtual bool GetCausesExplosion() = 0; - virtual bool SetFxType(eDynamicPropertyFxType eFxType) = 0; - virtual eDynamicPropertyFxType GetFxType() = 0; - virtual void SetFxOffset(CVector vecOffset) = 0; - virtual CVector GetFxOffset() = 0; - virtual void SetSmashMultiplier(float fMult) = 0; - virtual float GetSmashMultiplier() = 0; - virtual void SetBreakVelocity(CVector vecVelocity) = 0; - virtual CVector GetBreakVelocity() = 0; - virtual void SetBreakVelocityRandomness(float fRand) = 0; - virtual float GetBreakVelocityRandomness() = 0; - virtual void SetBreakMode(eDynamicPropertyBreakMode eBreakMode) = 0; - virtual eDynamicPropertyBreakMode GetBreakMode() = 0; - virtual void SetSparksOnImpact(bool bSparks) = 0; - virtual bool GetSparksOnImpact() = 0; + virtual void SetMass(float fMass) = 0; + virtual float GetMass() = 0; + virtual void SetTurnMass(float fTurnMass) = 0; + virtual float GetTurnMass() = 0; + virtual void SetAirResistance(float fAirResistance) = 0; + virtual float GetAirResistance() = 0; + virtual void SetElasticity(float fElasticity) = 0; + virtual float GetElasticity() = 0; + virtual void SetBuoyancy(float fBuoyancy) = 0; + virtual float GetBuoyancy() = 0; + virtual void SetUprootLimit(float fUprootLimit) = 0; + virtual float GetUprootLimit() = 0; + virtual void SetColissionDamageMultiplier(float fColMult) = 0; + virtual float GetColissionDamageMultiplier() = 0; + virtual void SetColissionDamageEffect(eModelGroup::DamageEffect eDamageEffect) = 0; + virtual eModelGroup::DamageEffect GetCollisionDamageEffect() = 0; + virtual void SetCollisionSpecialResponseCase(eModelGroup::CollisionResponse eResponseCase) = 0; + virtual eModelGroup::CollisionResponse GetCollisionSpecialResponseCase() = 0; + virtual void SetCameraAvoidObject(bool bAvoid) = 0; + virtual bool GetCameraAvoidObject() = 0; + virtual void SetCausesExplosion(bool bExplodes) = 0; + virtual bool GetCausesExplosion() = 0; + virtual void SetFxType(eModelGroup::FxType eFxType) = 0; + virtual eModelGroup::FxType GetFxType() = 0; + virtual void SetFxOffset(CVector vecOffset) = 0; + virtual CVector GetFxOffset() = 0; + virtual void SetSmashMultiplier(float fMult) = 0; + virtual float GetSmashMultiplier() = 0; + virtual void SetBreakVelocity(CVector vecVelocity) = 0; + virtual CVector GetBreakVelocity() = 0; + virtual void SetBreakVelocityRandomness(float fRand) = 0; + virtual float GetBreakVelocityRandomness() = 0; + virtual void SetBreakMode(eModelGroup::BreakMode eBreakMode) = 0; + virtual eModelGroup::BreakMode GetBreakMode() = 0; + virtual void SetSparksOnImpact(bool bSparks) = 0; + virtual bool GetSparksOnImpact() = 0; }; diff --git a/Client/sdk/game/Common.h b/Client/sdk/game/Common.h index 6e62fe72691..fa5bc998371 100644 --- a/Client/sdk/game/Common.h +++ b/Client/sdk/game/Common.h @@ -1548,62 +1548,66 @@ enum eObjectProperty OBJECT_PROPERTY_MAX, }; -enum eObjectGroupDynamicProperty +namespace eModelGroup { - MASS, - TURNMASS, - AIRRESISTANCE, - ELASTICITY, - BUOYANCY, - UPROOTLIMIT, - COLDAMAGEMULTIPLIER, - COLDAMAGEEFFECT, - SPECIALCOLRESPONSE, - CAMERAAVOID, - EXPLOSION, - FXTYPE, - SMASHMULTIPLIER, - BREAKVELOCITY, - BREAKVELOCITYRAND, - BREAKMODE, - SPARKSONIMPACT -}; - -enum eDynamicObjectDamageEffect : unsigned char -{ - NONE = 0, - CHANGE_MODEL = 1, - SMASH_COMPLETELY = 20, - CHANGE_THEN_SMASH = 21, - BREAKABLE = 200, - BREAKABLE_REMOVED = 202 -}; - -enum eDynamicObjectCollisionResponse : unsigned char -{ - NONE, - LAMPPOST, - SMALLBOX, - BIGBOX, - FENCEPART, - GRENADE, - SWINGDOOR, - LOCKDOOR, - HANGING, - POOLBALL -}; - -enum eDynamicPropertyFxType : unsigned char -{ - NONE, - PLAY_ON_HIT, - PLAY_ON_DESTROYED, - PLAY_ON_HIT_DESTROYED -}; - -enum eDynamicPropertyBreakMode -{ - NOT_BY_GUN, - BY_GUN, - SMASHABLE, -}; + enum Modifiable + { + MASS, + TURNMASS, + AIRRESISTANCE, + ELASTICITY, + BUOYANCY, + UPROOTLIMIT, + COLDAMAGEMULTIPLIER, + COLDAMAGEEFFECT, + SPECIALCOLRESPONSE, + CAMERAAVOID, + EXPLOSION, + FXTYPE, + FXOFFSET, + SMASHMULTIPLIER, + BREAKVELOCITY, + BREAKVELOCITYRAND, + BREAKMODE, + SPARKSONIMPACT + }; + + enum DamageEffect : unsigned char + { + NO_EFFECT = 0, + CHANGE_MODEL = 1, + SMASH_COMPLETELY = 20, + CHANGE_THEN_SMASH = 21, + BREAKABLE = 200, + BREAKABLE_REMOVED = 202 + }; + + enum CollisionResponse : unsigned char + { + NO_RESPONSE, + LAMPPOST, + SMALLBOX, + BIGBOX, + FENCEPART, + GRENADE, + SWINGDOOR, + LOCKDOOR, + HANGING, + POOLBALL + }; + + enum FxType : unsigned char + { + NO_FX, + PLAY_ON_HIT, + PLAY_ON_DESTROYED, + PLAY_ON_HIT_DESTROYED + }; + + enum BreakMode + { + NOT_BY_GUN, + BY_GUN, + SMASHABLE, + }; +} From d1be9dd6c73a29b52aa030419fbd003f96b52ddf Mon Sep 17 00:00:00 2001 From: Kamil Marciniak Date: Fri, 18 Jan 2019 01:08:04 +0100 Subject: [PATCH 13/29] Added missing restore function, naming changes --- Client/game_sa/CGameSA.cpp | 2 +- Client/game_sa/CGameSA.h | 2 +- .../CObjectGroupPhysicalPropertiesSA.cpp | 19 +++++++++++++++++++ .../CObjectGroupPhysicalPropertiesSA.h | 1 + .../logic/luadefs/CLuaEngineDefs.cpp | 2 +- Client/sdk/game/CGame.h | 2 +- .../sdk/game/CObjectGroupPhysicalProperties.h | 1 + 7 files changed, 25 insertions(+), 4 deletions(-) diff --git a/Client/game_sa/CGameSA.cpp b/Client/game_sa/CGameSA.cpp index db9f70ed8e5..9e69c455c9f 100644 --- a/Client/game_sa/CGameSA.cpp +++ b/Client/game_sa/CGameSA.cpp @@ -872,7 +872,7 @@ CPed* CGameSA::GetPedContext() return m_pPedContext; } -CObjectGroupPhysicalProperties* CGameSA::ObjectGroupPhysicalProperties(unsigned char ucObjectGroup) +CObjectGroupPhysicalProperties* CGameSA::GetObjectGroupPhysicalProperties(unsigned char ucObjectGroup) { DEBUG_TRACE("CObjectGroupPhysicalProperties * CGameSA::GetObjectDynamicInfo(unsigned char ucObjectGroup)"); if (ObjectDynamicInfo[ucObjectGroup].IsValid()) diff --git a/Client/game_sa/CGameSA.h b/Client/game_sa/CGameSA.h index 52cb64534cf..b12cfc206b0 100644 --- a/Client/game_sa/CGameSA.h +++ b/Client/game_sa/CGameSA.h @@ -310,7 +310,7 @@ class CGameSA : public CGame CWeaponInfo* GetWeaponInfo(eWeaponType weapon, eWeaponSkill skill = WEAPONSKILL_STD); CModelInfo* GetModelInfo(DWORD dwModelID); - CObjectGroupPhysicalProperties* ObjectGroupPhysicalProperties(unsigned char ucObjectGroup); + CObjectGroupPhysicalProperties* GetObjectGroupPhysicalProperties(unsigned char ucObjectGroup); DWORD GetSystemTime() { diff --git a/Client/game_sa/CObjectGroupPhysicalPropertiesSA.cpp b/Client/game_sa/CObjectGroupPhysicalPropertiesSA.cpp index a868caec455..2446737740f 100644 --- a/Client/game_sa/CObjectGroupPhysicalPropertiesSA.cpp +++ b/Client/game_sa/CObjectGroupPhysicalPropertiesSA.cpp @@ -63,6 +63,25 @@ void CObjectGroupPhysicalPropertiesSA::ChangeSafeguard() } } +void CObjectGroupPhysicalPropertiesSA::RestoreDefault() +{ + if (!m_bModified) + return; + + auto ppOriginalCopy = MapFind(ms_OriginalGroupProperties, m_ucObjectGroup); + dassert(ppOriginalCopy); + if (!ppOriginalCopy) + return; + + auto pOriginal = *ppOriginalCopy; + dassert(pOriginal); + if (!pOriginal) + return; + + memcpy(m_pInterface, pOriginal, sizeof(CObjectGroupPhysicalPropertiesSAInterface)); + m_bModified = false; +} + void CObjectGroupPhysicalPropertiesSA::RestoreDefaultValues() { for (auto& entry : ms_OriginalGroupProperties) diff --git a/Client/game_sa/CObjectGroupPhysicalPropertiesSA.h b/Client/game_sa/CObjectGroupPhysicalPropertiesSA.h index 1d7f31298e4..0bb0a77c032 100644 --- a/Client/game_sa/CObjectGroupPhysicalPropertiesSA.h +++ b/Client/game_sa/CObjectGroupPhysicalPropertiesSA.h @@ -58,6 +58,7 @@ class CObjectGroupPhysicalPropertiesSA : public CObjectGroupPhysicalProperties unsigned char GetGroup(); bool IsValid(); void ChangeSafeguard(); + void RestoreDefault(); static void RestoreDefaultValues(); void SetMass(float fMass); diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp b/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp index 5e3b242632d..3fced7ffd14 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp +++ b/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp @@ -1023,7 +1023,7 @@ int CLuaEngineDefs::EngineSetModelGroupPhysicalProperty(lua_State* luaVM) return 1; } - auto pGroup = g_pGame->ObjectGroupPhysicalProperties(ucGroup); + auto pGroup = g_pGame->GetObjectGroupPhysicalProperties(ucGroup); if (!pGroup) { argStream.SetCustomError("Expected valid group ID at argument 1"); diff --git a/Client/sdk/game/CGame.h b/Client/sdk/game/CGame.h index 3836c3aaef7..b3e5f3e2bcc 100644 --- a/Client/sdk/game/CGame.h +++ b/Client/sdk/game/CGame.h @@ -249,5 +249,5 @@ class __declspec(novtable) CGame virtual void SetPostWeaponFireHandler(PostWeaponFireHandler* pPostWeaponFireHandler) = 0; virtual void SetTaskSimpleBeHitHandler(TaskSimpleBeHitHandler* pTaskSimpleBeHitHandler) = 0; - virtual CObjectGroupPhysicalProperties* ObjectGroupPhysicalProperties(unsigned char ucObjectGroup) = 0; + virtual CObjectGroupPhysicalProperties* GetObjectGroupPhysicalProperties(unsigned char ucObjectGroup) = 0; }; diff --git a/Client/sdk/game/CObjectGroupPhysicalProperties.h b/Client/sdk/game/CObjectGroupPhysicalProperties.h index dc98aae4385..c628f31f9f9 100644 --- a/Client/sdk/game/CObjectGroupPhysicalProperties.h +++ b/Client/sdk/game/CObjectGroupPhysicalProperties.h @@ -17,6 +17,7 @@ class CObjectGroupPhysicalProperties public: virtual class CObjectGroupPhysicalPropertiesSAInterface* GetInterface() = 0; virtual unsigned char GetGroup() = 0; + virtual void RestoreDefault() = 0; virtual void SetMass(float fMass) = 0; virtual float GetMass() = 0; From 626b468e0973ac6df56357253007933a2c538e79 Mon Sep 17 00:00:00 2001 From: Kamil Marciniak Date: Fri, 18 Jan 2019 01:13:11 +0100 Subject: [PATCH 14/29] enums namespace change --- .../CObjectGroupPhysicalPropertiesSA.cpp | 16 +-- .../CObjectGroupPhysicalPropertiesSA.h | 112 +++++++++--------- .../logic/lua/CLuaFunctionParseHelpers.cpp | 92 +++++++------- .../logic/lua/CLuaFunctionParseHelpers.h | 20 ++-- .../logic/luadefs/CLuaEngineDefs.cpp | 74 ++++++------ .../sdk/game/CObjectGroupPhysicalProperties.h | 72 +++++------ Client/sdk/game/Common.h | 2 +- 7 files changed, 194 insertions(+), 194 deletions(-) diff --git a/Client/game_sa/CObjectGroupPhysicalPropertiesSA.cpp b/Client/game_sa/CObjectGroupPhysicalPropertiesSA.cpp index 2446737740f..eb82e2b5ea9 100644 --- a/Client/game_sa/CObjectGroupPhysicalPropertiesSA.cpp +++ b/Client/game_sa/CObjectGroupPhysicalPropertiesSA.cpp @@ -168,24 +168,24 @@ float CObjectGroupPhysicalPropertiesSA::GetColissionDamageMultiplier() return m_pInterface->fColDamageMultiplier; } -void CObjectGroupPhysicalPropertiesSA::SetColissionDamageEffect(eModelGroup::DamageEffect eDamageEffect) +void CObjectGroupPhysicalPropertiesSA::SetColissionDamageEffect(eObjectGroup::DamageEffect eDamageEffect) { ChangeSafeguard(); m_pInterface->eColDamageEffect = eDamageEffect; } -eModelGroup::DamageEffect CObjectGroupPhysicalPropertiesSA::GetCollisionDamageEffect() +eObjectGroup::DamageEffect CObjectGroupPhysicalPropertiesSA::GetCollisionDamageEffect() { return m_pInterface->eColDamageEffect; } -void CObjectGroupPhysicalPropertiesSA::SetCollisionSpecialResponseCase(eModelGroup::CollisionResponse eResponseCase) +void CObjectGroupPhysicalPropertiesSA::SetCollisionSpecialResponseCase(eObjectGroup::CollisionResponse eResponseCase) { ChangeSafeguard(); m_pInterface->eSpecialColResponse = eResponseCase; } -eModelGroup::CollisionResponse CObjectGroupPhysicalPropertiesSA::GetCollisionSpecialResponseCase() +eObjectGroup::CollisionResponse CObjectGroupPhysicalPropertiesSA::GetCollisionSpecialResponseCase() { return m_pInterface->eSpecialColResponse; } @@ -212,13 +212,13 @@ bool CObjectGroupPhysicalPropertiesSA::GetCausesExplosion() return m_pInterface->bCausesExplosion; } -void CObjectGroupPhysicalPropertiesSA::SetFxType(eModelGroup::FxType eFxType) +void CObjectGroupPhysicalPropertiesSA::SetFxType(eObjectGroup::FxType eFxType) { ChangeSafeguard(); m_pInterface->eFxType = eFxType; } -eModelGroup::FxType CObjectGroupPhysicalPropertiesSA::GetFxType() +eObjectGroup::FxType CObjectGroupPhysicalPropertiesSA::GetFxType() { return m_pInterface->eFxType; } @@ -267,13 +267,13 @@ float CObjectGroupPhysicalPropertiesSA::GetBreakVelocityRandomness() return m_pInterface->fBreakVelocityRand; } -void CObjectGroupPhysicalPropertiesSA::SetBreakMode(eModelGroup::BreakMode eBreakMode) +void CObjectGroupPhysicalPropertiesSA::SetBreakMode(eObjectGroup::BreakMode eBreakMode) { ChangeSafeguard(); m_pInterface->eBreakMode = eBreakMode; } -eModelGroup::BreakMode CObjectGroupPhysicalPropertiesSA::GetBreakMode() +eObjectGroup::BreakMode CObjectGroupPhysicalPropertiesSA::GetBreakMode() { return m_pInterface->eBreakMode; } diff --git a/Client/game_sa/CObjectGroupPhysicalPropertiesSA.h b/Client/game_sa/CObjectGroupPhysicalPropertiesSA.h index 0bb0a77c032..26d4b61041b 100644 --- a/Client/game_sa/CObjectGroupPhysicalPropertiesSA.h +++ b/Client/game_sa/CObjectGroupPhysicalPropertiesSA.h @@ -19,26 +19,26 @@ class CObjectGroupPhysicalPropertiesSAInterface { public: - float fMass; - float fTurnMass; - float fAirResistance; - float fElasticity; - float fBuoyancy; - float fUprootLimit; - float fColDamageMultiplier; - eModelGroup::DamageEffect eColDamageEffect; - eModelGroup::CollisionResponse eSpecialColResponse; - bool bCameraAvoidObject; - bool bCausesExplosion; - eModelGroup::FxType eFxType; - unsigned char pad[3]; - CVector vecFxOffset; - void* pFxSystemPtr; - float fSmashMultiplier; - CVector vecBreakVelocity; - float fBreakVelocityRand; - eModelGroup::BreakMode eBreakMode; - DWORD dwSparksOnImpact; + float fMass; + float fTurnMass; + float fAirResistance; + float fElasticity; + float fBuoyancy; + float fUprootLimit; + float fColDamageMultiplier; + eObjectGroup::DamageEffect eColDamageEffect; + eObjectGroup::CollisionResponse eSpecialColResponse; + bool bCameraAvoidObject; + bool bCausesExplosion; + eObjectGroup::FxType eFxType; + unsigned char pad[3]; + CVector vecFxOffset; + void* pFxSystemPtr; + float fSmashMultiplier; + CVector vecBreakVelocity; + float fBreakVelocityRand; + eObjectGroup::BreakMode eBreakMode; + DWORD dwSparksOnImpact; }; class CObjectGroupPhysicalPropertiesSA : public CObjectGroupPhysicalProperties @@ -61,40 +61,40 @@ class CObjectGroupPhysicalPropertiesSA : public CObjectGroupPhysicalProperties void RestoreDefault(); static void RestoreDefaultValues(); - void SetMass(float fMass); - float GetMass(); - void SetTurnMass(float fTurnMass); - float GetTurnMass(); - void SetAirResistance(float fAirResistance); - float GetAirResistance(); - void SetElasticity(float fElasticity); - float GetElasticity(); - void SetBuoyancy(float fBuoyancy); - float GetBuoyancy() override; - void SetUprootLimit(float fUprootLimit); - float GetUprootLimit(); - void SetColissionDamageMultiplier(float fColMult); - float GetColissionDamageMultiplier(); - void SetColissionDamageEffect(eModelGroup::DamageEffect ucDamageEffect); - eModelGroup::DamageEffect GetCollisionDamageEffect(); - void SetCollisionSpecialResponseCase(eModelGroup::CollisionResponse ucResponseCase); - eModelGroup::CollisionResponse GetCollisionSpecialResponseCase(); - void SetCameraAvoidObject(bool bAvoid); - bool GetCameraAvoidObject(); - void SetCausesExplosion(bool bExplodes); - bool GetCausesExplosion(); - void SetFxType(eModelGroup::FxType eFxType); - eModelGroup::FxType GetFxType(); - void SetFxOffset(CVector vecOffset); - CVector GetFxOffset(); - void SetSmashMultiplier(float fMult); - float GetSmashMultiplier(); - void SetBreakVelocity(CVector vecVelocity); - CVector GetBreakVelocity(); - void SetBreakVelocityRandomness(float fRand); - float GetBreakVelocityRandomness(); - void SetBreakMode(eModelGroup::BreakMode eBreakMode); - eModelGroup::BreakMode GetBreakMode(); - void SetSparksOnImpact(bool bSparks); - bool GetSparksOnImpact(); + void SetMass(float fMass); + float GetMass(); + void SetTurnMass(float fTurnMass); + float GetTurnMass(); + void SetAirResistance(float fAirResistance); + float GetAirResistance(); + void SetElasticity(float fElasticity); + float GetElasticity(); + void SetBuoyancy(float fBuoyancy); + float GetBuoyancy() override; + void SetUprootLimit(float fUprootLimit); + float GetUprootLimit(); + void SetColissionDamageMultiplier(float fColMult); + float GetColissionDamageMultiplier(); + void SetColissionDamageEffect(eObjectGroup::DamageEffect ucDamageEffect); + eObjectGroup::DamageEffect GetCollisionDamageEffect(); + void SetCollisionSpecialResponseCase(eObjectGroup::CollisionResponse ucResponseCase); + eObjectGroup::CollisionResponse GetCollisionSpecialResponseCase(); + void SetCameraAvoidObject(bool bAvoid); + bool GetCameraAvoidObject(); + void SetCausesExplosion(bool bExplodes); + bool GetCausesExplosion(); + void SetFxType(eObjectGroup::FxType eFxType); + eObjectGroup::FxType GetFxType(); + void SetFxOffset(CVector vecOffset); + CVector GetFxOffset(); + void SetSmashMultiplier(float fMult); + float GetSmashMultiplier(); + void SetBreakVelocity(CVector vecVelocity); + CVector GetBreakVelocity(); + void SetBreakVelocityRandomness(float fRand); + float GetBreakVelocityRandomness(); + void SetBreakMode(eObjectGroup::BreakMode eBreakMode); + eObjectGroup::BreakMode GetBreakMode(); + void SetSparksOnImpact(bool bSparks); + bool GetSparksOnImpact(); }; diff --git a/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.cpp b/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.cpp index 9faf754d2fc..2fb76350529 100644 --- a/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.cpp +++ b/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.cpp @@ -380,60 +380,60 @@ ADD_ENUM(OBJECT_PROPERTY_CENTEROFMASS, "center_of_mass") ADD_ENUM(OBJECT_PROPERTY_BUOYANCY, "buoyancy") IMPLEMENT_ENUM_END("object-property") -IMPLEMENT_ENUM_BEGIN(eModelGroup::Modifiable) -ADD_ENUM(eModelGroup::MASS, "mass") -ADD_ENUM(eModelGroup::TURNMASS, "turn_mass") -ADD_ENUM(eModelGroup::AIRRESISTANCE, "air_resistance") -ADD_ENUM(eModelGroup::ELASTICITY, "elasticity") -ADD_ENUM(eModelGroup::BUOYANCY, "buoyancy") -ADD_ENUM(eModelGroup::UPROOTLIMIT, "uproot_limit") -ADD_ENUM(eModelGroup::COLDAMAGEMULTIPLIER, "col_damage_mult") -ADD_ENUM(eModelGroup::COLDAMAGEEFFECT, "col_damage_effect") -ADD_ENUM(eModelGroup::SPECIALCOLRESPONSE, "special_col_response") -ADD_ENUM(eModelGroup::CAMERAAVOID, "avoid_camera") -ADD_ENUM(eModelGroup::EXPLOSION, "cause_explosion") -ADD_ENUM(eModelGroup::FXTYPE, "fx_type") -ADD_ENUM(eModelGroup::FXOFFSET, "fx_offset") -ADD_ENUM(eModelGroup::SMASHMULTIPLIER, "smash_multiplier") -ADD_ENUM(eModelGroup::BREAKVELOCITY, "break_velocity") -ADD_ENUM(eModelGroup::BREAKVELOCITYRAND, "break_velocity_randomness") -ADD_ENUM(eModelGroup::BREAKMODE, "break_mode") -ADD_ENUM(eModelGroup::SPARKSONIMPACT, "sparks_on_impact") +IMPLEMENT_ENUM_BEGIN(eObjectGroup::Modifiable) +ADD_ENUM(eObjectGroup::MASS, "mass") +ADD_ENUM(eObjectGroup::TURNMASS, "turn_mass") +ADD_ENUM(eObjectGroup::AIRRESISTANCE, "air_resistance") +ADD_ENUM(eObjectGroup::ELASTICITY, "elasticity") +ADD_ENUM(eObjectGroup::BUOYANCY, "buoyancy") +ADD_ENUM(eObjectGroup::UPROOTLIMIT, "uproot_limit") +ADD_ENUM(eObjectGroup::COLDAMAGEMULTIPLIER, "col_damage_mult") +ADD_ENUM(eObjectGroup::COLDAMAGEEFFECT, "col_damage_effect") +ADD_ENUM(eObjectGroup::SPECIALCOLRESPONSE, "special_col_response") +ADD_ENUM(eObjectGroup::CAMERAAVOID, "avoid_camera") +ADD_ENUM(eObjectGroup::EXPLOSION, "cause_explosion") +ADD_ENUM(eObjectGroup::FXTYPE, "fx_type") +ADD_ENUM(eObjectGroup::FXOFFSET, "fx_offset") +ADD_ENUM(eObjectGroup::SMASHMULTIPLIER, "smash_multiplier") +ADD_ENUM(eObjectGroup::BREAKVELOCITY, "break_velocity") +ADD_ENUM(eObjectGroup::BREAKVELOCITYRAND, "break_velocity_randomness") +ADD_ENUM(eObjectGroup::BREAKMODE, "break_mode") +ADD_ENUM(eObjectGroup::SPARKSONIMPACT, "sparks_on_impact") IMPLEMENT_ENUM_END("modelgroup-modifiable") -IMPLEMENT_ENUM_BEGIN(eModelGroup::DamageEffect) -ADD_ENUM(eModelGroup::NO_EFFECT, "none") -ADD_ENUM(eModelGroup::CHANGE_MODEL, "change_model") -ADD_ENUM(eModelGroup::SMASH_COMPLETELY, "smash") -ADD_ENUM(eModelGroup::CHANGE_THEN_SMASH, "change_smash") -ADD_ENUM(eModelGroup::BREAKABLE, "breakable") -ADD_ENUM(eModelGroup::BREAKABLE_REMOVED, "breakable_remove") +IMPLEMENT_ENUM_BEGIN(eObjectGroup::DamageEffect) +ADD_ENUM(eObjectGroup::NO_EFFECT, "none") +ADD_ENUM(eObjectGroup::CHANGE_MODEL, "change_model") +ADD_ENUM(eObjectGroup::SMASH_COMPLETELY, "smash") +ADD_ENUM(eObjectGroup::CHANGE_THEN_SMASH, "change_smash") +ADD_ENUM(eObjectGroup::BREAKABLE, "breakable") +ADD_ENUM(eObjectGroup::BREAKABLE_REMOVED, "breakable_remove") IMPLEMENT_ENUM_END("modelgroup-damageeffect") -IMPLEMENT_ENUM_BEGIN(eModelGroup::CollisionResponse) -ADD_ENUM(eModelGroup::NO_RESPONSE, "none") -ADD_ENUM(eModelGroup::LAMPPOST, "lamppost") -ADD_ENUM(eModelGroup::SMALLBOX, "small_box") -ADD_ENUM(eModelGroup::BIGBOX, "big_box") -ADD_ENUM(eModelGroup::FENCEPART, "fence_part") -ADD_ENUM(eModelGroup::GRENADE, "grenade") -ADD_ENUM(eModelGroup::SWINGDOOR, "swingdoor") -ADD_ENUM(eModelGroup::LOCKDOOR, "lockdoor") -ADD_ENUM(eModelGroup::HANGING, "hanging") -ADD_ENUM(eModelGroup::POOLBALL, "poolball") +IMPLEMENT_ENUM_BEGIN(eObjectGroup::CollisionResponse) +ADD_ENUM(eObjectGroup::NO_RESPONSE, "none") +ADD_ENUM(eObjectGroup::LAMPPOST, "lamppost") +ADD_ENUM(eObjectGroup::SMALLBOX, "small_box") +ADD_ENUM(eObjectGroup::BIGBOX, "big_box") +ADD_ENUM(eObjectGroup::FENCEPART, "fence_part") +ADD_ENUM(eObjectGroup::GRENADE, "grenade") +ADD_ENUM(eObjectGroup::SWINGDOOR, "swingdoor") +ADD_ENUM(eObjectGroup::LOCKDOOR, "lockdoor") +ADD_ENUM(eObjectGroup::HANGING, "hanging") +ADD_ENUM(eObjectGroup::POOLBALL, "poolball") IMPLEMENT_ENUM_END("modelgroup-collisionresponse") -IMPLEMENT_ENUM_BEGIN(eModelGroup::FxType) -ADD_ENUM(eModelGroup::NO_FX, "none") -ADD_ENUM(eModelGroup::PLAY_ON_HIT, "play_on_hit") -ADD_ENUM(eModelGroup::PLAY_ON_DESTROYED, "play_on_destroyed") -ADD_ENUM(eModelGroup::PLAY_ON_HIT_DESTROYED, "play_on_hitdestroyed") +IMPLEMENT_ENUM_BEGIN(eObjectGroup::FxType) +ADD_ENUM(eObjectGroup::NO_FX, "none") +ADD_ENUM(eObjectGroup::PLAY_ON_HIT, "play_on_hit") +ADD_ENUM(eObjectGroup::PLAY_ON_DESTROYED, "play_on_destroyed") +ADD_ENUM(eObjectGroup::PLAY_ON_HIT_DESTROYED, "play_on_hitdestroyed") IMPLEMENT_ENUM_END("modelgroup-fxtype") -IMPLEMENT_ENUM_BEGIN(eModelGroup::BreakMode) -ADD_ENUM(eModelGroup::NOT_BY_GUN, "not_by_gun") -ADD_ENUM(eModelGroup::BY_GUN, "by_gun") -ADD_ENUM(eModelGroup::SMASHABLE, "smashable") +IMPLEMENT_ENUM_BEGIN(eObjectGroup::BreakMode) +ADD_ENUM(eObjectGroup::NOT_BY_GUN, "not_by_gun") +ADD_ENUM(eObjectGroup::BY_GUN, "by_gun") +ADD_ENUM(eObjectGroup::SMASHABLE, "smashable") IMPLEMENT_ENUM_END("modelgroup-breakmode") IMPLEMENT_ENUM_BEGIN(eFontType) diff --git a/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.h b/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.h index 616081b2e42..2492404f271 100644 --- a/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.h +++ b/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.h @@ -40,11 +40,11 @@ DECLARE_ENUM(eWeaponState); DECLARE_ENUM(eWeaponFlags); DECLARE_ENUM(eVehicleComponent); DECLARE_ENUM(eObjectProperty); -DECLARE_ENUM(eModelGroup::Modifiable); -DECLARE_ENUM(eModelGroup::DamageEffect); -DECLARE_ENUM(eModelGroup::CollisionResponse); -DECLARE_ENUM(eModelGroup::FxType); -DECLARE_ENUM(eModelGroup::BreakMode); +DECLARE_ENUM(eObjectGroup::Modifiable); +DECLARE_ENUM(eObjectGroup::DamageEffect); +DECLARE_ENUM(eObjectGroup::CollisionResponse); +DECLARE_ENUM(eObjectGroup::FxType); +DECLARE_ENUM(eObjectGroup::BreakMode); DECLARE_ENUM(eFontType); DECLARE_ENUM(eFontQuality); DECLARE_ENUM(eAudioLookupIndex); @@ -388,23 +388,23 @@ inline SString GetClassTypeName(eVehicleDummies*) { return "vehicle-dummy"; } -inline SString GetClassByTypeName(eModelGroup::Modifiable*) +inline SString GetClassByTypeName(eObjectGroup::Modifiable*) { return "modelgroup-modifiable"; } -inline SString GetClassByTypeName(eModelGroup::DamageEffect*) +inline SString GetClassByTypeName(eObjectGroup::DamageEffect*) { return "modelgroup-damageeffect"; } -inline SString GetClassByTypeName(eModelGroup::CollisionResponse*) +inline SString GetClassByTypeName(eObjectGroup::CollisionResponse*) { return "modelgroup-collisionresponse"; } -inline SString GetClassByTypeName(eModelGroup::FxType*) +inline SString GetClassByTypeName(eObjectGroup::FxType*) { return "modelgroup-fxtype"; } -inline SString GetClassByTypeName(eModelGroup::BreakMode*) +inline SString GetClassByTypeName(eObjectGroup::BreakMode*) { return "modelgroup-breakmode"; } diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp b/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp index 3fced7ffd14..51cd3226da8 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp +++ b/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp @@ -1009,7 +1009,7 @@ int CLuaEngineDefs::EngineSetModelGroupPhysicalProperty(lua_State* luaVM) { // bool engineSetModelGroupPhysicalProperty ( int groupID, string property, ...) unsigned char ucGroup; - eModelGroup::Modifiable eProperty; + eObjectGroup::Modifiable eProperty; CScriptArgReader argStream(luaVM); argStream.ReadNumber(ucGroup); @@ -1034,15 +1034,15 @@ int CLuaEngineDefs::EngineSetModelGroupPhysicalProperty(lua_State* luaVM) switch (eProperty) { - case eModelGroup::Modifiable::MASS: - case eModelGroup::Modifiable::TURNMASS: - case eModelGroup::Modifiable::AIRRESISTANCE: - case eModelGroup::Modifiable::ELASTICITY: - case eModelGroup::Modifiable::BUOYANCY: - case eModelGroup::Modifiable::UPROOTLIMIT: - case eModelGroup::Modifiable::COLDAMAGEMULTIPLIER: - case eModelGroup::Modifiable::SMASHMULTIPLIER: - case eModelGroup::Modifiable::BREAKVELOCITYRAND: + case eObjectGroup::Modifiable::MASS: + case eObjectGroup::Modifiable::TURNMASS: + case eObjectGroup::Modifiable::AIRRESISTANCE: + case eObjectGroup::Modifiable::ELASTICITY: + case eObjectGroup::Modifiable::BUOYANCY: + case eObjectGroup::Modifiable::UPROOTLIMIT: + case eObjectGroup::Modifiable::COLDAMAGEMULTIPLIER: + case eObjectGroup::Modifiable::SMASHMULTIPLIER: + case eObjectGroup::Modifiable::BREAKVELOCITYRAND: { float fValue; argStream.ReadNumber(fValue); @@ -1052,31 +1052,31 @@ int CLuaEngineDefs::EngineSetModelGroupPhysicalProperty(lua_State* luaVM) switch (eProperty) { - case eModelGroup::Modifiable::MASS: + case eObjectGroup::Modifiable::MASS: pGroup->SetMass(fValue); break; - case eModelGroup::Modifiable::TURNMASS: + case eObjectGroup::Modifiable::TURNMASS: pGroup->SetTurnMass(fValue); break; - case eModelGroup::Modifiable::AIRRESISTANCE: + case eObjectGroup::Modifiable::AIRRESISTANCE: pGroup->SetAirResistance(fValue); break; - case eModelGroup::Modifiable::ELASTICITY: + case eObjectGroup::Modifiable::ELASTICITY: pGroup->SetElasticity(fValue); break; - case eModelGroup::Modifiable::BUOYANCY: + case eObjectGroup::Modifiable::BUOYANCY: pGroup->SetBuoyancy(fValue); break; - case eModelGroup::Modifiable::UPROOTLIMIT: + case eObjectGroup::Modifiable::UPROOTLIMIT: pGroup->SetUprootLimit(fValue); break; - case eModelGroup::Modifiable::COLDAMAGEMULTIPLIER: + case eObjectGroup::Modifiable::COLDAMAGEMULTIPLIER: pGroup->SetColissionDamageMultiplier(fValue); break; - case eModelGroup::Modifiable::SMASHMULTIPLIER: + case eObjectGroup::Modifiable::SMASHMULTIPLIER: pGroup->SetSmashMultiplier(fValue); break; - case eModelGroup::Modifiable::BREAKVELOCITYRAND: + case eObjectGroup::Modifiable::BREAKVELOCITYRAND: pGroup->SetBreakVelocityRandomness(fValue); break; } @@ -1084,9 +1084,9 @@ int CLuaEngineDefs::EngineSetModelGroupPhysicalProperty(lua_State* luaVM) lua_pushboolean(luaVM, true); return 1; } - case eModelGroup::Modifiable::CAMERAAVOID: - case eModelGroup::Modifiable::EXPLOSION: - case eModelGroup::Modifiable::SPARKSONIMPACT: + case eObjectGroup::Modifiable::CAMERAAVOID: + case eObjectGroup::Modifiable::EXPLOSION: + case eObjectGroup::Modifiable::SPARKSONIMPACT: { bool bValue; argStream.ReadBool(bValue); @@ -1096,13 +1096,13 @@ int CLuaEngineDefs::EngineSetModelGroupPhysicalProperty(lua_State* luaVM) switch (eProperty) { - case eModelGroup::Modifiable::CAMERAAVOID: + case eObjectGroup::Modifiable::CAMERAAVOID: pGroup->SetCameraAvoidObject(bValue); break; - case eModelGroup::Modifiable::EXPLOSION: + case eObjectGroup::Modifiable::EXPLOSION: pGroup->SetCausesExplosion(bValue); break; - case eModelGroup::Modifiable::SPARKSONIMPACT: + case eObjectGroup::Modifiable::SPARKSONIMPACT: pGroup->SetSparksOnImpact(bValue); break; } @@ -1110,8 +1110,8 @@ int CLuaEngineDefs::EngineSetModelGroupPhysicalProperty(lua_State* luaVM) lua_pushboolean(luaVM, true); return 1; } - case eModelGroup::Modifiable::FXOFFSET: - case eModelGroup::Modifiable::BREAKVELOCITY: + case eObjectGroup::Modifiable::FXOFFSET: + case eObjectGroup::Modifiable::BREAKVELOCITY: { CVector vecValue; argStream.ReadVector3D(vecValue); @@ -1120,10 +1120,10 @@ int CLuaEngineDefs::EngineSetModelGroupPhysicalProperty(lua_State* luaVM) switch (eProperty) { - case eModelGroup::Modifiable::FXOFFSET: + case eObjectGroup::Modifiable::FXOFFSET: pGroup->SetFxOffset(vecValue); break; - case eModelGroup::Modifiable::BREAKVELOCITY: + case eObjectGroup::Modifiable::BREAKVELOCITY: pGroup->SetBreakVelocity(vecValue); break; } @@ -1131,9 +1131,9 @@ int CLuaEngineDefs::EngineSetModelGroupPhysicalProperty(lua_State* luaVM) lua_pushboolean(luaVM, true); return 1; } - case eModelGroup::Modifiable::COLDAMAGEEFFECT: + case eObjectGroup::Modifiable::COLDAMAGEEFFECT: { - eModelGroup::DamageEffect eDamEffect; + eObjectGroup::DamageEffect eDamEffect; argStream.ReadEnumString(eDamEffect); if (argStream.HasErrors()) break; @@ -1142,9 +1142,9 @@ int CLuaEngineDefs::EngineSetModelGroupPhysicalProperty(lua_State* luaVM) lua_pushboolean(luaVM, true); return 1; } - case eModelGroup::Modifiable::SPECIALCOLRESPONSE: + case eObjectGroup::Modifiable::SPECIALCOLRESPONSE: { - eModelGroup::CollisionResponse eColRepsonse; + eObjectGroup::CollisionResponse eColRepsonse; argStream.ReadEnumString(eColRepsonse); if (argStream.HasErrors()) break; @@ -1153,9 +1153,9 @@ int CLuaEngineDefs::EngineSetModelGroupPhysicalProperty(lua_State* luaVM) lua_pushboolean(luaVM, true); return 1; } - case eModelGroup::Modifiable::FXTYPE: + case eObjectGroup::Modifiable::FXTYPE: { - eModelGroup::FxType eFxType; + eObjectGroup::FxType eFxType; argStream.ReadEnumString(eFxType); if (argStream.HasErrors()) break; @@ -1164,9 +1164,9 @@ int CLuaEngineDefs::EngineSetModelGroupPhysicalProperty(lua_State* luaVM) lua_pushboolean(luaVM, true); return 1; } - case eModelGroup::Modifiable::BREAKMODE: + case eObjectGroup::Modifiable::BREAKMODE: { - eModelGroup::BreakMode eBreakMode; + eObjectGroup::BreakMode eBreakMode; argStream.ReadEnumString(eBreakMode); if (argStream.HasErrors()) break; diff --git a/Client/sdk/game/CObjectGroupPhysicalProperties.h b/Client/sdk/game/CObjectGroupPhysicalProperties.h index c628f31f9f9..dc8cce978ac 100644 --- a/Client/sdk/game/CObjectGroupPhysicalProperties.h +++ b/Client/sdk/game/CObjectGroupPhysicalProperties.h @@ -19,40 +19,40 @@ class CObjectGroupPhysicalProperties virtual unsigned char GetGroup() = 0; virtual void RestoreDefault() = 0; - virtual void SetMass(float fMass) = 0; - virtual float GetMass() = 0; - virtual void SetTurnMass(float fTurnMass) = 0; - virtual float GetTurnMass() = 0; - virtual void SetAirResistance(float fAirResistance) = 0; - virtual float GetAirResistance() = 0; - virtual void SetElasticity(float fElasticity) = 0; - virtual float GetElasticity() = 0; - virtual void SetBuoyancy(float fBuoyancy) = 0; - virtual float GetBuoyancy() = 0; - virtual void SetUprootLimit(float fUprootLimit) = 0; - virtual float GetUprootLimit() = 0; - virtual void SetColissionDamageMultiplier(float fColMult) = 0; - virtual float GetColissionDamageMultiplier() = 0; - virtual void SetColissionDamageEffect(eModelGroup::DamageEffect eDamageEffect) = 0; - virtual eModelGroup::DamageEffect GetCollisionDamageEffect() = 0; - virtual void SetCollisionSpecialResponseCase(eModelGroup::CollisionResponse eResponseCase) = 0; - virtual eModelGroup::CollisionResponse GetCollisionSpecialResponseCase() = 0; - virtual void SetCameraAvoidObject(bool bAvoid) = 0; - virtual bool GetCameraAvoidObject() = 0; - virtual void SetCausesExplosion(bool bExplodes) = 0; - virtual bool GetCausesExplosion() = 0; - virtual void SetFxType(eModelGroup::FxType eFxType) = 0; - virtual eModelGroup::FxType GetFxType() = 0; - virtual void SetFxOffset(CVector vecOffset) = 0; - virtual CVector GetFxOffset() = 0; - virtual void SetSmashMultiplier(float fMult) = 0; - virtual float GetSmashMultiplier() = 0; - virtual void SetBreakVelocity(CVector vecVelocity) = 0; - virtual CVector GetBreakVelocity() = 0; - virtual void SetBreakVelocityRandomness(float fRand) = 0; - virtual float GetBreakVelocityRandomness() = 0; - virtual void SetBreakMode(eModelGroup::BreakMode eBreakMode) = 0; - virtual eModelGroup::BreakMode GetBreakMode() = 0; - virtual void SetSparksOnImpact(bool bSparks) = 0; - virtual bool GetSparksOnImpact() = 0; + virtual void SetMass(float fMass) = 0; + virtual float GetMass() = 0; + virtual void SetTurnMass(float fTurnMass) = 0; + virtual float GetTurnMass() = 0; + virtual void SetAirResistance(float fAirResistance) = 0; + virtual float GetAirResistance() = 0; + virtual void SetElasticity(float fElasticity) = 0; + virtual float GetElasticity() = 0; + virtual void SetBuoyancy(float fBuoyancy) = 0; + virtual float GetBuoyancy() = 0; + virtual void SetUprootLimit(float fUprootLimit) = 0; + virtual float GetUprootLimit() = 0; + virtual void SetColissionDamageMultiplier(float fColMult) = 0; + virtual float GetColissionDamageMultiplier() = 0; + virtual void SetColissionDamageEffect(eObjectGroup::DamageEffect eDamageEffect) = 0; + virtual eObjectGroup::DamageEffect GetCollisionDamageEffect() = 0; + virtual void SetCollisionSpecialResponseCase(eObjectGroup::CollisionResponse eResponseCase) = 0; + virtual eObjectGroup::CollisionResponse GetCollisionSpecialResponseCase() = 0; + virtual void SetCameraAvoidObject(bool bAvoid) = 0; + virtual bool GetCameraAvoidObject() = 0; + virtual void SetCausesExplosion(bool bExplodes) = 0; + virtual bool GetCausesExplosion() = 0; + virtual void SetFxType(eObjectGroup::FxType eFxType) = 0; + virtual eObjectGroup::FxType GetFxType() = 0; + virtual void SetFxOffset(CVector vecOffset) = 0; + virtual CVector GetFxOffset() = 0; + virtual void SetSmashMultiplier(float fMult) = 0; + virtual float GetSmashMultiplier() = 0; + virtual void SetBreakVelocity(CVector vecVelocity) = 0; + virtual CVector GetBreakVelocity() = 0; + virtual void SetBreakVelocityRandomness(float fRand) = 0; + virtual float GetBreakVelocityRandomness() = 0; + virtual void SetBreakMode(eObjectGroup::BreakMode eBreakMode) = 0; + virtual eObjectGroup::BreakMode GetBreakMode() = 0; + virtual void SetSparksOnImpact(bool bSparks) = 0; + virtual bool GetSparksOnImpact() = 0; }; diff --git a/Client/sdk/game/Common.h b/Client/sdk/game/Common.h index fa5bc998371..d720b1b1836 100644 --- a/Client/sdk/game/Common.h +++ b/Client/sdk/game/Common.h @@ -1548,7 +1548,7 @@ enum eObjectProperty OBJECT_PROPERTY_MAX, }; -namespace eModelGroup +namespace eObjectGroup { enum Modifiable { From 73d6ede3cd4dec3fc7232e1a3df12e1003bc7026 Mon Sep 17 00:00:00 2001 From: Kamil Marciniak Date: Fri, 18 Jan 2019 23:47:15 +0100 Subject: [PATCH 15/29] Ability to get properties from lua --- .../CObjectGroupPhysicalPropertiesSA.cpp | 6 +- .../CObjectGroupPhysicalPropertiesSA.h | 6 +- .../logic/lua/CLuaFunctionParseHelpers.cpp | 82 ++++----- .../logic/luadefs/CLuaEngineDefs.cpp | 169 +++++++++++++++++- .../deathmatch/logic/luadefs/CLuaEngineDefs.h | 1 + .../sdk/game/CObjectGroupPhysicalProperties.h | 6 +- 6 files changed, 215 insertions(+), 55 deletions(-) diff --git a/Client/game_sa/CObjectGroupPhysicalPropertiesSA.cpp b/Client/game_sa/CObjectGroupPhysicalPropertiesSA.cpp index eb82e2b5ea9..584e33ec0ac 100644 --- a/Client/game_sa/CObjectGroupPhysicalPropertiesSA.cpp +++ b/Client/game_sa/CObjectGroupPhysicalPropertiesSA.cpp @@ -157,18 +157,18 @@ float CObjectGroupPhysicalPropertiesSA::GetUprootLimit() return m_pInterface->fUprootLimit; } -void CObjectGroupPhysicalPropertiesSA::SetColissionDamageMultiplier(float fColMult) +void CObjectGroupPhysicalPropertiesSA::SetCollisionDamageMultiplier(float fColMult) { ChangeSafeguard(); m_pInterface->fColDamageMultiplier = fColMult; } -float CObjectGroupPhysicalPropertiesSA::GetColissionDamageMultiplier() +float CObjectGroupPhysicalPropertiesSA::GetCollisionDamageMultiplier() { return m_pInterface->fColDamageMultiplier; } -void CObjectGroupPhysicalPropertiesSA::SetColissionDamageEffect(eObjectGroup::DamageEffect eDamageEffect) +void CObjectGroupPhysicalPropertiesSA::SetCollisionDamageEffect(eObjectGroup::DamageEffect eDamageEffect) { ChangeSafeguard(); m_pInterface->eColDamageEffect = eDamageEffect; diff --git a/Client/game_sa/CObjectGroupPhysicalPropertiesSA.h b/Client/game_sa/CObjectGroupPhysicalPropertiesSA.h index 26d4b61041b..14f6bdae94e 100644 --- a/Client/game_sa/CObjectGroupPhysicalPropertiesSA.h +++ b/Client/game_sa/CObjectGroupPhysicalPropertiesSA.h @@ -73,9 +73,9 @@ class CObjectGroupPhysicalPropertiesSA : public CObjectGroupPhysicalProperties float GetBuoyancy() override; void SetUprootLimit(float fUprootLimit); float GetUprootLimit(); - void SetColissionDamageMultiplier(float fColMult); - float GetColissionDamageMultiplier(); - void SetColissionDamageEffect(eObjectGroup::DamageEffect ucDamageEffect); + void SetCollisionDamageMultiplier(float fColMult); + float GetCollisionDamageMultiplier(); + void SetCollisionDamageEffect(eObjectGroup::DamageEffect ucDamageEffect); eObjectGroup::DamageEffect GetCollisionDamageEffect(); void SetCollisionSpecialResponseCase(eObjectGroup::CollisionResponse ucResponseCase); eObjectGroup::CollisionResponse GetCollisionSpecialResponseCase(); diff --git a/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.cpp b/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.cpp index 2fb76350529..a9c0e3a7ed2 100644 --- a/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.cpp +++ b/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.cpp @@ -381,59 +381,59 @@ ADD_ENUM(OBJECT_PROPERTY_BUOYANCY, "buoyancy") IMPLEMENT_ENUM_END("object-property") IMPLEMENT_ENUM_BEGIN(eObjectGroup::Modifiable) -ADD_ENUM(eObjectGroup::MASS, "mass") -ADD_ENUM(eObjectGroup::TURNMASS, "turn_mass") -ADD_ENUM(eObjectGroup::AIRRESISTANCE, "air_resistance") -ADD_ENUM(eObjectGroup::ELASTICITY, "elasticity") -ADD_ENUM(eObjectGroup::BUOYANCY, "buoyancy") -ADD_ENUM(eObjectGroup::UPROOTLIMIT, "uproot_limit") -ADD_ENUM(eObjectGroup::COLDAMAGEMULTIPLIER, "col_damage_mult") -ADD_ENUM(eObjectGroup::COLDAMAGEEFFECT, "col_damage_effect") -ADD_ENUM(eObjectGroup::SPECIALCOLRESPONSE, "special_col_response") -ADD_ENUM(eObjectGroup::CAMERAAVOID, "avoid_camera") -ADD_ENUM(eObjectGroup::EXPLOSION, "cause_explosion") -ADD_ENUM(eObjectGroup::FXTYPE, "fx_type") -ADD_ENUM(eObjectGroup::FXOFFSET, "fx_offset") -ADD_ENUM(eObjectGroup::SMASHMULTIPLIER, "smash_multiplier") -ADD_ENUM(eObjectGroup::BREAKVELOCITY, "break_velocity") -ADD_ENUM(eObjectGroup::BREAKVELOCITYRAND, "break_velocity_randomness") -ADD_ENUM(eObjectGroup::BREAKMODE, "break_mode") -ADD_ENUM(eObjectGroup::SPARKSONIMPACT, "sparks_on_impact") +ADD_ENUM(eObjectGroup::Modifiable::MASS, "mass") +ADD_ENUM(eObjectGroup::Modifiable::TURNMASS, "turn_mass") +ADD_ENUM(eObjectGroup::Modifiable::AIRRESISTANCE, "air_resistance") +ADD_ENUM(eObjectGroup::Modifiable::ELASTICITY, "elasticity") +ADD_ENUM(eObjectGroup::Modifiable::BUOYANCY, "buoyancy") +ADD_ENUM(eObjectGroup::Modifiable::UPROOTLIMIT, "uproot_limit") +ADD_ENUM(eObjectGroup::Modifiable::COLDAMAGEMULTIPLIER, "col_damage_multiplier") +ADD_ENUM(eObjectGroup::Modifiable::COLDAMAGEEFFECT, "col_damage_effect") +ADD_ENUM(eObjectGroup::Modifiable::SPECIALCOLRESPONSE, "special_col_response") +ADD_ENUM(eObjectGroup::Modifiable::CAMERAAVOID, "avoid_camera") +ADD_ENUM(eObjectGroup::Modifiable::EXPLOSION, "cause_explosion") +ADD_ENUM(eObjectGroup::Modifiable::FXTYPE, "fx_type") +ADD_ENUM(eObjectGroup::Modifiable::FXOFFSET, "fx_offset") +ADD_ENUM(eObjectGroup::Modifiable::SMASHMULTIPLIER, "smash_multiplier") +ADD_ENUM(eObjectGroup::Modifiable::BREAKVELOCITY, "break_velocity") +ADD_ENUM(eObjectGroup::Modifiable::BREAKVELOCITYRAND, "break_velocity_randomness") +ADD_ENUM(eObjectGroup::Modifiable::BREAKMODE, "break_mode") +ADD_ENUM(eObjectGroup::Modifiable::SPARKSONIMPACT, "sparks_on_impact") IMPLEMENT_ENUM_END("modelgroup-modifiable") IMPLEMENT_ENUM_BEGIN(eObjectGroup::DamageEffect) -ADD_ENUM(eObjectGroup::NO_EFFECT, "none") -ADD_ENUM(eObjectGroup::CHANGE_MODEL, "change_model") -ADD_ENUM(eObjectGroup::SMASH_COMPLETELY, "smash") -ADD_ENUM(eObjectGroup::CHANGE_THEN_SMASH, "change_smash") -ADD_ENUM(eObjectGroup::BREAKABLE, "breakable") -ADD_ENUM(eObjectGroup::BREAKABLE_REMOVED, "breakable_remove") +ADD_ENUM(eObjectGroup::DamageEffect::NO_EFFECT, "none") +ADD_ENUM(eObjectGroup::DamageEffect::CHANGE_MODEL, "change_model") +ADD_ENUM(eObjectGroup::DamageEffect::SMASH_COMPLETELY, "smash") +ADD_ENUM(eObjectGroup::DamageEffect::CHANGE_THEN_SMASH, "change_smash") +ADD_ENUM(eObjectGroup::DamageEffect::BREAKABLE, "breakable") +ADD_ENUM(eObjectGroup::DamageEffect::BREAKABLE_REMOVED, "breakable_remove") IMPLEMENT_ENUM_END("modelgroup-damageeffect") IMPLEMENT_ENUM_BEGIN(eObjectGroup::CollisionResponse) -ADD_ENUM(eObjectGroup::NO_RESPONSE, "none") -ADD_ENUM(eObjectGroup::LAMPPOST, "lamppost") -ADD_ENUM(eObjectGroup::SMALLBOX, "small_box") -ADD_ENUM(eObjectGroup::BIGBOX, "big_box") -ADD_ENUM(eObjectGroup::FENCEPART, "fence_part") -ADD_ENUM(eObjectGroup::GRENADE, "grenade") -ADD_ENUM(eObjectGroup::SWINGDOOR, "swingdoor") -ADD_ENUM(eObjectGroup::LOCKDOOR, "lockdoor") -ADD_ENUM(eObjectGroup::HANGING, "hanging") -ADD_ENUM(eObjectGroup::POOLBALL, "poolball") +ADD_ENUM(eObjectGroup::CollisionResponse::NO_RESPONSE, "none") +ADD_ENUM(eObjectGroup::CollisionResponse::LAMPPOST, "lamppost") +ADD_ENUM(eObjectGroup::CollisionResponse::SMALLBOX, "small_box") +ADD_ENUM(eObjectGroup::CollisionResponse::BIGBOX, "big_box") +ADD_ENUM(eObjectGroup::CollisionResponse::FENCEPART, "fence_part") +ADD_ENUM(eObjectGroup::CollisionResponse::GRENADE, "grenade") +ADD_ENUM(eObjectGroup::CollisionResponse::SWINGDOOR, "swingdoor") +ADD_ENUM(eObjectGroup::CollisionResponse::LOCKDOOR, "lockdoor") +ADD_ENUM(eObjectGroup::CollisionResponse::HANGING, "hanging") +ADD_ENUM(eObjectGroup::CollisionResponse::POOLBALL, "poolball") IMPLEMENT_ENUM_END("modelgroup-collisionresponse") IMPLEMENT_ENUM_BEGIN(eObjectGroup::FxType) -ADD_ENUM(eObjectGroup::NO_FX, "none") -ADD_ENUM(eObjectGroup::PLAY_ON_HIT, "play_on_hit") -ADD_ENUM(eObjectGroup::PLAY_ON_DESTROYED, "play_on_destroyed") -ADD_ENUM(eObjectGroup::PLAY_ON_HIT_DESTROYED, "play_on_hitdestroyed") +ADD_ENUM(eObjectGroup::FxType::NO_FX, "none") +ADD_ENUM(eObjectGroup::FxType::PLAY_ON_HIT, "play_on_hit") +ADD_ENUM(eObjectGroup::FxType::PLAY_ON_DESTROYED, "play_on_destroyed") +ADD_ENUM(eObjectGroup::FxType::PLAY_ON_HIT_DESTROYED, "play_on_hitdestroyed") IMPLEMENT_ENUM_END("modelgroup-fxtype") IMPLEMENT_ENUM_BEGIN(eObjectGroup::BreakMode) -ADD_ENUM(eObjectGroup::NOT_BY_GUN, "not_by_gun") -ADD_ENUM(eObjectGroup::BY_GUN, "by_gun") -ADD_ENUM(eObjectGroup::SMASHABLE, "smashable") +ADD_ENUM(eObjectGroup::BreakMode::NOT_BY_GUN, "not_by_gun") +ADD_ENUM(eObjectGroup::BreakMode::BY_GUN, "by_gun") +ADD_ENUM(eObjectGroup::BreakMode::SMASHABLE, "smashable") IMPLEMENT_ENUM_END("modelgroup-breakmode") IMPLEMENT_ENUM_BEGIN(eFontType) diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp b/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp index 51cd3226da8..84404995202 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp +++ b/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp @@ -37,7 +37,8 @@ void CLuaEngineDefs::LoadFunctions() {"engineGetModelPhysicalPropertiesGroup", EngineGetModelPhysicalPropertiesGroup}, {"engineSetModelPhysicalPropertiesGroup", EngineSetModelPhysicalPropertiesGroup}, {"engineRestoreModelPhysicalPropertiesGroup", EngineRestoreModelPhysicalPropertiesGroup}, - {"engineSetModelGroupPhysicalProperty", EngineSetModelGroupPhysicalProperty} + {"engineSetModelGroupPhysicalProperty", EngineSetModelGroupPhysicalProperty}, + {"engineGetModelGroupPhysicalProperty", EngineGetModelGroupPhysicalProperty} // CLuaCFunctions::AddFunction ( "engineReplaceMatchingAtomics", EngineReplaceMatchingAtomics ); // CLuaCFunctions::AddFunction ( "engineReplaceWheelAtomics", EngineReplaceWheelAtomics ); @@ -72,6 +73,7 @@ void CLuaEngineDefs::AddClass(lua_State* luaVM) lua_classfunction(luaVM, "setModelPhysicalPropertiesGroup", "engineSetModelPhysicalPropertiesGroup"); lua_classfunction(luaVM, "restoreModelPhysicalPropertiesGroup", "engineRestoreModelPhysicalPropertiesGroup"); lua_classfunction(luaVM, "setModelGroupPhysicalProperty", "engineSetModelGroupPhysicalProperty"); + lua_classfunction(luaVM, "getModelGroupPhysicalProperty", "engineGetModelGroupPhysicalProperty"); // lua_classvariable ( luaVM, "modelLODDistance", "engineSetModelLODDistance", "engineGetModelLODDistance" ); .modelLODDistance[model] = distance // lua_classvariable ( luaVM, "modelNameFromID", NULL, "engineGetModelNameFromID" ); .modelNameFromID[id] = "name" @@ -945,7 +947,7 @@ int CLuaEngineDefs::EngineGetModelPhysicalPropertiesGroup(lua_State* luaVM) m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); // We failed - lua_pushboolean(luaVM, false); + lua_pushnil(luaVM); return 1; } @@ -974,7 +976,7 @@ int CLuaEngineDefs::EngineSetModelPhysicalPropertiesGroup(lua_State* luaVM) m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); // We failed - lua_pushboolean(luaVM, false); + lua_pushnil(luaVM); return 1; } @@ -1071,7 +1073,7 @@ int CLuaEngineDefs::EngineSetModelGroupPhysicalProperty(lua_State* luaVM) pGroup->SetUprootLimit(fValue); break; case eObjectGroup::Modifiable::COLDAMAGEMULTIPLIER: - pGroup->SetColissionDamageMultiplier(fValue); + pGroup->SetCollisionDamageMultiplier(fValue); break; case eObjectGroup::Modifiable::SMASHMULTIPLIER: pGroup->SetSmashMultiplier(fValue); @@ -1138,7 +1140,7 @@ int CLuaEngineDefs::EngineSetModelGroupPhysicalProperty(lua_State* luaVM) if (argStream.HasErrors()) break; - pGroup->SetColissionDamageEffect(eDamEffect); + pGroup->SetCollisionDamageEffect(eDamEffect); lua_pushboolean(luaVM, true); return 1; } @@ -1181,3 +1183,160 @@ int CLuaEngineDefs::EngineSetModelGroupPhysicalProperty(lua_State* luaVM) lua_pushboolean(luaVM, false); return 1; } + +int CLuaEngineDefs::EngineGetModelGroupPhysicalProperty(lua_State* luaVM) +{ + // bool engineGetModelGroupPhysicalProperty ( int groupID, string property ) + unsigned char ucGroup; + eObjectGroup::Modifiable eProperty; + + CScriptArgReader argStream(luaVM); + argStream.ReadNumber(ucGroup); + argStream.ReadEnumString(eProperty); + + if (argStream.HasErrors()) + { + // We failed + m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); + lua_pushnil(luaVM); + return 1; + } + + auto pGroup = g_pGame->GetObjectGroupPhysicalProperties(ucGroup); + if (!pGroup) + { + argStream.SetCustomError("Expected valid group ID at argument 1"); + m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); + lua_pushnil(luaVM); + return 1; + } + + switch (eProperty) + { + case eObjectGroup::Modifiable::MASS: + case eObjectGroup::Modifiable::TURNMASS: + case eObjectGroup::Modifiable::AIRRESISTANCE: + case eObjectGroup::Modifiable::ELASTICITY: + case eObjectGroup::Modifiable::BUOYANCY: + case eObjectGroup::Modifiable::UPROOTLIMIT: + case eObjectGroup::Modifiable::COLDAMAGEMULTIPLIER: + case eObjectGroup::Modifiable::SMASHMULTIPLIER: + case eObjectGroup::Modifiable::BREAKVELOCITYRAND: + { + float fValue; + switch (eProperty) + { + case eObjectGroup::Modifiable::MASS: + fValue = pGroup->GetMass(); + break; + case eObjectGroup::Modifiable::TURNMASS: + fValue = pGroup->GetTurnMass(); + break; + case eObjectGroup::Modifiable::AIRRESISTANCE: + fValue = pGroup->GetAirResistance(); + break; + case eObjectGroup::Modifiable::ELASTICITY: + fValue = pGroup->GetElasticity(); + break; + case eObjectGroup::Modifiable::BUOYANCY: + fValue = pGroup->GetBuoyancy(); + break; + case eObjectGroup::Modifiable::UPROOTLIMIT: + fValue = pGroup->GetUprootLimit(); + break; + case eObjectGroup::Modifiable::COLDAMAGEMULTIPLIER: + fValue = pGroup->GetCollisionDamageMultiplier(); + break; + case eObjectGroup::Modifiable::SMASHMULTIPLIER: + fValue = pGroup->GetSmashMultiplier(); + break; + case eObjectGroup::Modifiable::BREAKVELOCITYRAND: + fValue = pGroup->GetBreakVelocityRandomness(); + break; + } + + lua_pushnumber(luaVM, fValue); + return 1; + } + case eObjectGroup::Modifiable::CAMERAAVOID: + case eObjectGroup::Modifiable::EXPLOSION: + case eObjectGroup::Modifiable::SPARKSONIMPACT: + { + bool bValue; + switch (eProperty) + { + case eObjectGroup::Modifiable::CAMERAAVOID: + bValue = pGroup->GetCameraAvoidObject(); + break; + case eObjectGroup::Modifiable::EXPLOSION: + bValue = pGroup->GetCausesExplosion(); + break; + case eObjectGroup::Modifiable::SPARKSONIMPACT: + bValue = pGroup->GetSparksOnImpact(); + break; + } + + lua_pushboolean(luaVM, bValue); + return 1; + } + case eObjectGroup::Modifiable::FXOFFSET: + case eObjectGroup::Modifiable::BREAKVELOCITY: + { + CVector vecValue; + + switch (eProperty) + { + case eObjectGroup::Modifiable::FXOFFSET: + vecValue = pGroup->GetFxOffset(); + break; + case eObjectGroup::Modifiable::BREAKVELOCITY: + vecValue = pGroup->GetBreakVelocity(); + break; + } + + lua_pushvector(luaVM, vecValue); + return 1; + } + case eObjectGroup::Modifiable::COLDAMAGEEFFECT: + { + eObjectGroup::DamageEffect eDamEffect = pGroup->GetCollisionDamageEffect(); + + if (!EnumValueValid(eDamEffect)) + break; + + lua_pushstring(luaVM, EnumToString(eDamEffect)); + return 1; + } + case eObjectGroup::Modifiable::SPECIALCOLRESPONSE: + { + eObjectGroup::CollisionResponse eColRepsonse = pGroup->GetCollisionSpecialResponseCase(); + if (!EnumValueValid(eColRepsonse)) + break; + + lua_pushstring(luaVM, EnumToString(eColRepsonse)); + return 1; + } + case eObjectGroup::Modifiable::FXTYPE: + { + eObjectGroup::FxType eFxType = pGroup->GetFxType(); + if (!EnumValueValid(eFxType)) + break; + + lua_pushstring(luaVM, EnumToString(eFxType)); + return 1; + } + case eObjectGroup::Modifiable::BREAKMODE: + { + eObjectGroup::BreakMode eBreakMode = pGroup->GetBreakMode(); + if (!EnumValueValid(eBreakMode)) + break; + + lua_pushstring(luaVM, EnumToString(eBreakMode)); + return 1; + } + } + + m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); + lua_pushnil(luaVM); + return 1; +} diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.h b/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.h index 5f751f3e73e..c38a48e4a5b 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.h +++ b/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.h @@ -48,6 +48,7 @@ class CLuaEngineDefs : public CLuaDefs LUA_DECLARE(EngineSetModelPhysicalPropertiesGroup) LUA_DECLARE(EngineRestoreModelPhysicalPropertiesGroup) LUA_DECLARE(EngineSetModelGroupPhysicalProperty) + LUA_DECLARE(EngineGetModelGroupPhysicalProperty) private: static void AddEngineColClass(lua_State* luaVM); diff --git a/Client/sdk/game/CObjectGroupPhysicalProperties.h b/Client/sdk/game/CObjectGroupPhysicalProperties.h index dc8cce978ac..312580dadea 100644 --- a/Client/sdk/game/CObjectGroupPhysicalProperties.h +++ b/Client/sdk/game/CObjectGroupPhysicalProperties.h @@ -31,9 +31,9 @@ class CObjectGroupPhysicalProperties virtual float GetBuoyancy() = 0; virtual void SetUprootLimit(float fUprootLimit) = 0; virtual float GetUprootLimit() = 0; - virtual void SetColissionDamageMultiplier(float fColMult) = 0; - virtual float GetColissionDamageMultiplier() = 0; - virtual void SetColissionDamageEffect(eObjectGroup::DamageEffect eDamageEffect) = 0; + virtual void SetCollisionDamageMultiplier(float fColMult) = 0; + virtual float GetCollisionDamageMultiplier() = 0; + virtual void SetCollisionDamageEffect(eObjectGroup::DamageEffect eDamageEffect) = 0; virtual eObjectGroup::DamageEffect GetCollisionDamageEffect() = 0; virtual void SetCollisionSpecialResponseCase(eObjectGroup::CollisionResponse eResponseCase) = 0; virtual eObjectGroup::CollisionResponse GetCollisionSpecialResponseCase() = 0; From 837f198c50c558fc0b36b4723770e8c8a73c20e2 Mon Sep 17 00:00:00 2001 From: Kamil Marciniak Date: Sat, 19 Jan 2019 00:31:41 +0100 Subject: [PATCH 16/29] enum memory layout issues fix --- Client/game_sa/CObjectGroupPhysicalPropertiesSA.cpp | 8 ++++---- Client/game_sa/CObjectGroupPhysicalPropertiesSA.h | 8 ++++---- Client/sdk/game/Common.h | 6 +++--- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/Client/game_sa/CObjectGroupPhysicalPropertiesSA.cpp b/Client/game_sa/CObjectGroupPhysicalPropertiesSA.cpp index 584e33ec0ac..d7db3d294c5 100644 --- a/Client/game_sa/CObjectGroupPhysicalPropertiesSA.cpp +++ b/Client/game_sa/CObjectGroupPhysicalPropertiesSA.cpp @@ -176,7 +176,7 @@ void CObjectGroupPhysicalPropertiesSA::SetCollisionDamageEffect(eObjectGroup::Da eObjectGroup::DamageEffect CObjectGroupPhysicalPropertiesSA::GetCollisionDamageEffect() { - return m_pInterface->eColDamageEffect; + return static_cast(m_pInterface->eColDamageEffect); } void CObjectGroupPhysicalPropertiesSA::SetCollisionSpecialResponseCase(eObjectGroup::CollisionResponse eResponseCase) @@ -187,7 +187,7 @@ void CObjectGroupPhysicalPropertiesSA::SetCollisionSpecialResponseCase(eObjectGr eObjectGroup::CollisionResponse CObjectGroupPhysicalPropertiesSA::GetCollisionSpecialResponseCase() { - return m_pInterface->eSpecialColResponse; + return static_cast(m_pInterface->eSpecialColResponse); } void CObjectGroupPhysicalPropertiesSA::SetCameraAvoidObject(bool bAvoid) @@ -220,7 +220,7 @@ void CObjectGroupPhysicalPropertiesSA::SetFxType(eObjectGroup::FxType eFxType) eObjectGroup::FxType CObjectGroupPhysicalPropertiesSA::GetFxType() { - return m_pInterface->eFxType; + return static_cast(m_pInterface->eFxType); } void CObjectGroupPhysicalPropertiesSA::SetFxOffset(CVector vecOffset) @@ -275,7 +275,7 @@ void CObjectGroupPhysicalPropertiesSA::SetBreakMode(eObjectGroup::BreakMode eBre eObjectGroup::BreakMode CObjectGroupPhysicalPropertiesSA::GetBreakMode() { - return m_pInterface->eBreakMode; + return static_cast(m_pInterface->eBreakMode); } void CObjectGroupPhysicalPropertiesSA::SetSparksOnImpact(bool bSparks) diff --git a/Client/game_sa/CObjectGroupPhysicalPropertiesSA.h b/Client/game_sa/CObjectGroupPhysicalPropertiesSA.h index 14f6bdae94e..87b08ac2a5c 100644 --- a/Client/game_sa/CObjectGroupPhysicalPropertiesSA.h +++ b/Client/game_sa/CObjectGroupPhysicalPropertiesSA.h @@ -26,18 +26,18 @@ class CObjectGroupPhysicalPropertiesSAInterface float fBuoyancy; float fUprootLimit; float fColDamageMultiplier; - eObjectGroup::DamageEffect eColDamageEffect; - eObjectGroup::CollisionResponse eSpecialColResponse; + unsigned char eColDamageEffect; + unsigned char eSpecialColResponse; bool bCameraAvoidObject; bool bCausesExplosion; - eObjectGroup::FxType eFxType; + unsigned char eFxType; unsigned char pad[3]; CVector vecFxOffset; void* pFxSystemPtr; float fSmashMultiplier; CVector vecBreakVelocity; float fBreakVelocityRand; - eObjectGroup::BreakMode eBreakMode; + DWORD eBreakMode; DWORD dwSparksOnImpact; }; diff --git a/Client/sdk/game/Common.h b/Client/sdk/game/Common.h index d720b1b1836..a9960ec6390 100644 --- a/Client/sdk/game/Common.h +++ b/Client/sdk/game/Common.h @@ -1572,7 +1572,7 @@ namespace eObjectGroup SPARKSONIMPACT }; - enum DamageEffect : unsigned char + enum DamageEffect { NO_EFFECT = 0, CHANGE_MODEL = 1, @@ -1582,7 +1582,7 @@ namespace eObjectGroup BREAKABLE_REMOVED = 202 }; - enum CollisionResponse : unsigned char + enum CollisionResponse { NO_RESPONSE, LAMPPOST, @@ -1596,7 +1596,7 @@ namespace eObjectGroup POOLBALL }; - enum FxType : unsigned char + enum FxType { NO_FX, PLAY_ON_HIT, From 04454c40bf64b9d6f88feafb65821b04af7c6099 Mon Sep 17 00:00:00 2001 From: Kamil Marciniak Date: Sat, 19 Jan 2019 01:51:01 +0100 Subject: [PATCH 17/29] Added ability to change fx system used by object group --- Client/game_sa/CFxManagerSA.cpp | 26 +++++++ Client/game_sa/CFxManagerSA.h | 11 +-- Client/game_sa/CGameSA.cpp | 8 +-- Client/game_sa/CGameSA.h | 70 +++++++++---------- .../CObjectGroupPhysicalPropertiesSA.cpp | 14 ++++ .../CObjectGroupPhysicalPropertiesSA.h | 41 +++++------ .../logic/lua/CLuaFunctionParseHelpers.cpp | 1 + .../logic/luadefs/CLuaEngineDefs.cpp | 30 ++++++++ Client/sdk/game/CFxManager.h | 5 +- .../sdk/game/CObjectGroupPhysicalProperties.h | 1 + Client/sdk/game/Common.h | 1 + 11 files changed, 144 insertions(+), 64 deletions(-) diff --git a/Client/game_sa/CFxManagerSA.cpp b/Client/game_sa/CFxManagerSA.cpp index 9a0e89dce67..003444f092d 100644 --- a/Client/game_sa/CFxManagerSA.cpp +++ b/Client/game_sa/CFxManagerSA.cpp @@ -67,6 +67,32 @@ void CFxManagerSA::OnFxSystemSAInterfaceDestroyed(CFxSystemSAInterface* pFxSyste delete pFxSystemSA; } +CFxSystemBPSAInterface* CFxManagerSA::GetFxSystemBlueprintByName(SString sName) +{ + DWORD dwThis = (DWORD)m_pInterface; + DWORD dwFunc = FUNC_FxManager_c__GetSystemByName; + const char* pChars = sName; + CFxSystemBPSAInterface* pFxSystemBlueprint = nullptr; + + _asm + { + mov ecx, dwThis + push pChars + call dwFunc + mov pFxSystemBlueprint, eax + } + + if (!pFxSystemBlueprint) + return nullptr; + + return pFxSystemBlueprint; +} + +bool CFxManagerSA::IsValidFxSystemBlueprintName(SString sName) +{ + return GetFxSystemBlueprintByName(sName) != nullptr; +} + // // AddToList/RemoveFromList called from CFxSystemSA constructor/destructor // diff --git a/Client/game_sa/CFxManagerSA.h b/Client/game_sa/CFxManagerSA.h index b998372f6d2..c7b5d677951 100644 --- a/Client/game_sa/CFxManagerSA.h +++ b/Client/game_sa/CFxManagerSA.h @@ -14,6 +14,7 @@ #define FUNC_FxManager_c__CreateFxSystem 0x4A9BE0 #define FUNC_FxManager_c__DestroyFxSystem 0x4A9810 +#define FUNC_FxManager_c__GetSystemByName 0x4A9360 class CFxSystemBPSAInterface; class CFxSystemSAInterface; @@ -61,10 +62,12 @@ class CFxManagerSA : public CFxManager public: CFxManagerSA(CFxManagerSAInterface* pInterface) { m_pInterface = pInterface; } // CFxManager interface - CFxSystem* CreateFxSystem(const char* szBlueprint, const CVector& vecPosition, RwMatrix* pRwMatrixTag, unsigned char bSkipCameraFrustumCheck, - bool bSoundEnable); - void DestroyFxSystem(CFxSystem* pFxSystem); - void OnFxSystemSAInterfaceDestroyed(CFxSystemSAInterface* pFxSystemSAInterface); + CFxSystem* CreateFxSystem(const char* szBlueprint, const CVector& vecPosition, RwMatrix* pRwMatrixTag, unsigned char bSkipCameraFrustumCheck, + bool bSoundEnable); + void DestroyFxSystem(CFxSystem* pFxSystem); + void OnFxSystemSAInterfaceDestroyed(CFxSystemSAInterface* pFxSystemSAInterface); + CFxSystemBPSAInterface* GetFxSystemBlueprintByName(SString sName); + bool IsValidFxSystemBlueprintName(SString sName); // CFxManagerSA methods CFxSystemSA* GetFxSystem(CFxSystemSAInterface* pFxSystemSAInterface); diff --git a/Client/game_sa/CGameSA.cpp b/Client/game_sa/CGameSA.cpp index 9e69c455c9f..84d81f7459d 100644 --- a/Client/game_sa/CGameSA.cpp +++ b/Client/game_sa/CGameSA.cpp @@ -68,7 +68,7 @@ CGameSA::CGameSA() // Prepare all object dynamic infos for CObjectGroupPhysicalPropertiesSA instances for (int i = 0; i < OBJECTDYNAMICINFO_MAX; i++) { - ObjectDynamicInfo[i].SetGroup(i); + ObjectGroupsInfo[i].SetGroup(i); } DEBUG_TRACE("CGameSA::CGameSA()"); @@ -874,9 +874,9 @@ CPed* CGameSA::GetPedContext() CObjectGroupPhysicalProperties* CGameSA::GetObjectGroupPhysicalProperties(unsigned char ucObjectGroup) { - DEBUG_TRACE("CObjectGroupPhysicalProperties * CGameSA::GetObjectDynamicInfo(unsigned char ucObjectGroup)"); - if (ObjectDynamicInfo[ucObjectGroup].IsValid()) - return &ObjectDynamicInfo[ucObjectGroup]; + DEBUG_TRACE("CObjectGroupPhysicalProperties * CGameSA::GetObjectGroupPhysicalProperties(unsigned char ucObjectGroup)"); + if (ObjectGroupsInfo[ucObjectGroup].IsValid()) + return &ObjectGroupsInfo[ucObjectGroup]; return nullptr; } diff --git a/Client/game_sa/CGameSA.h b/Client/game_sa/CGameSA.h index b12cfc206b0..ee07b188809 100644 --- a/Client/game_sa/CGameSA.h +++ b/Client/game_sa/CGameSA.h @@ -105,7 +105,7 @@ class CGameSA : public CGame private: CWeaponInfo* WeaponInfos[NUM_WeaponInfosTotal]; CModelInfoSA ModelInfo[MODELINFO_MAX]; - CObjectGroupPhysicalPropertiesSA ObjectDynamicInfo[OBJECTDYNAMICINFO_MAX]; + CObjectGroupPhysicalPropertiesSA ObjectGroupsInfo[OBJECTDYNAMICINFO_MAX]; public: ZERO_ON_NEW @@ -434,40 +434,40 @@ class CGameSA : public CGame private: - CPools* m_pPools; - CPlayerInfo* m_pPlayerInfo; - CProjectileInfo* m_pProjectileInfo; - CRadar* m_pRadar; - CRestart* m_pRestart; - CClock* m_pClock; - CCoronas* m_pCoronas; - CCheckpoints* m_pCheckpoints; - CEventList* m_pEventList; - CFireManager* m_pFireManager; - CGarages* m_pGarages; - CHud* m_pHud; - CWanted* m_pWanted; - CWeather* m_pWeather; - CWorld* m_pWorld; - CCamera* m_pCamera; - CModelInfo* m_pModelInfo; - CObjectGroupPhysicalProperties* m_pObjectDynamicInfo; - CPickups* m_pPickups; - CWeaponInfo* m_pWeaponInfo; - CExplosionManager* m_pExplosionManager; - C3DMarkers* m_p3DMarkers; - CRenderWareSA* m_pRenderWare; - CHandlingManager* m_pHandlingManager; - CAnimManager* m_pAnimManager; - CStreaming* m_pStreaming; - CVisibilityPlugins* m_pVisibilityPlugins; - CKeyGen* m_pKeyGen; - CRopes* m_pRopes; - CFx* m_pFx; - CFxManagerSA* m_pFxManager; - CWaterManager* m_pWaterManager; - CWeaponStatManager* m_pWeaponStatsManager; - CPointLights* m_pPointLights; + CPools* m_pPools; + CPlayerInfo* m_pPlayerInfo; + CProjectileInfo* m_pProjectileInfo; + CRadar* m_pRadar; + CRestart* m_pRestart; + CClock* m_pClock; + CCoronas* m_pCoronas; + CCheckpoints* m_pCheckpoints; + CEventList* m_pEventList; + CFireManager* m_pFireManager; + CGarages* m_pGarages; + CHud* m_pHud; + CWanted* m_pWanted; + CWeather* m_pWeather; + CWorld* m_pWorld; + CCamera* m_pCamera; + CModelInfo* m_pModelInfo; + CObjectGroupPhysicalProperties* m_pObjectGroupPhysicalProperties; + CPickups* m_pPickups; + CWeaponInfo* m_pWeaponInfo; + CExplosionManager* m_pExplosionManager; + C3DMarkers* m_p3DMarkers; + CRenderWareSA* m_pRenderWare; + CHandlingManager* m_pHandlingManager; + CAnimManager* m_pAnimManager; + CStreaming* m_pStreaming; + CVisibilityPlugins* m_pVisibilityPlugins; + CKeyGen* m_pKeyGen; + CRopes* m_pRopes; + CFx* m_pFx; + CFxManagerSA* m_pFxManager; + CWaterManager* m_pWaterManager; + CWeaponStatManager* m_pWeaponStatsManager; + CPointLights* m_pPointLights; CPad* m_pPad; CTheCarGenerators* m_pTheCarGenerators; diff --git a/Client/game_sa/CObjectGroupPhysicalPropertiesSA.cpp b/Client/game_sa/CObjectGroupPhysicalPropertiesSA.cpp index d7db3d294c5..6b1d2326574 100644 --- a/Client/game_sa/CObjectGroupPhysicalPropertiesSA.cpp +++ b/Client/game_sa/CObjectGroupPhysicalPropertiesSA.cpp @@ -11,6 +11,7 @@ #include "StdInc.h" #include "CObjectGroupPhysicalPropertiesSA.h" +extern CGameSA* pGame; CObjectGroupPhysicalPropertiesSAInterface* pObjectInfo = (CObjectGroupPhysicalPropertiesSAInterface*)ARRAY_ObjectGroupsDynamicInfo; std::unordered_map CObjectGroupPhysicalPropertiesSA::ms_OriginalGroupProperties; @@ -234,6 +235,19 @@ CVector CObjectGroupPhysicalPropertiesSA::GetFxOffset() return m_pInterface->vecFxOffset; } +bool CObjectGroupPhysicalPropertiesSA::SetFxParticleSystem(CFxSystemBPSAInterface* pBlueprint) +{ + if (!pBlueprint) + return false; + + if (pBlueprint->cPlayMode != 0) + return false; + + ChangeSafeguard(); + m_pInterface->pFxSystemBlueprintPtr = pBlueprint; + return true; +} + void CObjectGroupPhysicalPropertiesSA::SetSmashMultiplier(float fMult) { ChangeSafeguard(); diff --git a/Client/game_sa/CObjectGroupPhysicalPropertiesSA.h b/Client/game_sa/CObjectGroupPhysicalPropertiesSA.h index 87b08ac2a5c..0f8434c7b64 100644 --- a/Client/game_sa/CObjectGroupPhysicalPropertiesSA.h +++ b/Client/game_sa/CObjectGroupPhysicalPropertiesSA.h @@ -19,26 +19,26 @@ class CObjectGroupPhysicalPropertiesSAInterface { public: - float fMass; - float fTurnMass; - float fAirResistance; - float fElasticity; - float fBuoyancy; - float fUprootLimit; - float fColDamageMultiplier; - unsigned char eColDamageEffect; - unsigned char eSpecialColResponse; - bool bCameraAvoidObject; - bool bCausesExplosion; - unsigned char eFxType; - unsigned char pad[3]; - CVector vecFxOffset; - void* pFxSystemPtr; - float fSmashMultiplier; - CVector vecBreakVelocity; - float fBreakVelocityRand; - DWORD eBreakMode; - DWORD dwSparksOnImpact; + float fMass; + float fTurnMass; + float fAirResistance; + float fElasticity; + float fBuoyancy; + float fUprootLimit; + float fColDamageMultiplier; + unsigned char eColDamageEffect; + unsigned char eSpecialColResponse; + bool bCameraAvoidObject; + bool bCausesExplosion; + unsigned char eFxType; + unsigned char pad[3]; + CVector vecFxOffset; + CFxSystemBPSAInterface* pFxSystemBlueprintPtr; + float fSmashMultiplier; + CVector vecBreakVelocity; + float fBreakVelocityRand; + DWORD eBreakMode; + DWORD dwSparksOnImpact; }; class CObjectGroupPhysicalPropertiesSA : public CObjectGroupPhysicalProperties @@ -87,6 +87,7 @@ class CObjectGroupPhysicalPropertiesSA : public CObjectGroupPhysicalProperties eObjectGroup::FxType GetFxType(); void SetFxOffset(CVector vecOffset); CVector GetFxOffset(); + bool SetFxParticleSystem(CFxSystemBPSAInterface* pBlueprint); void SetSmashMultiplier(float fMult); float GetSmashMultiplier(); void SetBreakVelocity(CVector vecVelocity); diff --git a/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.cpp b/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.cpp index a9c0e3a7ed2..13a1577cad0 100644 --- a/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.cpp +++ b/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.cpp @@ -394,6 +394,7 @@ ADD_ENUM(eObjectGroup::Modifiable::CAMERAAVOID, "avoid_camera") ADD_ENUM(eObjectGroup::Modifiable::EXPLOSION, "cause_explosion") ADD_ENUM(eObjectGroup::Modifiable::FXTYPE, "fx_type") ADD_ENUM(eObjectGroup::Modifiable::FXOFFSET, "fx_offset") +ADD_ENUM(eObjectGroup::Modifiable::FXSYSTEM, "fx_system") ADD_ENUM(eObjectGroup::Modifiable::SMASHMULTIPLIER, "smash_multiplier") ADD_ENUM(eObjectGroup::Modifiable::BREAKVELOCITY, "break_velocity") ADD_ENUM(eObjectGroup::Modifiable::BREAKVELOCITYRAND, "break_velocity_randomness") diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp b/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp index 84404995202..39036212ca1 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp +++ b/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp @@ -1177,6 +1177,31 @@ int CLuaEngineDefs::EngineSetModelGroupPhysicalProperty(lua_State* luaVM) lua_pushboolean(luaVM, true); return 1; } + case eObjectGroup::Modifiable::FXSYSTEM: + { + SString sName; + argStream.ReadString(sName); + if (argStream.HasErrors()) + break; + + if (!g_pGame->GetFxManager()->IsValidFxSystemBlueprintName(sName)) + { + argStream.SetCustomError("Expected valid fx system name at argument 3"); + break; + } + + CFxSystemBPSAInterface* pBlueprint = g_pGame->GetFxManager()->GetFxSystemBlueprintByName(sName); + if (pGroup->SetFxParticleSystem(pBlueprint)) + { + lua_pushboolean(luaVM, true); + return 1; + } + else + { + argStream.SetCustomError("Given fx system isn't supported"); + break; + } + } } m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); @@ -1334,6 +1359,11 @@ int CLuaEngineDefs::EngineGetModelGroupPhysicalProperty(lua_State* luaVM) lua_pushstring(luaVM, EnumToString(eBreakMode)); return 1; } + case eObjectGroup::Modifiable::FXSYSTEM: + { + argStream.SetCustomError("Fx system name isn't possible to be extracted."); + break; + } } m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); diff --git a/Client/sdk/game/CFxManager.h b/Client/sdk/game/CFxManager.h index 417e65797f3..d50a8dd807a 100644 --- a/Client/sdk/game/CFxManager.h +++ b/Client/sdk/game/CFxManager.h @@ -15,6 +15,7 @@ class CFxSystem; class CFxSystemSAInterface; +class CFxSystemBPSAInterface; class CFxManager { @@ -22,5 +23,7 @@ class CFxManager virtual CFxSystem* CreateFxSystem(const char* szBlueprint, const CVector& vecPosition, RwMatrix* pRwMatrixTag, unsigned char bSkipCameraFrustumCheck, bool bSoundEnable) = 0; virtual void DestroyFxSystem(CFxSystem* pFxSystem) = 0; - virtual void OnFxSystemSAInterfaceDestroyed(CFxSystemSAInterface* pFxSystemSAInterface) = 0; + virtual void OnFxSystemSAInterfaceDestroyed(CFxSystemSAInterface* pFxSystemSAInterface) = 0; + virtual CFxSystemBPSAInterface* GetFxSystemBlueprintByName(SString sName) = 0; + virtual bool IsValidFxSystemBlueprintName(SString sName) = 0; }; diff --git a/Client/sdk/game/CObjectGroupPhysicalProperties.h b/Client/sdk/game/CObjectGroupPhysicalProperties.h index 312580dadea..fec0f27c328 100644 --- a/Client/sdk/game/CObjectGroupPhysicalProperties.h +++ b/Client/sdk/game/CObjectGroupPhysicalProperties.h @@ -45,6 +45,7 @@ class CObjectGroupPhysicalProperties virtual eObjectGroup::FxType GetFxType() = 0; virtual void SetFxOffset(CVector vecOffset) = 0; virtual CVector GetFxOffset() = 0; + virtual bool SetFxParticleSystem(CFxSystemBPSAInterface* pBlueprint) = 0; virtual void SetSmashMultiplier(float fMult) = 0; virtual float GetSmashMultiplier() = 0; virtual void SetBreakVelocity(CVector vecVelocity) = 0; diff --git a/Client/sdk/game/Common.h b/Client/sdk/game/Common.h index a9960ec6390..fa599807183 100644 --- a/Client/sdk/game/Common.h +++ b/Client/sdk/game/Common.h @@ -1565,6 +1565,7 @@ namespace eObjectGroup EXPLOSION, FXTYPE, FXOFFSET, + FXSYSTEM, SMASHMULTIPLIER, BREAKVELOCITY, BREAKVELOCITYRAND, From 1eea8fe5e2ff984a3f7cd059ff523fd88364af0e Mon Sep 17 00:00:00 2001 From: Kamil Marciniak Date: Sat, 19 Jan 2019 03:01:24 +0100 Subject: [PATCH 18/29] Additional safety checks in lua functions --- .../logic/luadefs/CLuaEngineDefs.cpp | 60 ++++++++++++++++--- 1 file changed, 51 insertions(+), 9 deletions(-) diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp b/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp index 39036212ca1..0ea53c0215b 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp +++ b/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp @@ -932,9 +932,17 @@ int CLuaEngineDefs::EngineGetModelPhysicalPropertiesGroup(lua_State* luaVM) CScriptArgReader argStream(luaVM); argStream.ReadNumber(iModelID); - + if (!argStream.HasErrors()) { + if (iModelID < 0) + { + argStream.SetCustomError("Expected positive model at argument 1"); + m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); + lua_pushnil(luaVM); + return 1; + } + auto pModelInfo = g_pGame->GetModelInfo(iModelID); if (pModelInfo) { @@ -963,6 +971,14 @@ int CLuaEngineDefs::EngineSetModelPhysicalPropertiesGroup(lua_State* luaVM) if (!argStream.HasErrors()) { + if (iModelID < 0) + { + argStream.SetCustomError("Expected positive model at argument 1"); + m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); + lua_pushnil(luaVM); + return 1; + } + auto pModelInfo = g_pGame->GetModelInfo(iModelID); if (pModelInfo) { @@ -990,6 +1006,14 @@ int CLuaEngineDefs::EngineRestoreModelPhysicalPropertiesGroup(lua_State* luaVM) if (!argStream.HasErrors()) { + if (iModelID < 0) + { + argStream.SetCustomError("Expected positive model at argument 1"); + m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); + lua_pushnil(luaVM); + return 1; + } + auto pModelInfo = g_pGame->GetModelInfo(iModelID); if (pModelInfo) { @@ -1003,34 +1027,43 @@ int CLuaEngineDefs::EngineRestoreModelPhysicalPropertiesGroup(lua_State* luaVM) m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); // We failed - lua_pushboolean(luaVM, false); + lua_pushnil(luaVM); return 1; } int CLuaEngineDefs::EngineSetModelGroupPhysicalProperty(lua_State* luaVM) { // bool engineSetModelGroupPhysicalProperty ( int groupID, string property, ...) - unsigned char ucGroup; + int iGivenGroup; eObjectGroup::Modifiable eProperty; CScriptArgReader argStream(luaVM); - argStream.ReadNumber(ucGroup); + argStream.ReadNumber(iGivenGroup); argStream.ReadEnumString(eProperty); if (argStream.HasErrors()) { // We failed m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); - lua_pushboolean(luaVM, false); + lua_pushnil(luaVM); + return 1; + } + + if (iGivenGroup < 0 || iGivenGroup > 0xFF) + { + argStream.SetCustomError("Expected group ID between 0 and 255 at argument 1"); + m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); + lua_pushnil(luaVM); return 1; } + unsigned char ucGroup = iGivenGroup; auto pGroup = g_pGame->GetObjectGroupPhysicalProperties(ucGroup); if (!pGroup) { argStream.SetCustomError("Expected valid group ID at argument 1"); m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); - lua_pushboolean(luaVM, false); + lua_pushnil(luaVM); return 1; } @@ -1205,18 +1238,18 @@ int CLuaEngineDefs::EngineSetModelGroupPhysicalProperty(lua_State* luaVM) } m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); - lua_pushboolean(luaVM, false); + lua_pushnil(luaVM); return 1; } int CLuaEngineDefs::EngineGetModelGroupPhysicalProperty(lua_State* luaVM) { // bool engineGetModelGroupPhysicalProperty ( int groupID, string property ) - unsigned char ucGroup; + int iGivenGroup; eObjectGroup::Modifiable eProperty; CScriptArgReader argStream(luaVM); - argStream.ReadNumber(ucGroup); + argStream.ReadNumber(iGivenGroup); argStream.ReadEnumString(eProperty); if (argStream.HasErrors()) @@ -1227,6 +1260,15 @@ int CLuaEngineDefs::EngineGetModelGroupPhysicalProperty(lua_State* luaVM) return 1; } + if (iGivenGroup < 0 || iGivenGroup > 0xFF) + { + argStream.SetCustomError("Expected group ID between 0 and 255 at argument 1"); + m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); + lua_pushnil(luaVM); + return 1; + } + + unsigned char ucGroup = iGivenGroup; auto pGroup = g_pGame->GetObjectGroupPhysicalProperties(ucGroup); if (!pGroup) { From 99e46b977f11a7a925537528207e88b6152db69d Mon Sep 17 00:00:00 2001 From: Kamil Marciniak Date: Sat, 19 Jan 2019 14:24:39 +0100 Subject: [PATCH 19/29] Restore object data changes, refactored lua methods --- .../CObjectGroupPhysicalPropertiesSA.cpp | 70 ++++- .../CObjectGroupPhysicalPropertiesSA.h | 1 + .../logic/luadefs/CLuaEngineDefs.cpp | 242 +++++++----------- .../sdk/game/CObjectGroupPhysicalProperties.h | 1 + 4 files changed, 167 insertions(+), 147 deletions(-) diff --git a/Client/game_sa/CObjectGroupPhysicalPropertiesSA.cpp b/Client/game_sa/CObjectGroupPhysicalPropertiesSA.cpp index 6b1d2326574..92ccb927a29 100644 --- a/Client/game_sa/CObjectGroupPhysicalPropertiesSA.cpp +++ b/Client/game_sa/CObjectGroupPhysicalPropertiesSA.cpp @@ -87,12 +87,17 @@ void CObjectGroupPhysicalPropertiesSA::RestoreDefaultValues() { for (auto& entry : ms_OriginalGroupProperties) { - memcpy(&pObjectInfo[entry.first], entry.second, sizeof(CObjectGroupPhysicalPropertiesSAInterface)); + pGame->GetObjectGroupPhysicalProperties(entry.first)->RestoreDefault(); + delete entry.second; + MapRemove(ms_OriginalGroupProperties, entry.first); } } void CObjectGroupPhysicalPropertiesSA::SetMass(float fMass) { + if (fabs(m_pInterface->fMass - fMass) < FLOAT_EPSILON) + return; + ChangeSafeguard(); m_pInterface->fMass = fMass; } @@ -104,6 +109,9 @@ float CObjectGroupPhysicalPropertiesSA::GetMass() void CObjectGroupPhysicalPropertiesSA::SetTurnMass(float fTurnMass) { + if (fabs(m_pInterface->fTurnMass - fTurnMass) < FLOAT_EPSILON) + return; + ChangeSafeguard(); m_pInterface->fTurnMass = fTurnMass; } @@ -115,6 +123,9 @@ float CObjectGroupPhysicalPropertiesSA::GetTurnMass() void CObjectGroupPhysicalPropertiesSA::SetAirResistance(float fAirResistance) { + if (fabs(m_pInterface->fAirResistance - fAirResistance) < FLOAT_EPSILON) + return; + ChangeSafeguard(); m_pInterface->fAirResistance = fAirResistance; } @@ -127,6 +138,9 @@ float CObjectGroupPhysicalPropertiesSA::GetAirResistance() void CObjectGroupPhysicalPropertiesSA::SetElasticity(float fElasticity) { + if (fabs(m_pInterface->fElasticity - fElasticity) < FLOAT_EPSILON) + return; + ChangeSafeguard(); m_pInterface->fElasticity = fElasticity; } @@ -138,6 +152,9 @@ float CObjectGroupPhysicalPropertiesSA::GetElasticity() void CObjectGroupPhysicalPropertiesSA::SetBuoyancy(float fBuoyancy) { + if (fabs(m_pInterface->fBuoyancy - fBuoyancy) < FLOAT_EPSILON) + return; + ChangeSafeguard(); m_pInterface->fBuoyancy = fBuoyancy; } @@ -149,6 +166,9 @@ float CObjectGroupPhysicalPropertiesSA::GetBuoyancy() void CObjectGroupPhysicalPropertiesSA::SetUprootLimit(float fUprootLimit) { + if (fabs(m_pInterface->fUprootLimit - fUprootLimit) < FLOAT_EPSILON) + return; + ChangeSafeguard(); m_pInterface->fUprootLimit = fUprootLimit; } @@ -160,6 +180,9 @@ float CObjectGroupPhysicalPropertiesSA::GetUprootLimit() void CObjectGroupPhysicalPropertiesSA::SetCollisionDamageMultiplier(float fColMult) { + if (fabs(m_pInterface->fColDamageMultiplier - fColMult) < FLOAT_EPSILON) + return; + ChangeSafeguard(); m_pInterface->fColDamageMultiplier = fColMult; } @@ -171,6 +194,9 @@ float CObjectGroupPhysicalPropertiesSA::GetCollisionDamageMultiplier() void CObjectGroupPhysicalPropertiesSA::SetCollisionDamageEffect(eObjectGroup::DamageEffect eDamageEffect) { + if (static_cast(m_pInterface->eColDamageEffect) == eDamageEffect) + return; + ChangeSafeguard(); m_pInterface->eColDamageEffect = eDamageEffect; } @@ -182,6 +208,9 @@ eObjectGroup::DamageEffect CObjectGroupPhysicalPropertiesSA::GetCollisionDamageE void CObjectGroupPhysicalPropertiesSA::SetCollisionSpecialResponseCase(eObjectGroup::CollisionResponse eResponseCase) { + if (static_cast(m_pInterface->eSpecialColResponse) == eResponseCase) + return; + ChangeSafeguard(); m_pInterface->eSpecialColResponse = eResponseCase; } @@ -193,6 +222,9 @@ eObjectGroup::CollisionResponse CObjectGroupPhysicalPropertiesSA::GetCollisionSp void CObjectGroupPhysicalPropertiesSA::SetCameraAvoidObject(bool bAvoid) { + if (m_pInterface->bCameraAvoidObject == bAvoid) + return; + ChangeSafeguard(); m_pInterface->bCameraAvoidObject = bAvoid; } @@ -204,6 +236,9 @@ bool CObjectGroupPhysicalPropertiesSA::GetCameraAvoidObject() void CObjectGroupPhysicalPropertiesSA::SetCausesExplosion(bool bExplodes) { + if (m_pInterface->bCausesExplosion == bExplodes) + return; + ChangeSafeguard(); m_pInterface->bCausesExplosion = bExplodes; } @@ -215,6 +250,9 @@ bool CObjectGroupPhysicalPropertiesSA::GetCausesExplosion() void CObjectGroupPhysicalPropertiesSA::SetFxType(eObjectGroup::FxType eFxType) { + if (static_cast(m_pInterface->eFxType) == eFxType) + return; + ChangeSafeguard(); m_pInterface->eFxType = eFxType; } @@ -226,6 +264,9 @@ eObjectGroup::FxType CObjectGroupPhysicalPropertiesSA::GetFxType() void CObjectGroupPhysicalPropertiesSA::SetFxOffset(CVector vecOffset) { + if (m_pInterface->vecFxOffset == vecOffset) + return; + ChangeSafeguard(); m_pInterface->vecFxOffset = vecOffset; } @@ -243,13 +284,28 @@ bool CObjectGroupPhysicalPropertiesSA::SetFxParticleSystem(CFxSystemBPSAInterfac if (pBlueprint->cPlayMode != 0) return false; + if (m_pInterface->pFxSystemBlueprintPtr == pBlueprint) + return true; + ChangeSafeguard(); m_pInterface->pFxSystemBlueprintPtr = pBlueprint; return true; } +void CObjectGroupPhysicalPropertiesSA::RemoveFxParticleSystem() +{ + if (!m_pInterface->pFxSystemBlueprintPtr) + return; + + ChangeSafeguard(); + m_pInterface->pFxSystemBlueprintPtr = nullptr; +} + void CObjectGroupPhysicalPropertiesSA::SetSmashMultiplier(float fMult) { + if (fabs(m_pInterface->fSmashMultiplier - fMult) < FLOAT_EPSILON) + return; + ChangeSafeguard(); m_pInterface->fSmashMultiplier = fMult; } @@ -261,6 +317,9 @@ float CObjectGroupPhysicalPropertiesSA::GetSmashMultiplier() void CObjectGroupPhysicalPropertiesSA::SetBreakVelocity(CVector vecVelocity) { + if (m_pInterface->vecBreakVelocity == vecVelocity) + return; + ChangeSafeguard(); m_pInterface->vecBreakVelocity = vecVelocity; } @@ -272,6 +331,9 @@ CVector CObjectGroupPhysicalPropertiesSA::GetBreakVelocity() void CObjectGroupPhysicalPropertiesSA::SetBreakVelocityRandomness(float fRand) { + if (fabs(m_pInterface->fBreakVelocityRand - fRand) < FLOAT_EPSILON) + return; + ChangeSafeguard(); m_pInterface->fBreakVelocityRand = fRand; } @@ -283,6 +345,9 @@ float CObjectGroupPhysicalPropertiesSA::GetBreakVelocityRandomness() void CObjectGroupPhysicalPropertiesSA::SetBreakMode(eObjectGroup::BreakMode eBreakMode) { + if (static_cast(m_pInterface->eBreakMode) == eBreakMode) + return; + ChangeSafeguard(); m_pInterface->eBreakMode = eBreakMode; } @@ -294,6 +359,9 @@ eObjectGroup::BreakMode CObjectGroupPhysicalPropertiesSA::GetBreakMode() void CObjectGroupPhysicalPropertiesSA::SetSparksOnImpact(bool bSparks) { + if (static_cast(m_pInterface->dwSparksOnImpact) == bSparks) + return; + ChangeSafeguard(); m_pInterface->dwSparksOnImpact = static_cast(bSparks); } diff --git a/Client/game_sa/CObjectGroupPhysicalPropertiesSA.h b/Client/game_sa/CObjectGroupPhysicalPropertiesSA.h index 0f8434c7b64..7eaa4571d05 100644 --- a/Client/game_sa/CObjectGroupPhysicalPropertiesSA.h +++ b/Client/game_sa/CObjectGroupPhysicalPropertiesSA.h @@ -88,6 +88,7 @@ class CObjectGroupPhysicalPropertiesSA : public CObjectGroupPhysicalProperties void SetFxOffset(CVector vecOffset); CVector GetFxOffset(); bool SetFxParticleSystem(CFxSystemBPSAInterface* pBlueprint); + void RemoveFxParticleSystem(); void SetSmashMultiplier(float fMult); float GetSmashMultiplier(); void SetBreakVelocity(CVector vecVelocity); diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp b/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp index 0ea53c0215b..ba345fb836e 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp +++ b/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp @@ -932,12 +932,12 @@ int CLuaEngineDefs::EngineGetModelPhysicalPropertiesGroup(lua_State* luaVM) CScriptArgReader argStream(luaVM); argStream.ReadNumber(iModelID); - + if (!argStream.HasErrors()) { - if (iModelID < 0) + if (iModelID < 0 || iModelID >= 20000) { - argStream.SetCustomError("Expected positive model at argument 1"); + argStream.SetCustomError("Expected model ID in range [0-19999] at argument 1"); m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); lua_pushnil(luaVM); return 1; @@ -971,9 +971,9 @@ int CLuaEngineDefs::EngineSetModelPhysicalPropertiesGroup(lua_State* luaVM) if (!argStream.HasErrors()) { - if (iModelID < 0) + if (iModelID < 0 || iModelID >= 20000) { - argStream.SetCustomError("Expected positive model at argument 1"); + argStream.SetCustomError("Expected model ID in range [0-19999] at argument 1"); m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); lua_pushnil(luaVM); return 1; @@ -1006,9 +1006,9 @@ int CLuaEngineDefs::EngineRestoreModelPhysicalPropertiesGroup(lua_State* luaVM) if (!argStream.HasErrors()) { - if (iModelID < 0) + if (iModelID < 0 || iModelID >= 20000) { - argStream.SetCustomError("Expected positive model at argument 1"); + argStream.SetCustomError("Expected model ID in range [0-19999] at argument 1"); m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); lua_pushnil(luaVM); return 1; @@ -1031,6 +1031,28 @@ int CLuaEngineDefs::EngineRestoreModelPhysicalPropertiesGroup(lua_State* luaVM) return 1; } +std::unordered_map> g_GroupPropertiesSettersFloat +{ + {eObjectGroup::Modifiable::MASS, [](CObjectGroupPhysicalProperties* pGroup, float fValue) { pGroup->SetMass(fValue); }}, + {eObjectGroup::Modifiable::TURNMASS, [](CObjectGroupPhysicalProperties* pGroup, float fValue) { pGroup->SetTurnMass(fValue); }}, + {eObjectGroup::Modifiable::AIRRESISTANCE, [](CObjectGroupPhysicalProperties* pGroup, float fValue) { pGroup->SetAirResistance(fValue); }}, + {eObjectGroup::Modifiable::ELASTICITY, [](CObjectGroupPhysicalProperties* pGroup, float fValue) { pGroup->SetElasticity(fValue); }}, + {eObjectGroup::Modifiable::BUOYANCY, [](CObjectGroupPhysicalProperties* pGroup, float fValue) { pGroup->SetBuoyancy(fValue); }}, + {eObjectGroup::Modifiable::UPROOTLIMIT, [](CObjectGroupPhysicalProperties* pGroup, float fValue) { pGroup->SetUprootLimit(fValue); }}, + {eObjectGroup::Modifiable::COLDAMAGEMULTIPLIER, [](CObjectGroupPhysicalProperties* pGroup, float fValue) { pGroup->SetCollisionDamageMultiplier(fValue); }}, + {eObjectGroup::Modifiable::SMASHMULTIPLIER, [](CObjectGroupPhysicalProperties* pGroup, float fValue) { pGroup->SetSmashMultiplier(fValue); }}, + {eObjectGroup::Modifiable::BREAKVELOCITYRAND, [](CObjectGroupPhysicalProperties* pGroup, float fValue) { pGroup->SetBreakVelocityRandomness(fValue); }}, +}; +std::unordered_map> g_GroupPropertiesSettersBool{ + {eObjectGroup::Modifiable::CAMERAAVOID, [](CObjectGroupPhysicalProperties* pGroup, bool bValue) { pGroup->SetCameraAvoidObject(bValue); }}, + {eObjectGroup::Modifiable::EXPLOSION, [](CObjectGroupPhysicalProperties* pGroup, bool bValue) { pGroup->SetCausesExplosion(bValue); }}, + {eObjectGroup::Modifiable::SPARKSONIMPACT, [](CObjectGroupPhysicalProperties* pGroup, bool bValue) { pGroup->SetSparksOnImpact(bValue); }}, +}; +std::unordered_map> g_GroupPropertiesSettersVector{ + {eObjectGroup::Modifiable::FXOFFSET, [](CObjectGroupPhysicalProperties* pGroup, CVector vecValue) { pGroup->SetFxOffset(vecValue); }}, + {eObjectGroup::Modifiable::BREAKVELOCITY, [](CObjectGroupPhysicalProperties* pGroup, CVector vecValue) { pGroup->SetBreakVelocity(vecValue); }}, +}; + int CLuaEngineDefs::EngineSetModelGroupPhysicalProperty(lua_State* luaVM) { // bool engineSetModelGroupPhysicalProperty ( int groupID, string property, ...) @@ -1053,12 +1075,11 @@ int CLuaEngineDefs::EngineSetModelGroupPhysicalProperty(lua_State* luaVM) { argStream.SetCustomError("Expected group ID between 0 and 255 at argument 1"); m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); - lua_pushnil(luaVM); + lua_pushnil(luaVM); return 1; } - unsigned char ucGroup = iGivenGroup; - auto pGroup = g_pGame->GetObjectGroupPhysicalProperties(ucGroup); + auto pGroup = g_pGame->GetObjectGroupPhysicalProperties(iGivenGroup); if (!pGroup) { argStream.SetCustomError("Expected valid group ID at argument 1"); @@ -1081,41 +1102,10 @@ int CLuaEngineDefs::EngineSetModelGroupPhysicalProperty(lua_State* luaVM) { float fValue; argStream.ReadNumber(fValue); - if (argStream.HasErrors()) break; - switch (eProperty) - { - case eObjectGroup::Modifiable::MASS: - pGroup->SetMass(fValue); - break; - case eObjectGroup::Modifiable::TURNMASS: - pGroup->SetTurnMass(fValue); - break; - case eObjectGroup::Modifiable::AIRRESISTANCE: - pGroup->SetAirResistance(fValue); - break; - case eObjectGroup::Modifiable::ELASTICITY: - pGroup->SetElasticity(fValue); - break; - case eObjectGroup::Modifiable::BUOYANCY: - pGroup->SetBuoyancy(fValue); - break; - case eObjectGroup::Modifiable::UPROOTLIMIT: - pGroup->SetUprootLimit(fValue); - break; - case eObjectGroup::Modifiable::COLDAMAGEMULTIPLIER: - pGroup->SetCollisionDamageMultiplier(fValue); - break; - case eObjectGroup::Modifiable::SMASHMULTIPLIER: - pGroup->SetSmashMultiplier(fValue); - break; - case eObjectGroup::Modifiable::BREAKVELOCITYRAND: - pGroup->SetBreakVelocityRandomness(fValue); - break; - } - + g_GroupPropertiesSettersFloat[eProperty](pGroup, fValue); lua_pushboolean(luaVM, true); return 1; } @@ -1125,23 +1115,10 @@ int CLuaEngineDefs::EngineSetModelGroupPhysicalProperty(lua_State* luaVM) { bool bValue; argStream.ReadBool(bValue); - if (argStream.HasErrors()) break; - switch (eProperty) - { - case eObjectGroup::Modifiable::CAMERAAVOID: - pGroup->SetCameraAvoidObject(bValue); - break; - case eObjectGroup::Modifiable::EXPLOSION: - pGroup->SetCausesExplosion(bValue); - break; - case eObjectGroup::Modifiable::SPARKSONIMPACT: - pGroup->SetSparksOnImpact(bValue); - break; - } - + g_GroupPropertiesSettersBool[eProperty](pGroup, bValue); lua_pushboolean(luaVM, true); return 1; } @@ -1153,16 +1130,7 @@ int CLuaEngineDefs::EngineSetModelGroupPhysicalProperty(lua_State* luaVM) if (argStream.HasErrors()) break; - switch (eProperty) - { - case eObjectGroup::Modifiable::FXOFFSET: - pGroup->SetFxOffset(vecValue); - break; - case eObjectGroup::Modifiable::BREAKVELOCITY: - pGroup->SetBreakVelocity(vecValue); - break; - } - + g_GroupPropertiesSettersVector[eProperty](pGroup, vecValue); lua_pushboolean(luaVM, true); return 1; } @@ -1212,36 +1180,74 @@ int CLuaEngineDefs::EngineSetModelGroupPhysicalProperty(lua_State* luaVM) } case eObjectGroup::Modifiable::FXSYSTEM: { - SString sName; - argStream.ReadString(sName); - if (argStream.HasErrors()) - break; - - if (!g_pGame->GetFxManager()->IsValidFxSystemBlueprintName(sName)) + if (argStream.NextIsBool()) { - argStream.SetCustomError("Expected valid fx system name at argument 3"); - break; - } + bool bRemove; + argStream.ReadBool(bRemove); + if (!bRemove) + { + pGroup->RemoveFxParticleSystem(); + lua_pushboolean(luaVM, true); + return 1; + } - CFxSystemBPSAInterface* pBlueprint = g_pGame->GetFxManager()->GetFxSystemBlueprintByName(sName); - if (pGroup->SetFxParticleSystem(pBlueprint)) - { - lua_pushboolean(luaVM, true); - return 1; + argStream.SetCustomError("Expected either false, or valid fx system name at argument 3"); + break; } else { - argStream.SetCustomError("Given fx system isn't supported"); - break; - } + SString sName; + argStream.ReadString(sName); + if (argStream.HasErrors()) + break; + + if (!g_pGame->GetFxManager()->IsValidFxSystemBlueprintName(sName)) + { + argStream.SetCustomError("Expected valid fx system name at argument 3"); + break; + } + + CFxSystemBPSAInterface* pBlueprint = g_pGame->GetFxManager()->GetFxSystemBlueprintByName(sName); + if (pGroup->SetFxParticleSystem(pBlueprint)) + { + lua_pushboolean(luaVM, true); + return 1; + } + else + { + argStream.SetCustomError("Given fx system isn't supported"); + break; + } + } } } + if (argStream.HasErrors()) + m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); - m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); lua_pushnil(luaVM); return 1; } +std::unordered_map> g_GroupPropertiesGettersFloat{ + {eObjectGroup::Modifiable::MASS, [](CObjectGroupPhysicalProperties* pGroup) { return pGroup->GetMass(); }}, + {eObjectGroup::Modifiable::TURNMASS, [](CObjectGroupPhysicalProperties* pGroup) { return pGroup->GetTurnMass(); }}, + {eObjectGroup::Modifiable::AIRRESISTANCE, [](CObjectGroupPhysicalProperties* pGroup) { return pGroup->GetAirResistance(); }}, + {eObjectGroup::Modifiable::ELASTICITY, [](CObjectGroupPhysicalProperties* pGroup) { return pGroup->GetElasticity(); }}, + {eObjectGroup::Modifiable::BUOYANCY, [](CObjectGroupPhysicalProperties* pGroup) { return pGroup->GetBuoyancy(); }}, + {eObjectGroup::Modifiable::UPROOTLIMIT, [](CObjectGroupPhysicalProperties* pGroup) { return pGroup->GetUprootLimit(); }}, + {eObjectGroup::Modifiable::COLDAMAGEMULTIPLIER, [](CObjectGroupPhysicalProperties* pGroup) { return pGroup->GetCollisionDamageMultiplier(); }}, + {eObjectGroup::Modifiable::SMASHMULTIPLIER, [](CObjectGroupPhysicalProperties* pGroup) { return pGroup->GetSmashMultiplier(); }}, + {eObjectGroup::Modifiable::BREAKVELOCITYRAND, [](CObjectGroupPhysicalProperties* pGroup) { return pGroup->GetBreakVelocityRandomness(); }}, +}; +std::unordered_map> g_GroupPropertiesGettersBool{ + {eObjectGroup::Modifiable::CAMERAAVOID, [](CObjectGroupPhysicalProperties* pGroup) { return pGroup->GetCameraAvoidObject(); }}, + {eObjectGroup::Modifiable::EXPLOSION, [](CObjectGroupPhysicalProperties* pGroup) { return pGroup->GetCausesExplosion(); }}, + {eObjectGroup::Modifiable::SPARKSONIMPACT, [](CObjectGroupPhysicalProperties* pGroup) { return pGroup->GetSparksOnImpact(); }}, +}; +std::unordered_map> g_GroupPropertiesGettersVector{ + {eObjectGroup::Modifiable::FXOFFSET, [](CObjectGroupPhysicalProperties* pGroup) { return pGroup->GetFxOffset(); }}, + {eObjectGroup::Modifiable::BREAKVELOCITY, [](CObjectGroupPhysicalProperties* pGroup) { return pGroup->GetBreakVelocity(); }}, +}; int CLuaEngineDefs::EngineGetModelGroupPhysicalProperty(lua_State* luaVM) { // bool engineGetModelGroupPhysicalProperty ( int groupID, string property ) @@ -1268,8 +1274,7 @@ int CLuaEngineDefs::EngineGetModelGroupPhysicalProperty(lua_State* luaVM) return 1; } - unsigned char ucGroup = iGivenGroup; - auto pGroup = g_pGame->GetObjectGroupPhysicalProperties(ucGroup); + auto pGroup = g_pGame->GetObjectGroupPhysicalProperties(iGivenGroup); if (!pGroup) { argStream.SetCustomError("Expected valid group ID at argument 1"); @@ -1290,38 +1295,7 @@ int CLuaEngineDefs::EngineGetModelGroupPhysicalProperty(lua_State* luaVM) case eObjectGroup::Modifiable::SMASHMULTIPLIER: case eObjectGroup::Modifiable::BREAKVELOCITYRAND: { - float fValue; - switch (eProperty) - { - case eObjectGroup::Modifiable::MASS: - fValue = pGroup->GetMass(); - break; - case eObjectGroup::Modifiable::TURNMASS: - fValue = pGroup->GetTurnMass(); - break; - case eObjectGroup::Modifiable::AIRRESISTANCE: - fValue = pGroup->GetAirResistance(); - break; - case eObjectGroup::Modifiable::ELASTICITY: - fValue = pGroup->GetElasticity(); - break; - case eObjectGroup::Modifiable::BUOYANCY: - fValue = pGroup->GetBuoyancy(); - break; - case eObjectGroup::Modifiable::UPROOTLIMIT: - fValue = pGroup->GetUprootLimit(); - break; - case eObjectGroup::Modifiable::COLDAMAGEMULTIPLIER: - fValue = pGroup->GetCollisionDamageMultiplier(); - break; - case eObjectGroup::Modifiable::SMASHMULTIPLIER: - fValue = pGroup->GetSmashMultiplier(); - break; - case eObjectGroup::Modifiable::BREAKVELOCITYRAND: - fValue = pGroup->GetBreakVelocityRandomness(); - break; - } - + float fValue = g_GroupPropertiesGettersFloat[eProperty](pGroup); lua_pushnumber(luaVM, fValue); return 1; } @@ -1329,45 +1303,20 @@ int CLuaEngineDefs::EngineGetModelGroupPhysicalProperty(lua_State* luaVM) case eObjectGroup::Modifiable::EXPLOSION: case eObjectGroup::Modifiable::SPARKSONIMPACT: { - bool bValue; - switch (eProperty) - { - case eObjectGroup::Modifiable::CAMERAAVOID: - bValue = pGroup->GetCameraAvoidObject(); - break; - case eObjectGroup::Modifiable::EXPLOSION: - bValue = pGroup->GetCausesExplosion(); - break; - case eObjectGroup::Modifiable::SPARKSONIMPACT: - bValue = pGroup->GetSparksOnImpact(); - break; - } - + bool bValue = g_GroupPropertiesGettersBool[eProperty](pGroup); lua_pushboolean(luaVM, bValue); return 1; } case eObjectGroup::Modifiable::FXOFFSET: case eObjectGroup::Modifiable::BREAKVELOCITY: { - CVector vecValue; - - switch (eProperty) - { - case eObjectGroup::Modifiable::FXOFFSET: - vecValue = pGroup->GetFxOffset(); - break; - case eObjectGroup::Modifiable::BREAKVELOCITY: - vecValue = pGroup->GetBreakVelocity(); - break; - } - + CVector vecValue = g_GroupPropertiesGettersVector[eProperty](pGroup); lua_pushvector(luaVM, vecValue); return 1; } case eObjectGroup::Modifiable::COLDAMAGEEFFECT: { eObjectGroup::DamageEffect eDamEffect = pGroup->GetCollisionDamageEffect(); - if (!EnumValueValid(eDamEffect)) break; @@ -1408,7 +1357,8 @@ int CLuaEngineDefs::EngineGetModelGroupPhysicalProperty(lua_State* luaVM) } } - m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); + if (argStream.HasErrors()) + m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); lua_pushnil(luaVM); return 1; } diff --git a/Client/sdk/game/CObjectGroupPhysicalProperties.h b/Client/sdk/game/CObjectGroupPhysicalProperties.h index fec0f27c328..9064f12f83c 100644 --- a/Client/sdk/game/CObjectGroupPhysicalProperties.h +++ b/Client/sdk/game/CObjectGroupPhysicalProperties.h @@ -46,6 +46,7 @@ class CObjectGroupPhysicalProperties virtual void SetFxOffset(CVector vecOffset) = 0; virtual CVector GetFxOffset() = 0; virtual bool SetFxParticleSystem(CFxSystemBPSAInterface* pBlueprint) = 0; + virtual void RemoveFxParticleSystem() = 0; virtual void SetSmashMultiplier(float fMult) = 0; virtual float GetSmashMultiplier() = 0; virtual void SetBreakVelocity(CVector vecVelocity) = 0; From 232f8962ab211f2c90b9ebcd00356a635b9b28f7 Mon Sep 17 00:00:00 2001 From: Kamil Marciniak Date: Sat, 19 Jan 2019 15:56:25 +0100 Subject: [PATCH 20/29] adjust properties count to real 160, instead of 255, --- Client/game_sa/CGameSA.cpp | 2 +- Client/game_sa/CGameSA.h | 2 +- Client/game_sa/CModelInfoSA.cpp | 22 ++++++++++------- Client/game_sa/CModelInfoSA.h | 21 +++++----------- .../logic/luadefs/CLuaEngineDefs.cpp | 24 ++++++++++++------- Client/sdk/game/CModelInfo.h | 6 ++--- 6 files changed, 40 insertions(+), 37 deletions(-) diff --git a/Client/game_sa/CGameSA.cpp b/Client/game_sa/CGameSA.cpp index 84d81f7459d..e65437ecda3 100644 --- a/Client/game_sa/CGameSA.cpp +++ b/Client/game_sa/CGameSA.cpp @@ -875,7 +875,7 @@ CPed* CGameSA::GetPedContext() CObjectGroupPhysicalProperties* CGameSA::GetObjectGroupPhysicalProperties(unsigned char ucObjectGroup) { DEBUG_TRACE("CObjectGroupPhysicalProperties * CGameSA::GetObjectGroupPhysicalProperties(unsigned char ucObjectGroup)"); - if (ObjectGroupsInfo[ucObjectGroup].IsValid()) + if (ucObjectGroup < OBJECTDYNAMICINFO_MAX && ObjectGroupsInfo[ucObjectGroup].IsValid()) return &ObjectGroupsInfo[ucObjectGroup]; return nullptr; diff --git a/Client/game_sa/CGameSA.h b/Client/game_sa/CGameSA.h index ee07b188809..5c645c2ce53 100644 --- a/Client/game_sa/CGameSA.h +++ b/Client/game_sa/CGameSA.h @@ -34,7 +34,7 @@ #define NUM_WeaponInfosTotal (NUM_WeaponInfosStdSkill + (3*NUM_WeaponInfosOtherSkill)) // std, (poor, pro, special) #define MODELINFO_MAX 26000 // Actual max is 25755 -#define OBJECTDYNAMICINFO_MAX 256 +#define OBJECTDYNAMICINFO_MAX 160 #define FUNC_GetLevelFromPosition 0x4DD300 diff --git a/Client/game_sa/CModelInfoSA.cpp b/Client/game_sa/CModelInfoSA.cpp index 56313a528cb..d3f4749c63a 100644 --- a/Client/game_sa/CModelInfoSA.cpp +++ b/Client/game_sa/CModelInfoSA.cpp @@ -20,7 +20,7 @@ std::map std::map CModelInfoSA::ms_ModelDefaultLodDistanceMap; std::map CModelInfoSA::ms_ModelDefaultAlphaTransparencyMap; std::unordered_map> CModelInfoSA::ms_ModelDefaultDummiesPosition; -std::unordered_map CModelInfoSA::ms_OriginalObjectPropertiesGroups; +std::unordered_map CModelInfoSA::ms_OriginalObjectPropertiesGroups; CModelInfoSA::CModelInfoSA() { @@ -1368,26 +1368,30 @@ void CModelInfoSA::ResetSupportedUpgrades() m_ModelSupportedUpgrades.Reset(); } -void CModelInfoSA::SetObjectPropertiesGroup(unsigned char ucNewGroup) +void CModelInfoSA::SetObjectPropertiesGroup(unsigned short usNewGroup) { unsigned char ucOrgGroup = GetObjectPropertiesGroup(); if (!MapFind(ms_OriginalObjectPropertiesGroups, m_dwModelID)) MapSet(ms_OriginalObjectPropertiesGroups, m_dwModelID, ucOrgGroup); - GetInterface()->ucDynamicIndex = ucNewGroup; + GetInterface()->usDynamicIndex = usNewGroup; } -unsigned char CModelInfoSA::GetObjectPropertiesGroup() +unsigned short CModelInfoSA::GetObjectPropertiesGroup() { - return GetInterface()->ucDynamicIndex; + unsigned short usGroup = GetInterface()->usDynamicIndex; + if (usGroup == 0xFFFF) + usGroup = 0; + + return usGroup; } void CModelInfoSA::RestoreObjectPropertiesGroup() { - unsigned char* ucGroupInMap = MapFind(ms_OriginalObjectPropertiesGroups, m_dwModelID); - if (ucGroupInMap) + unsigned short* usGroupInMap = MapFind(ms_OriginalObjectPropertiesGroups, m_dwModelID); + if (usGroupInMap) { - GetInterface()->ucDynamicIndex = *ucGroupInMap; + GetInterface()->usDynamicIndex = *usGroupInMap; MapRemove(ms_OriginalObjectPropertiesGroups, m_dwModelID); } } @@ -1396,7 +1400,7 @@ void CModelInfoSA::RestoreAllObjectsPropertiesGroups() { for (auto& pair : ms_OriginalObjectPropertiesGroups) { - pGame->GetModelInfo(pair.first)->GetInterface()->ucDynamicIndex = pair.second; + pGame->GetModelInfo(pair.first)->GetInterface()->usDynamicIndex = pair.second; } ms_OriginalObjectPropertiesGroups.clear(); } diff --git a/Client/game_sa/CModelInfoSA.h b/Client/game_sa/CModelInfoSA.h index 12d2da403c6..b7b024d14ed 100644 --- a/Client/game_sa/CModelInfoSA.h +++ b/Client/game_sa/CModelInfoSA.h @@ -139,16 +139,7 @@ class CBaseModelInfoSAInterface unsigned char ucNumOf2DEffects : 8; // +13 unsigned short usUnknown : 16; // +14 Something with 2d effects - unsigned char ucDynamicIndex : 8; // +16 - - unsigned char dwUnknownFlag9 : 1; // +17 - unsigned char dwUnknownFlag10 : 1; - unsigned char dwUnknownFlag11 : 1; - unsigned char dwUnknownFlag12 : 1; - unsigned char dwUnknownFlag13 : 1; - unsigned char dwUnknownFlag14 : 1; - unsigned char dwUnknownFlag15 : 1; - unsigned char dwUnknownFlag16 : 1; + unsigned short usDynamicIndex : 16; // +16 // Flags used by CBaseModelInfo unsigned char bHasBeenPreRendered : 1; // +18 @@ -277,7 +268,7 @@ class CModelInfoSA : public CModelInfo static std::map ms_ModelDefaultLodDistanceMap; static std::map ms_ModelDefaultAlphaTransparencyMap; static std::unordered_map> ms_ModelDefaultDummiesPosition; - static std::unordered_map ms_OriginalObjectPropertiesGroups; + static std::unordered_map ms_OriginalObjectPropertiesGroups; bool m_bAddedRefForCollision; SVehicleSupportedUpgrades m_ModelSupportedUpgrades; @@ -376,10 +367,10 @@ class CModelInfoSA : public CModelInfo void InitialiseSupportedUpgrades(RpClump* pClump); void ResetSupportedUpgrades(); - void SetObjectPropertiesGroup(unsigned char ucObjectGroup); - unsigned char GetObjectPropertiesGroup(); - void RestoreObjectPropertiesGroup(); - static void RestoreAllObjectsPropertiesGroups(); + void SetObjectPropertiesGroup(unsigned short usObjectGroup); + unsigned short GetObjectPropertiesGroup(); + void RestoreObjectPropertiesGroup(); + static void RestoreAllObjectsPropertiesGroups(); private: void RwSetSupportedUpgrades(RwFrame* parent, DWORD dwModel); diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp b/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp index ba345fb836e..6b0991d6fda 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp +++ b/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp @@ -962,12 +962,12 @@ int CLuaEngineDefs::EngineGetModelPhysicalPropertiesGroup(lua_State* luaVM) int CLuaEngineDefs::EngineSetModelPhysicalPropertiesGroup(lua_State* luaVM) { // bool engineSetModelPhysicalPropertiesGroup ( int modelID, int newGroup ) - int iModelID; - unsigned char ucNewGroup; + int iModelID; + unsigned int iNewGroup; CScriptArgReader argStream(luaVM); argStream.ReadNumber(iModelID); - argStream.ReadNumber(ucNewGroup); + argStream.ReadNumber(iNewGroup); if (!argStream.HasErrors()) { @@ -979,10 +979,18 @@ int CLuaEngineDefs::EngineSetModelPhysicalPropertiesGroup(lua_State* luaVM) return 1; } + if (iNewGroup < 0 || iNewGroup > 159) + { + argStream.SetCustomError("Expected group ID in range [0-159] at argument 1"); + m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); + lua_pushnil(luaVM); + return 1; + } + auto pModelInfo = g_pGame->GetModelInfo(iModelID); if (pModelInfo) { - pModelInfo->SetObjectPropertiesGroup(ucNewGroup); + pModelInfo->SetObjectPropertiesGroup(iNewGroup); lua_pushboolean(luaVM, true); return 1; } @@ -1071,9 +1079,9 @@ int CLuaEngineDefs::EngineSetModelGroupPhysicalProperty(lua_State* luaVM) return 1; } - if (iGivenGroup < 0 || iGivenGroup > 0xFF) + if (iGivenGroup < 0 || iGivenGroup > 159) { - argStream.SetCustomError("Expected group ID between 0 and 255 at argument 1"); + argStream.SetCustomError("Expected group ID in range [0-159] at argument 1"); m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); lua_pushnil(luaVM); return 1; @@ -1266,9 +1274,9 @@ int CLuaEngineDefs::EngineGetModelGroupPhysicalProperty(lua_State* luaVM) return 1; } - if (iGivenGroup < 0 || iGivenGroup > 0xFF) + if (iGivenGroup < 0 || iGivenGroup > 159) { - argStream.SetCustomError("Expected group ID between 0 and 255 at argument 1"); + argStream.SetCustomError("Expected group ID in range [0-159] at argument 1"); m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); lua_pushnil(luaVM); return 1; diff --git a/Client/sdk/game/CModelInfo.h b/Client/sdk/game/CModelInfo.h index 561f52ed742..74fd16f7986 100644 --- a/Client/sdk/game/CModelInfo.h +++ b/Client/sdk/game/CModelInfo.h @@ -173,7 +173,7 @@ class CModelInfo virtual SVehicleSupportedUpgrades GetVehicleSupportedUpgrades() = 0; virtual void ResetSupportedUpgrades() = 0; - virtual void SetObjectPropertiesGroup(unsigned char ucObjectGroup) = 0; - virtual unsigned char GetObjectPropertiesGroup() = 0; - virtual void RestoreObjectPropertiesGroup() = 0; + virtual void SetObjectPropertiesGroup(unsigned short usObjectGroup) = 0; + virtual unsigned short GetObjectPropertiesGroup() = 0; + virtual void RestoreObjectPropertiesGroup() = 0; }; From 6b4911b12042adb20c707df14a1375ca5feffa35 Mon Sep 17 00:00:00 2001 From: Kamil Marciniak Date: Sat, 19 Jan 2019 18:08:12 +0100 Subject: [PATCH 21/29] Ability to restore default group properties from lua --- .../logic/luadefs/CLuaEngineDefs.cpp | 59 +++++++++++++++---- .../deathmatch/logic/luadefs/CLuaEngineDefs.h | 5 +- 2 files changed, 52 insertions(+), 12 deletions(-) diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp b/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp index 6b0991d6fda..7e4c56d8197 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp +++ b/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp @@ -37,8 +37,9 @@ void CLuaEngineDefs::LoadFunctions() {"engineGetModelPhysicalPropertiesGroup", EngineGetModelPhysicalPropertiesGroup}, {"engineSetModelPhysicalPropertiesGroup", EngineSetModelPhysicalPropertiesGroup}, {"engineRestoreModelPhysicalPropertiesGroup", EngineRestoreModelPhysicalPropertiesGroup}, - {"engineSetModelGroupPhysicalProperty", EngineSetModelGroupPhysicalProperty}, - {"engineGetModelGroupPhysicalProperty", EngineGetModelGroupPhysicalProperty} + {"engineSetObjectGroupPhysicalProperty", EngineSetObjectGroupPhysicalProperty}, + {"engineGetObjectGroupPhysicalProperty", EngineGetObjectGroupPhysicalProperty}, + {"engineRestoreObjectGroupPhysicalProperties", EngineRestoreObjectGroupPhysicalProperties} // CLuaCFunctions::AddFunction ( "engineReplaceMatchingAtomics", EngineReplaceMatchingAtomics ); // CLuaCFunctions::AddFunction ( "engineReplaceWheelAtomics", EngineReplaceWheelAtomics ); @@ -72,8 +73,9 @@ void CLuaEngineDefs::AddClass(lua_State* luaVM) lua_classfunction(luaVM, "getModelPhysicalPropertiesGroup", "engineGetModelPhysicalPropertiesGroup"); lua_classfunction(luaVM, "setModelPhysicalPropertiesGroup", "engineSetModelPhysicalPropertiesGroup"); lua_classfunction(luaVM, "restoreModelPhysicalPropertiesGroup", "engineRestoreModelPhysicalPropertiesGroup"); - lua_classfunction(luaVM, "setModelGroupPhysicalProperty", "engineSetModelGroupPhysicalProperty"); - lua_classfunction(luaVM, "getModelGroupPhysicalProperty", "engineGetModelGroupPhysicalProperty"); + lua_classfunction(luaVM, "setObjectGroupPhysicalProperty", "engineSetObjectGroupPhysicalProperty"); + lua_classfunction(luaVM, "getObjectGroupPhysicalProperty", "engineGetObjectGroupPhysicalProperty"); + lua_classfunction(luaVM, "restoreObjectGroupPhysicalProperties", "engineRestoreObjectGroupPhysicalProperties"); // lua_classvariable ( luaVM, "modelLODDistance", "engineSetModelLODDistance", "engineGetModelLODDistance" ); .modelLODDistance[model] = distance // lua_classvariable ( luaVM, "modelNameFromID", NULL, "engineGetModelNameFromID" ); .modelNameFromID[id] = "name" @@ -1039,8 +1041,7 @@ int CLuaEngineDefs::EngineRestoreModelPhysicalPropertiesGroup(lua_State* luaVM) return 1; } -std::unordered_map> g_GroupPropertiesSettersFloat -{ +std::unordered_map> g_GroupPropertiesSettersFloat{ {eObjectGroup::Modifiable::MASS, [](CObjectGroupPhysicalProperties* pGroup, float fValue) { pGroup->SetMass(fValue); }}, {eObjectGroup::Modifiable::TURNMASS, [](CObjectGroupPhysicalProperties* pGroup, float fValue) { pGroup->SetTurnMass(fValue); }}, {eObjectGroup::Modifiable::AIRRESISTANCE, [](CObjectGroupPhysicalProperties* pGroup, float fValue) { pGroup->SetAirResistance(fValue); }}, @@ -1061,9 +1062,9 @@ std::unordered_mapSetBreakVelocity(vecValue); }}, }; -int CLuaEngineDefs::EngineSetModelGroupPhysicalProperty(lua_State* luaVM) +int CLuaEngineDefs::EngineSetObjectGroupPhysicalProperty(lua_State* luaVM) { - // bool engineSetModelGroupPhysicalProperty ( int groupID, string property, ...) + // bool engineSetObjectGroupPhysicalProperty ( int groupID, string property, ...) int iGivenGroup; eObjectGroup::Modifiable eProperty; @@ -1256,9 +1257,9 @@ std::unordered_mapGetFxOffset(); }}, {eObjectGroup::Modifiable::BREAKVELOCITY, [](CObjectGroupPhysicalProperties* pGroup) { return pGroup->GetBreakVelocity(); }}, }; -int CLuaEngineDefs::EngineGetModelGroupPhysicalProperty(lua_State* luaVM) +int CLuaEngineDefs::EngineGetObjectGroupPhysicalProperty(lua_State* luaVM) { - // bool engineGetModelGroupPhysicalProperty ( int groupID, string property ) + // bool engineGetObjectGroupPhysicalProperty ( int groupID, string property ) int iGivenGroup; eObjectGroup::Modifiable eProperty; @@ -1370,3 +1371,41 @@ int CLuaEngineDefs::EngineGetModelGroupPhysicalProperty(lua_State* luaVM) lua_pushnil(luaVM); return 1; } + +int CLuaEngineDefs::EngineRestoreObjectGroupPhysicalProperties(lua_State* luaVM) +{ + // bool engineRestoreObjectGroupPhysicalProperties ( int groupID ) + int iGivenGroup; + + CScriptArgReader argStream(luaVM); + argStream.ReadNumber(iGivenGroup); + + if (argStream.HasErrors()) + { + // We failed + m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); + lua_pushnil(luaVM); + return 1; + } + + if (iGivenGroup < 0 || iGivenGroup > 159) + { + argStream.SetCustomError("Expected group ID in range [0-159] at argument 1"); + m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); + lua_pushnil(luaVM); + return 1; + } + + auto pGroup = g_pGame->GetObjectGroupPhysicalProperties(iGivenGroup); + if (!pGroup) + { + argStream.SetCustomError("Expected valid group ID at argument 1"); + m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); + lua_pushnil(luaVM); + return 1; + } + + pGroup->RestoreDefault(); + lua_pushboolean(luaVM, true); + return 1; +} diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.h b/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.h index c38a48e4a5b..515a6bdfd0f 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.h +++ b/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.h @@ -47,8 +47,9 @@ class CLuaEngineDefs : public CLuaDefs LUA_DECLARE(EngineGetModelPhysicalPropertiesGroup) LUA_DECLARE(EngineSetModelPhysicalPropertiesGroup) LUA_DECLARE(EngineRestoreModelPhysicalPropertiesGroup) - LUA_DECLARE(EngineSetModelGroupPhysicalProperty) - LUA_DECLARE(EngineGetModelGroupPhysicalProperty) + LUA_DECLARE(EngineSetObjectGroupPhysicalProperty) + LUA_DECLARE(EngineGetObjectGroupPhysicalProperty) + LUA_DECLARE(EngineRestoreObjectGroupPhysicalProperties) private: static void AddEngineColClass(lua_State* luaVM); From 5df9c3dfe31861db57365ed4a1b15333fab26199 Mon Sep 17 00:00:00 2001 From: Kamil Marciniak Date: Sun, 20 Jan 2019 12:40:48 +0100 Subject: [PATCH 22/29] Enum class name change --- .../deathmatch/logic/lua/CLuaFunctionParseHelpers.cpp | 10 +++++----- .../deathmatch/logic/lua/CLuaFunctionParseHelpers.h | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.cpp b/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.cpp index 13a1577cad0..bd1f7431838 100644 --- a/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.cpp +++ b/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.cpp @@ -400,7 +400,7 @@ ADD_ENUM(eObjectGroup::Modifiable::BREAKVELOCITY, "break_velocity") ADD_ENUM(eObjectGroup::Modifiable::BREAKVELOCITYRAND, "break_velocity_randomness") ADD_ENUM(eObjectGroup::Modifiable::BREAKMODE, "break_mode") ADD_ENUM(eObjectGroup::Modifiable::SPARKSONIMPACT, "sparks_on_impact") -IMPLEMENT_ENUM_END("modelgroup-modifiable") +IMPLEMENT_ENUM_END("objectgroup-modifiable") IMPLEMENT_ENUM_BEGIN(eObjectGroup::DamageEffect) ADD_ENUM(eObjectGroup::DamageEffect::NO_EFFECT, "none") @@ -409,7 +409,7 @@ ADD_ENUM(eObjectGroup::DamageEffect::SMASH_COMPLETELY, "smash") ADD_ENUM(eObjectGroup::DamageEffect::CHANGE_THEN_SMASH, "change_smash") ADD_ENUM(eObjectGroup::DamageEffect::BREAKABLE, "breakable") ADD_ENUM(eObjectGroup::DamageEffect::BREAKABLE_REMOVED, "breakable_remove") -IMPLEMENT_ENUM_END("modelgroup-damageeffect") +IMPLEMENT_ENUM_END("objectgroup-damageeffect") IMPLEMENT_ENUM_BEGIN(eObjectGroup::CollisionResponse) ADD_ENUM(eObjectGroup::CollisionResponse::NO_RESPONSE, "none") @@ -422,20 +422,20 @@ ADD_ENUM(eObjectGroup::CollisionResponse::SWINGDOOR, "swingdoor") ADD_ENUM(eObjectGroup::CollisionResponse::LOCKDOOR, "lockdoor") ADD_ENUM(eObjectGroup::CollisionResponse::HANGING, "hanging") ADD_ENUM(eObjectGroup::CollisionResponse::POOLBALL, "poolball") -IMPLEMENT_ENUM_END("modelgroup-collisionresponse") +IMPLEMENT_ENUM_END("objectgroup-collisionresponse") IMPLEMENT_ENUM_BEGIN(eObjectGroup::FxType) ADD_ENUM(eObjectGroup::FxType::NO_FX, "none") ADD_ENUM(eObjectGroup::FxType::PLAY_ON_HIT, "play_on_hit") ADD_ENUM(eObjectGroup::FxType::PLAY_ON_DESTROYED, "play_on_destroyed") ADD_ENUM(eObjectGroup::FxType::PLAY_ON_HIT_DESTROYED, "play_on_hitdestroyed") -IMPLEMENT_ENUM_END("modelgroup-fxtype") +IMPLEMENT_ENUM_END("objectgroup-fxtype") IMPLEMENT_ENUM_BEGIN(eObjectGroup::BreakMode) ADD_ENUM(eObjectGroup::BreakMode::NOT_BY_GUN, "not_by_gun") ADD_ENUM(eObjectGroup::BreakMode::BY_GUN, "by_gun") ADD_ENUM(eObjectGroup::BreakMode::SMASHABLE, "smashable") -IMPLEMENT_ENUM_END("modelgroup-breakmode") +IMPLEMENT_ENUM_END("objectgroup-breakmode") IMPLEMENT_ENUM_BEGIN(eFontType) ADD_ENUM(FONT_DEFAULT, "default") diff --git a/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.h b/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.h index 2492404f271..15153c22aca 100644 --- a/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.h +++ b/Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.h @@ -390,23 +390,23 @@ inline SString GetClassTypeName(eVehicleDummies*) } inline SString GetClassByTypeName(eObjectGroup::Modifiable*) { - return "modelgroup-modifiable"; + return "objectgroup-modifiable"; } inline SString GetClassByTypeName(eObjectGroup::DamageEffect*) { - return "modelgroup-damageeffect"; + return "objectgroup-damageeffect"; } inline SString GetClassByTypeName(eObjectGroup::CollisionResponse*) { - return "modelgroup-collisionresponse"; + return "objectgroup-collisionresponse"; } inline SString GetClassByTypeName(eObjectGroup::FxType*) { - return "modelgroup-fxtype"; + return "objectgroup-fxtype"; } inline SString GetClassByTypeName(eObjectGroup::BreakMode*) { - return "modelgroup-breakmode"; + return "objectgroup-breakmode"; } // From 9e0d668e5cb53e8b65a323db43bcc8d80923bde2 Mon Sep 17 00:00:00 2001 From: Kamil Marciniak Date: Sun, 20 Jan 2019 13:17:58 +0100 Subject: [PATCH 23/29] Stuff i've noticed when making pull request --- Client/game_sa/CGameSA.h | 1 - Client/game_sa/CModelInfoSA.cpp | 7 +++++-- Client/sdk/game/CGame.h | 4 ++-- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/Client/game_sa/CGameSA.h b/Client/game_sa/CGameSA.h index 5c645c2ce53..47395bdaf29 100644 --- a/Client/game_sa/CGameSA.h +++ b/Client/game_sa/CGameSA.h @@ -432,7 +432,6 @@ class CGameSA : public CGame PostWeaponFireHandler* m_pPostWeaponFireHandler; TaskSimpleBeHitHandler* m_pTaskSimpleBeHitHandler; - private: CPools* m_pPools; CPlayerInfo* m_pPlayerInfo; diff --git a/Client/game_sa/CModelInfoSA.cpp b/Client/game_sa/CModelInfoSA.cpp index d3f4749c63a..3e1a195aa45 100644 --- a/Client/game_sa/CModelInfoSA.cpp +++ b/Client/game_sa/CModelInfoSA.cpp @@ -1370,9 +1370,12 @@ void CModelInfoSA::ResetSupportedUpgrades() void CModelInfoSA::SetObjectPropertiesGroup(unsigned short usNewGroup) { - unsigned char ucOrgGroup = GetObjectPropertiesGroup(); + unsigned short usOrgGroup = GetObjectPropertiesGroup(); + if (usOrgGroup == usNewGroup) + return; + if (!MapFind(ms_OriginalObjectPropertiesGroups, m_dwModelID)) - MapSet(ms_OriginalObjectPropertiesGroups, m_dwModelID, ucOrgGroup); + MapSet(ms_OriginalObjectPropertiesGroups, m_dwModelID, usOrgGroup); GetInterface()->usDynamicIndex = usNewGroup; } diff --git a/Client/sdk/game/CGame.h b/Client/sdk/game/CGame.h index b3e5f3e2bcc..b1991a9aed5 100644 --- a/Client/sdk/game/CGame.h +++ b/Client/sdk/game/CGame.h @@ -168,8 +168,8 @@ class __declspec(novtable) CGame virtual CWeaponStatManager* GetWeaponStatManager() = 0; virtual CPointLights* GetPointLights() = 0; - virtual CWeaponInfo* GetWeaponInfo(eWeaponType weapon, eWeaponSkill skill = WEAPONSKILL_STD) = 0; - virtual CModelInfo* GetModelInfo(DWORD dwModelID) = 0; + virtual CWeaponInfo* GetWeaponInfo(eWeaponType weapon, eWeaponSkill skill = WEAPONSKILL_STD) = 0; + virtual CModelInfo* GetModelInfo(DWORD dwModelID) = 0; virtual DWORD GetSystemTime() = 0; virtual BOOL IsAtMenu() = 0; From 4af17e65573a7221d6f0630436c45eaf06f17f21 Mon Sep 17 00:00:00 2001 From: Kamil Marciniak Date: Sun, 20 Jan 2019 13:23:03 +0100 Subject: [PATCH 24/29] Moved stuff --- Client/game_sa/CGameSA.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Client/game_sa/CGameSA.h b/Client/game_sa/CGameSA.h index 47395bdaf29..592c0fa3285 100644 --- a/Client/game_sa/CGameSA.h +++ b/Client/game_sa/CGameSA.h @@ -450,7 +450,6 @@ class CGameSA : public CGame CWorld* m_pWorld; CCamera* m_pCamera; CModelInfo* m_pModelInfo; - CObjectGroupPhysicalProperties* m_pObjectGroupPhysicalProperties; CPickups* m_pPickups; CWeaponInfo* m_pWeaponInfo; CExplosionManager* m_pExplosionManager; @@ -467,6 +466,7 @@ class CGameSA : public CGame CWaterManager* m_pWaterManager; CWeaponStatManager* m_pWeaponStatsManager; CPointLights* m_pPointLights; + CObjectGroupPhysicalProperties* m_pObjectGroupPhysicalProperties; CPad* m_pPad; CTheCarGenerators* m_pTheCarGenerators; From 45ee1d50143ea0268fb46460d0e5b5d6985eafa3 Mon Sep 17 00:00:00 2001 From: Kamil Marciniak Date: Sun, 20 Jan 2019 13:25:55 +0100 Subject: [PATCH 25/29] Formatting fix --- Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp b/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp index 7e4c56d8197..e64729ea3a3 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp +++ b/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp @@ -317,13 +317,12 @@ int CLuaEngineDefs::EngineLoadIFP(lua_State* luaVM) CResource* pResource = pLuaMain->GetResource(); if (pResource) { - bool bIsRawData = CIFPEngine::IsIFPData(strFile); + bool bIsRawData = CIFPEngine::IsIFPData(strFile); SString strPath; // Is this a legal filepath? if (bIsRawData || CResourceManager::ParseResourcePathInput(strFile, pResource, &strPath)) { - std::shared_ptr pIFP = - CIFPEngine::EngineLoadIFP(pResource, m_pManager, bIsRawData ? strFile : strPath, bIsRawData, strBlockName); + std::shared_ptr pIFP = CIFPEngine::EngineLoadIFP(pResource, m_pManager, bIsRawData ? strFile : strPath, bIsRawData, strBlockName); if (pIFP != nullptr) { // Return the IFP element From 72cf36544afa600e1ec14f66fabec94123be0734 Mon Sep 17 00:00:00 2001 From: Patrik Juvonen Date: Sat, 23 Feb 2019 14:58:02 +0200 Subject: [PATCH 26/29] Clean up project comments --- Client/game_sa/CObjectGroupPhysicalPropertiesSA.cpp | 2 +- Client/game_sa/CObjectGroupPhysicalPropertiesSA.h | 2 +- Client/sdk/game/CObjectGroupPhysicalProperties.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Client/game_sa/CObjectGroupPhysicalPropertiesSA.cpp b/Client/game_sa/CObjectGroupPhysicalPropertiesSA.cpp index 92ccb927a29..b8725e531c3 100644 --- a/Client/game_sa/CObjectGroupPhysicalPropertiesSA.cpp +++ b/Client/game_sa/CObjectGroupPhysicalPropertiesSA.cpp @@ -1,6 +1,6 @@ /***************************************************************************** * - * PROJECT: Multi Theft Auto v1.0 + * PROJECT: Multi Theft Auto * LICENSE: See LICENSE in the top level directory * FILE: game_sa/CObjectGroupPhysicalPropertiesSA.cpp * PURPOSE: Objects dynamic physical properties handler class diff --git a/Client/game_sa/CObjectGroupPhysicalPropertiesSA.h b/Client/game_sa/CObjectGroupPhysicalPropertiesSA.h index 7eaa4571d05..a0fd047bfc5 100644 --- a/Client/game_sa/CObjectGroupPhysicalPropertiesSA.h +++ b/Client/game_sa/CObjectGroupPhysicalPropertiesSA.h @@ -1,6 +1,6 @@ /***************************************************************************** * - * PROJECT: Multi Theft Auto v1.0 + * PROJECT: Multi Theft Auto * LICENSE: See LICENSE in the top level directory * FILE: game_sa/CObjectGroupPhysicalPropertiesSA.h * PURPOSE: Header file for objects dynamic physical properties handler class diff --git a/Client/sdk/game/CObjectGroupPhysicalProperties.h b/Client/sdk/game/CObjectGroupPhysicalProperties.h index 9064f12f83c..6df75b97de7 100644 --- a/Client/sdk/game/CObjectGroupPhysicalProperties.h +++ b/Client/sdk/game/CObjectGroupPhysicalProperties.h @@ -1,6 +1,6 @@ /***************************************************************************** * - * PROJECT: Multi Theft Auto v1.0 + * PROJECT: Multi Theft Auto * LICENSE: See LICENSE in the top level directory * FILE: sdk/game/CObjectGroupPhysicalProperties.h * PURPOSE: Objects dynamic physical properties handler interface From f0aa2bd3d5851b82eecdd81f2490eec92982d907 Mon Sep 17 00:00:00 2001 From: Kamil Marciniak Date: Sat, 23 Feb 2019 15:52:13 +0100 Subject: [PATCH 27/29] Changes recommended in code review 1. Added const modfier to functions where possible 2. Changed constructor to use initializer list 3. Removed unnecessary call to ChangeSafeguard() from one of the getters --- .../CObjectGroupPhysicalPropertiesSA.cpp | 51 +++++++++---------- .../CObjectGroupPhysicalPropertiesSA.h | 42 +++++++-------- .../sdk/game/CObjectGroupPhysicalProperties.h | 40 +++++++-------- 3 files changed, 65 insertions(+), 68 deletions(-) diff --git a/Client/game_sa/CObjectGroupPhysicalPropertiesSA.cpp b/Client/game_sa/CObjectGroupPhysicalPropertiesSA.cpp index b8725e531c3..18047f56e0e 100644 --- a/Client/game_sa/CObjectGroupPhysicalPropertiesSA.cpp +++ b/Client/game_sa/CObjectGroupPhysicalPropertiesSA.cpp @@ -16,10 +16,8 @@ extern CGameSA* pGame; CObjectGroupPhysicalPropertiesSAInterface* pObjectInfo = (CObjectGroupPhysicalPropertiesSAInterface*)ARRAY_ObjectGroupsDynamicInfo; std::unordered_map CObjectGroupPhysicalPropertiesSA::ms_OriginalGroupProperties; -CObjectGroupPhysicalPropertiesSA::CObjectGroupPhysicalPropertiesSA() -{ - m_pInterface = nullptr; -} +CObjectGroupPhysicalPropertiesSA::CObjectGroupPhysicalPropertiesSA() : m_pInterface(nullptr) +{} CObjectGroupPhysicalPropertiesSA::CObjectGroupPhysicalPropertiesSA(unsigned char ucObjectGroup) : m_ucObjectGroup(ucObjectGroup) { @@ -27,7 +25,7 @@ CObjectGroupPhysicalPropertiesSA::CObjectGroupPhysicalPropertiesSA(unsigned char m_bModified = MapFind(ms_OriginalGroupProperties, ucObjectGroup); } -CObjectGroupPhysicalPropertiesSAInterface* CObjectGroupPhysicalPropertiesSA::GetInterface() +CObjectGroupPhysicalPropertiesSAInterface* CObjectGroupPhysicalPropertiesSA::GetInterface() const { return m_pInterface; } @@ -39,14 +37,14 @@ void CObjectGroupPhysicalPropertiesSA::SetGroup(unsigned char ucObjectGroup) m_bModified = MapFind(ms_OriginalGroupProperties, ucObjectGroup); } -unsigned char CObjectGroupPhysicalPropertiesSA::GetGroup() +unsigned char CObjectGroupPhysicalPropertiesSA::GetGroup() const { return m_ucObjectGroup; } -bool CObjectGroupPhysicalPropertiesSA::IsValid() +bool CObjectGroupPhysicalPropertiesSA::IsValid() const { - return m_pInterface; + return m_pInterface != nullptr; } void CObjectGroupPhysicalPropertiesSA::ChangeSafeguard() @@ -102,7 +100,7 @@ void CObjectGroupPhysicalPropertiesSA::SetMass(float fMass) m_pInterface->fMass = fMass; } -float CObjectGroupPhysicalPropertiesSA::GetMass() +float CObjectGroupPhysicalPropertiesSA::GetMass() const { return m_pInterface->fMass; } @@ -116,7 +114,7 @@ void CObjectGroupPhysicalPropertiesSA::SetTurnMass(float fTurnMass) m_pInterface->fTurnMass = fTurnMass; } -float CObjectGroupPhysicalPropertiesSA::GetTurnMass() +float CObjectGroupPhysicalPropertiesSA::GetTurnMass() const { return m_pInterface->fTurnMass; } @@ -130,9 +128,8 @@ void CObjectGroupPhysicalPropertiesSA::SetAirResistance(float fAirResistance) m_pInterface->fAirResistance = fAirResistance; } -float CObjectGroupPhysicalPropertiesSA::GetAirResistance() +float CObjectGroupPhysicalPropertiesSA::GetAirResistance() const { - ChangeSafeguard(); return m_pInterface->fAirResistance; } @@ -145,7 +142,7 @@ void CObjectGroupPhysicalPropertiesSA::SetElasticity(float fElasticity) m_pInterface->fElasticity = fElasticity; } -float CObjectGroupPhysicalPropertiesSA::GetElasticity() +float CObjectGroupPhysicalPropertiesSA::GetElasticity() const { return m_pInterface->fElasticity; } @@ -159,7 +156,7 @@ void CObjectGroupPhysicalPropertiesSA::SetBuoyancy(float fBuoyancy) m_pInterface->fBuoyancy = fBuoyancy; } -float CObjectGroupPhysicalPropertiesSA::GetBuoyancy() +float CObjectGroupPhysicalPropertiesSA::GetBuoyancy() const { return m_pInterface->fBuoyancy; } @@ -173,7 +170,7 @@ void CObjectGroupPhysicalPropertiesSA::SetUprootLimit(float fUprootLimit) m_pInterface->fUprootLimit = fUprootLimit; } -float CObjectGroupPhysicalPropertiesSA::GetUprootLimit() +float CObjectGroupPhysicalPropertiesSA::GetUprootLimit() const { return m_pInterface->fUprootLimit; } @@ -187,7 +184,7 @@ void CObjectGroupPhysicalPropertiesSA::SetCollisionDamageMultiplier(float fColMu m_pInterface->fColDamageMultiplier = fColMult; } -float CObjectGroupPhysicalPropertiesSA::GetCollisionDamageMultiplier() +float CObjectGroupPhysicalPropertiesSA::GetCollisionDamageMultiplier() const { return m_pInterface->fColDamageMultiplier; } @@ -201,7 +198,7 @@ void CObjectGroupPhysicalPropertiesSA::SetCollisionDamageEffect(eObjectGroup::Da m_pInterface->eColDamageEffect = eDamageEffect; } -eObjectGroup::DamageEffect CObjectGroupPhysicalPropertiesSA::GetCollisionDamageEffect() +eObjectGroup::DamageEffect CObjectGroupPhysicalPropertiesSA::GetCollisionDamageEffect() const { return static_cast(m_pInterface->eColDamageEffect); } @@ -215,7 +212,7 @@ void CObjectGroupPhysicalPropertiesSA::SetCollisionSpecialResponseCase(eObjectGr m_pInterface->eSpecialColResponse = eResponseCase; } -eObjectGroup::CollisionResponse CObjectGroupPhysicalPropertiesSA::GetCollisionSpecialResponseCase() +eObjectGroup::CollisionResponse CObjectGroupPhysicalPropertiesSA::GetCollisionSpecialResponseCase() const { return static_cast(m_pInterface->eSpecialColResponse); } @@ -229,7 +226,7 @@ void CObjectGroupPhysicalPropertiesSA::SetCameraAvoidObject(bool bAvoid) m_pInterface->bCameraAvoidObject = bAvoid; } -bool CObjectGroupPhysicalPropertiesSA::GetCameraAvoidObject() +bool CObjectGroupPhysicalPropertiesSA::GetCameraAvoidObject() const { return m_pInterface->bCameraAvoidObject; } @@ -243,7 +240,7 @@ void CObjectGroupPhysicalPropertiesSA::SetCausesExplosion(bool bExplodes) m_pInterface->bCausesExplosion = bExplodes; } -bool CObjectGroupPhysicalPropertiesSA::GetCausesExplosion() +bool CObjectGroupPhysicalPropertiesSA::GetCausesExplosion() const { return m_pInterface->bCausesExplosion; } @@ -257,7 +254,7 @@ void CObjectGroupPhysicalPropertiesSA::SetFxType(eObjectGroup::FxType eFxType) m_pInterface->eFxType = eFxType; } -eObjectGroup::FxType CObjectGroupPhysicalPropertiesSA::GetFxType() +eObjectGroup::FxType CObjectGroupPhysicalPropertiesSA::GetFxType() const { return static_cast(m_pInterface->eFxType); } @@ -271,7 +268,7 @@ void CObjectGroupPhysicalPropertiesSA::SetFxOffset(CVector vecOffset) m_pInterface->vecFxOffset = vecOffset; } -CVector CObjectGroupPhysicalPropertiesSA::GetFxOffset() +CVector CObjectGroupPhysicalPropertiesSA::GetFxOffset() const { return m_pInterface->vecFxOffset; } @@ -310,7 +307,7 @@ void CObjectGroupPhysicalPropertiesSA::SetSmashMultiplier(float fMult) m_pInterface->fSmashMultiplier = fMult; } -float CObjectGroupPhysicalPropertiesSA::GetSmashMultiplier() +float CObjectGroupPhysicalPropertiesSA::GetSmashMultiplier() const { return m_pInterface->fSmashMultiplier; } @@ -324,7 +321,7 @@ void CObjectGroupPhysicalPropertiesSA::SetBreakVelocity(CVector vecVelocity) m_pInterface->vecBreakVelocity = vecVelocity; } -CVector CObjectGroupPhysicalPropertiesSA::GetBreakVelocity() +CVector CObjectGroupPhysicalPropertiesSA::GetBreakVelocity() const { return m_pInterface->vecBreakVelocity; } @@ -338,7 +335,7 @@ void CObjectGroupPhysicalPropertiesSA::SetBreakVelocityRandomness(float fRand) m_pInterface->fBreakVelocityRand = fRand; } -float CObjectGroupPhysicalPropertiesSA::GetBreakVelocityRandomness() +float CObjectGroupPhysicalPropertiesSA::GetBreakVelocityRandomness() const { return m_pInterface->fBreakVelocityRand; } @@ -352,7 +349,7 @@ void CObjectGroupPhysicalPropertiesSA::SetBreakMode(eObjectGroup::BreakMode eBre m_pInterface->eBreakMode = eBreakMode; } -eObjectGroup::BreakMode CObjectGroupPhysicalPropertiesSA::GetBreakMode() +eObjectGroup::BreakMode CObjectGroupPhysicalPropertiesSA::GetBreakMode() const { return static_cast(m_pInterface->eBreakMode); } @@ -366,7 +363,7 @@ void CObjectGroupPhysicalPropertiesSA::SetSparksOnImpact(bool bSparks) m_pInterface->dwSparksOnImpact = static_cast(bSparks); } -bool CObjectGroupPhysicalPropertiesSA::GetSparksOnImpact() +bool CObjectGroupPhysicalPropertiesSA::GetSparksOnImpact() const { return static_cast(m_pInterface->dwSparksOnImpact); } diff --git a/Client/game_sa/CObjectGroupPhysicalPropertiesSA.h b/Client/game_sa/CObjectGroupPhysicalPropertiesSA.h index a0fd047bfc5..edde84a3de9 100644 --- a/Client/game_sa/CObjectGroupPhysicalPropertiesSA.h +++ b/Client/game_sa/CObjectGroupPhysicalPropertiesSA.h @@ -53,50 +53,50 @@ class CObjectGroupPhysicalPropertiesSA : public CObjectGroupPhysicalProperties CObjectGroupPhysicalPropertiesSA(); CObjectGroupPhysicalPropertiesSA(unsigned char ucObjectGroup); - CObjectGroupPhysicalPropertiesSAInterface* GetInterface(); + CObjectGroupPhysicalPropertiesSAInterface* GetInterface() const; void SetGroup(unsigned char ucObjectGroup); - unsigned char GetGroup(); - bool IsValid(); + unsigned char GetGroup() const; + bool IsValid() const; void ChangeSafeguard(); void RestoreDefault(); static void RestoreDefaultValues(); void SetMass(float fMass); - float GetMass(); + float GetMass() const; void SetTurnMass(float fTurnMass); - float GetTurnMass(); + float GetTurnMass() const; void SetAirResistance(float fAirResistance); - float GetAirResistance(); + float GetAirResistance() const; void SetElasticity(float fElasticity); - float GetElasticity(); + float GetElasticity() const; void SetBuoyancy(float fBuoyancy); - float GetBuoyancy() override; + float GetBuoyancy() const; void SetUprootLimit(float fUprootLimit); - float GetUprootLimit(); + float GetUprootLimit() const; void SetCollisionDamageMultiplier(float fColMult); - float GetCollisionDamageMultiplier(); + float GetCollisionDamageMultiplier() const; void SetCollisionDamageEffect(eObjectGroup::DamageEffect ucDamageEffect); - eObjectGroup::DamageEffect GetCollisionDamageEffect(); + eObjectGroup::DamageEffect GetCollisionDamageEffect() const; void SetCollisionSpecialResponseCase(eObjectGroup::CollisionResponse ucResponseCase); - eObjectGroup::CollisionResponse GetCollisionSpecialResponseCase(); + eObjectGroup::CollisionResponse GetCollisionSpecialResponseCase() const; void SetCameraAvoidObject(bool bAvoid); - bool GetCameraAvoidObject(); + bool GetCameraAvoidObject() const; void SetCausesExplosion(bool bExplodes); - bool GetCausesExplosion(); + bool GetCausesExplosion() const; void SetFxType(eObjectGroup::FxType eFxType); - eObjectGroup::FxType GetFxType(); + eObjectGroup::FxType GetFxType() const; void SetFxOffset(CVector vecOffset); - CVector GetFxOffset(); + CVector GetFxOffset() const; bool SetFxParticleSystem(CFxSystemBPSAInterface* pBlueprint); void RemoveFxParticleSystem(); void SetSmashMultiplier(float fMult); - float GetSmashMultiplier(); + float GetSmashMultiplier() const; void SetBreakVelocity(CVector vecVelocity); - CVector GetBreakVelocity(); + CVector GetBreakVelocity() const; void SetBreakVelocityRandomness(float fRand); - float GetBreakVelocityRandomness(); + float GetBreakVelocityRandomness() const; void SetBreakMode(eObjectGroup::BreakMode eBreakMode); - eObjectGroup::BreakMode GetBreakMode(); + eObjectGroup::BreakMode GetBreakMode() const; void SetSparksOnImpact(bool bSparks); - bool GetSparksOnImpact(); + bool GetSparksOnImpact() const; }; diff --git a/Client/sdk/game/CObjectGroupPhysicalProperties.h b/Client/sdk/game/CObjectGroupPhysicalProperties.h index 6df75b97de7..75b937eac80 100644 --- a/Client/sdk/game/CObjectGroupPhysicalProperties.h +++ b/Client/sdk/game/CObjectGroupPhysicalProperties.h @@ -15,46 +15,46 @@ class CObjectGroupPhysicalProperties { public: - virtual class CObjectGroupPhysicalPropertiesSAInterface* GetInterface() = 0; - virtual unsigned char GetGroup() = 0; + virtual class CObjectGroupPhysicalPropertiesSAInterface* GetInterface() const = 0; + virtual unsigned char GetGroup() const = 0; virtual void RestoreDefault() = 0; virtual void SetMass(float fMass) = 0; - virtual float GetMass() = 0; + virtual float GetMass() const = 0; virtual void SetTurnMass(float fTurnMass) = 0; - virtual float GetTurnMass() = 0; + virtual float GetTurnMass() const = 0; virtual void SetAirResistance(float fAirResistance) = 0; - virtual float GetAirResistance() = 0; + virtual float GetAirResistance() const = 0; virtual void SetElasticity(float fElasticity) = 0; - virtual float GetElasticity() = 0; + virtual float GetElasticity() const = 0; virtual void SetBuoyancy(float fBuoyancy) = 0; - virtual float GetBuoyancy() = 0; + virtual float GetBuoyancy() const = 0; virtual void SetUprootLimit(float fUprootLimit) = 0; - virtual float GetUprootLimit() = 0; + virtual float GetUprootLimit() const = 0; virtual void SetCollisionDamageMultiplier(float fColMult) = 0; - virtual float GetCollisionDamageMultiplier() = 0; + virtual float GetCollisionDamageMultiplier() const = 0; virtual void SetCollisionDamageEffect(eObjectGroup::DamageEffect eDamageEffect) = 0; - virtual eObjectGroup::DamageEffect GetCollisionDamageEffect() = 0; + virtual eObjectGroup::DamageEffect GetCollisionDamageEffect() const = 0; virtual void SetCollisionSpecialResponseCase(eObjectGroup::CollisionResponse eResponseCase) = 0; - virtual eObjectGroup::CollisionResponse GetCollisionSpecialResponseCase() = 0; + virtual eObjectGroup::CollisionResponse GetCollisionSpecialResponseCase() const = 0; virtual void SetCameraAvoidObject(bool bAvoid) = 0; - virtual bool GetCameraAvoidObject() = 0; + virtual bool GetCameraAvoidObject() const = 0; virtual void SetCausesExplosion(bool bExplodes) = 0; - virtual bool GetCausesExplosion() = 0; + virtual bool GetCausesExplosion() const = 0; virtual void SetFxType(eObjectGroup::FxType eFxType) = 0; - virtual eObjectGroup::FxType GetFxType() = 0; + virtual eObjectGroup::FxType GetFxType() const = 0; virtual void SetFxOffset(CVector vecOffset) = 0; - virtual CVector GetFxOffset() = 0; + virtual CVector GetFxOffset() const = 0; virtual bool SetFxParticleSystem(CFxSystemBPSAInterface* pBlueprint) = 0; virtual void RemoveFxParticleSystem() = 0; virtual void SetSmashMultiplier(float fMult) = 0; - virtual float GetSmashMultiplier() = 0; + virtual float GetSmashMultiplier() const = 0; virtual void SetBreakVelocity(CVector vecVelocity) = 0; - virtual CVector GetBreakVelocity() = 0; + virtual CVector GetBreakVelocity() const = 0; virtual void SetBreakVelocityRandomness(float fRand) = 0; - virtual float GetBreakVelocityRandomness() = 0; + virtual float GetBreakVelocityRandomness() const = 0; virtual void SetBreakMode(eObjectGroup::BreakMode eBreakMode) = 0; - virtual eObjectGroup::BreakMode GetBreakMode() = 0; + virtual eObjectGroup::BreakMode GetBreakMode() const = 0; virtual void SetSparksOnImpact(bool bSparks) = 0; - virtual bool GetSparksOnImpact() = 0; + virtual bool GetSparksOnImpact() const = 0; }; From 9f56b4febdfc4b5143d67dab80e63939d06679ac Mon Sep 17 00:00:00 2001 From: Kamil Marciniak Date: Sun, 14 Apr 2019 10:11:10 +0200 Subject: [PATCH 28/29] Changes suggested in pull request review Calling of internal functions without _asm blocks Const specifier in range loops where needed Replaced pointers with std::unique_ptrs Fixed inconsistency with bad arguments checking in some lua functions --- Client/game_sa/CFxManagerSA.cpp | 20 +++---------------- Client/game_sa/CModelInfoSA.cpp | 2 +- .../CObjectGroupPhysicalPropertiesSA.cpp | 19 +++++++++--------- .../CObjectGroupPhysicalPropertiesSA.h | 2 +- .../logic/luadefs/CLuaEngineDefs.cpp | 4 ++-- 5 files changed, 16 insertions(+), 31 deletions(-) diff --git a/Client/game_sa/CFxManagerSA.cpp b/Client/game_sa/CFxManagerSA.cpp index 003444f092d..afd5b34c379 100644 --- a/Client/game_sa/CFxManagerSA.cpp +++ b/Client/game_sa/CFxManagerSA.cpp @@ -69,23 +69,9 @@ void CFxManagerSA::OnFxSystemSAInterfaceDestroyed(CFxSystemSAInterface* pFxSyste CFxSystemBPSAInterface* CFxManagerSA::GetFxSystemBlueprintByName(SString sName) { - DWORD dwThis = (DWORD)m_pInterface; - DWORD dwFunc = FUNC_FxManager_c__GetSystemByName; - const char* pChars = sName; - CFxSystemBPSAInterface* pFxSystemBlueprint = nullptr; - - _asm - { - mov ecx, dwThis - push pChars - call dwFunc - mov pFxSystemBlueprint, eax - } - - if (!pFxSystemBlueprint) - return nullptr; - - return pFxSystemBlueprint; + using func_t = CFxSystemBPSAInterface*(__thiscall*)(CFxManagerSAInterface * pInterface, const char* pChars); + auto func = reinterpret_cast(FUNC_FxManager_c__GetSystemByName); + return func(m_pInterface, sName); } bool CFxManagerSA::IsValidFxSystemBlueprintName(SString sName) diff --git a/Client/game_sa/CModelInfoSA.cpp b/Client/game_sa/CModelInfoSA.cpp index 3e1a195aa45..84bc1d76caf 100644 --- a/Client/game_sa/CModelInfoSA.cpp +++ b/Client/game_sa/CModelInfoSA.cpp @@ -1401,7 +1401,7 @@ void CModelInfoSA::RestoreObjectPropertiesGroup() void CModelInfoSA::RestoreAllObjectsPropertiesGroups() { - for (auto& pair : ms_OriginalObjectPropertiesGroups) + for (const auto& pair : ms_OriginalObjectPropertiesGroups) { pGame->GetModelInfo(pair.first)->GetInterface()->usDynamicIndex = pair.second; } diff --git a/Client/game_sa/CObjectGroupPhysicalPropertiesSA.cpp b/Client/game_sa/CObjectGroupPhysicalPropertiesSA.cpp index 18047f56e0e..02b75764c29 100644 --- a/Client/game_sa/CObjectGroupPhysicalPropertiesSA.cpp +++ b/Client/game_sa/CObjectGroupPhysicalPropertiesSA.cpp @@ -14,7 +14,7 @@ extern CGameSA* pGame; CObjectGroupPhysicalPropertiesSAInterface* pObjectInfo = (CObjectGroupPhysicalPropertiesSAInterface*)ARRAY_ObjectGroupsDynamicInfo; -std::unordered_map CObjectGroupPhysicalPropertiesSA::ms_OriginalGroupProperties; +std::unordered_map> CObjectGroupPhysicalPropertiesSA::ms_OriginalGroupProperties; CObjectGroupPhysicalPropertiesSA::CObjectGroupPhysicalPropertiesSA() : m_pInterface(nullptr) {} @@ -56,9 +56,9 @@ void CObjectGroupPhysicalPropertiesSA::ChangeSafeguard() // Make copy of original if (!MapFind(ms_OriginalGroupProperties, m_ucObjectGroup)) { - auto pOriginalCopy = new CObjectGroupPhysicalPropertiesSAInterface; - memcpy(pOriginalCopy, m_pInterface, sizeof(CObjectGroupPhysicalPropertiesSAInterface)); - MapSet(ms_OriginalGroupProperties, m_ucObjectGroup, pOriginalCopy); + auto pOriginalCopy = std::make_unique(); + memcpy(pOriginalCopy.get(), m_pInterface, sizeof(CObjectGroupPhysicalPropertiesSAInterface)); + ms_OriginalGroupProperties[m_ucObjectGroup] = std::move(pOriginalCopy); } } @@ -72,12 +72,11 @@ void CObjectGroupPhysicalPropertiesSA::RestoreDefault() if (!ppOriginalCopy) return; - auto pOriginal = *ppOriginalCopy; - dassert(pOriginal); - if (!pOriginal) + dassert(ppOriginalCopy->get()); + if (!ppOriginalCopy->get()) return; - - memcpy(m_pInterface, pOriginal, sizeof(CObjectGroupPhysicalPropertiesSAInterface)); + + memcpy(m_pInterface, ppOriginalCopy->get(), sizeof(CObjectGroupPhysicalPropertiesSAInterface)); m_bModified = false; } @@ -86,7 +85,7 @@ void CObjectGroupPhysicalPropertiesSA::RestoreDefaultValues() for (auto& entry : ms_OriginalGroupProperties) { pGame->GetObjectGroupPhysicalProperties(entry.first)->RestoreDefault(); - delete entry.second; + entry.second.reset(); MapRemove(ms_OriginalGroupProperties, entry.first); } } diff --git a/Client/game_sa/CObjectGroupPhysicalPropertiesSA.h b/Client/game_sa/CObjectGroupPhysicalPropertiesSA.h index edde84a3de9..0cd12b166fa 100644 --- a/Client/game_sa/CObjectGroupPhysicalPropertiesSA.h +++ b/Client/game_sa/CObjectGroupPhysicalPropertiesSA.h @@ -47,7 +47,7 @@ class CObjectGroupPhysicalPropertiesSA : public CObjectGroupPhysicalProperties CObjectGroupPhysicalPropertiesSAInterface* m_pInterface; unsigned char m_ucObjectGroup; bool m_bModified; - static std::unordered_map ms_OriginalGroupProperties; + static std::unordered_map> ms_OriginalGroupProperties; public: CObjectGroupPhysicalPropertiesSA(); diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp b/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp index 9707cf17c8c..0d75e4ea6cb 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp +++ b/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp @@ -1387,7 +1387,7 @@ int CLuaEngineDefs::EngineSetModelPhysicalPropertiesGroup(lua_State* luaVM) if (!argStream.HasErrors()) { - if (iModelID < 0 || iModelID >= 20000) + if (iModelID < 0 || iModelID > 19999) { argStream.SetCustomError("Expected model ID in range [0-19999] at argument 1"); m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); @@ -1430,7 +1430,7 @@ int CLuaEngineDefs::EngineRestoreModelPhysicalPropertiesGroup(lua_State* luaVM) if (!argStream.HasErrors()) { - if (iModelID < 0 || iModelID >= 20000) + if (iModelID < 0 || iModelID > 19999) { argStream.SetCustomError("Expected model ID in range [0-19999] at argument 1"); m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); From fabc619c4d781c5bb3b4d61c0c617104b64750aa Mon Sep 17 00:00:00 2001 From: Kamil Date: Mon, 2 Sep 2019 21:46:26 +0200 Subject: [PATCH 29/29] Change warnings to errors --- .../logic/luadefs/CLuaEngineDefs.cpp | 97 +++++-------------- 1 file changed, 22 insertions(+), 75 deletions(-) diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp b/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp index 0d75e4ea6cb..400f9ae3ab3 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp +++ b/Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp @@ -1354,9 +1354,7 @@ int CLuaEngineDefs::EngineGetModelPhysicalPropertiesGroup(lua_State* luaVM) if (iModelID < 0 || iModelID >= 20000) { argStream.SetCustomError("Expected model ID in range [0-19999] at argument 1"); - m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); - lua_pushnil(luaVM); - return 1; + return luaL_error(luaVM, argStream.GetFullErrorMessage()); } auto pModelInfo = g_pGame->GetModelInfo(iModelID); @@ -1367,12 +1365,8 @@ int CLuaEngineDefs::EngineGetModelPhysicalPropertiesGroup(lua_State* luaVM) } argStream.SetCustomError("Expected valid model ID at argument 1"); } - if (argStream.HasErrors()) - m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); - - // We failed - lua_pushnil(luaVM); - return 1; + + return luaL_error(luaVM, argStream.GetFullErrorMessage()); } int CLuaEngineDefs::EngineSetModelPhysicalPropertiesGroup(lua_State* luaVM) @@ -1390,17 +1384,13 @@ int CLuaEngineDefs::EngineSetModelPhysicalPropertiesGroup(lua_State* luaVM) if (iModelID < 0 || iModelID > 19999) { argStream.SetCustomError("Expected model ID in range [0-19999] at argument 1"); - m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); - lua_pushnil(luaVM); - return 1; + return luaL_error(luaVM, argStream.GetFullErrorMessage()); } if (iNewGroup < 0 || iNewGroup > 159) { argStream.SetCustomError("Expected group ID in range [0-159] at argument 1"); - m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); - lua_pushnil(luaVM); - return 1; + return luaL_error(luaVM, argStream.GetFullErrorMessage()); } auto pModelInfo = g_pGame->GetModelInfo(iModelID); @@ -1412,12 +1402,8 @@ int CLuaEngineDefs::EngineSetModelPhysicalPropertiesGroup(lua_State* luaVM) } argStream.SetCustomError("Expected valid model ID at argument 1"); } - if (argStream.HasErrors()) - m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); - - // We failed - lua_pushnil(luaVM); - return 1; + + return luaL_error(luaVM, argStream.GetFullErrorMessage()); } int CLuaEngineDefs::EngineRestoreModelPhysicalPropertiesGroup(lua_State* luaVM) @@ -1433,9 +1419,7 @@ int CLuaEngineDefs::EngineRestoreModelPhysicalPropertiesGroup(lua_State* luaVM) if (iModelID < 0 || iModelID > 19999) { argStream.SetCustomError("Expected model ID in range [0-19999] at argument 1"); - m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); - lua_pushnil(luaVM); - return 1; + return luaL_error(luaVM, argStream.GetFullErrorMessage()); } auto pModelInfo = g_pGame->GetModelInfo(iModelID); @@ -1447,12 +1431,8 @@ int CLuaEngineDefs::EngineRestoreModelPhysicalPropertiesGroup(lua_State* luaVM) } argStream.SetCustomError("Expected valid model ID at argument 1"); } - if (argStream.HasErrors()) - m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); - - // We failed - lua_pushnil(luaVM); - return 1; + + return luaL_error(luaVM, argStream.GetFullErrorMessage()); } std::unordered_map> g_GroupPropertiesSettersFloat{ @@ -1487,28 +1467,19 @@ int CLuaEngineDefs::EngineSetObjectGroupPhysicalProperty(lua_State* luaVM) argStream.ReadEnumString(eProperty); if (argStream.HasErrors()) - { - // We failed - m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); - lua_pushnil(luaVM); - return 1; - } + return luaL_error(luaVM, argStream.GetFullErrorMessage()); if (iGivenGroup < 0 || iGivenGroup > 159) { argStream.SetCustomError("Expected group ID in range [0-159] at argument 1"); - m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); - lua_pushnil(luaVM); - return 1; + return luaL_error(luaVM, argStream.GetFullErrorMessage()); } auto pGroup = g_pGame->GetObjectGroupPhysicalProperties(iGivenGroup); if (!pGroup) { argStream.SetCustomError("Expected valid group ID at argument 1"); - m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); - lua_pushnil(luaVM); - return 1; + return luaL_error(luaVM, argStream.GetFullErrorMessage()); } switch (eProperty) @@ -1644,11 +1615,8 @@ int CLuaEngineDefs::EngineSetObjectGroupPhysicalProperty(lua_State* luaVM) } } } - if (argStream.HasErrors()) - m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); - - lua_pushnil(luaVM); - return 1; + + return luaL_error(luaVM, argStream.GetFullErrorMessage()); } std::unordered_map> g_GroupPropertiesGettersFloat{ @@ -1682,28 +1650,19 @@ int CLuaEngineDefs::EngineGetObjectGroupPhysicalProperty(lua_State* luaVM) argStream.ReadEnumString(eProperty); if (argStream.HasErrors()) - { - // We failed - m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); - lua_pushnil(luaVM); - return 1; - } + return luaL_error(luaVM, argStream.GetFullErrorMessage()); if (iGivenGroup < 0 || iGivenGroup > 159) { argStream.SetCustomError("Expected group ID in range [0-159] at argument 1"); - m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); - lua_pushnil(luaVM); - return 1; + return luaL_error(luaVM, argStream.GetFullErrorMessage()); } auto pGroup = g_pGame->GetObjectGroupPhysicalProperties(iGivenGroup); if (!pGroup) { argStream.SetCustomError("Expected valid group ID at argument 1"); - m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); - lua_pushnil(luaVM); - return 1; + return luaL_error(luaVM, argStream.GetFullErrorMessage()); } switch (eProperty) @@ -1780,10 +1739,7 @@ int CLuaEngineDefs::EngineGetObjectGroupPhysicalProperty(lua_State* luaVM) } } - if (argStream.HasErrors()) - m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); - lua_pushnil(luaVM); - return 1; + return luaL_error(luaVM, argStream.GetFullErrorMessage()); } int CLuaEngineDefs::EngineRestoreObjectGroupPhysicalProperties(lua_State* luaVM) @@ -1795,28 +1751,19 @@ int CLuaEngineDefs::EngineRestoreObjectGroupPhysicalProperties(lua_State* luaVM) argStream.ReadNumber(iGivenGroup); if (argStream.HasErrors()) - { - // We failed - m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); - lua_pushnil(luaVM); - return 1; - } + return luaL_error(luaVM, argStream.GetFullErrorMessage()); if (iGivenGroup < 0 || iGivenGroup > 159) { argStream.SetCustomError("Expected group ID in range [0-159] at argument 1"); - m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); - lua_pushnil(luaVM); - return 1; + return luaL_error(luaVM, argStream.GetFullErrorMessage()); } auto pGroup = g_pGame->GetObjectGroupPhysicalProperties(iGivenGroup); if (!pGroup) { argStream.SetCustomError("Expected valid group ID at argument 1"); - m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage()); - lua_pushnil(luaVM); - return 1; + return luaL_error(luaVM, argStream.GetFullErrorMessage()); } pGroup->RestoreDefault();