X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fobject%2Ffloating_image.cpp;h=00782af1ffd85a1b9e6ba0215952521035aa716e;hb=128e58285d549dd6214a9340590387c6b353589b;hp=1933b9bd7c05da07f813d91a9a90b1a8c914a0d0;hpb=1486ceaaf9dd7a9d2d7e3654550b9a2768df2a56;p=supertux.git diff --git a/src/object/floating_image.cpp b/src/object/floating_image.cpp index 1933b9bd7..00782af1f 100644 --- a/src/object/floating_image.cpp +++ b/src/object/floating_image.cpp @@ -1,3 +1,22 @@ +// $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 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, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + #include #include @@ -10,33 +29,79 @@ #include "lisp/lisp.hpp" #include "floating_image.hpp" -FloatingImage::FloatingImage(const std::string& spritefile) - : sprite(NULL), layer(LAYER_FOREGROUND1 + 1), visible(false), - anchor(ANCHOR_MIDDLE) + +FloatingImage::FloatingImage(const std::string& spritefile) + : layer(LAYER_FOREGROUND1 + 1), visible(false), anchor(ANCHOR_MIDDLE), fading(0), fadetime(0) { - sprite = sprite_manager->create(spritefile); + sprite.reset(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);