X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fobject%2Fgrowup.cpp;h=37eda106e900255486375abe8ef2398846e413ff;hb=092556fd403b1464402c741f949c48f04f628ee8;hp=3a32bcfdf1a5f8cad22052c21885c23fb3125ca9;hpb=2892ebda09d24c977547159e34abf0244884b89e;p=supertux.git diff --git a/src/object/growup.cpp b/src/object/growup.cpp index 3a32bcfdf..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() - : 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.enable_gravity(true); - physic.set_velocity_x(100); - sound_manager->preload("sounds/grow.wav"); + 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,28 +46,62 @@ 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) + 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) + 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; } return FORCE_MOVE; } +void +GrowUp::do_jump() +{ + physic.set_velocity_y(-300); +} + +/* EOF */