Skip to content

Commit

Permalink
Add getVehicleWheelFrictionState function (#1839)
Browse files Browse the repository at this point in the history
Co-authored-by: Qais Patankar <qaisjp@gmail.com>
  • Loading branch information
onikyannn and qaisjp committed Nov 16, 2020
1 parent 9c5634c commit 21460b2
Show file tree
Hide file tree
Showing 8 changed files with 29 additions and 1 deletion.
2 changes: 1 addition & 1 deletion Client/game_sa/CAutomobileSA.h
Expand Up @@ -183,7 +183,7 @@ class CAutomobileSAInterface : public CVehicleSAInterface
char field_962;
char field_963;
float field_964;
int field_968[4];
int m_wheelFrictionState[4];
void* pNitroParticle[2];
char field_980;
char field_981;
Expand Down
6 changes: 6 additions & 0 deletions Client/game_sa/CVehicleSA.cpp
Expand Up @@ -1965,6 +1965,12 @@ bool CVehicleSA::IsWheelCollided(BYTE eWheelPosition)
return false;
}

int CVehicleSA::GetWheelFrictionState(BYTE eWheelPosition)
{
auto vehicle = static_cast<CAutomobileSAInterface*>(GetInterface());
return vehicle->m_wheelFrictionState[eWheelPosition];
}

void CVehicleSA::SetTaxiLightOn(bool bLightOn)
{
DEBUG_TRACE("void CVehicleSA::SetTaxiLight ( bool bLightOn )");
Expand Down
1 change: 1 addition & 0 deletions Client/game_sa/CVehicleSA.h
Expand Up @@ -669,6 +669,7 @@ class CVehicleSA : public virtual CVehicle, public virtual CPhysicalSA
void SetBikeWheelStatus(BYTE bWheel, BYTE bStatus);

bool IsWheelCollided(BYTE eWheelPosition);
int GetWheelFrictionState(BYTE eWheelPosition);

void GetGravity(CVector* pvecGravity) const { *pvecGravity = m_vecGravity; }
void SetGravity(const CVector* pvecGravity);
Expand Down
5 changes: 5 additions & 0 deletions Client/mods/deathmatch/logic/CClientVehicle.cpp
Expand Up @@ -1515,6 +1515,11 @@ bool CClientVehicle::IsWheelCollided(unsigned char ucWheel)
return true;
}

int CClientVehicle::GetWheelFrictionState(unsigned char ucWheel)
{
return m_pVehicle->GetWheelFrictionState(ucWheel);
}

unsigned char CClientVehicle::GetPanelStatus(unsigned char ucPanel)
{
if (ucPanel < MAX_PANELS)
Expand Down
1 change: 1 addition & 0 deletions Client/mods/deathmatch/logic/CClientVehicle.h
Expand Up @@ -258,6 +258,7 @@ class CClientVehicle : public CClientStreamElement
unsigned char GetDoorStatus(unsigned char ucDoor);
unsigned char GetWheelStatus(unsigned char ucWheel);
bool IsWheelCollided(unsigned char ucWheel);
int GetWheelFrictionState(unsigned char ucWheel);
unsigned char GetPanelStatus(unsigned char ucPanel);
unsigned char GetLightStatus(unsigned char ucLight);

Expand Down
13 changes: 13 additions & 0 deletions Client/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.cpp
Expand Up @@ -85,6 +85,7 @@ void CLuaVehicleDefs::LoadFunctions()
{"getVehicleModelDummyPosition", GetVehicleModelDummyPosition},
{"getVehicleWheelScale", ArgumentParser<GetVehicleWheelScale>},
{"getVehicleModelWheelSize", ArgumentParser<GetVehicleModelWheelSize>},
{"getVehicleWheelFrictionState", ArgumentParser<GetVehicleWheelFrictionState>},

// Vehicle set funcs
{"createVehicle", CreateVehicle},
Expand Down Expand Up @@ -228,6 +229,7 @@ void CLuaVehicleDefs::AddClass(lua_State* luaVM)
lua_classfunction(luaVM, "getVehicleModelDummyPosition", OOP_GetVehicleModelDummyPosition);
lua_classfunction(luaVM, "getWheelScale", "getVehicleWheelScale");
lua_classfunction(luaVM, "getModelWheelSize", "getVehicleModelWheelSize");
lua_classfunction(luaVM, "getWheelFrictionState", "getVehicleWheelFrictionState");

lua_classfunction(luaVM, "setComponentVisible", "setVehicleComponentVisible");
lua_classfunction(luaVM, "setSirensOn", "setVehicleSirensOn");
Expand Down Expand Up @@ -4109,3 +4111,14 @@ bool CLuaVehicleDefs::SetVehicleModelWheelSize(const unsigned short usModel, con

return true;
}

int CLuaVehicleDefs::GetVehicleWheelFrictionState(CClientVehicle* pVehicle, unsigned char wheel)
{
if (wheel < 0 || wheel > 3)
throw std::invalid_argument("Invalid wheel number");

if (CClientVehicleManager::GetVehicleType(pVehicle->GetModel()) != CLIENTVEHICLE_CAR)
throw std::invalid_argument("Invalid vehicle type");

return pVehicle->GetWheelFrictionState(wheel);
}
1 change: 1 addition & 0 deletions Client/mods/deathmatch/logic/luadefs/CLuaVehicleDefs.h
Expand Up @@ -149,6 +149,7 @@ class CLuaVehicleDefs : public CLuaDefs
static std::variant<float, std::unordered_map<std::string, float>> GetVehicleModelWheelSize(const unsigned short usModel,
const std::optional<eResizableVehicleWheelGroup> eWheelGroup);
static bool SetVehicleModelWheelSize(const unsigned short usModel, const eResizableVehicleWheelGroup eWheelGroup, const float fWheelSize);
static int GetVehicleWheelFrictionState(CClientVehicle* pVehicle, unsigned char wheel);

// Components
LUA_DECLARE(SetVehicleComponentPosition);
Expand Down
1 change: 1 addition & 0 deletions Client/sdk/game/CVehicle.h
Expand Up @@ -251,6 +251,7 @@ class CVehicle : public virtual CPhysical
virtual void SetBikeWheelStatus(BYTE bWheel, BYTE bStatus) = 0;

virtual bool IsWheelCollided(BYTE bWheel) = 0;
virtual int GetWheelFrictionState(BYTE bWheel) = 0;

virtual class CVehicleSAInterface* GetVehicleInterface() = 0;

Expand Down

0 comments on commit 21460b2

Please sign in to comment.