X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fobject%2Fplayer.cpp;h=a891b80f7e117f82ae755f9be47c83540141f2ac;hb=d097f456b8ab4f42058545bdd4f8f676d151e974;hp=ef5b489da039787d89af6451aaaadf8a236630d2;hpb=01855433649374b48523f5eb7e6cf204391c36ca;p=supertux.git diff --git a/src/object/player.cpp b/src/object/player.cpp index ef5b489da..a891b80f7 100644 --- a/src/object/player.cpp +++ b/src/object/player.cpp @@ -224,6 +224,8 @@ Player::init() backflipping = false; backflip_direction = 0; sprite->set_angle(0.0f); + powersprite->set_angle(0.0f); + lightsprite->set_angle(0.0f); visible = true; ability_time = 0; stone = false; @@ -338,6 +340,8 @@ Player::trigger_sequence(std::string sequence_name) backflipping = false; backflip_direction = 0; sprite->set_angle(0.0f); + powersprite->set_angle(0.0f); + lightsprite->set_angle(0.0f); GameSession::current()->start_sequence(sequence_name); } @@ -388,6 +392,11 @@ Player::update(float elapsed_time) if (backflip_timer.started()) physic.set_velocity_x(100 * backflip_direction); //rotate sprite during flip sprite->set_angle(sprite->get_angle() + (dir==LEFT?1:-1) * elapsed_time * (360.0f / 0.5f)); + if (player_status->bonus == EARTH_BONUS || player_status->bonus == AIR_BONUS) { + powersprite->set_angle(sprite->get_angle()); + if (player_status->bonus == EARTH_BONUS) + lightsprite->set_angle(sprite->get_angle()); + } } // set fall mode... @@ -407,7 +416,11 @@ Player::update(float elapsed_time) if (backflipping && (backflip_timer.get_timegone() > 0.15f)) { backflipping = false; backflip_direction = 0; - sprite->set_angle(0.0f); + if (!stone) { + sprite->set_angle(0.0f); + powersprite->set_angle(0.0f); + lightsprite->set_angle(0.0f); + } // if controls are currently deactivated, we take care of standing up ourselves if (deactivated) @@ -570,10 +583,9 @@ Player::handle_horizontal_input() // dust some particles Sector::current()->add_object( std::make_shared( - Vector(dir == RIGHT ? get_bbox().p2.x : get_bbox().p1.x, get_bbox().p2.y), - dir == RIGHT ? 270+20 : 90-40, dir == RIGHT ? 270+40 : 90-20, - Vector(280, -260), Vector(0, 300), 3, Color(.4f, .4f, .4f), 3, .8f, - LAYER_OBJECTS+1)); + Vector(dir == LEFT ? get_bbox().p2.x : get_bbox().p1.x, get_bbox().p2.y), + dir == LEFT ? 50 : -70, dir == LEFT ? 70 : -50, 260, 280, + Vector(0, 300), 3, Color(.4f, .4f, .4f), 3, .8f, LAYER_OBJECTS+1)); ax *= 2.5; } else { @@ -634,6 +646,8 @@ Player::do_standup() { return; if (backflipping) return; + if (stone) + return; if (adjust_height(BIG_TUX_HEIGHT)) { duck = false; @@ -850,6 +864,7 @@ Player::handle_input() if (controller->pressed(Controller::DOWN) && player_status->bonus == EARTH_BONUS && !cooldown_timer.started()) { if (controller->hold(Controller::ACTION) && !ability_timer.started()) { ability_timer.start(player_status->max_earth_time * STONE_TIME_PER_FLOWER); + powersprite->stop_animation(); stone = true; physic.set_gravity_modifier(1.0f); // Undo jump_early_apex } @@ -862,6 +877,9 @@ Player::handle_input() if (stone && (!controller->hold(Controller::ACTION) || ability_timer.get_timeleft() <= 0.5f)) { cooldown_timer.start(ability_timer.get_timegone()/2.0f); //The longer stone form is used, the longer until it can be used again ability_timer.stop(); + sprite->set_angle(0.0f); + powersprite->set_angle(0.0f); + lightsprite->set_angle(0.0f); stone = false; for (int i = 0; i < 8; i++) { @@ -918,6 +936,8 @@ Player::handle_input() backflipping = false; backflip_direction = 0; sprite->set_angle(0.0f); + powersprite->set_angle(0.0f); + lightsprite->set_angle(0.0f); } } @@ -1052,7 +1072,7 @@ Player::add_bonus(BonusType type, bool animate) // ignore GROWUP_BONUS if we're already big if (type == GROWUP_BONUS) { - if (!player_status->bonus == NO_BONUS) + if (player_status->bonus != NO_BONUS) return true; } @@ -1175,7 +1195,7 @@ Player::draw(DrawingContext& context) else if (player_status->bonus == ICE_BONUS) sa_prefix = "ice"; else if (player_status->bonus == AIR_BONUS) - sa_prefix = "ice"; + sa_prefix = "air"; else if (player_status->bonus == EARTH_BONUS) sa_prefix = "earth"; else @@ -1256,7 +1276,8 @@ Player::draw(DrawingContext& context) if (player_status->bonus == EARTH_BONUS) { powersprite->set_action(sprite->get_action()); lightsprite->set_action(sprite->get_action()); - } + } else if (player_status->bonus == AIR_BONUS) + powersprite->set_action(sprite->get_action()); /* // Tux is holding something @@ -1276,11 +1297,11 @@ Player::draw(DrawingContext& context) Vector shake_delta = (stone && ability_timer.get_timeleft() < 1.0f) ? Vector(graphicsRandom.rand(-3,3), 0) : Vector(0,0); sprite->draw(context, get_pos() + shake_delta, LAYER_OBJECTS + 1); // draw hardhat - powersprite->draw(context, get_pos(), LAYER_OBJECTS + 1); + powersprite->draw(context, get_pos() + shake_delta, LAYER_OBJECTS + 1); // light context.push_target(); context.set_target(DrawingContext::LIGHTMAP); - lightsprite->draw(context, get_pos()/* + Vector(dir==LEFT ? 0 : 32, 0)*/, 0); + lightsprite->draw(context, get_pos(), 0); context.pop_target(); // give an indicator that stone form cannot be used for a while if (cooldown_timer.started() && graphicsRandom.rand(0, 4) == 0) { @@ -1292,8 +1313,11 @@ Player::draw(DrawingContext& context) ppos, ANCHOR_MIDDLE, Vector(0, 0), Vector(0, 0), LAYER_OBJECTS+1+5)); } } - else + else { sprite->draw(context, get_pos(), LAYER_OBJECTS + 1); + if (player_status->bonus == AIR_BONUS) + powersprite->draw(context, get_pos(), LAYER_OBJECTS + 1); + } } @@ -1342,14 +1366,12 @@ Player::collision_solid(const CollisionHit& hit) on_ground_flag = false; Sector::current()->add_object(std::make_shared( Vector(get_bbox().p2.x, get_bbox().p2.y), - 270+20, 270+40, - Vector(280, -260), Vector(0, 300), 3, Color(.4f, .4f, .4f), 3, .8f, - LAYER_OBJECTS+1)); + 50, 70, 260, 280, Vector(0, 300), 3, + Color(.4f, .4f, .4f), 3, .8f, LAYER_OBJECTS+1)); Sector::current()->add_object(std::make_shared( Vector(get_bbox().p1.x, get_bbox().p2.y), - 90-40, 90-20, - Vector(280, -260), Vector(0, 300), 3, Color(.4f, .4f, .4f), 3, .8f, - LAYER_OBJECTS+1)); + -70, -50, 260, 280, Vector(0, 300), 3, + Color(.4f, .4f, .4f), 3, .8f, LAYER_OBJECTS+1)); Sector::current()->camera->shake(.1f, 0, 5); } @@ -1438,6 +1460,8 @@ Player::kill(bool completely) physic.set_velocity_x(0); sprite->set_angle(0.0f); + powersprite->set_angle(0.0f); + lightsprite->set_angle(0.0f); if(!completely && is_big()) { SoundManager::current()->play("sounds/hurt.wav"); @@ -1454,6 +1478,8 @@ Player::kill(bool completely) duck = false; backflipping = false; sprite->set_angle(0.0f); + powersprite->set_angle(0.0f); + lightsprite->set_angle(0.0f); set_bonus(NO_BONUS, true); } else if(player_status->bonus == NO_BONUS) { safe_timer.start(TUX_SAFE_TIME); @@ -1514,6 +1540,8 @@ Player::move(const Vector& vector) duck = false; backflipping = false; sprite->set_angle(0.0f); + powersprite->set_angle(0.0f); + lightsprite->set_angle(0.0f); last_ground_y = vector.y; if (climbing) stop_climbing(*climbing); @@ -1652,6 +1680,8 @@ Player::start_climbing(Climbable& climbable) backflipping = false; backflip_direction = 0; sprite->set_angle(0.0f); + powersprite->set_angle(0.0f); + lightsprite->set_angle(0.0f); } }