X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fobject%2Fplayer.hpp;h=f27decd4a232f4c02374451d9c7351a2b0ddea94;hb=9ba388a672ff024010e38b09e576edf8730bb454;hp=885d41ed2b8a2b5d1c15414c1227518f3d292681;hpb=7a051411ba56f285197e047229586865931b748c;p=supertux.git diff --git a/src/object/player.hpp b/src/object/player.hpp index 885d41ed2..f27decd4a 100644 --- a/src/object/player.hpp +++ b/src/object/player.hpp @@ -39,12 +39,13 @@ class BadGuy; class Portable; +class Climbable; /* Times: */ -static const float TUX_SAFE_TIME = 1.8; -static const float TUX_INVINCIBLE_TIME = 10.0; -static const float TUX_INVINCIBLE_TIME_WARNING = 2.0; -static const float GROWING_TIME = 0.35; +static const float TUX_SAFE_TIME = 1.8f; +static const float TUX_INVINCIBLE_TIME = 10.0f; +static const float TUX_INVINCIBLE_TIME_WARNING = 2.0f; +static const float GROWING_TIME = 0.35f; static const int GROWING_FRAMES = 7; class Camera; @@ -68,7 +69,7 @@ public: void set_action(std::string action, int loops = -1); void one_time_animation(); - void draw(DrawingContext& context, const Vector& pos, int layer); + void draw(DrawingContext& context, const Vector& pos, int layer, Portable* grabbed_object); Sprite* head; Sprite* body; @@ -81,7 +82,7 @@ extern TuxBodyParts* big_tux; extern TuxBodyParts* fire_tux; extern TuxBodyParts* ice_tux; -class Player : public MovingObject, public Scripting::Player, public ScriptInterface +class Player : public MovingObject, public UsesPhysic, public Scripting::Player, public ScriptInterface { public: enum FallMode { ON_GROUND, JUMPING, TRAMPOLINE_JUMP, FALLING }; @@ -90,6 +91,9 @@ public: PlayerStatus* player_status; bool duck; bool dead; + //Tux can only go this fast. If set to 0 no special limit is used, only the default limits. + void set_speedlimit(float newlimit); + float get_speedlimit(); private: bool dying; @@ -97,7 +101,8 @@ private: int backflip_direction; Direction peeking; bool swimming; - + float speedlimit; + public: Direction dir; Direction old_dir; @@ -119,10 +124,9 @@ public: Timer growing_timer; Timer idle_timer; Timer backflip_timer; - Physic physic; - + public: - Player(PlayerStatus* player_status); + Player(PlayerStatus* player_status, const std::string& name); virtual ~Player(); virtual void expose(HSQUIRRELVM vm, SQInteger table_idx); @@ -153,25 +157,26 @@ public: { return peeking; } - + void kill(bool completely); void check_bounds(Camera* camera); void move(const Vector& vector); virtual bool add_bonus(const std::string& bonus); virtual void add_coins(int count); - + virtual int get_coins(); + /** * picks up a bonus, taking care not to pick up lesser bonus items than we already have * * @returns true if the bonus has been set (or was already good enough) * false if the bonus could not be set (for example no space for big tux) */ - bool add_bonus(BonusType type, bool animate = false); + bool add_bonus(BonusType type, bool animate = false); /** * like add_bonus, but can also downgrade the bonus items carried - */ - bool set_bonus(BonusType type, bool animate = false); + */ + bool set_bonus(BonusType type, bool animate = false); PlayerStatus* get_status() { @@ -180,7 +185,7 @@ public: // set kick animation void kick(); - /** + /** * play cheer animation. * This might need some space and behave in an unpredictable way. Best to use this at level end. */ @@ -235,7 +240,7 @@ public: } /** - * Switches ghost mode on/off. + * Switches ghost mode on/off. * Lets Tux float around and through solid objects. */ void set_ghost_mode(bool enable); @@ -251,13 +256,29 @@ public: */ bool adjust_height(float new_height); + /** + * Orders the current GameSession to start a sequence + */ + void trigger_sequence(std::string sequence_name); + + /** + * Requests that the player start climbing the given Climbable + */ + void start_climbing(Climbable& climbable); + + /** + * Requests that the player stop climbing the given Climbable + */ + void stop_climbing(Climbable& climbable); + private: void handle_input(); void handle_input_ghost(); /**< input handling while in ghost mode */ + void handle_input_climbing(); /**< input handling while climbing */ bool deactivated; - + void init(); - + void handle_horizontal_input(); void handle_vertical_input(); @@ -278,11 +299,16 @@ private: Sprite* smalltux_star; Sprite* bigtux_star; + std::auto_ptr airarrow; /**< arrow indicating Tux' position when he's above the camera */ + Vector floor_normal; + void try_grab(); bool ghost_mode; /**< indicates if Tux should float around and through solid objects */ Timer unduck_hurt_timer; /**< if Tux wants to stand up again after ducking and cannot, this timer is started */ + + Climbable* climbing; /**< Climbable object we are currently climbing, null if none */ }; #endif /*SUPERTUX_PLAYER_H*/