X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fplayer.h;h=ada9e96aa46ddb0a1955ae480a83eb8f49ed7072;hb=8385faa306eca6d96ab11ed7dae293d85e9c4e4f;hp=6cf627d532cdbc754f7cc121d5962b830e4cfdef;hpb=842613191ccab33d3d183cb518f86891e09b710f;p=supertux.git diff --git a/src/player.h b/src/player.h index 6cf627d53..ada9e96aa 100644 --- a/src/player.h +++ b/src/player.h @@ -16,18 +16,16 @@ // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - #ifndef SUPERTUX_PLAYER_H #define SUPERTUX_PLAYER_H #include "SDL.h" -#include "bitmask.h" -#include "special/timer.h" -#include "special/base.h" +#include "timer.h" #include "video/surface.h" #include "collision.h" #include "special/moving_object.h" +#include "special/sprite.h" #include "math/physic.h" #include "defines.h" @@ -37,14 +35,11 @@ class BadGuy; /* Times: */ -#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! */ - -/* One-ups... */ - -#define DISTROS_LIFEUP 100 +#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! */ /* Scores: */ @@ -62,11 +57,11 @@ struct PlayerKeymap { public: int jump; - int activate; - int duck; + int up; + int down; int left; int right; - int fire; + int power; PlayerKeymap(); }; @@ -83,14 +78,14 @@ struct player_input_type 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; +class PlayerStatus; extern Surface* tux_life; @@ -98,7 +93,7 @@ extern Sprite* smalltux_gameover; extern Sprite* smalltux_star; extern Sprite* bigtux_star; -#define GROWING_TIME 1000 +#define GROWING_TIME 1.0 #define GROWING_FRAMES 7 extern Surface* growingtux_left[GROWING_FRAMES]; extern Surface* growingtux_right[GROWING_FRAMES]; @@ -106,10 +101,17 @@ extern Surface* growingtux_right[GROWING_FRAMES]; class TuxBodyParts { public: - TuxBodyParts() { }; - ~TuxBodyParts() { }; - - void set_action(std::string action); + TuxBodyParts() + : head(0), body(0), arms(0), feet(0) + { } + ~TuxBodyParts() { + delete head; + delete body; + delete arms; + delete feet; + } + + void set_action(std::string action, int loops = -1); void one_time_animation(); void draw(DrawingContext& context, const Vector& pos, int layer, Uint32 drawing_effect = NONE_EFFECT); @@ -146,22 +148,33 @@ public: float last_ground_y; FallMode fall_mode; + bool on_ground_flag; 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; - - base_type previous_base; - Timer invincible_timer; - Timer skidding_timer; - 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; - Timer idle_timer; + + 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; + + Timer2 invincible_timer; + Timer2 skidding_timer; + Timer2 safe_timer; + Timer2 kick_timer; + Timer2 shooting_timer; // used to show the arm when Tux is shooting + Timer2 dying_timer; + Timer2 growing_timer; + Timer2 idle_timer; + Timer2 flapping_timer; Physic physic; public: @@ -173,24 +186,26 @@ public: void handle_input(); void grabdistros(); + PlayerStatus& get_status(); + virtual void action(float elapsed_time); virtual void draw(DrawingContext& context); - virtual void collision(const MovingObject& other_object, - int collision_type); + virtual HitResponse collision(GameObject& other, const CollisionHit& hit); - void collision(void* p_c_object, int c_object); + void make_invincible(); + bool is_invincible() const + { + return invincible_timer.started(); + } void kill(HurtMode mode); void player_remove_powerups(); void check_bounds(Camera* camera); bool on_ground(); bool under_solid(); - bool tiles_on_air(int tiles); - void grow(bool animate); + void grow(bool animate = false); 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); + void bounce(BadGuy& badguy); bool is_dead() const { return dead; }