@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user