00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include "supertux/globals.hpp"
00018 #include "supertux/shrinkfade.hpp"
00019 #include "video/drawing_context.hpp"
00020
00021 ShrinkFade::ShrinkFade(const Vector& dest, float fade_time) :
00022 dest(dest),
00023 fade_time(fade_time),
00024 accum_time(0),
00025 speedleft(),
00026 speedright(),
00027 speedtop(),
00028 speedbottom()
00029 {
00030 speedleft = dest.x / fade_time;
00031 speedright = (SCREEN_WIDTH - dest.x) / fade_time;
00032 speedtop = dest.y / fade_time;
00033 speedbottom = (SCREEN_HEIGHT - dest.y) / fade_time;
00034 }
00035
00036 ShrinkFade::~ShrinkFade()
00037 {
00038 }
00039
00040 void
00041 ShrinkFade::update(float elapsed_time)
00042 {
00043 accum_time += elapsed_time;
00044 if(accum_time > fade_time)
00045 accum_time = fade_time;
00046 }
00047
00048 void
00049 ShrinkFade::draw(DrawingContext& context)
00050 {
00051 float progress = accum_time / fade_time;
00052 context.draw_inverse_ellipse(dest,
00053 Vector(2*SCREEN_WIDTH * (1.0f - progress),
00054 2*SCREEN_HEIGHT * (1.0f - progress)),
00055 Color(0, 0, 0), LAYER_GUI+1);
00056 }
00057
00058 bool
00059 ShrinkFade::done()
00060 {
00061 return accum_time >= fade_time;
00062 }
00063
00064