X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fobject%2Finvisible_block.cpp;h=96be2e650f2920de2d67b60b298736a12e2cd1d7;hb=8c0b10ba9ff57a36c3747c84a035faca5975556d;hp=db3408a0749ca352a61d2fe9599682d95810e8dd;hpb=1d63ad0dfe0eedf89191627be00b2b3b1215c311;p=supertux.git diff --git a/src/object/invisible_block.cpp b/src/object/invisible_block.cpp index db3408a07..96be2e650 100644 --- a/src/object/invisible_block.cpp +++ b/src/object/invisible_block.cpp @@ -1,7 +1,7 @@ // $Id$ -// +// // SuperTux -// Copyright (C) 2005 Matthias Braun +// Copyright (C) 2006 Matthias Braun // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -12,11 +12,10 @@ // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. -// +// // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -// 02111-1307, USA. +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include @@ -27,13 +26,13 @@ #include "video/drawing_context.hpp" #include "audio/sound_manager.hpp" #include "object_factory.hpp" +#include "object/player.hpp" InvisibleBlock::InvisibleBlock(const Vector& pos) : Block(sprite_manager->create("images/objects/bonus_block/invisibleblock.sprite")), visible(false) { bbox.set_pos(pos); - flags &= ~FLAG_SOLID; - set_group(COLGROUP_MOVING); + sound_manager->preload("sounds/brick.wav"); } void @@ -43,16 +42,39 @@ InvisibleBlock::draw(DrawingContext& context) sprite->draw(context, get_pos(), LAYER_OBJECTS); } +bool +InvisibleBlock::collides(GameObject& other, const CollisionHit& ) +{ + if(visible) + return true; + + // if we're not visible, only register a collision if this will make us visible + Player* player = dynamic_cast (&other); + if ((player) + && (player->get_movement().y <= 0) + && (player->get_bbox().get_top() > get_bbox().get_bottom() - 7.0)) { + return true; + } + + return false; +} + +HitResponse +InvisibleBlock::collision(GameObject& other, const CollisionHit& hit) +{ + return Block::collision(other, hit); +} + void -InvisibleBlock::hit(Player& ) +InvisibleBlock::hit(Player& player) { + sound_manager->play("sounds/brick.wav"); + if(visible) return; sprite->set_action("empty"); - sound_manager->play("sounds/brick.wav"); - start_bounce(); - flags |= FLAG_SOLID; + start_bounce(&player); set_group(COLGROUP_STATIC); visible = true; }