X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fobject%2Fplayer.hpp;h=fec7007cbb7e11f8c6e7e58511badacbc7d85758;hb=f2d345c3ccec7743e39df2f59e546ad415257b81;hp=1f69640cfd6021129b1fed1280b6c9340934b296;hpb=7d3004fc6167b7fcd7495dd1ac278f2ac527cbec;p=supertux.git diff --git a/src/object/player.hpp b/src/object/player.hpp index 1f69640cf..fec7007cb 100644 --- a/src/object/player.hpp +++ b/src/object/player.hpp @@ -81,7 +81,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 }; @@ -95,7 +95,9 @@ private: bool dying; bool backflipping; int backflip_direction; - + Direction peeking; + bool swimming; + public: Direction dir; Direction old_dir; @@ -117,10 +119,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); @@ -134,6 +135,7 @@ public: virtual void update(float elapsed_time); virtual void draw(DrawingContext& context); + virtual void collision_solid(const CollisionHit& hit); virtual HitResponse collision(GameObject& other, const CollisionHit& hit); virtual void collision_tile(uint32_t tile_attributes); @@ -146,15 +148,31 @@ public: { return dying; } - + Direction peeking_direction() const + { + return peeking; + } + void kill(bool completely); void check_bounds(Camera* camera); void move(const Vector& vector); - virtual void add_bonus(const std::string& bonus); + virtual bool add_bonus(const std::string& bonus); virtual void add_coins(int count); - void add_bonus(BonusType type, bool animate = false); /**< picks up a bonus, taking care not to pick up lesser bonus items than we already have */ - void set_bonus(BonusType type, bool animate = false); /**< like add_bonus, but can also downgrade the bonus items carried */ + 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); + /** + * like add_bonus, but can also downgrade the bonus items carried + */ + bool set_bonus(BonusType type, bool animate = false); + PlayerStatus* get_status() { return player_status; @@ -162,7 +180,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. */ @@ -217,7 +235,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); @@ -233,13 +251,18 @@ public: */ bool adjust_height(float new_height); + /** + * Orders the current GameSession to start a sequence + */ + void trigger_sequence(std::string sequence_name); + private: void handle_input(); void handle_input_ghost(); /**< input handling while in ghost mode */ bool deactivated; - + void init(); - + void handle_horizontal_input(); void handle_vertical_input(); @@ -259,7 +282,11 @@ private: Sprite* smalltux_gameover; 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 */