#include <iostream>
#include <cassert>
-#include "gettext.h"
-#include "sprite/sprite_manager.h"
-#include "player.h"
-#include "tile.h"
-#include "sprite/sprite.h"
-#include "sector.h"
-#include "resources.h"
-#include "video/screen.h"
-#include "statistics.h"
-#include "game_session.h"
-#include "object/tilemap.h"
-#include "object/camera.h"
-#include "object/gameobjs.h"
-#include "object/portable.h"
-#include "trigger/trigger_base.h"
-#include "control/joystickkeyboardcontroller.h"
-#include "main.h"
+#include "gettext.hpp"
+#include "sprite/sprite_manager.hpp"
+#include "audio/sound_manager.hpp"
+#include "player.hpp"
+#include "tile.hpp"
+#include "sprite/sprite.hpp"
+#include "sector.hpp"
+#include "resources.hpp"
+#include "video/screen.hpp"
+#include "statistics.hpp"
+#include "game_session.hpp"
+#include "object/tilemap.hpp"
+#include "object/camera.hpp"
+#include "object/gameobjs.hpp"
+#include "object/portable.hpp"
+#include "trigger/trigger_base.hpp"
+#include "control/joystickkeyboardcontroller.hpp"
+#include "main.hpp"
static const int TILES_FOR_BUTTJUMP = 3;
static const float SHOOTING_TIME = .150;
}
void
-TuxBodyParts::draw(DrawingContext& context, const Vector& pos, int layer,
- Uint32 drawing_effect)
+TuxBodyParts::draw(DrawingContext& context, const Vector& pos, int layer)
{
if(head != NULL)
- head->draw(context, pos, layer-1, drawing_effect);
+ head->draw(context, pos, layer-1);
if(body != NULL)
- body->draw(context, pos, layer-3, drawing_effect);
+ body->draw(context, pos, layer-3);
if(arms != NULL)
- arms->draw(context, pos, layer, drawing_effect);
+ arms->draw(context, pos, layer);
if(feet != NULL)
- feet->draw(context, pos, layer-2, drawing_effect);
+ feet->draw(context, pos, layer-2);
}
Player::Player(PlayerStatus* _player_status)
}
void
-Player::action(float elapsed_time)
+Player::update(float elapsed_time)
{
if(dying && dying_timer.check()) {
dead = true;
// let's skid!
if(fabs(vx)>SKID_XM && !skidding_timer.started()) {
skidding_timer.start(SKID_TIME);
- sound_manager->play_sound("skid");
+ sound_manager->play("sounds/skid.ogg");
// dust some partcles
Sector::current()->add_object(
new Particles(
flapping = false;
falling_from_flap = false;
if (flapping_timer.started()) {
- flapping_timer.start(0);
+ flapping_timer.stop();
}
physic.set_acceleration_y(0); //for flapping
// Press jump key
if(controller->pressed(Controller::JUMP) && can_jump && on_ground()) {
- if(duck) { // only jump a little bit when in duck mode {
+ if (duck) // only jump a little bit when in duck mode
physic.set_velocity_y(300);
- } else {
- // jump higher if we are running
- if (fabs(physic.get_velocity_x()) > MAX_WALK_XM)
- physic.set_velocity_y(580);
- else
- physic.set_velocity_y(520);
- }
+ else if (fabs(physic.get_velocity_x()) > MAX_WALK_XM) // jump higher if we are running
+ physic.set_velocity_y(580);
+ else
+ physic.set_velocity_y(520);
//bbox.move(Vector(0, -1));
jumping = true;
can_flap = false;
flaps_nb = 0; // Ricardo's flapping
if (is_big())
- sound_manager->play_sound("bigjump");
+ sound_manager->play("sounds/bigjump.ogg");
else
- sound_manager->play_sound("jump");
+ sound_manager->play("sounds/jump.ogg");
} else if(!controller->hold(Controller::JUMP)) { // Let go of jump key
if (!flapping && !duck && !falling_from_flap && !on_ground()) {
can_flap = true;
physic.set_velocity_y(0);
}
}
-
- // temporary to help player's choosing a flapping
+#if CHOOSEFLAPSTYLE
+ // temporary to help players choosing a flapping
if(flapping_mode == RICARDO_FLAP) {
// Flapping, Ricardo's version
// similar to SM3 Fox
flaps_nb++;
}
} else if(flapping_mode == MAREK_FLAP) {
- // Flapping, Marek's version
+#endif
+ // Flapping, Marek and Ondra's version
if (controller->hold(Controller::JUMP) && can_flap)
{
- if (!flapping_timer.started())
- {
- flapping_timer.start(TUX_FLAPPING_TIME);
- flapping_velocity = physic.get_velocity_x();
- }
if (flapping_timer.check())
{
can_flap = false;
+ //flapping = false;
falling_from_flap = true;
}
- jumping = true;
- flapping = true;
- if (!flapping_timer.check()) {
+ else if (!flapping_timer.started())
+ {
+ flapping_timer.start(TUX_FLAPPING_TIME);
+ flapping_velocity = physic.get_velocity_x();
+ }
+ else
+ {
+ jumping = true;
+ flapping = true;
float cv = flapping_velocity * sqrt(
TUX_FLAPPING_TIME - flapping_timer.get_timegone()
/ TUX_FLAPPING_TIME);
-
+
//Handle change of direction while flapping
if (((dir == LEFT) && (cv > 0)) || (dir == RIGHT) && (cv < 0)) {
cv *= (-1);
}
+ else if (cv == 0) {
+ if (controller->hold(Controller::LEFT)) {
+ cv = -TUX_FLAPPING_LEAST_X;
+ }
+ else if (controller->hold(Controller::RIGHT)) {
+ cv = TUX_FLAPPING_LEAST_X;
+ }
+ }
physic.set_velocity_x(cv);
- physic.set_velocity_y(
- flapping_timer.get_timegone()/.850);
+ physic.set_velocity_y(flapping_timer.get_timegone()
+ * TUX_FLAPPING_STRENGTH);
+ //std::cout << "Timegone: " << flapping_timer.get_timegone() << ", Y velocity: " << physic.get_velocity_y() << "\n";
}
}
+#if CHOOSEFLAPSTYLE
} else if(flapping_mode == RYAN_FLAP) {
// Flapping, Ryan's version
if (controller->hold(Controller::JUMP) && can_flap)
physic.set_acceleration_y(0);
}
}
+#endif
/* In case the player has pressed Down while in a certain range of air,
enable butt jump action */
void
Player::set_bonus(BonusType type, bool animate)
{
- if(player_status->bonus == type)
+ if(player_status->bonus >= type)
return;
if(player_status->bonus == NO_BONUS) {
get_pos(), layer);
}
}
- else if (safe_timer.started() && size_t(global_time*40)%2)
+ else if (safe_timer.started() && size_t(game_time*40)%2)
; // don't draw Tux
else
tux_body->draw(context, get_pos(), layer);
// Draw blinking star overlay
if (invincible_timer.started() &&
(invincible_timer.get_timeleft() > TUX_INVINCIBLE_TIME_WARNING
- || size_t(global_time*20)%2)
+ || size_t(game_time*20)%2)
&& !dying)
{
if (!is_big() || duck)
void
Player::make_invincible()
{
- sound_manager->play_sound("invincible");
+ sound_manager->play("sounds/invincible.ogg");
invincible_timer.start(TUX_INVINCIBLE_TIME);
Sector::current()->play_music(HERRING_MUSIC);
}
safe_timer.get_timeleft() > 0 || invincible_timer.get_timeleft() > 0)
return;
- sound_manager->play_sound("hurt");
+ sound_manager->play("sounds/hurt.ogg");
physic.set_velocity_x(0);
if(controller->hold(Controller::JUMP))
physic.set_velocity_y(520);
else
- physic.set_velocity_y(200);
+ physic.set_velocity_y(300);
}