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;
}
|