From 2ee0702d69728016593030e1b3a18d537563dab4 Mon Sep 17 00:00:00 2001 From: MrSimbax Date: Sun, 9 Mar 2014 14:36:39 +0100 Subject: Made some improvements to fall damage from a61da740 Fall damage on: - no energy - overheat Fall damage off: - underwater --- src/physics/physics.cpp | 46 ++++++++++++++++++++++++++++++++++++++-------- src/physics/physics.h | 19 ++++++++++++++----- 2 files changed, 52 insertions(+), 13 deletions(-) diff --git a/src/physics/physics.cpp b/src/physics/physics.cpp index 2ab7425..0d1c6fe 100644 --- a/src/physics/physics.cpp +++ b/src/physics/physics.cpp @@ -108,8 +108,8 @@ CPhysics::CPhysics(CObject* object) m_bForceUpdate = true; m_bLowLevel = false; m_fallingHeight = 0.0f; - m_fallDamageFraction = 0.0f; - m_minFallingHeight = 0.0f; + m_minFallingHeight = 20.0f; + m_fallDamageFraction = 0.007f; memset(&m_linMotion, 0, sizeof(Motion)); memset(&m_cirMotion, 0,sizeof(Motion)); @@ -854,6 +854,7 @@ void CPhysics::MotorUpdate(float aTime, float rTime) else { motorSpeed.y = -1.0f; // grave + SetFalling(); } SetMotor(false); } @@ -915,15 +916,10 @@ void CPhysics::MotorUpdate(float aTime, float rTime) if ( m_reactorRange < 0.5f ) m_bLowLevel = true; } - m_minFallingHeight = 20.0f; - m_fallDamageFraction = 0.007f; - if ( m_reactorRange == 0.0f ) // reactor tilt? { motorSpeed.y = -1.0f; // grave - - if (m_fallingHeight == 0.0f && m_floorHeight >= m_minFallingHeight) - m_fallingHeight = m_floorHeight; + SetFalling(); } } @@ -1522,6 +1518,7 @@ bool CPhysics::EventFrame(const Event &event) if ( pos.y < m_water->GetLevel(m_object) ) // underwater? { h *= 0.5f; + m_fallingHeight = 0.0f; // can't fall underwater } #endif //? m_linMotion.terrainSpeed.x = -tAngle.z*m_linMotion.terrainForce.x*h; @@ -3901,3 +3898,36 @@ Error CPhysics::GetError() return ERR_OK; } +void CPhysics::SetFalling() +{ + if (m_fallingHeight == 0.0f && m_floorHeight >= m_minFallingHeight) + m_fallingHeight = m_floorHeight; +} + +float CPhysics::GetFallingHeight() +{ + return m_fallingHeight; +} + +void CPhysics::SetMinFallingHeight(float value) +{ + if (value < 0.0f) return; + m_minFallingHeight = value; +} + +float CPhysics::GetMinFallingHeight() +{ + return m_minFallingHeight; +} + +void CPhysics::SetFallDamageFraction(float value) +{ + if (value < 0.0f) return; + m_fallDamageFraction = value; +} + +float CPhysics::GetFallDamageFraction() +{ + return m_fallDamageFraction; +} + diff --git a/src/physics/physics.h b/src/physics/physics.h index cf15b13..fea5601 100644 --- a/src/physics/physics.h +++ b/src/physics/physics.h @@ -165,6 +165,14 @@ public: void CreateInterface(bool bSelect); Error GetError(); + float GetFallingHeight(); + + void SetMinFallingHeight(float value); + float GetMinFallingHeight(); + + void SetFallDamageFraction(float value); + float GetFallDamageFraction(); + protected: bool EventFrame(const Event &event); void WaterFrame(float aTime, float rTime); @@ -191,6 +199,7 @@ protected: void MotorParticle(float aTime, float rTime); void WaterParticle(float aTime, Math::Vector pos, ObjectType type, float floor, float advance, float turn); void WheelParticle(int color, float width); + void SetFalling(); protected: Gfx::CEngine* m_engine; @@ -240,16 +249,16 @@ protected: float m_restBreakParticle; float m_floorLevel; // ground level float m_floorHeight; // height above the ground - int m_soundChannel; - int m_soundChannelSlide; + int m_soundChannel; + int m_soundChannelSlide; float m_soundTimePshhh; float m_soundTimeJostle; float m_soundTimeBoum; bool m_bSoundSlow; bool m_bForceUpdate; bool m_bLowLevel; - float m_fallingHeight; - float m_fallDamageFraction; - float m_minFallingHeight; + float m_fallingHeight; + float m_fallDamageFraction; + float m_minFallingHeight; }; -- cgit v1.2.3-1-g7c22