X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fobject%2Fplayer.h;h=0fe60fad3e26a46b28cb1d57c5dbbe16407ce2d7;hb=495f8b77cb935fe8eff81bec755efca8e34e8a99;hp=0a179a425dedb4b653d389e8e27d6ff8d55515b7;hpb=7a87271678d68514ae2158c0c7adb383d6002872;p=supertux.git diff --git a/src/object/player.h b/src/object/player.h index 0a179a425..0fe60fad3 100644 --- a/src/object/player.h +++ b/src/object/player.h @@ -20,14 +20,15 @@ #define SUPERTUX_PLAYER_H #include -#include "SDL.h" +#include #include "timer.h" +#include "direction.h" #include "video/surface.h" #include "special/moving_object.h" #include "special/sprite.h" #include "math/physic.h" -#include "defines.h" +#include "player_status.h" using namespace SuperTux; @@ -42,10 +43,6 @@ class Portable; #define TUX_FLAPPING_TIME 1 /* How long Tux can flap his wings to gain additional jump height */ #define TIME_WARNING 20 /* When to alert player they're low on time! */ -/* Sizes: */ -#define SMALL 0 -#define BIG 1 - struct PlayerKeymap { public: @@ -61,28 +58,33 @@ public: extern PlayerKeymap keymap; -struct player_input_type +/** Contains a field of booleans that indicate wheter a button is pressed or + * released. The old_ fields contain the state of the button at the previous + * frame. + */ +struct PlayerInputType { - int right; - int left; - int up; - int old_up; - int down; - int fire; - int old_fire; - int activate; - int jump; - int old_jump; +public: + PlayerInputType(); + void reset(); + + bool left; + bool right; + bool up; + bool old_up; + bool down; + bool fire; + bool old_fire; + bool activate; + bool jump; + bool old_jump; }; -void player_input_init(player_input_type* pplayer_input); - class Camera; class PlayerStatus; extern Surface* tux_life; - #define GROWING_TIME 1.0 #define GROWING_FRAMES 7 extern Surface* growingtux_left[GROWING_FRAMES]; @@ -121,15 +123,16 @@ class Player : public MovingObject { 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; - int got_power; - int size; + PlayerInputType input; + PlayerStatus* player_status; bool duck; bool dead; - DyingType dying; + +private: + bool dying; +public: Direction dir; Direction old_dir; @@ -152,7 +155,7 @@ public: int flaps_nb; // temporary to help player's choosing a flapping - enum { MAREK_FLAP, RICARDO_FLAP, RYAN_FLAP, NONE_FLAP }; + enum { MAREK_FLAP, RICARDO_FLAP, RYAN_FLAP, NO_FLAP }; int flapping_mode; Timer2 invincible_timer; @@ -167,15 +170,12 @@ public: Physic physic; public: - Player(); + Player(PlayerStatus* player_status); virtual ~Player(); - int key_event(SDLKey key, int state); - void level_begin(); + bool key_event(SDLKey key, bool state); void handle_input(); - PlayerStatus& get_status(); - virtual void action(float elapsed_time); virtual void draw(DrawingContext& context); virtual HitResponse collision(GameObject& other, const CollisionHit& hit); @@ -183,19 +183,28 @@ public: void make_invincible(); bool is_invincible() const { - return invincible_timer.started(); + return invincible_timer.started(); + } + bool is_dying() const + { + return dying; } void kill(HurtMode mode); void player_remove_powerups(); void check_bounds(Camera* camera); - void grow(bool animate = false); void move(const Vector& vector); + void set_bonus(BonusType type, bool animate = false); + PlayerStatus* get_status() + { + return player_status; + } void bounce(BadGuy& badguy); bool is_dead() const { return dead; } + bool is_big(); private: bool on_ground(); @@ -204,7 +213,6 @@ private: void handle_horizontal_input(); void handle_vertical_input(); - void remove_powerups(); Portable* grabbed_object;