Merge pull request #1718 from quizywiz/fixing1580

fix #1580
This commit is contained in:
auriamg
2014-11-19 18:31:34 -05:00
2 changed files with 33 additions and 1 deletions

View File

@@ -25,6 +25,14 @@
#include "karts/player_difficulty.hpp"
#include "race/race_manager.hpp"
namespace irr
{
namespace scene
{
class IDummyTransformationSceneNode;
}
}
class AbstractKartAnimation;
class Attachment;
class btKart;
@@ -81,6 +89,8 @@ protected:
/** A kart animation object to handle rescue, explosion etc. */
AbstractKartAnimation *m_kart_animation;
/** Node between wheels and kart. Allows kart to be scaled independent of wheels, when being squashed.*/
irr::scene::IDummyTransformationSceneNode *m_wheel_box;
public:
AbstractKart(const std::string& ident,
int world_kart_id,

View File

@@ -119,6 +119,7 @@ Kart::Kart (const std::string& ident, unsigned int world_kart_id,
m_shadow_enabled = false;
m_shadow = NULL;
m_wheel_box = NULL;
m_collision_particles = NULL;
m_slipstream = NULL;
m_skidmarks = NULL;
@@ -264,7 +265,7 @@ Kart::~Kart()
if(m_stars_effect) delete m_stars_effect;
delete m_shadow;
if (m_wheel_box) m_wheel_box->remove();
if(m_skidmarks) delete m_skidmarks ;
// Ghost karts don't have a body
@@ -1101,6 +1102,15 @@ void Kart::update(float dt)
if(m_squash_time<=0)
{
m_node->setScale(core::vector3df(1.0f, 1.0f, 1.0f));
if (m_vehicle->getNumWheels() > 0)
{
scene::ISceneNode **wheels = m_kart_model->getWheelNodes();
for (int i = 0; i < 4 && i < m_vehicle->getNumWheels(); ++i)
{
if (wheels[i])
wheels[i]->setParent(m_node);
}
}
}
} // if squashed
@@ -1422,6 +1432,18 @@ void Kart::setSquash(float time, float slowdown)
m_node->setScale(core::vector3df(1.0f, 0.5f, 1.0f));
m_max_speed->setSlowdown(MaxSpeed::MS_DECREASE_SQUASH, slowdown,
0.1f, time);
if (m_vehicle->getNumWheels() > 0)
{
if (!m_wheel_box)
m_wheel_box = irr_driver->getSceneManager()->addDummyTransformationSceneNode(m_node);
scene::ISceneNode **wheels = m_kart_model->getWheelNodes();
for (int i = 0; i < 4 && i < m_vehicle->getNumWheels(); ++i)
{
if (wheels[i])
wheels[i]->setParent(m_wheel_box);
}
m_wheel_box->getRelativeTransformationMatrix().setScale(core::vector3df(1.0f, 2.0f, 1.0f));
}
m_squash_time = time;
} // setSquash