From fe46aa5cc25d52ec434860d4ee72fbb1347adbe9 Mon Sep 17 00:00:00 2001 From: Roman Masanin <36927roma@gmail.com> Date: Thu, 1 Oct 2020 02:20:09 +0300 Subject: better flying cars, some refractoring and fixes --- src/vehicles/Automobile.cpp | 18 ++++++++---------- src/vehicles/Vehicle.cpp | 35 ++++++++++++++++++++--------------- src/vehicles/Vehicle.h | 2 +- 3 files changed, 29 insertions(+), 26 deletions(-) (limited to 'src/vehicles') diff --git a/src/vehicles/Automobile.cpp b/src/vehicles/Automobile.cpp index 24c84703..08fe7718 100644 --- a/src/vehicles/Automobile.cpp +++ b/src/vehicles/Automobile.cpp @@ -1375,6 +1375,13 @@ CAutomobile::ProcessControl(void) // Flying bool playRotorSound = false; + bool isPlane = GetModelIndex() == MI_DODO || bAllDodosCheat; +#ifdef BETTER_ALLCARSAREDODO_CHEAT + isPlane = isPlane || bAltDodoCheat; +#endif +#ifdef FIX_BUGS + isPlane = isPlane && !IsRealHeli(); +#endif if(GetStatus() != STATUS_PLAYER && GetStatus() != STATUS_PLAYER_REMOTE && GetStatus() != STATUS_PHYSICS){ if(IsRealHeli()){ bEngineOn = false; @@ -1383,16 +1390,7 @@ CAutomobile::ProcessControl(void) if(m_aWheelSpeed[1] < 0.154f && m_aWheelSpeed[1] > 0.0044f) playRotorSound = true; } - }else if((GetModelIndex() == MI_DODO || CVehicle::bAllDodosCheat) && -#ifdef FIX_BUGS - !IsRealHeli() && -#endif - m_vecMoveSpeed.Magnitude() > 0.0f && CTimer::GetTimeStep() > 0.0f){ -#ifdef ALT_DODO_CHEAT - if (bAltDodoCheat) - FlyingControl(FLIGHT_MODEL_PLANE_UNUSED); - else -#endif + }else if(isPlane && m_vecMoveSpeed.Magnitude() > 0.0f && CTimer::GetTimeStep() > 0.0f){ if(GetModelIndex() == MI_DODO) FlyingControl(FLIGHT_MODEL_DODO); else diff --git a/src/vehicles/Vehicle.cpp b/src/vehicles/Vehicle.cpp index d53f3c9f..82bdcdda 100644 --- a/src/vehicles/Vehicle.cpp +++ b/src/vehicles/Vehicle.cpp @@ -41,7 +41,7 @@ bool CVehicle::bCheat3; bool CVehicle::bCheat4; bool CVehicle::bCheat5; bool CVehicle::bCheat8; -#ifdef ALT_DODO_CHEAT +#ifdef BETTER_ALLCARSAREDODO_CHEAT bool CVehicle::bAltDodoCheat; #endif bool CVehicle::bHoverCheat; @@ -351,25 +351,26 @@ CVehicle::FlyingControl(eFlightModel flightModel) fSteerUD *= -fSteerMult; // thrust - float fHandlingThrust = pFlyingHandling->fThrust; + float fThrust = pFlyingHandling->fThrust; float fThrustFallOff = pFlyingHandling->fThrustFallOff; float fThrustFallOffBack = pFlyingHandling->fThrustFallOff * 8.0f; -#ifdef ALT_DODO_CHEAT +#ifdef BETTER_ALLCARSAREDODO_CHEAT if (bAltDodoCheat && !IsRealPlane()) { - fHandlingThrust = pHandling->Transmission.fEngineAcceleration; - fHandlingThrust *= pHandling->Transmission.nDriveType == '4' ? 4 : 2; - fThrustFallOff = 0.7f / pHandling->Transmission.fMaxVelocity; - fThrustFallOffBack = 0.7f / pHandling->Transmission.fMaxReverseVelocity; + fThrust = pHandling->Transmission.fEngineAcceleration + * pHandling->Transmission.nDriveType == '4' ? 4.0f : 2.0f; + fThrust = 5.0f * Max(fThrust, pFlyingHandling->fThrust); + fThrustFallOff = Min(1.0f / pHandling->Transmission.fMaxVelocity, fThrustFallOff); + fThrustFallOffBack = -1.0f / pHandling->Transmission.fMaxReverseVelocity; } -#endif // ALT_DOOD_CHEAT +#endif float fForwSpeed = DotProduct(GetMoveSpeed(), GetForward()); CVector vecTail = GetColModel()->boundingBox.min.y * GetForward(); - float fThrust = (CPad::GetPad(0)->GetAccelerate() - CPad::GetPad(0)->GetBrake()) / 255.0f; + float fPedalState = (CPad::GetPad(0)->GetAccelerate() - CPad::GetPad(0)->GetBrake()) / 255.0f; float fThrustAccel; - if(fForwSpeed > 0.0f || fThrust > 0.0f) - fThrustAccel = (fThrust - fThrustFallOff * fForwSpeed) * fHandlingThrust; + if(fForwSpeed > 0.0f || fPedalState > 0.0f) + fThrustAccel = (fPedalState - fThrustFallOff * fForwSpeed) * fThrust; else - fThrustAccel = Min(fThrust - fThrustFallOffBack * fForwSpeed, 0.0f) * fHandlingThrust; + fThrustAccel = Min(fPedalState - fThrustFallOffBack * fForwSpeed, 0.0f) * fThrust; if(flightModel == FLIGHT_MODEL_PLANE_UNUSED) fThrustAccel *= 0.3f; else if(flightModel == FLIGHT_MODEL_PLANE) @@ -407,14 +408,18 @@ CVehicle::FlyingControl(eFlightModel flightModel) float fPitchAccel = pFlyingHandling->fPitchStab * fTail * Abs(fTail) + pFlyingHandling->fPitch * fSteerUD * fForwSpeed; ApplyTurnForce(fPitchAccel * m_fTurnMass * GetUp() * CTimer::GetTimeStep(), vecTail); - float fLift = -DotProduct(GetMoveSpeed(), GetUp()) / Max(0.01f, GetMoveSpeed().Magnitude()); - float fLiftAccel = (pFlyingHandling->fAttackLift * fLift + pFlyingHandling->fFormLift) * fForwSpeed * fForwSpeed; + float fLift = DotProduct(GetMoveSpeed(), GetUp()) / Max(0.01f, GetMoveSpeed().Magnitude()); //accel*angle + float fLiftAccel = (pFlyingHandling->fFormLift - pFlyingHandling->fAttackLift * fLift) * SQR(fForwSpeed); float fLiftImpulse = fLiftAccel * m_fMass * CTimer::GetTimeStep(); if (GRAVITY * CTimer::GetTimeStep() * m_fMass < fLiftImpulse) { if (flightModel == FLIGHT_MODEL_RCPLANE && GetPosition().z > 50.0f) fLiftImpulse = CTimer::GetTimeStep() * 0.9f*GRAVITY * m_fMass; else if (flightModel == FLIGHT_MODEL_SEAPLANE && GetPosition().z > 80.0f) fLiftImpulse = CTimer::GetTimeStep() * 0.9f*GRAVITY * m_fMass; +#ifdef BETTER_ALLCARSAREDODO_CHEAT + else if(GetPosition().z > 180.0f) + fLiftImpulse = CTimer::GetTimeStep() * 0.9f * GRAVITY * m_fMass; +#endif } ApplyMoveForce(fLiftImpulse * GetUp()); @@ -444,7 +449,7 @@ CVehicle::FlyingControl(eFlightModel flightModel) case FLIGHT_MODEL_HELI: { #ifdef RESTORE_ALLCARSHELI_CHEAT - tFlyingHandlingData* flyingHandling = bAllCarCheat && GetStatus() == STATUS_PLAYER && !IsRealHeli() ? mod_HandlingManager.GetFlyingPointer(HANDLING_MAVERICK) : pFlyingHandling; + tFlyingHandlingData* flyingHandling = bAllCarCheat && !IsRealHeli() ? mod_HandlingManager.GetFlyingPointer(HANDLING_MAVERICK) : pFlyingHandling; #else tFlyingHandlingData* flyingHandling = pFlyingHandling; #endif diff --git a/src/vehicles/Vehicle.h b/src/vehicles/Vehicle.h index 34106327..30f84ede 100644 --- a/src/vehicles/Vehicle.h +++ b/src/vehicles/Vehicle.h @@ -400,7 +400,7 @@ public: static bool bCheat4; static bool bCheat5; static bool bCheat8; -#ifdef ALT_DODO_CHEAT +#ifdef BETTER_ALLCARSAREDODO_CHEAT static bool bAltDodoCheat; #endif static bool bHoverCheat; -- cgit v1.2.3