From 86021f5ad1b8969f31b7b9e749e3d186fa83e679 Mon Sep 17 00:00:00 2001 From: Daniela Ferraz Date: Mon, 8 Jul 2013 10:57:26 -1000 Subject: [PATCH] Owl releases payload when killed by fire of invincibility, fixes bug 782 --- src/badguy/owl.cpp | 29 ++++++++++++++++++++++++----- src/badguy/owl.hpp | 1 + 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/badguy/owl.cpp b/src/badguy/owl.cpp index 20886d484..f379153f9 100644 --- a/src/badguy/owl.cpp +++ b/src/badguy/owl.cpp @@ -17,12 +17,13 @@ #include "badguy/owl.hpp" -#include "sprite/sprite.hpp" -#include "supertux/object_factory.hpp" -#include "supertux/sector.hpp" +#include "audio/sound_manager.hpp" #include "object/anchor_point.hpp" #include "object/player.hpp" #include "object/rock.hpp" +#include "sprite/sprite.hpp" +#include "supertux/object_factory.hpp" +#include "supertux/sector.hpp" #include "util/reader.hpp" #include "util/log.hpp" @@ -109,10 +110,10 @@ Owl::active_update (float elapsed_time) carried_object->ungrab (*this, dir); carried_object = NULL; } - else + + else carried_object->grab (*this, obj_pos, dir); } - else { /* if (is_above_player) */ carried_object->ungrab (*this, dir); carried_object = NULL; @@ -137,6 +138,24 @@ Owl::collision_squished(GameObject&) } void +Owl::kill_fall() +{ + sound_manager->play("sounds/fall.wav", get_pos()); + physic.set_velocity_y(0); + physic.set_acceleration_y(0); + physic.enable_gravity(true); + set_state(STATE_FALLING); + + if (carried_object != NULL) { + carried_object->ungrab (*this, dir); + carried_object = NULL; + } + + // start dead-script + run_dead_script(); +} + +void Owl::collision_solid(const CollisionHit& hit) { if(hit.top || hit.bottom) { diff --git a/src/badguy/owl.hpp b/src/badguy/owl.hpp index b880bf280..6614fe119 100644 --- a/src/badguy/owl.hpp +++ b/src/badguy/owl.hpp @@ -29,6 +29,7 @@ public: void initialize(); void collision_solid(const CollisionHit& hit); + void kill_fall(); protected: bool is_above_player (void); -- 2.11.0