[Super-tux-commit] supertux/src/badguy flyingsnowball.cpp,NONE,1.1 flyingsnowball.h,NONE,1.1
Brought to you by:
wkendrick
From: Matze B. <mat...@us...> - 2004-12-05 17:05:11
|
Update of /cvsroot/super-tux/supertux/src/badguy In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv19202/src/badguy Added Files: flyingsnowball.cpp flyingsnowball.h Log Message: forgot to add new files --- NEW FILE: flyingsnowball.cpp --- #include <config.h> #include <stdio.h> #include "flyingsnowball.h" static const float FLYTIME = 1.0; static const float FLYSPEED = 100.0; FlyingSnowBall::FlyingSnowBall(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("flyingsnowball"); physic.enable_gravity(false); } FlyingSnowBall::FlyingSnowBall(float pos_x, float pos_y) { start_position.x = pos_x; start_position.y = pos_y; bbox.set_size(31.8, 31.8); sprite = sprite_manager->create("flyingsnowball"); physic.enable_gravity(false); } void FlyingSnowBall::write(lisp::Writer& writer) { writer.start_list("flyingsnowball"); writer.write_float("x", start_position.x); writer.write_float("y", start_position.y); writer.end_list("flyingsnowball"); } void FlyingSnowBall::activate() { sprite->set_action(dir == LEFT ? "left" : "right"); mode = FLY_UP; physic.set_velocity_y(FLYSPEED); timer.start(FLYTIME/2); } bool FlyingSnowBall::collision_squished(Player& player) { sprite->set_action(dir == LEFT ? "squished-left" : "squished-right"); kill_squished(player); return true; } HitResponse FlyingSnowBall::collision_solid(GameObject& , const CollisionHit& hit) { if(fabsf(hit.normal.y) > .5) { // hit floor or roof? physic.set_velocity_y(0); } return CONTINUE; } void FlyingSnowBall::active_action(float elapsed_time) { if(timer.check()) { if(mode == FLY_UP) { mode = FLY_DOWN; physic.set_velocity_y(-FLYSPEED); } else if(mode == FLY_DOWN) { mode = FLY_UP; physic.set_velocity_y(FLYSPEED); } timer.start(FLYTIME); } movement=physic.get_movement(elapsed_time); dir= Sector::current()->player->get_pos().x>get_pos().x?RIGHT:LEFT; sprite->set_action(dir == LEFT ? "left" : "right"); } --- NEW FILE: flyingsnowball.h --- #ifndef __FLYINGSNOWBALL_H__ #define __FLYINGSNOWBALL_H__ #include "badguy.h" class FlyingSnowBall : public BadGuy { public: FlyingSnowBall(const lisp::Lisp& reader); FlyingSnowBall(float pos_x, float pos_y); void activate(); void write(lisp::Writer& writer); void active_action(float elapsed_time); HitResponse collision_solid(GameObject& other, const CollisionHit& hit); protected: enum FlyingSnowballMode { FLY_UP, FLY_DOWN }; FlyingSnowballMode mode; bool collision_squished(Player& player); private: Timer2 timer; }; #endif |