Update of /cvsroot/super-tux/supertux/src/badguy
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1377/src/badguy
Modified Files:
bouncing_snowball.cpp bouncing_snowball.h mrbomb.cpp
Added Files:
dispenser.cpp dispenser.h
Log Message:
added simple enemy dispenser (can only dispense bouncing snowballs so far and looks like a snowball)
it's in data/test/bonusblocks.stl, right behind the secret area ;-)
fixed typo(?) in mrbomb.cpp
--- NEW FILE: dispenser.cpp ---
#include <config.h>
#include "dispenser.h"
#include "badguy/bouncing_snowball.h"
#define DISPENSE_TIME 3
Dispenser::Dispenser(LispReader& reader)
{
reader.read_float("x", start_position.x);
reader.read_float("y", start_position.y);
reader.read_string("badguy", badguy);
bbox.set_size(32, 32);
sprite = sprite_manager->create("snowball");
}
void
Dispenser::write(LispWriter& writer)
{
writer.start_list("dispenser");
writer.write_float("x", get_pos().x);
writer.write_float("y", get_pos().y);
writer.write_string("badguy", badguy);
writer.end_list("dispenser");
}
void
Dispenser::activate()
{
dispense_timer.start(DISPENSE_TIME, true);
}
bool
Dispenser::collision_squished(Player& player)
{
remove_me();
player.bounce(*this);
return true;
}
void
Dispenser::active_action(float elapsed_time)
{
if (dispense_timer.check()) {
Sector::current()->add_object(new BouncingSnowball(get_pos().x, get_pos().y));
}
}
HitResponse
Dispenser::collision_solid(GameObject& , const CollisionHit& hit)
{
if(fabsf(hit.normal.y) > .5) { // hit floor or roof?
physic.set_velocity_y(0);
} else { // hit right or left
dir = dir == LEFT ? RIGHT : LEFT;
sprite->set_action(dir == LEFT ? "left" : "right");
physic.set_velocity_x(-physic.get_velocity_x());
}
return CONTINUE;
}
Index: mrbomb.cpp
===================================================================
RCS file: /cvsroot/super-tux/supertux/src/badguy/mrbomb.cpp,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- mrbomb.cpp 23 Nov 2004 16:47:26 -0000 1.2
+++ mrbomb.cpp 24 Nov 2004 17:33:50 -0000 1.3
@@ -16,12 +16,12 @@
void
MrBomb::write(LispWriter& writer)
{
- writer.start_list("snowball");
+ writer.start_list("mrbomb");
writer.write_float("x", get_pos().x);
writer.write_float("y", get_pos().y);
- writer.end_list("snowball");
+ writer.end_list("mrbomb");
}
void
--- NEW FILE: dispenser.h ---
#ifndef __DISPENSER_H__
#define __DISPENSER_H__
#include "badguy.h"
#include "timer.h"
class Dispenser : public BadGuy
{
public:
Dispenser(LispReader& reader);
void activate();
void write(LispWriter& writer);
HitResponse collision_solid(GameObject& other, const CollisionHit& hit);
void active_action(float elapsed_time);
protected:
bool collision_squished(Player& player);
std::string badguy;
Timer2 dispense_timer;
};
#endif
Index: bouncing_snowball.cpp
===================================================================
RCS file: /cvsroot/super-tux/supertux/src/badguy/bouncing_snowball.cpp,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- bouncing_snowball.cpp 23 Nov 2004 16:47:26 -0000 1.2
+++ bouncing_snowball.cpp 24 Nov 2004 17:33:49 -0000 1.3
@@ -13,6 +13,14 @@
sprite = sprite_manager->create("bouncingsnowball");
}
+BouncingSnowball::BouncingSnowball(float pos_x, float pos_y)
+{
+ start_position.x = pos_x;
+ start_position.y = pos_y;
+ bbox.set_size(32, 32);
+ sprite = sprite_manager->create("bouncingsnowball");
+}
+
void
BouncingSnowball::write(LispWriter& writer)
{
Index: bouncing_snowball.h
===================================================================
RCS file: /cvsroot/super-tux/supertux/src/badguy/bouncing_snowball.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- bouncing_snowball.h 20 Nov 2004 22:14:39 -0000 1.1
+++ bouncing_snowball.h 24 Nov 2004 17:33:49 -0000 1.2
@@ -7,6 +7,7 @@
{
public:
BouncingSnowball(LispReader& reader);
+ BouncingSnowball(float pos_x, float pos_y);
void activate();
void write(LispWriter& writer);
|