Update of /cvsroot/super-tux/supertux/src/badguy
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv3959/src/badguy
Added Files:
poisonivy.cpp poisonivy.h
Log Message:
added PoisonIvy badguy contributed by Stephen Groundwater
--- NEW FILE: poisonivy.cpp ---
#include <config.h>
#include "poisonivy.h"
static const float WALKSPEED = 80;
PoisonIvy::PoisonIvy(const lisp::Lisp& reader)
{
reader.get("x", start_position.x);
reader.get("y", start_position.y);
bbox.set_size(31.8, 31.8);
sprite = sprite_manager->create("poisonivy");
set_direction = false;
}
PoisonIvy::PoisonIvy(float pos_x, float pos_y, Direction d)
{
start_position.x = pos_x;
start_position.y = pos_y;
bbox.set_size(31.8, 31.8);
sprite = sprite_manager->create("poisonivy");
set_direction = true;
initial_direction = d;
}
void
PoisonIvy::write(lisp::Writer& writer)
{
writer.start_list("poisonivy");
writer.write_float("x", start_position.x);
writer.write_float("y", start_position.y);
writer.end_list("poisonivy");
}
void
PoisonIvy::activate()
{
if (set_direction) {dir = initial_direction;}
physic.set_velocity_x(dir == LEFT ? -WALKSPEED : WALKSPEED);
sprite->set_action(dir == LEFT ? "left" : "right");
}
bool
PoisonIvy::collision_squished(Player& player)
{
sprite->set_action(dir == LEFT ? "squished-left" : "squished-right");
kill_squished(player);
return true;
}
HitResponse
PoisonIvy::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;
}
HitResponse
PoisonIvy::collision_badguy(BadGuy& , const CollisionHit& hit)
{
if(fabsf(hit.normal.x) > .8) { // left or right hit
dir = dir == LEFT ? RIGHT : LEFT;
sprite->set_action(dir == LEFT ? "left" : "right");
physic.set_velocity_x(-physic.get_velocity_x());
}
return CONTINUE;
}
IMPLEMENT_FACTORY(PoisonIvy, "poisonivy")
--- NEW FILE: poisonivy.h ---
#ifndef __POISONIVY_H__
#define __POISONIVY_H__
#include "badguy.h"
class PoisonIvy : public BadGuy
{
public:
PoisonIvy(const lisp::Lisp& reader);
PoisonIvy(float pos_x, float pos_y, Direction d);
void activate();
void write(lisp::Writer& writer);
HitResponse collision_solid(GameObject& other, const CollisionHit& hit);
HitResponse collision_badguy(BadGuy& other, const CollisionHit& hit);
protected:
bool collision_squished(Player& player);
bool set_direction;
Direction initial_direction;
};
#endif
|