X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fobject%2Fblock.hpp;h=4f326eb2ff73cefb37beb987f7efc041f8f667ba;hb=08ccb17345a52f5ffd8a5dd6ecf675cad55f16a7;hp=9691fe512bd545d5b53ec7d6ca7d9ac4d3fadae8;hpb=5b7f9214cb929399f1a855ef5807018a9447d510;p=supertux.git diff --git a/src/object/block.hpp b/src/object/block.hpp index 9691fe512..4f326eb2f 100644 --- a/src/object/block.hpp +++ b/src/object/block.hpp @@ -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,11 @@ // 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. + #ifndef __BLOCK_H__ #define __BLOCK_H__ @@ -37,14 +37,20 @@ public: virtual void draw(DrawingContext& context); protected: + friend class FlipLevelTransformer; + virtual void hit(Player& player) = 0; - void start_bounce(); + void start_bounce(GameObject* hitter); + void start_break(GameObject* hitter); + void break_me(); Sprite* sprite; bool bouncing; + bool breaking; float bounce_dir; float bounce_offset; float original_y; + }; class BonusBlock : public Block @@ -53,13 +59,10 @@ public: BonusBlock(const Vector& pos, int data); BonusBlock(const lisp::Lisp& lisp); virtual ~BonusBlock(); + HitResponse collision(GameObject& other, const CollisionHit& hit); void try_open(); -protected: - virtual void hit(Player& player); - -private: enum Contents { CONTENT_COIN, CONTENT_FIREGROW, @@ -70,6 +73,10 @@ private: }; Contents contents; +protected: + virtual void hit(Player& player); + +private: MovingObject* object; }; @@ -78,7 +85,8 @@ class Brick : public Block public: Brick(const Vector& pos, int data); - void try_break(bool playerhit = false); + void try_break(Player* player = false); + HitResponse collision(GameObject& other, const CollisionHit& hit); protected: virtual void hit(Player& player); @@ -89,4 +97,3 @@ private: }; #endif -