[Super-tux-commit] supertux/src/object invisible_block.cpp,NONE,1.1 invisible_block.h,NONE,1.1 block
Brought to you by:
wkendrick
From: Matze B. <mat...@us...> - 2004-11-22 23:48:04
|
Update of /cvsroot/super-tux/supertux/src/object In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28925/src/object Modified Files: block.cpp block.h Added Files: invisible_block.cpp invisible_block.h Log Message: properly implement invisible blocks --- NEW FILE: invisible_block.h --- #ifndef __INVISIBLE_BLOCK_H__ #define __INVISIBLE_BLOCK_H__ #include "block.h" class InvisibleBlock : public Block { public: InvisibleBlock(const Vector& pos); virtual void draw(DrawingContext& context); protected: virtual void hit(Player& player); private: bool visible; }; #endif --- NEW FILE: invisible_block.cpp --- #include <config.h> #include "invisible_block.h" #include "resources.h" #include "special/sprite.h" #include "special/sprite_manager.h" #include "video/drawing_context.h" InvisibleBlock::InvisibleBlock(const Vector& pos) : Block(pos, sprite_manager->create("invisibleblock")), visible(false) { flags &= ~FLAG_SOLID; } void InvisibleBlock::draw(DrawingContext& context) { if(visible) sprite->draw(context, get_pos(), LAYER_OBJECTS); } void InvisibleBlock::hit(Player& player) { if(visible) return; sprite->set_action("empty"); SoundManager::get()->play_sound(IDToSound(SND_BRICK)); start_bounce(); flags |= FLAG_SOLID; visible = true; } Index: block.h =================================================================== RCS file: /cvsroot/super-tux/supertux/src/object/block.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- block.h 20 Nov 2004 22:14:40 -0000 1.1 +++ block.h 22 Nov 2004 23:47:51 -0000 1.2 @@ -21,7 +21,7 @@ virtual void draw(DrawingContext& context); protected: - virtual void hit(Player* player) = 0; + virtual void hit(Player& player) = 0; void start_bounce(); Sprite* sprite; @@ -37,7 +37,7 @@ BonusBlock(const Vector& pos, int data); protected: - virtual void hit(Player* player); + virtual void hit(Player& player); private: int data; @@ -49,7 +49,7 @@ Brick(const Vector& pos, int data); protected: - virtual void hit(Player* player); + virtual void hit(Player& player); private: bool breakable; Index: block.cpp =================================================================== RCS file: /cvsroot/super-tux/supertux/src/object/block.cpp,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- block.cpp 20 Nov 2004 22:14:40 -0000 1.1 +++ block.cpp 22 Nov 2004 23:47:51 -0000 1.2 @@ -47,7 +47,8 @@ // collided from below? if(hitdata.normal.x == 0 && hitdata.normal.y < 0 && player->get_movement().y < 0) { - hit(player); + printf("hit.\n"); + hit(*player); } return ABORT_MOVE; @@ -95,7 +96,7 @@ } void -BonusBlock::hit(Player* player) +BonusBlock::hit(Player& player) { if(sprite->get_action_name() == "empty") { SoundManager::get()->play_sound(IDToSound(SND_BRICK)); @@ -106,11 +107,11 @@ switch(data) { case 1: // coin Sector::current()->add_object(new BouncyCoin(get_pos())); - player->get_status().incCoins(); + player.get_status().incCoins(); break; case 2: // grow/fireflower - if(player->size == SMALL) { + if(player.size == SMALL) { SpecialRiser* riser = new SpecialRiser( new GrowUp(get_pos() + Vector(0, -32))); sector->add_object(riser); @@ -123,7 +124,7 @@ break; case 5: // grow/iceflower - if(player->size == SMALL) { + if(player.size == SMALL) { SpecialRiser* riser = new SpecialRiser( new GrowUp(get_pos() + Vector(0, -32))); sector->add_object(riser); @@ -154,8 +155,8 @@ //--------------------------------------------------------------------------- Brick::Brick(const Vector& pos, int data) - : Block(pos, sprite_manager->create("brick")), - breakable(false), coin_counter(0) + : Block(pos, sprite_manager->create("brick")), breakable(false), + coin_counter(0) { if(data == 1) coin_counter = 5; @@ -164,7 +165,7 @@ } void -Brick::hit(Player* player) +Brick::hit(Player& player) { if(sprite->get_action_name() == "empty") return; @@ -174,12 +175,12 @@ if(coin_counter > 0) { sector->add_object(new BouncyCoin(get_pos())); coin_counter--; - player->get_status().incCoins(); + player.get_status().incCoins(); if(coin_counter == 0) sprite->set_action("empty"); start_bounce(); } else if(breakable) { - if(player->size == SMALL) { + if(player.size == SMALL) { start_bounce(); return; } |