X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fobject%2Fplayer.h;h=c7693b441320e44a7f66ece65849287e8cfd6f33;hb=60908c905544776c376421b8d3e12eeb936c068f;hp=0a179a425dedb4b653d389e8e27d6ff8d55515b7;hpb=7a87271678d68514ae2158c0c7adb383d6002872;p=supertux.git diff --git a/src/object/player.h b/src/object/player.h index 0a179a425..c7693b441 100644 --- a/src/object/player.h +++ b/src/object/player.h @@ -23,68 +23,29 @@ #include "SDL.h" #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" - -using namespace SuperTux; +#include "moving_object.h" +#include "sprite/sprite.h" +#include "physic.h" +#include "control/controller.h" +#include "player_status.h" class BadGuy; class Portable; /* Times: */ - -#define TUX_SAFE_TIME 1.250 -#define TUX_INVINCIBLE_TIME 10.0 -#define TUX_INVINCIBLE_TIME_WARNING 2.0 -#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: - int jump; - int up; - int down; - int left; - int right; - int power; - - PlayerKeymap(); -}; - -extern PlayerKeymap keymap; - -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); +static const float TUX_SAFE_TIME = 1.250; +static const float TUX_INVINCIBLE_TIME = 10.0; +static const float TUX_INVINCIBLE_TIME_WARNING = 2.0; +static const float TUX_FLAPPING_TIME = 1; /* How long Tux can flap his wings to gain additional jump height */ +static const float TIME_WARNING = 20; /* When to alert player they're low on time! */ +static const float GROWING_TIME = 1.0; +static const int GROWING_FRAMES = 7; class Camera; class PlayerStatus; -extern Surface* tux_life; - - -#define GROWING_TIME 1.0 -#define GROWING_FRAMES 7 extern Surface* growingtux_left[GROWING_FRAMES]; extern Surface* growingtux_right[GROWING_FRAMES]; @@ -121,15 +82,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; + Controller* controller; + PlayerStatus* player_status; bool duck; bool dead; - DyingType dying; + +private: + bool dying; +public: Direction dir; Direction old_dir; @@ -152,7 +114,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,14 +129,10 @@ public: Physic physic; public: - Player(); + Player(PlayerStatus* player_status); virtual ~Player(); - - int key_event(SDLKey key, int state); - void level_begin(); - void handle_input(); - PlayerStatus& get_status(); + void set_controller(Controller* controller); virtual void action(float elapsed_time); virtual void draw(DrawingContext& context); @@ -183,28 +141,36 @@ 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: + void handle_input(); bool on_ground(); void init(); void handle_horizontal_input(); void handle_vertical_input(); - void remove_powerups(); Portable* grabbed_object;