Make the physics settings configurable, but default to use the old
settings for now.
This commit is contained in:
parent
6d5651f357
commit
8c525ab2d4
@ -415,11 +415,14 @@
|
|||||||
physical-wheel-position: Defines where the 'physical' (raycast)
|
physical-wheel-position: Defines where the 'physical' (raycast)
|
||||||
wheel will be located. It's a weight factor with 0 = being
|
wheel will be located. It's a weight factor with 0 = being
|
||||||
at the widest side of the bevel, 1 = at the front and
|
at the widest side of the bevel, 1 = at the front and
|
||||||
narrowest part of the kart. -->
|
narrowest part of the kart. If the value is less than 0, the old
|
||||||
|
physics settings are used which places the raycast wheels
|
||||||
|
outside of the chassis and results in more stable physical
|
||||||
|
behaviour of the karts. -->
|
||||||
<collision impulse-type="normal"
|
<collision impulse-type="normal"
|
||||||
impulse="3000" impulse-time="0.1" terrain-impulse="8000"
|
impulse="3000" impulse-time="0.1" terrain-impulse="8000"
|
||||||
restitution="1.0" bevel-factor="0.5 0.0 0.7"
|
restitution="1.0" bevel-factor="0.5 0.0 0.7"
|
||||||
physical-wheel-position="0.5" />
|
physical-wheel-position="-1" />
|
||||||
|
|
||||||
<!-- If a kart starts within the specified time after 'go',
|
<!-- If a kart starts within the specified time after 'go',
|
||||||
it receives the corresponding bonus from 'boost'. Those
|
it receives the corresponding bonus from 'boost'. Those
|
||||||
|
@ -606,7 +606,10 @@ void Kart::createPhysics()
|
|||||||
if (y == -1)
|
if (y == -1)
|
||||||
{
|
{
|
||||||
int index = (x + 1) / 2 + 1 - z; // get index of wheel
|
int index = (x + 1) / 2 + 1 - z; // get index of wheel
|
||||||
if(true)
|
float f = getKartProperties()->getPhysicalWheelPosition();
|
||||||
|
// f < 0 indicates to use the old physics position, i.e.
|
||||||
|
// to place the wheels outside of the chassis
|
||||||
|
if(f<0)
|
||||||
{
|
{
|
||||||
const Vec3 cs = getKartProperties()->getGravityCenterShift();
|
const Vec3 cs = getKartProperties()->getGravityCenterShift();
|
||||||
wheel_pos[index].setX(x*0.5f*getKartWidth()+cs.getX());
|
wheel_pos[index].setX(x*0.5f*getKartWidth()+cs.getX());
|
||||||
@ -621,7 +624,6 @@ void Kart::createPhysics()
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
float f = getKartProperties()->getPhysicalWheelPosition();
|
|
||||||
wheel_pos[index] = p*(orig_factor*(1.0f - f) + bevel_factor*f);
|
wheel_pos[index] = p*(orig_factor*(1.0f - f) + bevel_factor*f);
|
||||||
wheel_pos[index].setY(0);
|
wheel_pos[index].setY(0);
|
||||||
}
|
}
|
||||||
|
@ -272,8 +272,15 @@ void KartProperties::load(const std::string &filename, const std::string &node)
|
|||||||
m_gravity_center_shift.setZ(0);
|
m_gravity_center_shift.setZ(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
//FIXME: magix 0.25 factor to keep it compatible with previous tourning
|
if(m_physical_wheel_position < 0)
|
||||||
m_wheel_base = fabsf( m_kart_model->getLength() - (true ? 0 : -0.25f));
|
m_wheel_base = fabsf(m_kart_model->getLength() );
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// The new (atm unused) physical position results in steering to be
|
||||||
|
// not sharp enough - therefore decrease the wheel base somewhat to
|
||||||
|
// approximate the behaviour of the old steering.
|
||||||
|
m_wheel_base = fabsf(m_kart_model->getLength() - 0.25f);
|
||||||
|
}
|
||||||
|
|
||||||
// Now convert the turn radius into turn angle:
|
// Now convert the turn radius into turn angle:
|
||||||
for(unsigned int i=0; i<m_turn_angle_at_speed.size(); i++)
|
for(unsigned int i=0; i<m_turn_angle_at_speed.size(); i++)
|
||||||
|
@ -152,7 +152,11 @@ private:
|
|||||||
|
|
||||||
/** The position of the physical wheel is a weighted average of the
|
/** The position of the physical wheel is a weighted average of the
|
||||||
* two ends of the beveled shape. This determines the weight: 0 =
|
* two ends of the beveled shape. This determines the weight: 0 =
|
||||||
* a the widest end, 1 = at the narrowest front end. */
|
* a the widest end, 1 = at the narrowest front end. If the value is
|
||||||
|
* < 0, the old physics settings are used which places the raycast
|
||||||
|
* wheels outside of the chassis - but result in a more stable
|
||||||
|
* physics behaviour (which is therefore atm still the default).
|
||||||
|
*/
|
||||||
float m_physical_wheel_position;
|
float m_physical_wheel_position;
|
||||||
|
|
||||||
/** Time a kart is moved upwards after when it is rescued. */
|
/** Time a kart is moved upwards after when it is rescued. */
|
||||||
@ -916,7 +920,9 @@ public:
|
|||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
/** Returns position of the physical wheel is a weighted average of the
|
/** Returns position of the physical wheel is a weighted average of the
|
||||||
* two ends of the beveled shape. This determines the weight: 0 =
|
* two ends of the beveled shape. This determines the weight: 0 =
|
||||||
* a the widest end, 1 = at the narrowest, front end. */
|
* a the widest end, 1 = at the narrowest, front end. If the value is <0,
|
||||||
|
* the old physics position is picked, which placed the raycast wheels
|
||||||
|
* outside of the chassis, but gives more stable physics. */
|
||||||
const float getPhysicalWheelPosition() const
|
const float getPhysicalWheelPosition() const
|
||||||
{
|
{
|
||||||
return m_physical_wheel_position;
|
return m_physical_wheel_position;
|
||||||
|
Loading…
Reference in New Issue
Block a user