X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fplayer.h;h=21a00a2dc22fd4ead6f30ace9ea88b759d0c8c60;hb=5dba61177d71c5572fd29af172fcdab7b1f9a561;hp=1de32072491955a9f2726c0a2539ca38a2230da1;hpb=7437ab4bcff88e2c196fd322249e8f2f998f0e77;p=supertux.git diff --git a/src/player.h b/src/player.h index 1de320724..21a00a2dc 100644 --- a/src/player.h +++ b/src/player.h @@ -27,11 +27,13 @@ #include "texture.h" #include "collision.h" #include "sound.h" +#include "moving_object.h" +#include "drawable.h" #include "physic.h" /* Times: */ -#define TUX_SAFE_TIME 750 +#define TUX_SAFE_TIME 1250 #define TUX_INVINCIBLE_TIME 10000 #define TUX_INVINCIBLE_TIME_WARNING 2000 #define TIME_WARNING 20000 /* When to alert player they're low on time! */ @@ -81,6 +83,8 @@ extern Surface* tux_life; extern Sprite* smalltux_gameover; extern Sprite* smalltux_star; extern Sprite* largetux_star; +extern Sprite* growingtux_left; +extern Sprite* growingtux_right; struct PlayerSprite { @@ -103,24 +107,32 @@ struct PlayerSprite extern PlayerSprite smalltux; extern PlayerSprite largetux; extern PlayerSprite firetux; +extern PlayerSprite icetux; -class Player : public GameObject +class Player : public MovingObject, public Drawable { public: enum HurtMode { KILL, SHRINK }; + enum Power { NONE_POWER, FIRE_POWER, ICE_POWER }; + enum FallMode { ON_GROUND, JUMPING, TRAMPOLINE_JUMP, FALLING }; player_input_type input; - bool got_coffee; + int got_power; int size; bool duck; bool holding_something; + bool dead; DyingType dying; Direction dir; Direction old_dir; + float last_ground_y; + FallMode fall_mode; + bool jumping; bool can_jump; + bool butt_jump; int frame_; int frame_main; @@ -130,29 +142,40 @@ public: Timer safe_timer; Timer frame_timer; Timer kick_timer; + Timer shooting_timer; // used to show the arm when Tux is shooting + Timer dying_timer; + Timer growing_timer; Physic physic; public: - void init(); + Player(DisplayManager& display_manager); + virtual ~Player(); + int key_event(SDLKey key, int state); void level_begin(); - void action(double frame_ratio); void handle_input(); void grabdistros(); - void draw(); + + virtual void action(float elapsed_time); + virtual void draw(Camera& viewport, int layer); + virtual void collision(const MovingObject& other_object, + int collision_type); + void collision(void* p_c_object, int c_object); void kill(HurtMode mode); - void is_dying(); - bool is_dead(); void player_remove_powerups(); - void check_bounds(bool back_scrolling, bool hor_autoscroll); + void check_bounds(Camera& viewport); bool on_ground(); bool under_solid(); - void grow(); - - std::string type() { return "Player";}; + bool tiles_on_air(int tiles); + void grow(bool animate); + void move(const Vector& vector); + bool is_dead() const + { return dead; } private: + void init(); + void handle_horizontal_input(); void handle_vertical_input(); void remove_powerups();