#include <SDL.h>
#include <SDL_video.h>
#include <SDL_image.h>
#include <math.h>
#include "sprite.h"
#include "video.h"
#include "../game/time.h"
Include dependency graph for effects.cpp:
Go to the source code of this file.
Functions | |
Sprite * | WaveSurface (Surface &a, unsigned int nbr_frames, unsigned int duration, float wave_amp, float wave_per) |
void | Rebound (Sprite *spr, int &dy, uint t0, uint per, int dy_max) |
void | Gelatine (int &y, int &stretch_y, uint t0, uint amp, uint dur, uint per) |
Definition at line 104 of file effects.cpp.
00105 { 00106 uint dt = Time::GetInstance()->Read() - t0; 00107 if(dt >= dur) 00108 { 00109 y = 0; 00110 stretch_y = 0; 00111 return; 00112 } 00113 00114 //Amplitude decrease linearly with time 00115 amp = amp * (dur - dt) / dur; 00116 00117 //Scale 00118 stretch_y = (int)(sin((float)per * (float)dt * 2.0 * M_PI / (float)dur) * (float)amp); 00119 00120 //Offset 00121 if(stretch_y < 0.0) 00122 { 00123 y = stretch_y; 00124 stretch_y = -stretch_y; 00125 } 00126 else 00127 { 00128 y = 0; 00129 } 00130 }
Here is the call graph for this function:
Definition at line 70 of file effects.cpp.
00071 { 00072 float scale_x, scale_y; 00073 int spr_w, spr_h; 00074 uint dt = (Time::GetInstance()->Read() - t0) % per; 00075 00076 spr->Scale(1.0,1.0); 00077 spr_w = spr->GetWidth(); 00078 spr_h = spr->GetHeight(); 00079 dy = 0; 00080 00081 //sprite at bottom: 00082 if( dt < per / 4 ) 00083 { 00084 float dt2 = ((per / 4) - dt) / ((float)per / 4.0); 00085 scale_y = 2.0*dt2*dt2 - 2.0*dt2 + 1.0; 00086 scale_x = 2.0 - (2.0*dt2*dt2 - 2.0*dt2 + 1.0); 00087 dy = 0; 00088 spr->Scale(scale_x,scale_y); 00089 return; 00090 } 00091 00092 dt -= per/4; 00093 float dt2 = ((3*per/4)-dt)/(3.0*per/4.0); 00094 dy += (int)((-4.0*dt2*dt2 + 4.0*dt2) * dy_max); 00095 }
Here is the call graph for this function:
Here is the caller graph for this function:
Sprite* WaveSurface | ( | Surface & | a, | |
unsigned int | nbr_frames, | |||
unsigned int | duration, | |||
float | wave_amp, | |||
float | wave_per | |||
) |
Definition at line 34 of file effects.cpp.
00034 { 00035 Sprite* sprite = new Sprite; 00036 Point2i newSize = a.GetSize() + Point2i(2 * (int)wave_amp, 0); 00037 00038 sprite->SetSize(newSize); 00039 for(unsigned int f=0; f < nbr_frames; f++){ 00040 Surface b(newSize, SDL_SWSURFACE|SDL_SRCALPHA ); 00041 b.Fill(0x00000000); 00042 b.SetAlpha(SDL_SRCALPHA, 0); 00043 a.Lock(); 00044 b.Lock(); 00045 for(int x = 0; x < a.GetWidth(); x++){ 00046 for(int y = 0; y < a.GetHeight(); y++){ 00047 Uint32 col = a.GetPixel(x, y); 00048 Uint8 r, g, bl, al; 00049 a.GetRGBA(col, r, g, bl, al); 00050 col = b.MapRGBA(r, g, bl, al); 00051 00052 float t = (float)nbr_frames * sin(M_PI*(float)f/(float)nbr_frames); 00053 unsigned int wave_x = (unsigned int)(x+(wave_amp*(1+sin(((float)t*wave_per*2.0*M_PI/(float)nbr_frames)*(float)y*2.0*M_PI/(float)a.GetHeight())))); 00054 b.PutPixel(wave_x, y, col); 00055 } 00056 } 00057 a.Unlock(); 00058 b.Unlock(); 00059 00060 sprite->AddFrame(b, duration / nbr_frames); 00061 } 00062 return sprite; 00063 }
Here is the call graph for this function: