*** empty log message ***
[supertux.git] / src / player.h
1 //
2 // Interface: player/tux
3 //
4 // Description: 
5 //
6 //
7 // Author: Tobias Glaesser <tobi.web@gmx.de>, (C) 2003
8 //
9 // Copyright: See COPYING file that comes with this distribution
10 //
11 //
12
13 #ifndef SUPERTUX_PLAYER_H
14 #define SUPERTUX_PLAYER_H
15
16 #include <SDL.h>
17 #include "bitmask.h"
18 #include "type.h"
19 #include "timer.h"
20 #include "texture.h"
21 #include "collision.h"
22 #include "sound.h"
23 #include "physic.h"
24
25 /* Times: */
26
27 #define TUX_SAFE_TIME 750
28 #define TUX_INVINCIBLE_TIME 10000
29 #define TIME_WARNING 20000     /* When to alert player they're low on time! */
30
31 /* One-ups... */
32
33 #define DISTROS_LIFEUP 100
34
35 /* Scores: */
36
37 #define SCORE_BRICK 5
38 #define SCORE_DISTRO 25
39
40 struct player_keymap_type
41 {
42   int jump;
43   int duck;
44   int left;
45   int right;
46   int fire;
47 };
48
49 struct player_input_type
50 {
51   int right;
52   int left;
53   int up;
54   int down;
55   int fire;
56   int old_fire;
57 };
58
59 void player_input_init(player_input_type* pplayer_input);
60
61 extern texture_type tux_life;
62 extern texture_type tux_right[3];
63 extern texture_type tux_left[3];
64 extern texture_type bigtux_right[3];
65 extern texture_type bigtux_left[3];
66 extern texture_type bigtux_right_jump;
67 extern texture_type bigtux_left_jump;
68 extern texture_type ducktux_right;
69 extern texture_type ducktux_left;
70 extern texture_type skidtux_right;
71 extern texture_type skidtux_left;
72 extern texture_type firetux_right[3];
73 extern texture_type firetux_left[3];
74 extern texture_type bigfiretux_right[3];
75 extern texture_type bigfiretux_left[3];
76 extern texture_type bigfiretux_right_jump;
77 extern texture_type bigfiretux_left_jump;
78 extern texture_type duckfiretux_right;
79 extern texture_type duckfiretux_left;
80 extern texture_type skidfiretux_right;
81 extern texture_type skidfiretux_left;
82 extern texture_type cape_right[2];
83 extern texture_type cape_left[2];
84 extern texture_type bigcape_right[2];
85 extern texture_type bigcape_left[2];
86
87 class Player
88 {
89  public:
90   player_input_type  input;
91   player_keymap_type keymap;
92   int score;
93   int distros;
94   bool got_coffee;
95   int size;
96   bool duck;
97   DyingType dying;
98   int dir;
99   bool jumping;
100   int frame_;
101   int frame_main;
102   int lives;
103   base_type base;
104   base_type old_base;
105   base_type previous_base;
106   timer_type invincible_timer;
107   timer_type skidding_timer;
108   timer_type safe_timer;
109   timer_type frame_timer;
110   physic_type vphysic;
111   physic_type hphysic;
112
113  public:
114   void init();
115   int  key_event(SDLKey key, int state);
116   void level_begin();
117   void action();
118   void handle_input();
119   void grabdistros();
120   void draw();
121   void collision(void* p_c_object, int c_object);
122   void kill(int mode);
123   void is_dying();
124   void player_remove_powerups();
125   void keep_in_bounds();
126   bool on_ground();
127   bool under_solid();
128  private:
129   void handle_horizontal_input(int dir);
130   void handle_vertical_input();
131   void remove_powerups();
132 };
133
134 #endif /*SUPERTUX_PLAYER_H*/