X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fplayer.h;h=21a00a2dc22fd4ead6f30ace9ea88b759d0c8c60;hb=5dba61177d71c5572fd29af172fcdab7b1f9a561;hp=0c80910cb14b08670d6731fbcdb965f5aa3697e6;hpb=b322b763e4782f0519434fed6dbee60686eeb1a4;p=supertux.git diff --git a/src/player.h b/src/player.h index 0c80910cb..21a00a2dc 100644 --- a/src/player.h +++ b/src/player.h @@ -1,14 +1,21 @@ +// $Id$ // -// Interface: player/tux +// SuperTux - A Jump'n Run +// Copyright (C) 2003 Tobias Glaesser // -// Description: -// -// -// Author: Tobias Glaesser , (C) 2003 -// -// Copyright: See COPYING file that comes with this distribution +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. // +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. // +// 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 @@ -20,12 +27,15 @@ #include "texture.h" #include "collision.h" #include "sound.h" +#include "moving_object.h" +#include "drawable.h" #include "physic.h" /* Times: */ -#define TUX_SAFE_TIME 750 +#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... */ @@ -39,20 +49,26 @@ #include -struct player_keymap_type +struct PlayerKeymap { +public: int jump; int duck; int left; int right; int fire; + + PlayerKeymap(); }; +extern PlayerKeymap keymap; + struct player_input_type { int right; int left; int up; + int old_up; int down; int fire; int old_fire; @@ -60,84 +76,113 @@ struct player_input_type void player_input_init(player_input_type* pplayer_input); -extern texture_type tux_life; -extern std::vector tux_right; -extern std::vector tux_left; -extern texture_type smalltux_jump_left; -extern texture_type smalltux_jump_right; -extern texture_type smalltux_stand_left; -extern texture_type smalltux_stand_right; -extern texture_type bigtux_right[3]; -extern texture_type bigtux_left[3]; -extern texture_type bigtux_right_jump; -extern texture_type bigtux_left_jump; -extern texture_type ducktux_right; -extern texture_type ducktux_left; -extern texture_type skidtux_right; -extern texture_type skidtux_left; -extern texture_type firetux_right[3]; -extern texture_type firetux_left[3]; -extern texture_type bigfiretux_right[3]; -extern texture_type bigfiretux_left[3]; -extern texture_type bigfiretux_right_jump; -extern texture_type bigfiretux_left_jump; -extern texture_type duckfiretux_right; -extern texture_type duckfiretux_left; -extern texture_type skidfiretux_right; -extern texture_type skidfiretux_left; -extern texture_type cape_right[2]; -extern texture_type cape_left[2]; -extern texture_type bigcape_right[2]; -extern texture_type bigcape_left[2]; - -class Player +class Sprite; + +extern Surface* tux_life; + +extern Sprite* smalltux_gameover; +extern Sprite* smalltux_star; +extern Sprite* largetux_star; +extern Sprite* growingtux_left; +extern Sprite* growingtux_right; + +struct PlayerSprite +{ + Sprite* stand_left; + Sprite* stand_right; + Sprite* walk_right; + Sprite* walk_left; + Sprite* jump_right; + Sprite* jump_left; + Sprite* kick_left; + Sprite* kick_right; + Sprite* skid_right; + Sprite* skid_left; + Sprite* grab_left; + Sprite* grab_right; + Sprite* duck_right; + Sprite* duck_left; +}; + +extern PlayerSprite smalltux; +extern PlayerSprite largetux; +extern PlayerSprite firetux; +extern PlayerSprite icetux; + +class Player : public MovingObject, public Drawable { - public: - player_keymap_type keymap; - int lives; - int score; - int distros; +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; - bool got_coffee; + int got_power; int size; bool duck; + bool holding_something; + bool dead; DyingType dying; - int dir; + + Direction dir; + Direction old_dir; + + float last_ground_y; + FallMode fall_mode; + bool jumping; + bool can_jump; + bool butt_jump; int frame_; int frame_main; - base_type base; - base_type old_base; 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; Physic physic; - public: - void init(); +public: + Player(DisplayManager& display_manager); + virtual ~Player(); + int key_event(SDLKey key, int state); void level_begin(); - void action(double frame_ratio); void handle_input(); void grabdistros(); - void draw(); + + virtual void action(float elapsed_time); + virtual void draw(Camera& viewport, int layer); + virtual void collision(const MovingObject& other_object, + int collision_type); + void collision(void* p_c_object, int c_object); - void kill(int mode); - void is_dying(); - bool is_dead(); + void kill(HurtMode mode); void player_remove_powerups(); - void keep_in_bounds(); + void check_bounds(Camera& viewport); bool on_ground(); bool under_solid(); + bool tiles_on_air(int tiles); + void grow(bool animate); + void move(const Vector& vector); + bool is_dead() const + { return dead; } - private: - void handle_horizontal_input(int dir); +private: + void init(); + + void handle_horizontal_input(); void handle_vertical_input(); void remove_powerups(); }; #endif /*SUPERTUX_PLAYER_H*/ + +/* Local Variables: */ +/* mode:c++ */ +/* End: */