static const float TUX_INVINCIBLE_TIME_WARNING = 2.0f;
static const float GROWING_TIME = 0.35f;
static const int GROWING_FRAMES = 7;
+static const float TUX_BACKFLIP_TIME = 2.1f; // minimum air time that backflip results in a loss of control
class Camera;
class PlayerStatus;
-class Player : public MovingObject,
- public scripting::Player,
+class Player : public MovingObject,
+ public scripting::Player,
public ScriptInterface
{
public:
virtual void unexpose(HSQUIRRELVM vm, SQInteger table_idx);
void set_controller(Controller* controller);
+ /*
+ * Level solved. Don't kill Tux any more.
+ */
+ void set_winning();
+ bool is_winning()
+ {
+ return winning;
+ }
+
Controller* get_controller()
{
return controller;
}
void kill(bool completely);
- void check_bounds(Camera* camera);
+ void check_bounds();
void move(const Vector& vector);
virtual bool add_bonus(const std::string& bonus);
* Adds velocity to the player until given end speed is reached
*/
void add_velocity(const Vector& velocity, const Vector& end_speed);
-
+
/**
* Returns the current velocity of the player
*/
* 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 activate();
void deactivate();
void walk(float speed);
+ void set_dir(bool right);
void do_jump_apex();
void early_jump_apex();
bool deactivated;
Controller* controller;
- std::auto_ptr<CodeController> scripting_controller; /**< This controller is used when the Player is controlled via scripting */
+ std::unique_ptr<CodeController> scripting_controller; /**< This controller is used when the Player is controlled via scripting */
PlayerStatus* player_status;
bool duck;
bool dead;
private:
bool dying;
+ bool winning;
bool backflipping;
int backflip_direction;
Direction peekingX;
bool jump_early_apex;
bool on_ice;
bool ice_this_frame;
+ Color light;
+ SpritePtr lightsprite;
public:
Direction dir;