1) Fixed incorrect start positions of plunger (getY instead of getZ).
2) Some code cleanup (renamed variables to follow our style, renamed Kart::getKartHeading to Kart::getKartTransform). git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/trunk@6731 178a84e3-b1eb-0310-8ba1-8eac791a3b58
This commit is contained in:
parent
49dd6821a4
commit
16d969fa39
@ -99,7 +99,7 @@ Cake::Cake (Kart *kart) : Flyable(kart, PowerupManager::POWERUP_CAKE)
|
|||||||
m_target = NULL;
|
m_target = NULL;
|
||||||
// kart is too far to be hit. so throw the projectile in a generic way,
|
// kart is too far to be hit. so throw the projectile in a generic way,
|
||||||
// straight ahead, without trying to hit anything in particular
|
// straight ahead, without trying to hit anything in particular
|
||||||
trans = kart->getKartHeading(pitch);
|
trans = kart->getKartTransform(pitch);
|
||||||
|
|
||||||
m_initial_velocity = Vec3(0.0f, up_velocity, m_speed);
|
m_initial_velocity = Vec3(0.0f, up_velocity, m_speed);
|
||||||
|
|
||||||
|
@ -156,8 +156,8 @@ void Flyable::createPhysics(float forw_offset, const Vec3 &velocity,
|
|||||||
const btTransform* custom_direction)
|
const btTransform* custom_direction)
|
||||||
{
|
{
|
||||||
// Get Kart heading direction
|
// Get Kart heading direction
|
||||||
btTransform trans = ( custom_direction == NULL ? m_owner->getKartHeading()
|
btTransform trans = ( !custom_direction ? m_owner->getKartTransform()
|
||||||
: *custom_direction );
|
: *custom_direction );
|
||||||
|
|
||||||
// Apply offset
|
// Apply offset
|
||||||
btTransform offset_transform;
|
btTransform offset_transform;
|
||||||
|
@ -57,7 +57,7 @@ Plunger::Plunger(Kart *kart) : Flyable(kart, PowerupManager::POWERUP_PLUNGER)
|
|||||||
{
|
{
|
||||||
const float gravity = 0.0f;
|
const float gravity = 0.0f;
|
||||||
|
|
||||||
float y_offset = 0.5f*kart->getKartLength()+0.5f*m_extend.getY();
|
float forward_offset = 0.5f*kart->getKartLength()+0.5f*m_extend.getZ();
|
||||||
float up_velocity = 0.0f;
|
float up_velocity = 0.0f;
|
||||||
float plunger_speed = 2 * m_speed;
|
float plunger_speed = 2 * m_speed;
|
||||||
|
|
||||||
@ -67,40 +67,41 @@ Plunger::Plunger(Kart *kart) : Flyable(kart, PowerupManager::POWERUP_PLUNGER)
|
|||||||
// find closest kart in front of the current one
|
// find closest kart in front of the current one
|
||||||
const Kart *closest_kart=0;
|
const Kart *closest_kart=0;
|
||||||
Vec3 direction;
|
Vec3 direction;
|
||||||
float kartDistSquared;
|
float kart_dist_2;
|
||||||
getClosestKart(&closest_kart, &kartDistSquared, &direction,
|
getClosestKart(&closest_kart, &kart_dist_2, &direction,
|
||||||
kart /* search in front of this kart */, m_reverse_mode);
|
kart /* search in front of this kart */, m_reverse_mode);
|
||||||
|
|
||||||
btTransform trans = kart->getTrans();
|
btTransform kart_transform = kart->getKartTransform();
|
||||||
|
btMatrix3x3 kart_rotation = kart_transform.getBasis();
|
||||||
|
// The current forward vector is rotation*(0,0,1), or:
|
||||||
|
btVector3 forward(kart_rotation.getColumn(2));
|
||||||
|
|
||||||
btMatrix3x3 thisKartDirMatrix = kart->getKartHeading().getBasis();
|
float heading =kart->getHeading();
|
||||||
btVector3 thisKartDirVector(thisKartDirMatrix.getColumn(2));
|
float pitch = kart->getTerrainPitch(heading);
|
||||||
|
|
||||||
float heading=kart->getHeading();
|
|
||||||
float pitch = kart->getTerrainPitch(heading);
|
|
||||||
|
|
||||||
// aim at this kart if it's not too far
|
// aim at this kart if it's not too far
|
||||||
if(closest_kart != NULL && kartDistSquared < 30*30)
|
if(closest_kart != NULL && kart_dist_2 < 30*30)
|
||||||
{
|
{
|
||||||
float fire_angle = 0.0f;
|
float fire_angle = 0.0f;
|
||||||
getLinearKartItemIntersection (kart->getXYZ(), closest_kart,
|
getLinearKartItemIntersection (kart->getXYZ(), closest_kart,
|
||||||
plunger_speed, gravity, y_offset,
|
plunger_speed, gravity, forward_offset,
|
||||||
&fire_angle, &up_velocity);
|
&fire_angle, &up_velocity);
|
||||||
|
|
||||||
|
btTransform trans = kart->getTrans();
|
||||||
|
|
||||||
trans.setRotation(btQuaternion(btVector3(0, 1, 0), fire_angle));
|
trans.setRotation(btQuaternion(btVector3(0, 1, 0), fire_angle));
|
||||||
|
|
||||||
m_initial_velocity = btVector3(0.0f, up_velocity, plunger_speed);
|
m_initial_velocity = btVector3(0.0f, up_velocity, plunger_speed);
|
||||||
|
|
||||||
createPhysics(y_offset, m_initial_velocity,
|
createPhysics(forward_offset, m_initial_velocity,
|
||||||
new btCylinderShape(0.5f*m_extend), gravity,
|
new btCylinderShape(0.5f*m_extend), gravity,
|
||||||
/* rotates */false , /*turn around*/false, &trans );
|
/* rotates */false , /*turn around*/false, &trans );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
trans = kart->getKartHeading();
|
createPhysics(forward_offset, btVector3(pitch, 0.0f, plunger_speed),
|
||||||
|
new btCylinderShape(0.5f*m_extend), gravity,
|
||||||
createPhysics(y_offset, btVector3(pitch, 0.0f, plunger_speed),
|
false /* rotates */, m_reverse_mode, &kart_transform );
|
||||||
new btCylinderShape(0.5f*m_extend), gravity, false /* rotates */, m_reverse_mode, &trans );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//adjust height according to terrain
|
//adjust height according to terrain
|
||||||
|
@ -159,7 +159,7 @@ void Kart::setController(Controller *controller)
|
|||||||
* otherwise).
|
* otherwise).
|
||||||
* \param customPitch Pitch value to overwrite the terrain pitch.
|
* \param customPitch Pitch value to overwrite the terrain pitch.
|
||||||
*/
|
*/
|
||||||
btTransform Kart::getKartHeading(const float customPitch)
|
btTransform Kart::getKartTransform(const float customPitch)
|
||||||
{
|
{
|
||||||
btTransform trans = getTrans();
|
btTransform trans = getTrans();
|
||||||
|
|
||||||
@ -170,7 +170,7 @@ btTransform Kart::getKartHeading(const float customPitch)
|
|||||||
trans.setBasis(m);
|
trans.setBasis(m);
|
||||||
|
|
||||||
return trans;
|
return trans;
|
||||||
} // getKartHeading
|
} // getKartTransform
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
/** Creates the physical representation of this kart. Atm it uses the actual
|
/** Creates the physical representation of this kart. Atm it uses the actual
|
||||||
|
@ -296,7 +296,7 @@ public:
|
|||||||
/** Returns a bullet transform object located at the kart's position
|
/** Returns a bullet transform object located at the kart's position
|
||||||
and oriented in the direction the kart is going. Can be useful
|
and oriented in the direction the kart is going. Can be useful
|
||||||
e.g. to calculate the starting point and direction of projectiles. */
|
e.g. to calculate the starting point and direction of projectiles. */
|
||||||
btTransform getKartHeading (const float customPitch=-1);
|
btTransform getKartTransform(const float customPitch=-1);
|
||||||
// -------------------------------------------------------------------------
|
// -------------------------------------------------------------------------
|
||||||
/** Returns the color used for this kart. */
|
/** Returns the color used for this kart. */
|
||||||
const video::SColor &getColor() const
|
const video::SColor &getColor() const
|
||||||
|
Loading…
x
Reference in New Issue
Block a user