1// SuperTux
2// Copyright (C) 2006 Matthias Braun <matze@braunis.de>
3//
4// This program is free software: you can redistribute it and/or modify
5// it under the terms of the GNU General Public License as published by
6// the Free Software Foundation, either version 3 of the License, or
7// (at your option) any later version.
8//
9// This program is distributed in the hope that it will be useful,
10// but WITHOUT ANY WARRANTY; without even the implied warranty of
11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12// GNU General Public License for more details.
13//
14// You should have received a copy of the GNU General Public License
15// along with this program. If not, see <http://www.gnu.org/licenses/>.
16
17#ifndef HEADER_SUPERTUX_SCRIPTING_PLAYER_HPP
18#define HEADER_SUPERTUX_SCRIPTING_PLAYER_HPP
19
20#ifndef SCRIPTING_API
21#include <string>
22
23#include "scripting/game_object.hpp"
24
25class Player;
26#endif
27
28namespace scripting {
29
30class Player final
31#ifndef SCRIPTING_API
32 : public GameObject<::Player>
33#endif
34{
35#ifndef SCRIPTING_API
36public:
37 using GameObject::GameObject;
38
39private:
40 Player(const Player&) = delete;
41 Player& operator=(const Player&) = delete;
42#endif
43
44public:
45 /**
46 * Set tux bonus.
47 * This can be "grow", "fireflower" or "iceflower" at the moment
48 */
49 bool add_bonus(const std::string& bonus);
50 /**
51 * Replaces the Tux's bonus with another bonus.
52 * This can be "grow", "fireflower" or "iceflower" at the moment
53 */
54 bool set_bonus(const std::string& bonus);
55 /**
56 * Give tux more coins
57 *
58 * If count is a negative amount of coins, that number of coins will be taken
59 * from the player (until the number of coins the player has is 0, when it
60 * will stop changing).
61 */
62 void add_coins(int count);
63 /**
64 * Returns the number of coins the player currently has.
65 */
66 int get_coins() const;
67 /**
68 * Make tux invincible for a short amount of time
69 */
70 void make_invincible();
71 /**
72 * Deactivate user/scripting input for Tux
73 */
74 void deactivate();
75 /**
76 * Give control back to user/scripting
77 */
78 void activate();
79 /**
80 * Make Tux walk
81 */
82 void walk(float speed);
83 /**
84 * Face Tux in the proper direction
85 */
86 void set_dir(bool right);
87 /**
88 * Set player visible or invisible
89 */
90 void set_visible(bool visible);
91 /**
92 * returns true if Tux is currently visible (that is he was not set
93 * invisible by the set_visible method)
94 */
95 bool get_visible() const;
96
97 /**
98 * Hurts Tux, if completely=true then he will be killed even
99 * if he had grow or fireflower bonus
100 */
101 void kill(bool completely);
102
103 /**
104 * Switches ghost mode on/off.
105 * Lets Tux float around and through solid objects.
106 */
107 void set_ghost_mode(bool enable);
108
109 /**
110 * Returns whether ghost mode is currently enabled
111 */
112 bool get_ghost_mode() const;
113
114 /**
115 * start kick animation
116 */
117 void kick();
118
119 /**
120 * play cheer animation.
121 * This might need some space and behave in an unpredictable way. Best to use this at level end.
122 */
123 void do_cheer();
124
125 /**
126 * duck down if possible.
127 * this won't last long as long as input is enabled.
128 */
129 void do_duck();
130
131 /**
132 * stand back up if possible.
133 */
134 void do_standup();
135
136 /**
137 * do a backflip if possible.
138 */
139 void do_backflip();
140
141 /**
142 * jump in the air if possible
143 * sensible values for yspeed are negative - unless we want to jump into the ground of course
144 */
145 void do_jump(float yspeed);
146
147 /**
148 * Orders the current GameSession to start a sequence
149 */
150 void trigger_sequence(const std::string& sequence_name);
151
152 /**
153 * Uses a scriptable controller for all user input (or restores controls)
154 */
155 void use_scripting_controller(bool use_or_release);
156
157 /**
158 * Check whether player is carrying a certain object
159 * @param name Name of the Portable object to check for
160 */
161 bool has_grabbed(const std::string& name) const;
162
163 /**
164 * Instructs the scriptable controller to press or release a button
165 */
166 void do_scripting_controller(const std::string& control, bool pressed);
167
168 float get_velocity_x() const;
169 float get_velocity_y() const;
170};
171
172} // namespace scripting
173
174#endif
175
176/* EOF */
177