X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fobject%2Finvisible_block.cpp;h=3f4a8c59bf44d5223740c154b996c4117c2e54a5;hb=2e163cb10e0a6af504275585e7c31091931dd7b2;hp=f9e274869f366639235e19bebf738a43a230b105;hpb=e3bb6e46812f108f093e9ad0751a945c34b18cd3;p=supertux.git diff --git a/src/object/invisible_block.cpp b/src/object/invisible_block.cpp index f9e274869..3f4a8c59b 100644 --- a/src/object/invisible_block.cpp +++ b/src/object/invisible_block.cpp @@ -1,16 +1,32 @@ -#include +// SuperTux +// 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 as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// 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, see . -#include "invisible_block.h" -#include "resources.h" -#include "special/sprite.h" -#include "special/sprite_manager.h" -#include "video/drawing_context.h" -#include "object_factory.h" +#include "audio/sound_manager.hpp" +#include "object/invisible_block.hpp" +#include "object/player.hpp" +#include "sprite/sprite.hpp" +#include "sprite/sprite_manager.hpp" +#include "supertux/constants.hpp" -InvisibleBlock::InvisibleBlock(const Vector& pos) - : Block(pos, sprite_manager->create("invisibleblock")), visible(false) +InvisibleBlock::InvisibleBlock(const Vector& pos) : + Block(SpriteManager::current()->create("images/objects/bonus_block/invisibleblock.sprite")), + visible(false) { - flags &= ~FLAG_SOLID; + bbox.set_pos(pos); + SoundManager::current()->preload("sounds/brick.wav"); } void @@ -20,17 +36,43 @@ 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() - SHIFT_DELTA)) { + 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) { + SoundManager::current()->play("sounds/brick.wav"); + if(visible) return; sprite->set_action("empty"); - SoundManager::get()->play_sound(IDToSound(SND_BRICK)); - start_bounce(); - flags |= FLAG_SOLID; + start_bounce(&player); + set_group(COLGROUP_STATIC); visible = true; } //IMPLEMENT_FACTORY(InvisibleBlock, "invisible_block"); + +/* EOF */