From 26324da7a2805c35d8ed6876571621337a11f0f4 Mon Sep 17 00:00:00 2001 From: hikerstk Date: Mon, 8 Sep 2008 10:53:29 +0000 Subject: [PATCH] Bugfix: projectiles were not handled correctly on the client, resulting in a crash. git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/trunk/supertuxkart@2253 178a84e3-b1eb-0310-8ba1-8eac791a3b58 --- src/kart.cpp | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/kart.cpp b/src/kart.cpp index 3a471215a..07e01ba8b 100644 --- a/src/kart.cpp +++ b/src/kart.cpp @@ -471,18 +471,18 @@ void Kart::raceFinished(float time) } // raceFinished //----------------------------------------------------------------------------- -void Kart::collectedHerring(const Herring &herring, int random_attachment) +void Kart::collectedHerring(const Herring &herring, int add_info) { const herringType type = herring.getType(); const int OLD_HERRING_GOBBLED = m_num_herrings_gobbled; switch (type) { - case HE_GREEN : m_attachment.hitGreenHerring(herring); break; - case HE_SILVER : m_num_herrings_gobbled++ ; break; - case HE_GOLD : m_num_herrings_gobbled += 3 ; break; + case HE_GREEN : m_attachment.hitGreenHerring(herring, add_info); break; + case HE_SILVER : m_num_herrings_gobbled++ ; break; + case HE_GOLD : m_num_herrings_gobbled += 3 ; break; case HE_RED : int n=1 + 4*getNumHerring() / MAX_HERRING_EATEN; - m_collectable.hitRedHerring(n, herring); break; + m_collectable.hitRedHerring(n, herring, add_info); break; } // switch TYPE // Attachments and collectables are stored in the corresponding @@ -564,6 +564,14 @@ void Kart::handleExplosion(const Vec3& pos, bool direct_hit) //----------------------------------------------------------------------------- void Kart::update(float dt) { + // Store the actual kart controls at the start of update in the server + // state. This makes it easier to reset some fields when they are not used + // anymore (e.g. controls.fire). + if(network_manager->getMode()==NetworkManager::NW_SERVER) + { + race_state->storeKartControls(*this); + } + // On a client fiering is done upon receiving the command from the server. if ( m_controls.fire && network_manager->getMode()!=NetworkManager::NW_CLIENT && !isRescue())