X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fbadguy.h;h=c4893201b7eec433e507f967a4688634e6d8102e;hb=ac34902414690bc746489a5caee215516d715ea1;hp=6ffafda1194c771dc1a8b3b3bdc4d7c8e486dbd2;hpb=403f2652505e814b645892bffaf89a584984f9b8;p=supertux.git diff --git a/src/badguy.h b/src/badguy.h index 6ffafda11..c4893201b 100644 --- a/src/badguy.h +++ b/src/badguy.h @@ -24,17 +24,22 @@ #define SUPERTUX_BADGUY_H #include "SDL.h" + +#include "special/timer.h" +#include "video/surface.h" +#include "math/physic.h" +#include "special/sprite.h" #include "defines.h" -#include "bitmask.h" -#include "type.h" -#include "timer.h" -#include "texture.h" -#include "physic.h" +#include "special/moving_object.h" #include "collision.h" -#include "sprite.h" -#include "moving_object.h" -#include "drawable.h" #include "serializable.h" +#include "scene.h" + +using namespace SuperTux; + +/* Timing constants (in ms): */ + +#define KICKING_TIME 200 /* Bad guy kinds: */ enum BadGuyKind { @@ -45,11 +50,16 @@ enum BadGuyKind { BAD_STALACTITE, BAD_FLAME, BAD_FISH, + BAD_FLAMEFISH, BAD_BOUNCINGSNOWBALL, BAD_FLYINGSNOWBALL, BAD_SPIKY, BAD_SNOWBALL, - NUM_BadGuyKinds + BAD_WINGLING, + BAD_WALKINGTREE, + NUM_BadGuyKinds, + + BAD_INVALID }; BadGuyKind badguykind_from_string(const std::string& str); @@ -60,7 +70,7 @@ void free_badguy_gfx(); class Player; /* Badguy type: */ -class BadGuy : public MovingObject, public Drawable, public Serializable +class BadGuy : public MovingObject, public Serializable { public: /* Enemy modes: */ @@ -81,7 +91,10 @@ public: FISH_WAIT, FLY_UP, - FLY_DOWN + FLY_DOWN, + + BGM_BIG, + BGM_SMALL }; public: DyingType dying; @@ -94,6 +107,7 @@ public: bool stay_on_platform; Direction dir; + Vector start_position; Timer frozen_timer; // gets frozen when a ice shot hits it @@ -101,6 +115,7 @@ private: bool removable; bool seen; int squishcount; /// number of times this enemy was squiched + Vector target; // Target that badguy is aiming for (wingling uses this) Timer timer; Physic physic; float angle; @@ -111,17 +126,15 @@ private: int animation_offset; public: - BadGuy(DisplayManager& display_manager, BadGuyKind kind, float x, float y); - BadGuy(DisplayManager& display_manager, BadGuyKind kind, LispReader& reader); + BadGuy(BadGuyKind kind, float x, float y); + BadGuy(BadGuyKind kind, LispReader& reader); virtual ~BadGuy(); virtual void write(LispWriter& writer); virtual void action(float frame_ratio); - virtual void draw(ViewPort& viewport, int layer); + virtual void draw(DrawingContext& context); virtual void collision(const MovingObject& other, int type); - virtual std::string type() const - { return "BadGuy"; }; void collision(void* p_c_object, int c_object, CollisionType type = COLLISION_NORMAL); @@ -131,6 +144,12 @@ public: */ void kill_me(int score); + /** initializes the badguy (when he appears on screen) */ + void activate(Direction direction); // should only be used by BadGuy's objects + + Surface* get_image() + { return sprite_left->get_frame(0); } + private: void init(); @@ -145,15 +164,15 @@ private: void action_flyingsnowball(double frame_ratio); void action_spiky(double frame_ratio); void action_snowball(double frame_ratio); + void action_wingling(double frame_ratio); + void action_walkingtree(double frame_ratio); /** handles falling down. disables gravity calculation when we're back on * ground */ void fall(); - /** let the player jump a bit (used when you hit a badguy) */ - void make_player_jump(Player* player); - - void explode(); + /** Turn enemy into a bomb. To explode right way pass true */ + void explode(bool right_away); /** check if we're running left or right in a wall and eventually change * direction