X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fobject%2Ffloating_image.cpp;h=c7e586aa421e50d7bf5bfe65a9b1ab8fc3b21084;hb=78ac7aef674f518549f96160c6354b589553f952;hp=1933b9bd7c05da07f813d91a9a90b1a8c914a0d0;hpb=1486ceaaf9dd7a9d2d7e3654550b9a2768df2a56;p=supertux.git diff --git a/src/object/floating_image.cpp b/src/object/floating_image.cpp index 1933b9bd7..c7e586aa4 100644 --- a/src/object/floating_image.cpp +++ b/src/object/floating_image.cpp @@ -1,46 +1,107 @@ -#include +// 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 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 +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// 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, 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) - : sprite(NULL), 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 = sprite_manager->create(spritefile); } FloatingImage::~FloatingImage() { - delete sprite; } 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 -FloatingImage::draw(DrawingContext& context) +FloatingImage::set_action(const std::string& action) { - if(!visible) - return; + sprite->set_action(action); +} +std::string +FloatingImage::get_action() +{ + return sprite->get_action(); +} + +void +FloatingImage::fade_in(float fadetime) +{ + 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 */