From bbf071aec59e9ed1ef95f53616cd4ea9db1b0364 Mon Sep 17 00:00:00 2001 From: hikerstk <hikerstk@178a84e3-b1eb-0310-8ba1-8eac791a3b58> Date: Thu, 25 Oct 2012 06:03:59 +0000 Subject: [PATCH] Added a minimum skidding speed (below which a kart can't skid), which also fixes #716. git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/trunk@11759 178a84e3-b1eb-0310-8ba1-8eac791a3b58 --- data/stk_config.xml | 4 +++- src/karts/skidding.cpp | 7 +++++-- src/karts/skidding_properties.cpp | 3 +++ src/karts/skidding_properties.hpp | 3 +++ 4 files changed, 14 insertions(+), 3 deletions(-) diff --git a/data/stk_config.xml b/data/stk_config.xml index 9179a55e1..89c40d0d6 100644 --- a/data/stk_config.xml +++ b/data/stk_config.xml @@ -185,6 +185,8 @@ revert-visual-time: how long it takes when stopping a skid to revert the visual skid and bring visuals and physics in sync again. angular-velocity: Angular velocity to be used for the kart when skidding. + min-speed: Minimum speed a kart must have before it can skid. Must be + >0, otherwise the kart can skid at the start of the race. time-till-bonus: How long a kart needs to skid in order to get a bonus. bonus-force: A speedup applied to the kart whick skidded for a while. bonus-time: How long the bonus-force is applied. @@ -207,7 +209,7 @@ <skid increase="1.05" decrease="0.95" max="2.5" time-till-max="0.5" visual="1.25" visual-time="0.7" revert-visual-time="0.7" - time-till-bonus="1.0 3.0" + min-speed="10" time-till-bonus="1.0 3.0" bonus-speed="4.5 6.5" bonus-time="3.0 4.0" bonus-force="250 350" physical-jump-time="0" graphical-jump-time="0.4" diff --git a/src/karts/skidding.cpp b/src/karts/skidding.cpp index dce39b868..5f13f5ba5 100644 --- a/src/karts/skidding.cpp +++ b/src/karts/skidding.cpp @@ -199,6 +199,7 @@ void Skidding::update(float dt, bool is_on_ground, if (is_on_ground) { if((fabs(steering) > 0.001f) && + m_kart->getSpeed()>m_min_skid_speed && (skidding==KartControl::SC_LEFT||skidding==KartControl::SC_RIGHT)) { m_skid_factor += m_skid_increase *dt/m_time_till_max_skid; @@ -268,8 +269,10 @@ void Skidding::update(float dt, bool is_on_ground, skidding!=KartControl::SC_RIGHT) break; // Don't allow skidding while the kart is (apparently) - // still in the air. - if(m_remaining_jump_time>0) break; + // still in the air, or when the kart is too slow + if(m_remaining_jump_time>0 || + m_kart->getSpeed() <m_min_skid_speed) break; + m_skid_state = skidding==KartControl::SC_RIGHT ? SKID_ACCUMULATE_RIGHT : SKID_ACCUMULATE_LEFT; diff --git a/src/karts/skidding_properties.cpp b/src/karts/skidding_properties.cpp index 7a9cbb0d3..7f98e97a1 100644 --- a/src/karts/skidding_properties.cpp +++ b/src/karts/skidding_properties.cpp @@ -38,6 +38,7 @@ SkiddingProperties::SkiddingProperties() m_skid_reduce_turn_max = UNDEFINED; m_physical_jump_time = UNDEFINED; m_graphical_jump_time = UNDEFINED; + m_min_skid_speed = UNDEFINED; m_has_skidmarks = true; m_skid_bonus_time.clear(); @@ -66,6 +67,7 @@ void SkiddingProperties::load(const XMLNode *skid_node) skid_node->get("bonus-force", &m_skid_bonus_force ); skid_node->get("physical-jump-time", &m_physical_jump_time ); skid_node->get("graphical-jump-time", &m_graphical_jump_time ); + skid_node->get("min-speed", &m_min_skid_speed ); } // load // ---------------------------------------------------------------------------- @@ -87,6 +89,7 @@ void SkiddingProperties::checkAllSet(const std::string &filename) const CHECK_NEG(m_skid_reduce_turn_max, "skid reduce-turn-max" ); CHECK_NEG(m_physical_jump_time, "skid physical-jump-time" ); CHECK_NEG(m_graphical_jump_time, "skid graphical-jump-time" ); + CHECK_NEG(m_min_skid_speed, "skid min-speed" ); if(m_skid_time_till_bonus.size()==0) fprintf(stderr, "Warning: no skid time declared, can be ignored.\n"); diff --git a/src/karts/skidding_properties.hpp b/src/karts/skidding_properties.hpp index 2cc36b2c3..8d719b097 100644 --- a/src/karts/skidding_properties.hpp +++ b/src/karts/skidding_properties.hpp @@ -75,6 +75,9 @@ protected: * feel better). */ float m_post_skid_rotate_factor; + /*** Minimum speed a kart must have before it can skid. */ + float m_min_skid_speed; + /** Time of skidding before you get a bonus boost. It's possible to * define more than one time, i.e. longer skidding gives more bonus. */ std::vector<float> m_skid_time_till_bonus;