From: Christoph Sommer Date: Sun, 24 Feb 2008 10:15:10 +0000 (+0000) Subject: Patch by mathnerd314 resolves issue 0000302: Mr. Ice Block... X-Git-Url: https://git.verplant.org/?a=commitdiff_plain;h=5745d9670262c91e6cd35363fd0d2ec169e7c8a4;p=supertux.git Patch by mathnerd314 resolves issue 0000302: Mr. Ice Block is killed by Bonus Blocks SVN-Revision: 5334 --- diff --git a/src/object/block.cpp b/src/object/block.cpp index 68721e8db..9e179c379 100644 --- a/src/object/block.cpp +++ b/src/object/block.cpp @@ -33,6 +33,7 @@ #include "lisp/lisp.hpp" #include "gameobjs.hpp" #include "portable.hpp" +#include "moving_object.hpp" #include "specialriser.hpp" #include "growup.hpp" #include "flower.hpp" @@ -77,10 +78,13 @@ Block::collision(GameObject& other, const CollisionHit& ) // only interact with other objects if... // 1) we are bouncing - // and // 2) the object is not portable (either never or not currently) + // 3) the object is being hit from below (baguys don't get killed for activating boxes) Portable* portable = dynamic_cast (&other); - if(bouncing && (portable == 0 || (!portable->is_portable()))) { + MovingObject* moving_object = dynamic_cast (&other); + bool is_portable = ((portable != 0) && portable->is_portable()); + bool hit_mo_from_below = ((moving_object == 0) || (moving_object->get_bbox().get_bottom() > (get_bbox().get_top() - 7.0))); + if(bouncing && !is_portable && hit_mo_from_below) { // Badguys get killed BadGuy* badguy = dynamic_cast (&other);