X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fobject%2Ffloating_image.cpp;h=c7e586aa421e50d7bf5bfe65a9b1ab8fc3b21084;hb=78ac7aef674f518549f96160c6354b589553f952;hp=579878471cfa412f6c65eaa010ff91d91aaf1ab4;hpb=a113d3bd1feddd510e3b2852b0d42522735eee40;p=supertux.git diff --git a/src/object/floating_image.cpp b/src/object/floating_image.cpp index 579878471..c7e586aa4 100644 --- a/src/object/floating_image.cpp +++ b/src/object/floating_image.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,23 @@ // 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 "resources.hpp" -#include "main.hpp" -#include "math/rect.hpp" -#include "sprite/sprite_manager.hpp" +#include "object/floating_image.hpp" #include "sprite/sprite.hpp" -#include "video/drawing_context.hpp" -#include "lisp/lisp.hpp" -#include "floating_image.hpp" +#include "sprite/sprite_manager.hpp" +#include "supertux/globals.hpp" -FloatingImage::FloatingImage(const std::string& spritefile) - : layer(LAYER_FOREGROUND1 + 1), visible(false), anchor(ANCHOR_MIDDLE) +FloatingImage::FloatingImage(const std::string& spritefile) : + sprite(), + layer(LAYER_FOREGROUND1 + 1), + visible(false), + anchor(ANCHOR_MIDDLE), + pos(), + fading(0), + fadetime(0) { - sprite.reset(sprite_manager->create(spritefile)); + sprite = sprite_manager->create(spritefile); } FloatingImage::~FloatingImage() @@ -42,7 +38,21 @@ FloatingImage::~FloatingImage() void FloatingImage::update(float elapsed_time) { - (void) elapsed_time; + if(fading > 0) { + fading -= elapsed_time; + if(fading <= 0) { + fading = 0; + visible = true; + } + } else if(fading < 0) { + fading += elapsed_time; + if(fading >= 0) { + fading = 0; + visible = false; + } + } + + // (void) elapsed_time; } void @@ -58,18 +68,40 @@ FloatingImage::get_action() } void -FloatingImage::draw(DrawingContext& context) +FloatingImage::fade_in(float fadetime) { - if(!visible) - return; + this->fadetime = fadetime; + fading = fadetime; +} + +void +FloatingImage::fade_out(float fadetime) +{ + this->fadetime = fadetime; + fading = -fadetime; +} +void +FloatingImage::draw(DrawingContext& context) +{ context.push_transform(); context.set_translation(Vector(0, 0)); + if(fading > 0) { + context.set_alpha((fadetime-fading) / fadetime); + } else if(fading < 0) { + context.set_alpha(-fading / fadetime); + } else if(!visible) { + context.pop_transform(); + return; + } + Vector spos = pos + get_anchor_pos(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT), - sprite->get_width(), sprite->get_height(), anchor); + sprite->get_width(), sprite->get_height(), anchor); sprite->draw(context, spos, layer); context.pop_transform(); } + +/* EOF */