From: <hik...@us...> - 2011-10-17 06:07:50
|
Revision: 10005 http://supertuxkart.svn.sourceforge.net/supertuxkart/?rev=10005&view=rev Author: hikerstk Date: 2011-10-17 06:07:44 +0000 (Mon, 17 Oct 2011) Log Message: ----------- A rubber ball hit is now a proper explosion (i.e. it also affects other karts close by), and the hit message is shown (we need better hit messages for rubber balls ;) ). Renamed checkDistanceToTarget() to updateDistanceToTarget. Modified Paths: -------------- main/trunk/src/items/rubber_ball.cpp main/trunk/src/items/rubber_ball.hpp Modified: main/trunk/src/items/rubber_ball.cpp =================================================================== --- main/trunk/src/items/rubber_ball.cpp 2011-10-16 21:18:45 UTC (rev 10004) +++ main/trunk/src/items/rubber_ball.cpp 2011-10-17 06:07:44 UTC (rev 10005) @@ -323,7 +323,7 @@ return true; } } - checkDistanceToTarget(); + updateDistanceToTarget(); Vec3 next_xyz; if(m_aiming_at_target) @@ -345,7 +345,11 @@ float terrain_height = getMaxTerrainHeight(vertical_offset) - m_extend.getY(); if(new_y>terrain_height) + { + printf("Adjusting height from %f to %f.\n", + new_y, terrain_height); new_y = terrain_height; + } } if(UserConfigParams::logFlyable()) @@ -540,7 +544,7 @@ * rubber ball will switch from following the quad graph structure to * directly aim at the target. */ -void RubberBall::checkDistanceToTarget() +void RubberBall::updateDistanceToTarget() { const LinearWorld *world = dynamic_cast<LinearWorld*>(World::getWorld()); if(!world) return; // FIXME battle mode @@ -599,7 +603,7 @@ } return; -} // checkDistanceToTarget +} // updateDistanceToTarget // ---------------------------------------------------------------------------- /** Callback from the physics in case that a kart or object is hit. The rubber @@ -611,28 +615,20 @@ */ bool RubberBall::hit(Kart* kart, PhysicalObject* object) { - if(kart) + if(kart && kart!=m_target) { - // If the object is not the main target, only flatten the kart - if(kart!=m_target) + // If the squashed kart has a bomb, explode it. + if(kart->getAttachment()->getType()==Attachment::ATTACH_BOMB) { - // If the squashed kart has a bomb, explode it. - if(kart->getAttachment()->getType()==Attachment::ATTACH_BOMB) - { - // make bomb explode - kart->getAttachment()->update(10000); - return false; - } - kart->setSquash(m_st_squash_duration, m_st_squash_slowdown); + // make bomb explode + kart->getAttachment()->update(10000); return false; } - else - { - // Else trigger the full explosion animation - kart->handleExplosion(kart->getXYZ(), /*direct hit*/true); - setHasHit(); - return true; - } + kart->setSquash(m_st_squash_duration, m_st_squash_slowdown); + return false; } - return Flyable::hit(kart, object); + bool was_real_hit = Flyable::hit(kart, object); + if(was_real_hit) + explode(kart, object); + return was_real_hit; } // hit Modified: main/trunk/src/items/rubber_ball.hpp =================================================================== --- main/trunk/src/items/rubber_ball.hpp 2011-10-16 21:18:45 UTC (rev 10004) +++ main/trunk/src/items/rubber_ball.hpp 2011-10-17 06:07:44 UTC (rev 10005) @@ -162,7 +162,7 @@ SFXBase *m_hit_sfx; void computeTarget(); - void checkDistanceToTarget(); + void updateDistanceToTarget(); unsigned int getSuccessorToHitTarget(unsigned int node_index, float *f=NULL); void getNextControlPoint(); @@ -181,7 +181,7 @@ // ------------------------------------------------------------------------ /** This object does not create an explosion, all affects on * karts are handled by this hit() function. */ - virtual HitEffect *getHitEffect() const {return NULL; } + //virtual HitEffect *getHitEffect() const {return NULL; } }; // RubberBall This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |