X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fplayer.h;h=e76b93b0ec47dc9ede2b822fe2b8807bfd69931c;hb=6c61f312a1f5a768e202195ca18ed5a51974bdcc;hp=6852ebc14e956c2569cb3f45d02098de6a21550b;hpb=a7e1aac92757aa9fa50863fb9abc683cc5388b1d;p=supertux.git diff --git a/src/player.h b/src/player.h index 6852ebc14..e76b93b0e 100644 --- a/src/player.h +++ b/src/player.h @@ -20,22 +20,27 @@ #ifndef SUPERTUX_PLAYER_H #define SUPERTUX_PLAYER_H -#include +#include "SDL.h" + #include "bitmask.h" -#include "type.h" -#include "timer.h" -#include "texture.h" +#include "special/timer.h" +#include "special/base.h" +#include "video/surface.h" #include "collision.h" -#include "sound.h" -#include "moving_object.h" -#include "drawable.h" -#include "physic.h" +#include "special/moving_object.h" +#include "math/physic.h" +#include "defines.h" + +using namespace SuperTux; + +class BadGuy; /* Times: */ #define TUX_SAFE_TIME 1250 #define TUX_INVINCIBLE_TIME 10000 #define TUX_INVINCIBLE_TIME_WARNING 2000 +#define TUX_FLAPPING_TIME 1000 /* How long Tux can flap his wings to gain additional jump height */ #define TIME_WARNING 20000 /* When to alert player they're low on time! */ /* One-ups... */ @@ -45,7 +50,12 @@ /* Scores: */ #define SCORE_BRICK 5 -#define SCORE_DISTRO 25 +#define SCORE_DISTRO 20 + +/* Sizes: */ + +#define SMALL 0 +#define BIG 1 #include @@ -53,10 +63,11 @@ struct PlayerKeymap { public: int jump; - int duck; + int up; + int down; int left; int right; - int fire; + int power; PlayerKeymap(); }; @@ -68,46 +79,55 @@ struct player_input_type int right; int left; int up; - int old_up; int down; int fire; int old_fire; + int activate; + int jump; + int old_jump; }; void player_input_init(player_input_type* pplayer_input); +namespace SuperTux { class Sprite; +} +class Camera; extern Surface* tux_life; extern Sprite* smalltux_gameover; extern Sprite* smalltux_star; -extern Sprite* largetux_star; +extern Sprite* bigtux_star; -struct PlayerSprite +#define GROWING_TIME 1000 +#define GROWING_FRAMES 7 +extern Surface* growingtux_left[GROWING_FRAMES]; +extern Surface* growingtux_right[GROWING_FRAMES]; + +class TuxBodyParts { - Sprite* stand_left; - Sprite* stand_right; - Sprite* walk_right; - Sprite* walk_left; - Sprite* jump_right; - Sprite* jump_left; - Sprite* kick_left; - Sprite* kick_right; - Sprite* skid_right; - Sprite* skid_left; - Sprite* grab_left; - Sprite* grab_right; - Sprite* duck_right; - Sprite* duck_left; +public: + TuxBodyParts() { }; + ~TuxBodyParts() { }; + + void set_action(std::string action); + void one_time_animation(); + void draw(DrawingContext& context, const Vector& pos, int layer, + Uint32 drawing_effect = NONE_EFFECT); + + Sprite* head; + Sprite* body; + Sprite* arms; + Sprite* feet; }; -extern PlayerSprite smalltux; -extern PlayerSprite largetux; -extern PlayerSprite firetux; -extern PlayerSprite icetux; +extern TuxBodyParts* small_tux; +extern TuxBodyParts* big_tux; +extern TuxBodyParts* fire_tux; +extern TuxBodyParts* ice_tux; -class Player : public MovingObject, public Drawable +class Player : public MovingObject { public: enum HurtMode { KILL, SHRINK }; @@ -129,10 +149,23 @@ public: FallMode fall_mode; bool jumping; + bool flapping; bool can_jump; + bool can_flap; + bool falling_from_flap; + bool enable_hover; bool butt_jump; int frame_; int frame_main; + + float flapping_velocity; + + // Ricardo's flapping + int flaps_nb; + + // temporary to help player's choosing a flapping + enum { MAREK_FLAP, RICARDO_FLAP, RYAN_FLAP, NONE_FLAP }; + int flapping_mode; base_type previous_base; Timer invincible_timer; @@ -142,10 +175,13 @@ public: Timer kick_timer; Timer shooting_timer; // used to show the arm when Tux is shooting Timer dying_timer; + Timer growing_timer; + Timer idle_timer; + Timer flapping_timer; Physic physic; - + public: - Player(DisplayManager& display_manager); + Player(); virtual ~Player(); int key_event(SDLKey key, int state); @@ -154,19 +190,24 @@ public: void grabdistros(); virtual void action(float elapsed_time); - virtual void draw(Camera& viewport, int layer); + virtual void draw(DrawingContext& context); virtual void collision(const MovingObject& other_object, int collision_type); void collision(void* p_c_object, int c_object); void kill(HurtMode mode); void player_remove_powerups(); - void check_bounds(Camera& viewport, bool back_scrolling, bool hor_autoscroll); + void check_bounds(Camera* camera); bool on_ground(); bool under_solid(); bool tiles_on_air(int tiles); - void grow(); + void grow(bool animate); void move(const Vector& vector); + + /** let the player jump a bit or more if jump button is hold down + (used when you hit a badguy) */ + void bounce(BadGuy* badguy); + bool is_dead() const { return dead; }