X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fobject%2Ffloating_image.cpp;h=00782af1ffd85a1b9e6ba0215952521035aa716e;hb=128e58285d549dd6214a9340590387c6b353589b;hp=579878471cfa412f6c65eaa010ff91d91aaf1ab4;hpb=9b9b5637d4aad4c91749d09e8884c43e29c15b9e;p=supertux.git diff --git a/src/object/floating_image.cpp b/src/object/floating_image.cpp index 579878471..00782af1f 100644 --- a/src/object/floating_image.cpp +++ b/src/object/floating_image.cpp @@ -29,8 +29,9 @@ #include "lisp/lisp.hpp" #include "floating_image.hpp" + FloatingImage::FloatingImage(const std::string& spritefile) - : layer(LAYER_FOREGROUND1 + 1), visible(false), anchor(ANCHOR_MIDDLE) + : layer(LAYER_FOREGROUND1 + 1), visible(false), anchor(ANCHOR_MIDDLE), fading(0), fadetime(0) { sprite.reset(sprite_manager->create(spritefile)); } @@ -42,7 +43,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,14 +73,35 @@ 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);