X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fobject%2Fgrowup.cpp;h=37eda106e900255486375abe8ef2398846e413ff;hb=9f40a73e89c17a2862a1213343589c19eff42199;hp=4a6e0ce36bb644b9b27d54dd6f1b6dd66ab9a363;hpb=714a30abd887def6331a193216387e66cbfbd1bb;p=supertux.git diff --git a/src/object/growup.cpp b/src/object/growup.cpp index 4a6e0ce36..37eda106e 100644 --- a/src/object/growup.cpp +++ b/src/object/growup.cpp @@ -1,12 +1,10 @@ -// $Id$ -// // SuperTux // Copyright (C) 2006 Matthias Braun // -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -14,25 +12,31 @@ // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#include +// along with this program. If not, see . #include -#include "growup.hpp" -#include "resources.hpp" -#include "camera.hpp" -#include "sector.hpp" -#include "player.hpp" + #include "audio/sound_manager.hpp" +#include "object/growup.hpp" +#include "object/player.hpp" +#include "sprite/sprite.hpp" +#include "sprite/sprite_manager.hpp" -GrowUp::GrowUp(Direction direction) - : MovingSprite(Vector(0,0), "images/powerups/egg/egg.sprite", LAYER_OBJECTS, COLGROUP_MOVING) +GrowUp::GrowUp(Direction direction) : + MovingSprite(Vector(0,0), "images/powerups/egg/egg.sprite", LAYER_OBJECTS, COLGROUP_MOVING), + physic(), + light(0.0f,0.0f,0.0f), + shadesprite(SpriteManager::current()->create("images/powerups/egg/egg.sprite")), + lightsprite(SpriteManager::current()->create("images/objects/lightmap_light/lightmap_light-small.sprite")) { - physic.gravity_enabled = true; - physic.vx = (direction == LEFT?-100:100); - sound_manager->preload("sounds/grow.wav"); + physic.enable_gravity(true); + physic.set_velocity_x((direction == LEFT)?-100:100); + SoundManager::current()->preload("sounds/grow.ogg"); + //shadow to remain in place as egg rolls + shadesprite->set_action("shadow"); + //set light for glow effect + lightsprite->set_blend(Blend(GL_SRC_ALPHA, GL_ONE)); + lightsprite->set_color(Color(0.2f, 0.2f, 0.0f)); } void @@ -42,23 +46,50 @@ GrowUp::update(float elapsed_time) } void +GrowUp::draw(DrawingContext& context) +{ + if(physic.get_velocity_x() != 0) { + //Set Sprite rotation angle + sprite->set_angle(get_pos().x * 360.0f / (32.0f * M_PI)); + } + //Draw the Sprite. + MovingSprite::draw(context); + //Draw shade + shadesprite->draw(context, get_pos(), layer); + //Draw the light when dark + context.get_light( get_bbox().get_middle(), &light ); + if (light.red + light.green < 2.0){ + context.push_target(); + context.set_target(DrawingContext::LIGHTMAP); + lightsprite->draw(context, get_bbox().get_middle(), 0); + context.pop_target(); + } +} + +void GrowUp::collision_solid(const CollisionHit& hit) { - if(hit.top || hit.bottom) - physic.vy = 0; - if(hit.left || hit.right) - physic.vx = -physic.vx; + if(hit.top) + physic.set_velocity_y(0); + if(hit.bottom && physic.get_velocity_y() > 0) + physic.set_velocity_y(0); + if(hit.left || hit.right) { + physic.set_velocity_x(-physic.get_velocity_x()); + } } HitResponse -GrowUp::collision(GameObject& other, const CollisionHit& ) +GrowUp::collision(GameObject& other, const CollisionHit& hit ) { Player* player = dynamic_cast(&other); if(player != 0) { - if(!player->add_bonus(GROWUP_BONUS, true)) - return FORCE_MOVE; + if(!player->add_bonus(GROWUP_BONUS, true)) { + // Tux can't grow right now. + collision_solid( hit ); + return ABORT_MOVE; + } - sound_manager->play("sounds/grow.wav"); + SoundManager::current()->play("sounds/grow.ogg"); remove_me(); return ABORT_MOVE; @@ -66,3 +97,11 @@ GrowUp::collision(GameObject& other, const CollisionHit& ) return FORCE_MOVE; } + +void +GrowUp::do_jump() +{ + physic.set_velocity_y(-300); +} + +/* EOF */