From: Ricardo Cruz Date: Sat, 1 May 2004 10:59:52 +0000 (+0000) Subject: First atempt to add a fade in/out function. Though, it doesn't work, dunno why in... X-Git-Url: https://git.verplant.org/?a=commitdiff_plain;h=703ffbff927a864c18776a1a9412896bd3994ee2;p=supertux.git First atempt to add a fade in/out function. Though, it doesn't work, dunno why in the Open GL mode. The SDL frontend doesn't seem to support alpha blittling whatsoever. SVN-Revision: 883 --- diff --git a/src/intro.cpp b/src/intro.cpp index b8a6c4f4d..708770b29 100644 --- a/src/intro.cpp +++ b/src/intro.cpp @@ -31,8 +31,11 @@ #include "intro.h" #include "text.h" +#include "screen.h" + void draw_intro() { +fade("/images/background/arctis2.jpg", 30, false); display_text_file("intro.txt", "/images/background/arctis2.jpg", SCROLL_SPEED_MESSAGE); } diff --git a/src/screen.cpp b/src/screen.cpp index d323c3f1c..bf9eb895b 100644 --- a/src/screen.cpp +++ b/src/screen.cpp @@ -95,6 +95,47 @@ void drawgradient(Color top_clr, Color bot_clr) #endif } +/* --- FADE IN --- */ + +/** Fades the given surface into a black one. If fade_out is true, it will fade out, else +it will fade in */ + +void fade(Surface *surface, int seconds, bool fade_out); + +void fade(const std::string& surface, int seconds, bool fade_out) +{ +Surface* sur = new Surface(datadir + surface, IGNORE_ALPHA); +black_fade(sur, seconds, fade_out); +delete sur; +} + +void fade(Surface *surface, int seconds, bool fade_out) +{ +float alpha; +if (fade_out) + alpha = 0; +else + alpha = 255; + + int cur_time, old_time; + cur_time = SDL_GetTicks(); + + while(alpha >= 0 && alpha < 256) + { + old_time = cur_time; + cur_time = SDL_GetTicks(); + + surface->draw(0,0,(int)alpha, true); + + /* Calculate the next alpha value */ + float calc = (float) ((cur_time - old_time) / seconds); + if(fade_out) + alpha += 255 * calc; + else + alpha -= 255 * calc; + } +} + /* 'Stolen' from the SDL documentation. * Set the pixel at (x, y) to the given value * NOTE: The surface must be locked before calling this! diff --git a/src/screen.h b/src/screen.h index 0b4496ed1..1193cb0d4 100644 --- a/src/screen.h +++ b/src/screen.h @@ -48,6 +48,8 @@ void drawline(int x1, int y1, int x2, int y2, int r, int g, int b, int a); void clearscreen(int r, int g, int b); void drawgradient(Color top_clr, Color bot_clr); void fillrect(float x, float y, float w, float h, int r, int g, int b, int a); +//void black_fade(Surface* surface, int seconds, bool fade_out); +void fade(const std::string& surface, int seconds, bool fade_out); void updatescreen(void); void flipscreen(void); void update_rect(SDL_Surface *scr, Sint32 x, Sint32 y, Sint32 w, Sint32 h);