#include "stdafx.h" #include "Effects.h" #include "ImageTextDynamic3.h" void RandomMovements( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); for (int index = 0; index < length; ++index) { letter = &(letters[index]); // initialize point point.Name = letter->Name; point.Visible = TRUE; point.Alpha = 0; point.Clear(); point.Translate(rand() % 300, rand() % 300); point.Rotate(0, 0, rand() % 720); point.Scale(1 + 0.1f*(rand() % 100), 1 + 0.1f*(rand() % 100)); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate( finish[2*index] , finish[2*index+1] ); point.Rotate(0, 0, 0); point.Scale(1, 1); letter->Path.Add(point); } } void RandomMovementsBack( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); for (int index = 0; index < length; ++index) { letter = &(letters[index]); // initialize point point.Name = letter->Name; point.Visible = TRUE; point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate( finish[2*index] , finish[2*index+1] ); point.Rotate(0, 0, 0); point.Scale(1, 1); letter->Path.Add(point); point.Clear(); point.Alpha = 0; point.Translate(rand() % 300, rand() % 300); point.Rotate(0, 0, rand() % 720); point.Scale(1 + 0.1f*(rand() % 100), 1 + 0.1f*(rand() % 100)); letter->Path.Add(point); } } void AppearFade(CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); int i, index; for ( index = 0; index < length; ++index) { letter = &(letters[index]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)0; point.Clear(); point.Translate( finish[2*index] , finish[2*index+1] ); letter->Path.Add(point); for ( i=0; iPath.Add(point); } } return; } void AppearFadeBack(CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); int i, index; for ( index = 0; index < length; ++index) { letter = &(letters[index]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)Alpha; point.Clear(); point.Translate( finish[2*index] , finish[2*index+1] ); letter->Path.Add(point); for ( i=0; iPath.Add(point); } } return; } void AppearShade(CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); int index; float LastX = finish[ (length-1)*2 ]; float FinishX, FinishY; float StartX, StartY; for ( index = 0; index < length; ++index) { letter = &(letters[index]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)Alpha; FinishX = finish[2*index]; FinishY = StartY = finish[2*index+1]; StartX = FinishX - (LastX + 10); point.Clear(); point.Translate(StartX, StartY); point.Shear(0, 0); letter->Path.Add(point); point.Clear(); point.Translate(FinishX+20 + (LastX-FinishX)/3, FinishY); point.Shear(-2, 0); letter->Path.Add(point); point.Clear(); point.Translate(FinishX, FinishY); point.Shear(0, 0); letter->Path.Add(point); } return; } void AppearShadeBack(CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); int index; float LastX = finish[ (length-1)*2 ]; float FirstX = finish[0]; float FinishX, FinishY; float StartX, StartY; for ( index = 0; index < length; ++index) { letter = &(letters[index]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)Alpha; FinishX = finish[2*index]; FinishY = StartY = finish[2*index+1]; StartX = FinishX + (LastX + 10); point.Clear(); point.Translate(FinishX, FinishY); point.Shear(0, 0); letter->Path.Add(point); point.Clear(); point.Translate(FinishX-20 - (FinishX-FirstX)/3, FinishY); point.Shear(2, 0); letter->Path.Add(point); point.Alpha = 0; point.Clear(); point.Translate(StartX, StartY); point.Shear(-1, 0); letter->Path.Add(point); } return; } void AppearRotate(CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); int index; float FinishX, FinishY; for ( index = 0; index < length; ++index) { letter = &(letters[index]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)Alpha; FinishX = finish[2*index]; FinishY = finish[2*index+1]; point.Clear(); point.Translate(FinishX, FinishY); point.Rotate(0, 0, -1000); point.Scale(0, 0); letter->Path.Add(point); point.Clear(); point.Translate(FinishX, FinishY); point.Rotate(0, 0, -500); point.Scale(2, 2); letter->Path.Add(point); point.Clear(); point.Translate(FinishX, FinishY); point.Rotate(0, 0, 0); point.Scale(1, 1); letter->Path.Add(point); } return; } void AppearRotateBack(CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); int index; float FinishX, FinishY; for ( index = 0; index < length; ++index) { letter = &(letters[index]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)Alpha; FinishX = finish[2*index]; FinishY = finish[2*index+1]; point.Clear(); point.Translate(FinishX, FinishY); point.Rotate(0, 0, 0); point.Scale(1, 1); letter->Path.Add(point); point.Clear(); point.Translate(FinishX, FinishY); point.Rotate(0, 0, -500); point.Scale(2, 2); letter->Path.Add(point); point.Clear(); point.Translate(FinishX, FinishY); point.Rotate(0, 0, -1000); point.Scale(0.0001, 0.0001); letter->Path.Add(point); } return; } void AppearRandom(CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); int index, i; int * Random_Index = new int[length]; int step = 2; int N = length + 2*step; float max_scale = 3; float scale = 1; float scale_step = (max_scale - 1)/step; float alpha_step = (float)Alpha/step; float FinishX, FinishY; for ( i=0; iName; point.Visible = TRUE; point.Alpha = 0; FinishX = finish[2*index]; FinishY = finish[2*index+1]; for (i=0; i=Random_Index[index]+2*step ) { point.Alpha = (BYTE)Alpha; scale = 1; } else { if ( i-Random_Index[index] < step ) { point.Alpha = (BYTE)(alpha_step * (i-Random_Index[index]+1)); scale = scale_step * (i-Random_Index[index]) + 1; } else { point.Alpha = (BYTE)Alpha; scale = max_scale - scale_step * (i-Random_Index[index]-step); } } point.Clear(); point.Translate(FinishX, FinishY); point.Scale(scale,scale); letter->Path.Add(point); } point.Clear(); point.Translate(FinishX, FinishY); point.Scale(1,1); letter->Path.Add(point); } delete [] Random_Index; return; } void AppearRandomBack(CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); int index, i; int * Random_Index = new int[length]; int step = 2; int N = length + 2*step; float max_scale = 3; float scale = 1; float scale_step = (max_scale - 1)/step; float alpha_step = (float)Alpha/step; float FinishX, FinishY; for ( i=0; iName; point.Visible = TRUE; point.Alpha = 0; FinishX = finish[2*index]; FinishY = finish[2*index+1]; for (i=0; i=Random_Index[index]+2*step ) { point.Alpha = 0; scale = 1; } else { if ( i-Random_Index[index] < step ) { point.Alpha = (BYTE)Alpha; scale = max_scale - scale_step * (i-Random_Index[index]-step); } else { point.Alpha = (BYTE)(alpha_step * (i-Random_Index[index]+1)); scale = scale_step * (i-Random_Index[index]) + 1; } } point.Clear(); point.Translate(FinishX, FinishY); point.Scale(scale,scale); letter->Path.Add(point); } point.Clear(); point.Translate(FinishX, FinishY); point.Scale(1,1); letter->Path.Add(point); } delete [] Random_Index; return; } void Airport( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); int i, index; WCHAR Name; int RndNum = 65; int LettersQty = 200; int step = LettersQty/10; int N = step * length + (LettersQty-step); int index_step; int Half_Rnd = RAND_MAX/2; for ( index = 0; index < length; ++index) { index_step = index * step; letter = &(letters[index]); point.Name = Name = letter->Name; point.Visible = TRUE; point.Alpha = 0; point.Clear(); point.Translate(finish[index*2],finish[index*2+1]); if ( Name == 32 ) { point.Alpha = (BYTE)Alpha; for (int i=0; iPath.Add(point); continue; } for (i=0; i=index_step + LettersQty ) { point.Name = Name; point.Alpha = (BYTE)Alpha; } else { RndNum = rand()%26; if ( rand()Path.Add(point); } point.Name = Name; point.Alpha = (BYTE)Alpha; letter->Path.Add(point); } return; } void AirportBack( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); int i, index; WCHAR Name; int RndNum = 65; int LettersQty = 200; int step = LettersQty/10; int N = step * length + (LettersQty-step); int index_step; int Half_Rnd = RAND_MAX/2; for ( index = 0; index < length; ++index) { index_step = index * step; letter = &(letters[index]); point.Name = Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)Alpha; point.Clear(); point.Translate(finish[index*2],finish[index*2+1]); if ( Name == 32 ) { point.Alpha = (BYTE)Alpha; for (int i=0; iPath.Add(point); continue; } for (i=0; i=index_step + LettersQty ) { point.Alpha = 0; } else { RndNum = rand()%26; if ( rand()Path.Add(point); } point.Name = Name; point.Alpha = 0; letter->Path.Add(point); } return; } void AppearShake(CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); int i, index; float FinishX, FinishY, y; float shift_angle, shift_x, shift_y; float dist_xy, dist_angle; int step = 10; int N = step + length; for ( index = 0; index < length; ++index) { letter = &(letters[index]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)0; FinishX = finish[2*index]; FinishY = finish[2*index+1]; dist_xy = 5.f; dist_angle = 20.f; point.Clear(); point.Translate( FinishX , - (FinishX - finish[0]) ); point.Rotate(0., 0., 0.); letter->Path.Add(point); for ( i=0; i<=N; i++) { if ( index <= i ) { if ( index+step < i ) { shift_x = shift_y = shift_angle = 0.f; } else { shift_angle = ((float)rand()/RAND_MAX - 0.5f)*dist_angle; shift_x = ((float)rand()/RAND_MAX - 0.5f)*dist_xy; shift_y = ((float)rand()/RAND_MAX - 0.5f)*dist_xy; } point.Alpha = (BYTE)Alpha; y = FinishY; } else { point.Alpha = (BYTE)Alpha; y = FinishY - (FinishX - finish[2*i]) ; shift_angle = shift_x = shift_y = 0.f; } point.Clear(); point.Translate( FinishX + shift_x, y + shift_y); point.Rotate(0.f, 0.f, shift_angle); letter->Path.Add(point); } } return; } void AppearShakeBack(CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); int i, index; float FinishX, FinishY, y; float shift_angle, shift_x, shift_y; float dist_xy, dist_angle; int step = 10; int N = step + length; for ( index = 0; index < length; ++index) { letter = &(letters[index]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)Alpha; FinishX = finish[2*index]; FinishY = finish[2*index+1]; dist_xy = 5.f; dist_angle = 20.f; point.Clear(); point.Translate( FinishX , FinishY); point.Rotate(0.f, 0.f, 0.f); letter->Path.Add(point); for ( i=0; i<=N; i++) { if ( i <= length-1-index ) { y = FinishY; shift_x = shift_y = shift_angle = 0.f; } else if ( i <= length-1-index+step ) { y = FinishY; shift_angle = ((float)rand()/RAND_MAX - 0.5f)*dist_angle; shift_x = ((float)rand()/RAND_MAX - 0.5f)*dist_xy; shift_y = ((float)rand()/RAND_MAX - 0.5f)*dist_xy; } else { y = FinishY + (FinishX - finish[2*(length+step-i)]) ; shift_angle = shift_x = shift_y = 0.f; } point.Clear(); point.Translate( FinishX + shift_x, y + shift_y); point.Rotate(0.f, 0.f, shift_angle); letter->Path.Add(point); } point.Alpha = (BYTE)(Alpha/2); point.Clear(); point.Translate( FinishX , 2*FinishY + (FinishX - finish[0]) ); point.Rotate(0., 0., 0.); letter->Path.Add(point); point.Alpha = 0; point.Clear(); point.Translate( FinishX , 3*FinishY + (FinishX - finish[0]) ); point.Rotate(0., 0., 0.); letter->Path.Add(point); } return; } void AppearWedge(CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); int i, index; int compare = RAND_MAX/2; float FinishX, FinishY; float delta; float scale; for ( index = 0; index < length; ++index) { FinishX = finish[2*index]; FinishY = finish[2*index+1]; letter = &(letters[index]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)0; if ( rand() < compare ) { for ( i = 0; i <= length; ++i) { delta = (float)i/length; point.Alpha = (BYTE)(Alpha * min(2*delta,1)); scale = ((float)rand()/RAND_MAX) * 2; point.Clear(); point.Translate( FinishX , -FinishX/4. + (FinishY + FinishX/4.)*delta); point.Scale( scale , scale ); letter->Path.Add(point); } } else { for ( i = 0; i <= length; ++i) { delta = (float)i/length; point.Alpha = (BYTE)(Alpha * min(2*delta,1)); scale = ((float)rand()/RAND_MAX) * 2; point.Clear(); point.Translate( FinishX , FinishY + FinishY+ FinishX/4.f + ( - FinishY - FinishX/4.f)*delta); point.Scale( scale , scale ); letter->Path.Add(point); } } point.Alpha = (BYTE)Alpha; point.Clear(); point.Translate( FinishX , FinishY ); point.Scale( 1 , 1 ); letter->Path.Add(point); } return; } void AppearWedgeBack(CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); int i, index; int compare = RAND_MAX/2; float FinishX, FinishY; float LastX = finish[2*(length-1)]; float delta; float scale; for ( index = 0; index < length; ++index) { FinishX = finish[2*index]; FinishY = finish[2*index+1]; letter = &(letters[index]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)Alpha; point.Clear(); point.Translate( FinishX , FinishY ); point.Scale( 1 , 1 ); letter->Path.Add(point); if ( rand() < compare ) { for ( i = 0; i <= length; ++i) { delta = 1 - (float)i/length; point.Alpha = (BYTE)(Alpha * min(2*delta,1)); scale = ((float)rand()/RAND_MAX) * 2; point.Clear(); point.Translate( FinishX , (FinishX-LastX)/4. + (FinishY - (FinishX-LastX)/4.)*delta); point.Scale( scale , scale ); letter->Path.Add(point); } } else { for ( i = 0; i <= length; ++i) { delta = 1 - (float)i/length; point.Alpha = (BYTE)(Alpha * min(2*delta,1)); scale = ((float)rand()/RAND_MAX) * 2; point.Clear(); point.Translate( FinishX , FinishY + FinishY - (FinishX-LastX)/4.f + ( - FinishY + (FinishX-LastX)/4.f)*delta); point.Scale( scale , scale ); letter->Path.Add(point); } } } return; } void AppearStream(CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); int i, index, N, N_shade; float LastX = finish[ (length-1)*2 ]; float FinishX, FinishY; float StartX; int border = (length-1)/2; float FirstX = finish[0]; int step = 5; int effect_length = 10; float x, y; float ShadeX; float b, delta; for ( index = 0; index < length; ++index) { letter = &(letters[index]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = 0; FinishX = finish[2*index]; FinishY = finish[2*index+1]; if ( index <= border ) { N = step * (border) + effect_length; N_shade = N/2; StartX = -10 - (FinishX-FirstX); ShadeX = finish[2*(border-index)]; for ( i=0; i<=N_shade; i++ ) { delta = (float)i/N_shade; x = StartX + (ShadeX - StartX)*delta; point.Alpha = (BYTE)(Alpha*delta); point.Clear(); point.Translate(x, FinishY); point.Shear(-2 * delta, 0); letter->Path.Add(point); } point.Alpha = (BYTE)Alpha; int tmp = step * index; for ( i=0; i<=N; i++ ) { if ( i <= tmp ) { delta = ( tmp > 0 )? ((float)i/tmp) : 1; x = ShadeX + (finish[2*border] - ShadeX)*delta; point.Clear(); point.Translate(x, FinishY); point.Shear(-(1-delta), 0); letter->Path.Add(point); } else if ( i <= tmp + effect_length ) { delta = (float)(i - tmp)/effect_length; b = 20; x = finish[2*border] + (FinishX - finish[2*border])*delta; y = FinishY - b/effect_length * sqrt((double)effect_length*effect_length - (i - tmp)*(i - tmp)); point.Clear(); point.Translate(x, y); point.Shear(-(1-delta), 0); letter->Path.Add(point); } else { point.Clear(); point.Translate(FinishX, FinishY); point.Shear(-0, 0); letter->Path.Add(point); } } } else { N = step * (length -1 - border) + effect_length; N_shade = N/2; StartX = LastX + 10 + FirstX + (LastX - FinishX); ShadeX = finish[2*(length - (index-border))]; for ( i=0; i<=N_shade; i++ ) { delta = (float)i/N_shade; x = StartX + (ShadeX - StartX)*delta; point.Alpha = (BYTE)(Alpha*delta); point.Clear(); point.Translate(x, FinishY); point.Shear(2 * delta, 0); letter->Path.Add(point); } point.Alpha = (BYTE)Alpha; int tmp = step * (border+1 - (index-border)); for ( i=0; i<=N; i++ ) { if ( i <= tmp ) { delta = ( tmp > 0 )? ((float)i/tmp) : 1; x = ShadeX + (finish[2*(border+1)] - ShadeX)*delta; point.Clear(); point.Translate(x, FinishY); point.Shear(1-delta, 0); letter->Path.Add(point); } else if ( i <= tmp + effect_length ) { delta = (float)(i - tmp)/effect_length; b = 20; x = finish[2*(border+1)] + (FinishX - finish[2*(border+1)])*delta; y = FinishY - b/effect_length * sqrt((double)effect_length*effect_length - (i - tmp)*(i - tmp)); point.Clear(); point.Translate(x, y); point.Shear(1-delta, 0); letter->Path.Add(point); } else { point.Clear(); point.Translate(FinishX, FinishY); point.Shear(-0, 0); letter->Path.Add(point); } } } } return; } void AppearStreamBack(CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); int i, index, N, N_shade; float LastX = finish[ (length-1)*2 ]; float FinishX, FinishY; float StartX; int border = (length-1)/2; float FirstX = finish[0]; int step = 5; int effect_length = 10; float x, y; float ShadeX; float b, delta; for ( index = 0; index < length; ++index) { letter = &(letters[index]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)Alpha; FinishX = finish[2*index]; FinishY = finish[2*index+1]; point.Clear(); point.Translate(FinishX, FinishY); point.Shear(0, 0); letter->Path.Add(point); if ( index <= border ) { N = step * (border) + effect_length; N_shade = N/2; StartX = -10 - (FinishX-FirstX); ShadeX = finish[2*(border-index)]; int tmp = step * index; for ( i=N; i>=0; i-- ) { if ( i <= tmp ) { delta = ( tmp > 0 )? ((float)i/tmp) : 1; x = ShadeX + (finish[2*border] - ShadeX)*delta; point.Clear(); point.Translate(x, FinishY); point.Shear(-(1-delta), 0); letter->Path.Add(point); } else if ( i <= tmp + effect_length ) { delta = (float)(i - tmp)/effect_length; b = 20; x = finish[2*border] + (FinishX - finish[2*border])*delta; y = FinishY - b/effect_length * sqrt((double)effect_length*effect_length - (i - tmp)*(i - tmp)); point.Clear(); point.Translate(x, y); point.Shear(-(1-delta), 0); letter->Path.Add(point); } else { point.Clear(); point.Translate(FinishX, FinishY); point.Shear(-0, 0); letter->Path.Add(point); } } for ( i=N_shade; i>=0; i-- ) { delta = (float)i/N_shade; x = StartX + (ShadeX - StartX)*delta; point.Alpha = (BYTE)(Alpha*delta); point.Clear(); point.Translate(x, FinishY); point.Shear(-2 * delta, 0); letter->Path.Add(point); } } else { N = step * (length -1 - border) + effect_length; N_shade = N/2; StartX = LastX + 10 + FirstX + (LastX - FinishX); ShadeX = finish[2*(length - (index-border))]; int tmp = step * (border+1 - (index-border)); for ( i=N; i>=0; i-- ) { if ( i <= tmp ) { delta = ( tmp > 0 )? ((float)i/tmp) : 1; x = ShadeX + (finish[2*(border+1)] - ShadeX)*delta; point.Clear(); point.Translate(x, FinishY); point.Shear(1-delta, 0); letter->Path.Add(point); } else if ( i <= tmp + effect_length ) { delta = (float)(i - tmp)/effect_length; b = 20; x = finish[2*(border+1)] + (FinishX - finish[2*(border+1)])*delta; y = FinishY - b/effect_length * sqrt((double)effect_length*effect_length - (i - tmp)*(i - tmp)); point.Clear(); point.Translate(x, y); point.Shear(1-delta, 0); letter->Path.Add(point); } else { point.Clear(); point.Translate(FinishX, FinishY); point.Shear(-0, 0); letter->Path.Add(point); } } for ( i=N_shade; i>=0; i-- ) { delta = (float)i/N_shade; x = StartX + (ShadeX - StartX)*delta; point.Alpha = (BYTE)(Alpha*delta); point.Clear(); point.Translate(x, FinishY); point.Shear(2 * delta, 0); letter->Path.Add(point); } } } return; } void WaveSimple( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); int i, index; float LastX = finish[ (length-1)*2 ]; float wave_length = LastX + 10; float FinishX, FinishY; float StartX, StartY; int N = max(2*length, 200); float x, y; float fKoeff = 3.142592f / 100; float fHeigth = 20; float step = wave_length / N; int fall_length = 8; int fall_step = fall_length/2; int N_fall = fall_step * (length-1) + 2*fall_length; float max_scale = 3; float scale = 1; float delta; int index_start; for ( index = 0; index < length; ++index) { letter = &(letters[index]); point.Name = letter->Name; FinishX = finish[2*index]; FinishY = StartY = finish[2*index+1]; StartX = FinishX - wave_length; point.Visible = TRUE; point.Alpha = (BYTE)Alpha; point.Clear(); point.Translate(StartX, StartY); point.Scale(1, 1); letter->Path.Add(point); x = StartX; for (i=0; iPath.Add(point); x += step; } x = FinishX; y = FinishY - (cos((x+StartX) * fKoeff) + 1) * fHeigth; point.Clear(); point.Translate(FinishX, y); point.Scale(1, 1); letter->Path.Add(point); index_start = (length-1-index)*fall_step; for (i=0; iPath.Add(point); }else if ( i < index_start + 2*fall_length) { delta = (float)(i - index_start)/fall_length; point.Clear(); if ( i - index_start < fall_length ) { scale = 1 + (max_scale-1)*delta; point.Translate(FinishX, y + (FinishY-y)*delta ); } else { scale = max_scale + (1-max_scale)*(delta - 1); point.Translate(FinishX, FinishY); } point.Scale(scale, scale); letter->Path.Add(point); } else { point.Clear(); point.Translate(FinishX, FinishY); point.Scale(1, 1); letter->Path.Add(point); } } point.Clear(); point.Translate(FinishX, FinishY); point.Scale(1, 1); letter->Path.Add(point); } return; } void WaveSimpleBack( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); int i, index; float LastX = finish[ (length-1)*2 ]; float wave_length = LastX + 10; float FinishX, FinishY; float StartX; int N = max(2*length, 200); float x, y; float fKoeff = 3.142592f / 100; float fHeigth = 20; float step = wave_length / N; int fall_length = 8; int fall_step = fall_length/2; int N_fall = fall_step * (length-1) + 2*fall_length; float max_scale = 3; float scale = 1; float delta; int index_start; for ( index = 0; index < length; ++index) { letter = &(letters[index]); point.Name = letter->Name; FinishX = finish[2*index]; FinishY = finish[2*index+1]; StartX = FinishX - wave_length; point.Visible = TRUE; point.Alpha = (BYTE)Alpha; x = FinishX; y = FinishY - (cos((x+StartX) * fKoeff) + 1) * fHeigth; point.Clear(); point.Translate(FinishX, FinishY); point.Scale(1, 1); letter->Path.Add(point); index_start = (index)*fall_step; for (i=0; iPath.Add(point); } else if ( i < index_start + 2*fall_length) { delta = (float)(i - index_start)/fall_length; point.Clear(); if ( i - index_start < fall_length ) { scale = 1 + (max_scale-1)*delta; point.Translate(FinishX, FinishY); } else { scale = max_scale + (1-max_scale)*(delta - 1); point.Translate(FinishX, FinishY + (y-FinishY)*(delta-1)); } point.Scale(scale, scale); letter->Path.Add(point); } else { x = FinishX; point.Clear(); point.Translate(x, FinishY - (cos((x+StartX) * fKoeff) + 1) * fHeigth); point.Scale(1, 1); letter->Path.Add(point); } } x = FinishX; for (i=0; i<=N; i++) { y = FinishY - (cos((x+StartX) * fKoeff) + 1) * fHeigth; point.Alpha = (BYTE)(Alpha*(float)(N-i)/N); point.Clear(); point.Translate(x, y); point.Scale(1, 1); letter->Path.Add(point); x += step; } } return; } void WaveZoom( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); int i, index; float FinishX, FinishY; int step = 6; int N = length-1 + 2*step; float max_scale = 3; float scale = 1; float scale_step = (max_scale - 1)/step; float alpha_step = (float)Alpha/step; for ( index = 0; index < length; ++index) { letter = &(letters[index]); point.Name = letter->Name; FinishX = finish[2*index]; FinishY = finish[2*index+1]; point.Visible = TRUE; point.Alpha = 0; for (i=0; i=index+2*step ) { point.Alpha = (BYTE)Alpha; scale = 1; } else { if ( i-index < step ) { point.Alpha = (BYTE)(alpha_step * (i-index+1)); scale = scale_step * (i-index) + 1; } else { point.Alpha = (BYTE)Alpha; scale = max_scale - scale_step * (i-index-step); } } point.Clear(); point.Translate(FinishX, FinishY); point.Scale(scale,scale); letter->Path.Add(point); } point.Clear(); point.Translate(FinishX, FinishY); point.Scale(1,1); letter->Path.Add(point); } return; } void WaveZoomBack( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); int i, index; float FinishX, FinishY; int step = 6; int N = length-1 + 2*step; float max_scale = 3; float scale = 1; float scale_step = (max_scale - 1)/step; float alpha_step = (float)Alpha/step; for ( index = 0; index < length; ++index) { letter = &(letters[index]); point.Name = letter->Name; FinishX = finish[2*index]; FinishY = finish[2*index+1]; point.Visible = TRUE; point.Alpha = (BYTE)Alpha; for (i=0; i=index+2*step ) { point.Alpha = 0; scale = 1; } else { if ( i-index < step ) { point.Alpha = (BYTE)Alpha; scale = scale_step * (i-index) + 1; } else { point.Alpha = (BYTE)(alpha_step * (2*step - (i-index))); scale = max_scale - scale_step * (i-index-step); } } point.Clear(); point.Translate(FinishX, FinishY); point.Scale(scale,scale); letter->Path.Add(point); } point.Clear(); point.Translate(FinishX, FinishY); point.Scale(1,1); letter->Path.Add(point); } return; } void WaveZoomVertical( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); int i, index; float FinishX, FinishY; int step = 6; int N = length-1 + 2*step; float max_scale = 6; float scale = 1; float scale_step = (max_scale - 1)/step; for ( index = 0; index < length; ++index) { letter = &(letters[index]); point.Name = letter->Name; FinishX = finish[2*index]; FinishY = finish[2*index+1]; point.Visible = FALSE; point.Alpha = (BYTE)Alpha; for (i=0; i=index+2*step ) { point.Visible = TRUE; scale = 1; } else { point.Visible = TRUE; if ( i-index < step ) scale = scale_step * (i-index) + 1; else scale = max_scale - scale_step * (i-index-step); } point.Clear(); point.Translate(FinishX, FinishY); point.Scale(1,scale); letter->Path.Add(point); } point.Clear(); point.Translate(FinishX, FinishY); point.Scale(1,1); letter->Path.Add(point); } return; } void WaveZoomVerticalBack( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); int i, index; float FinishX, FinishY; int step = 6; int N = length-1 + 2*step; float max_scale = 6; float scale = 1; float scale_step = (max_scale - 1)/step; for ( index = 0; index < length; ++index) { letter = &(letters[index]); point.Name = letter->Name; FinishX = finish[2*index]; FinishY = finish[2*index+1]; point.Visible = TRUE; point.Alpha = (BYTE)Alpha; for (i=0; i=index+2*step ) { point.Visible = FALSE; scale = 1; } else { point.Visible = TRUE; if ( i-index < step ) scale = scale_step * (i-index) + 1; else scale = max_scale - scale_step * (i-index-step); } point.Clear(); point.Translate(FinishX, FinishY); point.Scale(1,scale); letter->Path.Add(point); } point.Visible = FALSE; point.Clear(); point.Translate(FinishX, FinishY); point.Scale(1,1); letter->Path.Add(point); } return; } void WaveFall( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); int i, index; float LastX = finish[ (length-1)*2 ]; float wave_length = LastX + 10; float FinishX, FinishY; float StartX, StartY; int N = max(2*length, 300); float x, y; float fKoeff = 3.142592f / 100; float fHeigth = 20; float step = wave_length / N; int fall_length = 12; int fall_step = 6; int N_fall = fall_step * (length-1) + fall_length; float max_angle = 1080; float delta; int index_start; for ( index = 0; index < length; ++index) { letter = &(letters[index]); point.Name = letter->Name; FinishX = finish[2*index]; FinishY = StartY = finish[2*index+1]; StartX = FinishX - wave_length; point.Visible = TRUE; point.Alpha = (BYTE)Alpha; point.Clear(); point.Translate(StartX, StartY); point.Rotate(0, 0, 0); letter->Path.Add(point); x = StartX; for (i=0; iPath.Add(point); x += step; } x = FinishX; y = FinishY - (-cos((x-LastX) * fKoeff ) + 1) * fHeigth; point.Clear(); point.Translate(x, y); point.Rotate(0, 0, 0); letter->Path.Add(point); index_start = (length-1-index)*fall_step; for (i=0; iPath.Add(point); }else if ( i < index_start + fall_length) { delta = (float)(i - index_start)/fall_length; point.Clear(); point.Translate(FinishX, y + (FinishY-y)*delta ); point.Rotate(0, 0, max_angle*delta); letter->Path.Add(point); } else { point.Clear(); point.Translate(FinishX, FinishY); point.Rotate(0, 0, max_angle); letter->Path.Add(point); } } point.Clear(); point.Translate(FinishX, FinishY); point.Rotate(0, 0, max_angle); letter->Path.Add(point); } return; } void WaveFallBack( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); int i, index; float LastX = finish[ (length-1)*2 ]; float wave_length = LastX + 10; float FinishX, FinishY; int N = max(2*length, 300); float x, y; float fKoeff = 3.142592f / 100; float fHeigth = 20; float step = wave_length / N; int fall_length = 12; int fall_step = 6; int N_fall = fall_step * (length-1) + fall_length; float max_angle = 1080; float delta; int index_start; for ( index = 0; index < length; ++index) { letter = &(letters[index]); point.Name = letter->Name; FinishX = finish[2*index]; FinishY = finish[2*index+1]; point.Visible = TRUE; point.Alpha = (BYTE)Alpha; x = FinishX; y = FinishY - (-cos((x-LastX) * fKoeff ) + 1) * fHeigth; point.Clear(); point.Translate(FinishX, FinishY); point.Rotate(0, 0, max_angle); letter->Path.Add(point); index_start = index*fall_step; for (i=0; iPath.Add(point); } else if ( i < index_start + fall_length) { delta = (float)(i - index_start)/fall_length; point.Clear(); point.Translate(FinishX, FinishY + (y-FinishY)*delta ); point.Rotate(0, 0, max_angle*(1-delta)); letter->Path.Add(point); } else { point.Clear(); point.Translate(FinishX, y); point.Rotate(0, 0, 0); letter->Path.Add(point); } } x = FinishX; for (i=0; i<=N; i++) { y = FinishY - (-cos((x-LastX) * fKoeff) + 1) * fHeigth; point.Alpha = (BYTE)(Alpha*(float)(N-i)/N); point.Clear(); point.Translate(x, y); point.Rotate(0, 0, 0); letter->Path.Add(point); x += step; } } return; } void WaveRunShift( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); int i, index; float LastX = finish[ (length-1)*2 ]; float wave_length = LastX + 10; float FinishX, FinishY; float StartX, StartY; int N = max(length*2, 300); float x, y, y_prev, shift; float fKoeff = 3.142592f / 100; float fHeigth = 20; float step = wave_length / N; int fall_length = N/2/length; float delta; for ( index = 0; index < length; ++index) { letter = &(letters[index]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)Alpha; FinishX = finish[2*index]; FinishY = StartY = finish[2*index+1]; StartX = FinishX - wave_length; point.Clear(); point.Translate(StartX, StartY); letter->Path.Add(point); x = StartX; for (i=0; iPath.Add(point); x += step; } x = FinishX; y = FinishY - (-cos((x-LastX) * fKoeff ) + 1) * fHeigth; point.Clear(); point.Translate(x, y); letter->Path.Add(point); for (i=0; i length-1-i ) { for (int j=0; jPath.Add(point); } } else { shift = finish[(length-i-1)*2]; y_prev = y; y = FinishY - (-cos((x-shift)*fKoeff ) + 1) * fHeigth; for (int j=0; jPath.Add(point); } } } } return; } void WaveRunShiftBack( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); int i, index; float LastX = finish[ (length-1)*2 ]; float wave_length = LastX + 10; float FinishX, FinishY; int N = max(length*2, 300); float x, y, y_prev, shift; float fKoeff = 3.142592f / 100; float fHeigth = 20; float step = wave_length / N; int fall_length = N/2/length; float delta; for ( index = 0; index < length; ++index) { letter = &(letters[index]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)Alpha; FinishX = finish[2*index]; FinishY = finish[2*index+1]; x = FinishX; y = FinishY; point.Clear(); point.Translate(x, y); letter->Path.Add(point); for (i=0; iPath.Add(point); } } else { shift = finish[(length-i-1)*2]; y_prev = y; y = FinishY - (-cos((x-shift)*fKoeff ) + 1) * fHeigth; for (int j=0; jPath.Add(point); } } } x = FinishX; for (i=0; i<=N; i++) { y = FinishY - (-cos((x-shift) * fKoeff) + 1) * fHeigth; point.Alpha = (BYTE)(Alpha*(float)(N-i)/N); point.Clear(); point.Translate(x, y); letter->Path.Add(point); x += step; } } return; } void WaveSwing( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); int i, index; float LastX = finish[ (length-1)*2 ]; float wave_length = LastX*1.5f; float FinishX, FinishY; float y; float fKoeff = 3.142592f / wave_length; float fHeight = 80; int step = 5; for ( index = 0; index < length; ++index) { letter = &(letters[index]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = 0; FinishX = finish[2*index]; FinishY = finish[2*index+1]; y = FinishY - sin(fabs(FinishX+10)*fKoeff) * fHeight; point.Clear(); point.Translate(FinishX, y); letter->Path.Add(point); for (i=0; iPath.Add(point); } point.Alpha = (BYTE)Alpha; for (i=length-1; i>=0; i--) { y = FinishY - sin(fabs(FinishX-finish[i*2])*fKoeff) * fHeight*(0.8-(float)(length-i-1)/length * 0.2); point.Clear(); point.Translate(FinishX, y); letter->Path.Add(point); } for (i=0; iPath.Add(point); } for (i=length-1; i>=0; i--) { y = FinishY - sin(fabs(FinishX-finish[i*2])*fKoeff) * fHeight*(0.4-(float)(length-i-1)/length * 0.2); point.Clear(); point.Translate(FinishX, y); letter->Path.Add(point); } for (i=0; iPath.Add(point); } else { point.Clear(); point.Translate(FinishX, FinishY); letter->Path.Add(point); } } } return; } void WaveSwingBack( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); int i, index; float LastX = finish[ (length-1)*2 ]; float wave_length = LastX*1.5f; float FinishX, FinishY; float y; float fKoeff = 3.142592f / wave_length; float fHeight = 80; int step = 5; for ( index = 0; index < length; ++index) { letter = &(letters[index]); point.Name = letter->Name; point.Visible = TRUE; FinishX = finish[2*index]; FinishY = finish[2*index+1]; point.Alpha = (BYTE)Alpha; for (i=length-1; i>=0; i--) { if ( i<=index ) { y = FinishY - sin(fabs(FinishX-finish[i*2])*fKoeff) * fHeight*(0.2-(float)i/length * 0.2); point.Clear(); point.Translate(FinishX, y); letter->Path.Add(point); } else { point.Clear(); point.Translate(FinishX, FinishY); letter->Path.Add(point); } } for (i=0; iPath.Add(point); } for (i=length-1; i>=0; i--) { y = FinishY - sin(fabs(FinishX-finish[i*2])*fKoeff) * fHeight*(0.6-(float)i/length * 0.2); point.Clear(); point.Translate(FinishX, y); letter->Path.Add(point); } for (i=0; iPath.Add(point); } for (i=length-1; i>=0; i--) { y = FinishY - sin(fabs(FinishX-finish[i*2])*fKoeff) * fHeight*(1-(float)i/length * 0.2); point.Clear(); if ( (i<=index-step) && (index != step)) point.Alpha = (BYTE)(Alpha/2 * (float)i/(index-step)); else if ( i<=index ) point.Alpha = (BYTE)((2-(float)(index-i)/step)*Alpha/2); point.Translate(FinishX, y); letter->Path.Add(point); } point.Alpha = 0; y = FinishY - sin(fabs(FinishX+10)*fKoeff) * fHeight; point.Clear(); point.Translate(FinishX, y); letter->Path.Add(point); } return; } void WaveRun( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); int i, index; float LastX = finish[ (length-1)*2 ]; float FirstX = finish[0]; float wave_length; float FinishX, FinishY; float y; float fKoeff, prev_Koeff; float fHeight = 20; float step = 10; float shift; int N = 50; float L; for ( index = 0; index < length; ++index) { letter = &(letters[index]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = 0; FinishX = finish[2*index]; FinishY = finish[2*index+1]; wave_length = 350; fKoeff = 2 * 3.142592f / wave_length; shift = FirstX; L = ((int)((LastX - FirstX)/wave_length)+2) * wave_length; step = L/N; for (i=0; i<=N; i++) { y = FinishY - (-cos((FinishX-shift)*fKoeff ) + 1) * fHeight*(1-(float)i/N * 0.2); point.Clear(); point.Alpha = (BYTE)((float)i/N*Alpha); point.Translate(FinishX, y); letter->Path.Add(point); shift += step; } point.Alpha = (BYTE)Alpha; prev_Koeff = fKoeff; wave_length = 200; fKoeff = 2 * 3.142592f / wave_length; L = ((int)((LastX - FirstX)/wave_length)+2) * wave_length; step = L/N; shift = FirstX; for (i=0; i<=N; i++) { if ( shift > finish[2*index] ) y = FinishY - (-cos((FinishX-shift)*fKoeff ) + 1) * fHeight*(0.8-(float)i/N * 0.2); else y = FinishY - (-cos((FinishX-shift)*prev_Koeff ) + 1) * fHeight*(0.8-(float)i/N * 0.2); point.Clear(); point.Translate(FinishX, y); letter->Path.Add(point); shift += step; } prev_Koeff = fKoeff; wave_length = 100; fKoeff = 2 * 3.142592f / wave_length; L = ((int)((LastX - FirstX)/wave_length)+1) * wave_length; step = L/N; shift = FirstX; for (i=0; i<=N; i++) { if ( shift > finish[2*index] ) y = FinishY - (-cos((FinishX-shift)*fKoeff ) + 1) * fHeight*(0.6-(float)i/N * 0.2); else y = FinishY - (-cos((FinishX-shift)*prev_Koeff ) + 1) * fHeight*(0.6-(float)i/N * 0.2); point.Clear(); point.Translate(FinishX, y); letter->Path.Add(point); shift += step; } for (i=0; i index ) y = FinishY; else y = FinishY - (-cos((FinishX-shift)*fKoeff ) + 1) * fHeight*0.4; point.Clear(); point.Translate(FinishX, y); letter->Path.Add(point); } } return; } void WaveRunBack( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); int i, index; float LastX = finish[ (length-1)*2 ]; float FirstX = finish[0]; float wave_length; float FinishX, FinishY; float y; float fKoeff, prev_Koeff; float fHeight = 20; float step = 10; float shift; int N = 50; float L; for ( index = 0; index < length; ++index) { letter = &(letters[index]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)Alpha; FinishX = finish[2*index]; FinishY = finish[2*index+1]; point.Clear(); point.Translate(FinishX, FinishY); letter->Path.Add(point); wave_length = 100; fKoeff = 2 * 3.142592f / wave_length; L = ((int)((LastX - FirstX)/wave_length)+1) * wave_length; step = L/N; shift = FirstX; for (i=length-1; i>=0; i--) { shift = finish[i*2]; if ( i > index ) y = FinishY; else y = FinishY - (-cos((FinishX-shift)*fKoeff ) + 1) * fHeight*0.4; point.Clear(); point.Translate(FinishX, y); letter->Path.Add(point); } prev_Koeff = fKoeff; wave_length = 200; fKoeff = 2 * 3.142592f / wave_length; L = ((int)((LastX - FirstX)/wave_length)+2) * wave_length; step = L/N; shift = FirstX; for (i=N; i>=0; i--) { if ( shift > finish[2*index] ) y = FinishY - (-cos((FinishX-shift)*fKoeff ) + 1) * fHeight*(0.6-(float)i/N * 0.2); else y = FinishY - (-cos((FinishX-shift)*prev_Koeff ) + 1) * fHeight*(0.6-(float)i/N * 0.2); point.Clear(); point.Translate(FinishX, y); letter->Path.Add(point); shift += step; } wave_length = 350; prev_Koeff = fKoeff; fKoeff = 2 * 3.142592f / wave_length; shift = FirstX; L = ((int)((LastX - FirstX)/wave_length)+2) * wave_length; step = L/N; for (i=N; i>=0; i--) { if ( shift > finish[2*index] ) y = FinishY - (-cos((FinishX-shift)*fKoeff ) + 1) * fHeight*(0.8-(float)i/N * 0.2); else y = FinishY - (-cos((FinishX-shift)*prev_Koeff ) + 1) * fHeight*(0.8-(float)i/N * 0.2); point.Clear(); point.Translate(FinishX, y); letter->Path.Add(point); shift += step; } for (i=N; i>=0; i--) { y = FinishY - (-cos((FinishX-shift)*fKoeff ) + 1) * fHeight*(1-(float)i/N * 0.2); point.Clear(); point.Alpha = (BYTE)((float)i/N*Alpha); point.Translate(FinishX, y); letter->Path.Add(point); shift += step; } } return; } void WaveShift( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); int i, index; float FinishX, FinishY; int step_letters = 8; int N = length; float y, shift; float fKoeff = 3.142592f / 70; float fHeigth = 20; for ( index = 0; index < length; ++index) { letter = &(letters[index]); point.Name = letter->Name; point.Alpha = (BYTE)Alpha; FinishX = finish[2*index]; FinishY = finish[2*index+1]; if ( index <= step_letters ) { point.Visible = TRUE; point.Clear(); point.Translate(-10, FinishY); letter->Path.Add(point); } else { point.Visible = FALSE; point.Clear(); point.Translate(FinishX, FinishY); letter->Path.Add(point); } for (i=0; i=index ) { point.Visible = TRUE; point.Clear(); point.Translate(FinishX, FinishY); letter->Path.Add(point); } else if ( i>index - step_letters ) { shift = finish[i*2]; y = FinishY - (sin((FinishX-shift)*fKoeff )) * fHeigth; point.Visible = TRUE; point.Clear(); point.Translate(FinishX, y); letter->Path.Add(point); } else if ( i==index - step_letters ) { shift = finish[i*2]; y = FinishY - (sin((FinishX-shift)*fKoeff )) * fHeigth; point.Visible = FALSE; point.Clear(); point.Translate(FinishX, y); letter->Path.Add(point); } else { point.Visible = FALSE; point.Clear(); point.Translate(FinishX, FinishY); letter->Path.Add(point); } } } return; } void WaveShiftBack( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); int i, index; float FinishX, FinishY; int step_letters = 8; int N = length; float y, shift; float fKoeff = 3.142592f / 70; float fHeigth = 20; for ( index = 0; index < length; ++index) { letter = &(letters[index]); point.Name = letter->Name; point.Alpha = (BYTE)Alpha; FinishX = finish[2*index]; FinishY = finish[2*index+1]; point.Visible = TRUE; point.Clear(); point.Translate(FinishX, FinishY); letter->Path.Add(point); for (i=0; iPath.Add(point); } else if ( iPath.Add(point); } else if ( i==index+step_letters ) { shift = finish[i*2]; y = FinishY + (sin((FinishX-shift)*fKoeff )) * fHeigth; point.Visible = FALSE; point.Clear(); point.Translate(FinishX, y); letter->Path.Add(point); } else { point.Visible = FALSE; point.Clear(); point.Translate(FinishX, FinishY); letter->Path.Add(point); } } int delta = finish[min(1,length-1)*2]-finish[0]; if ( index+step_letters > length-1 ) { for (i=0; iPath.Add(point); } for (i=0; i<(length-1-index); i++) { shift += delta; y = FinishY + (sin((FinishX-shift)*fKoeff )) * fHeigth; point.Visible = FALSE; point.Clear(); point.Translate(FinishX, y); letter->Path.Add(point); } shift += delta; y = FinishY + (sin((FinishX-shift)*fKoeff )) * fHeigth; point.Visible = FALSE; point.Clear(); point.Translate(FinishX, y); letter->Path.Add(point); } else { for (i=0; iPath.Add(point); } } } return; } void WavePulse( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); int i, index; float FinishX, FinishY; int step = 6; int N = (length/(2*step) + 3)*2*step; float max_scale = 4.f; float min_scale = 0.2f; float scale = 1; float scale_step = (max_scale - min_scale)/step; int rest; for ( index = 0; index < length; ++index) { letter = &(letters[index]); point.Name = letter->Name; FinishX = finish[2*index]; FinishY = finish[2*index+1]; point.Visible = FALSE; point.Alpha = (BYTE)Alpha; for (i=0; iPath.Add(point); } for (i=0; i=index ) scale = 1; else { point.Visible = TRUE; rest = (index-i)%(2*step); if ( rest < step ) scale = scale_step * rest + min_scale; else scale = max_scale - scale_step * (rest-step); } point.Clear(); point.Translate(FinishX, FinishY); point.Scale(1,scale); letter->Path.Add(point); } point.Clear(); point.Translate(FinishX, FinishY); point.Scale(1,1); letter->Path.Add(point); } return; } void WavePulseBack( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); int i, index; float FinishX, FinishY; int step = 6; int N = (length/(2*step) + 3)*2*step; float max_scale = 4.f; float min_scale = 0.2f; float scale = 1; float scale_step = (max_scale - min_scale)/step; int rest; for ( index = 0; index < length; ++index) { letter = &(letters[index]); point.Name = letter->Name; FinishX = finish[2*index]; FinishY = finish[2*index+1]; point.Visible = TRUE; point.Alpha = (BYTE)Alpha; point.Clear(); point.Translate(FinishX, FinishY); point.Scale(1,1); letter->Path.Add(point); for (i=0; i=index ) { point.Visible = TRUE; rest = (i-index)%(2*step); if ( rest < step ) scale = scale_step * rest + min_scale; else scale = max_scale - scale_step * (rest-step); } else { scale = 1; } point.Clear(); point.Translate(FinishX, FinishY); point.Scale(1,scale); letter->Path.Add(point); } for (i=0; i<=N; i++) { if ( iPath.Add(point); } point.Visible = FALSE; point.Clear(); point.Translate(FinishX, FinishY); point.Scale(1,scale); letter->Path.Add(point); } return; } //new void Ejection( CSimpleArray &letters, CSimpleArray &finish, long Alpha) { Letter* letter; Waypoint point; float x, y, start; int length; length = letters.GetSize(); if(length > 1) start = (finish[2] - finish[0])*10; else start = 100; for (int i = 0; i < length; i++) { letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = 0; x = finish[2*i]; y = finish[2*i+1]; for(int j = start; j >= 0; j -= start/5) { point.Clear(); if(j != start) point.Alpha += Alpha/10; point.Translate(x, y + j); letter->Path.Add(point); if (start/5 < 1) break; } point.Clear(); point.Alpha += Alpha/10; point.Translate(x, y - start/5); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(x, y); letter->Path.Add(point); } } void Ellipse( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter* letter; Waypoint point; int length = letters.GetSize(); float x, y, R, centerX, centerY; int sch = 0; if(length > 1) R = (finish[2] - finish[0])*3; else R = 30; for (int i = 0; i < length; i++) { sch = 0; letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)0; x = finish[2*i]; y = finish[2*i+1]; centerX = x; centerY = y + R; for(int temp = 0; temp < length*10; temp++) { if((i*10) >= temp) { sch++; x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Translate(x, y); letter->Path.Add(point); } else { for(int j = 0; j < R; j++) { y = centerY - sqrt(R*R - (x - centerX)*(x - centerX)); y -= finish[2*i+1]; y /= 2; y += finish[2*i+1]; point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(x, y); letter->Path.Add(point); x++; } for(int j = 0; j < R*2; j++) { y = centerY + sqrt(R*R - (x - centerX)*(x - centerX)); y -= finish[2*i+1]; y /= 2; y += finish[2*i+1]; point.Clear(); point.Translate(x, y); letter->Path.Add(point); x--; } for(int j = 0; j < R + 1; j++) { y = centerY - sqrt(R*R - (x - centerX)*(x - centerX)); y -= finish[2*i+1]; y /= 2; y += finish[2*i+1]; point.Clear(); point.Translate(x, y); letter->Path.Add(point); x++; } for(int j = 0;j < length*10 - sch;j++) { x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Translate(x, y); letter->Path.Add(point); } break; } } } } void Wheel( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter* letter; Waypoint point; int length = letters.GetSize(); float x, y; int sch = 0; for (int i = 0; i < length; i++) { sch = 0; letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = 0; x = finish[2*i]; y = finish[2*i+1]; for(int temp = 0; temp < length*10; temp++) { if((i*10) >= temp) { sch++; x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Translate(x, y); point.Rotate(0, 0, -540); point.Scale(0.4, 0.4); letter->Path.Add(point); } else { for(float j = 0.; j < 50.; j += 1.) { float t = 54 * j/5; float s = 0.06 * j/5; x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Translate(x, y); point.Rotate(0, 0, -540 + t); point.Scale(0.4 + s, 0.4 + s); point.Alpha += Alpha/50 ; letter->Path.Add(point); } for(int j = 0; j < length*10 - sch; j++) { x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Translate(x, y); point.Rotate(0, 0, 0); point.Scale(1, 1); point.Alpha = (BYTE)Alpha; letter->Path.Add(point); } break; } } } } void Miscarry( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter* letter; Waypoint point; int length = letters.GetSize(); float x, y; float end = finish[2*(length - 1)]; for (int i = 0; i < length; i++) { letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = 0; x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Translate(x, y); point.Rotate(0, 0, 90); letter->Path.Add(point); point.Clear(); point.Alpha = 0; if(i == 1) point.Alpha = (BYTE)Alpha/10; if(i==0) point.Alpha = (BYTE)Alpha; point.Translate(end, y); point.Rotate(0, 0, 90); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(x, y); point.Rotate(0, 0, 0); letter->Path.Add(point); } } void Rotation( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter* letter; Waypoint point; int length = letters.GetSize(); float x, y, s; //s - koef. scale int sch = 0; for (int i = 0; i < length; i++) { sch=0; letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = 0; x = finish[2*i]; y = finish[2*i+1]; for(int temp = 0; temp < length*10; temp++) { if((i*10) >= temp) { sch++; x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Translate(x, y); point.Scale(1, 1); letter->Path.Add(point); } else { for(float j = 48.; j >= 0.; j -= 1.) { if(j >= 36) s = 0.0833*(j - 36); if((j < 36) && (j >= 24)) s = -0.0833*(36 - j); if((j < 24) && (j >= 12)) s = -0.0833*(j - 12); if(j < 12) s = 0.0833*(12 - j); x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Translate(x, y); point.Scale(s, 1); point.Alpha += Alpha/48 ; letter->Path.Add(point); } for(int j = 0; j < length*10 - sch; j++) { x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Translate(x, y); point.Scale(1, 1); point.Alpha = (BYTE)Alpha; letter->Path.Add(point); } break; } } } } void Increase( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter* letter; Waypoint point; int length = letters.GetSize(); float x, y, start; if(length > 1) start = (finish[2] - finish[0])*10; else start = 100; for (int i = 0; i < length; i++) { letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = 0; x = finish[2*i]; y = finish[2*i+1]; x = (finish[2*length - 2] - finish[0])/2; point.Clear(); point.Translate(x, y + start); point.Scale(0.5, 0.5); letter->Path.Add(point); point.Clear(); if(i < 3) point.Alpha = Alpha/1.5; point.Translate(x, y + start); point.Scale(1.5, 1.5); letter->Path.Add(point); point.Clear(); point.Alpha = Alpha/3; if(i > 2) point.Alpha = 0; point.Translate(x, y + start); point.Scale(3, 7); letter->Path.Add(point); x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(x, y); point.Scale(1, 1); letter->Path.Add(point); } } void TwoString( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter* letter; Waypoint point; int length = letters.GetSize(); float x, y, scl, str1, str2, step; int sch = 0; if(length > 1) { str1 = (finish[2]-finish[0])*5; str2 = (finish[2]-finish[0])*10; step = (finish[2]-finish[0])*2; } else { str1 = 50; str2 = 100; step = 20; } for (int i = 0; i < length; i++) { sch = 0; letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha =(BYTE)0; for(int temp = -1; temp < length*3; temp++) { if((i*3) > temp) { sch++; if(i < length/2) { y = finish[2*i+1] + str1; x = finish[0] + step*i; } else { y = finish[2*i+1] + str2; x = finish[0] + step*(-length/2 + i); } point.Clear(); point.Translate(x, y); point.Scale(2, 2); letter->Path.Add(point); } else { scl = 2.; for(int j = 0; j < 50; j++) { point.Clear(); point.Translate(x += step/50, y += step/100 + i/50); point.Scale(scl, scl); point.Alpha += Alpha/50; letter->Path.Add(point); scl -= .02; } x = finish[2*i] - 10; y = finish[2*i+1]; point.Clear(); point.Translate(x, y); point.Scale(1, 1); point.Alpha = (BYTE)Alpha; letter->Path.Add(point); for(int j = 0; j < 10; j++) { x++; point.Clear(); point.Translate(x, y); point.Scale(1, 1); point.Alpha = (BYTE)Alpha; letter->Path.Add(point); } for(int j = 0; j < length*3 - sch; j++) { x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Translate(x, y); point.Scale(1, 1); point.Alpha = (BYTE)Alpha; letter->Path.Add(point); } break; } } } } void Tumbling( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); float x, y, start, stepX, stepY, scl; int sch = 0; start = 0; if(length > 1) { stepX = (finish[2] - finish[0]) * 1.7/10; stepY = (finish[1] - start)/10; } else { stepX = 1.7; stepY = (finish[1] - start)/10; } for (int i = 0; i < length; i++) { sch = 0; scl = 0; letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)0; x = finish[2*i] + stepX*10; y = start; for(int temp = 0; temp < length*1.5; temp++) { if((i*1.5) >= temp) { sch++; x = finish[2*i] + stepX*10; y = start; point.Clear(); point.Translate(x, y); point.Rotate(0, 0, -270); point.Scale(0, 0); letter->Path.Add(point); } else { point.Alpha = (BYTE)Alpha; for(int j = 10; j >= 0; j--) { if(j > 7) scl -= 0.333; else scl += 0.25; point.Clear(); point.Translate(x, y); point.Rotate(0, 0, -27*j); point.Scale(scl, 1); letter->Path.Add(point); if(j <= 5) x -= stepX*2; y += stepY; } for(int j = 0; j < length*1.5 - sch; j++) { x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Translate(x, y); point.Rotate(0, 0, 0); point.Scale(1, 1); letter->Path.Add(point); } break; } } } } void Leave( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); int i, j; float x, y, start, step; if(length > 1) start = (finish[2] - finish[0])*6; else start = 60; step = start / length; for ( i = length - 1; i >= 0; i--) { x = finish[2*i]; y = finish[2*i+1]; letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)0; point.Clear(); point.Translate(x - start, y); letter->Path.Add(point); for ( j = length - 1; j >= 0; j--) { point.Clear(); if (i >= j) { point.Alpha = (BYTE)Alpha; point.Translate(x - start, y); } else { point.Alpha = 0; point.Translate(x - start, y); } x += step; letter->Path.Add(point); } x = finish[2*i]; point.Clear(); point.Translate(x, y); letter->Path.Add(point); } } void Unfold( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter* letter; Waypoint point; int length = letters.GetSize(); float x, y, start, stepX, stepY; start = -30; stepY = (finish[1] - start)/50; int sch = 0; for (int i = 0; i < length; i++) { sch = 0; stepX = (finish[2*i] - start)/50; letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)Alpha; x = finish[2*i]; y = finish[2*i+1]; for(int temp = 0; temp < length*4; temp++) { if((i*4) >= temp) { sch++; x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Translate(start, start); letter->Path.Add(point); } else { x = y = start; for(float j = 0.; j < 50.; j += 1.) { point.Clear(); point.Translate(x, y); letter->Path.Add(point); x += stepX; y += stepY; } for(int j = 0; j < length*4 - sch; j++) { x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Translate(x, y); letter->Path.Add(point); } break; } } } } void Centrifuge( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); float x, y, center; center = (finish[2*(length - 1)] + finish[0])/2; for (int i = 0; i < length; i++) { letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)0; x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Translate(center, y); point.Scale(0, 0); point.Rotate(center, 0, -720); point.Translate(-center + x, 0); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(center, y); point.Scale(1, 1); point.Rotate(center, 0, 0); point.Translate(-center + x, 0); letter->Path.Add(point); } } void HorizontalRotation( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); float x, y, center; center = (finish[2*(length - 1)] + finish[0])/2; for (int i = 0; i < length; i++) { letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)Alpha/10; x = finish[2*i]; y = finish[2*i+1]; for(int j = 0; j < 4; j++) { point.Clear(); point.Translate(center, finish[2*i+1]/2); if(j == 0) point.Scale(0, 1); else { if(j%2 == 0) point.Scale(-1, 1); else point.Scale(1, 1); } point.Translate(-center + x, finish[2*i+1]/2); letter->Path.Add(point); point.Alpha =(BYTE)Alpha; } } } void HorizontalRotation3D( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; float length = letters.GetSize(); float x, y, center; center = (finish[2*(length-1)] + finish[0])/2; for (float i = 0; i < length; i++) { letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)Alpha/10; x = finish[2*i]; y = finish[2*i+1]; for(int j = 0; j < 6; j++) { point.Clear(); point.Translate(center, finish[2*i+1]/2); if(j == 0) point.Scale(0, 1); if(j == 1) point.Scale(1, 1); if(j == 2) point.Scale(0, 1); if(j == 3) point.Scale(-1, 1); if(j == 4) point.Scale(0, 1); if(j == 5) point.Scale(1, 1); point.Translate(-center + x, finish[2*i+1]/2); if((j == 0) || (j == 4)) point.Scale(4.1-i*4/length,4.1-i*4/length); if((j == 1) || (j == 3) || (j == 5)) point.Scale(1, 1); if(j == 2) point.Scale(4.1 - (4 - i*4/length), 4.1 - (4 - i*4/length)); letter->Path.Add(point); point.Alpha = (BYTE)Alpha; } } } void VerticalRotation( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); float x, y, center; center = (finish[2*(length-1)] + finish[0])/2; for (int i = 0; i < length; i++) { letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)Alpha/10; x = finish[2*i]; y = finish[2*i+1]; for(int j = 0; j < 4; j++) { point.Clear(); point.Translate(center,finish[2*i+1]); if(j == 0) point.Scale(1, 0); else { if(j%2 == 0) point.Scale(1, -1); else point.Scale(1, 1); } point.Translate(-center + x, 0); letter->Path.Add(point); point.Alpha = (BYTE)Alpha; } } } void CheChe( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter* letter; Waypoint point; int length = letters.GetSize(); float x, y; int sch = 0; for(int i = 0; i < length; i++) { sch = 0; letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)0; x = finish[2*i]; y = finish[2*i+1]; for(int temp = 0; temp < length+1; temp++) { if((i) >= temp) { sch++; x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Translate(x, y); point.Scale(1, 1); point.Rotate(0, 0, 0); letter->Path.Add(point); } else { x = finish[2*i]; y = finish[2*i+1]; float temp = 1.; float temp2 = 1.; int koefAlpha = 0; for(int z = 0; z < 5; z++ ) { point.Alpha += Alpha/5; if(point.Alpha > 255) point.Alpha = 255; for(float j = 1.; j >= 0.5; j -= 0.05) { point.Clear(); point.Translate(x, y); if(point.Alpha != 0) koefAlpha = point.Alpha; if((temp > 37)) { point.Alpha = 0; } else { point.Alpha = koefAlpha; } if(j > 0.75) { point.Scale(temp2, temp2); point.Rotate(0, 0, temp); temp2 -= 0.15; temp += 8; } else { point.Scale(temp2, temp2); point.Rotate(0, 0, temp); temp2 += 0.16; temp -= 8; } letter->Path.Add(point); } } for(int j = 0; j < length - sch+1; j++) { point.Alpha = Alpha; x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Translate(x, y); point.Scale(1, 1); point.Rotate(0, 0, 0); letter->Path.Add(point); } break; } } } } //Erase new void EjectionBack( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); int i; float x, y, start; if(length > 1) start = (finish[2] - finish[0])*10; else start = 100; for(i = 0; i < length; i++) { letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)Alpha; x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(x, y); letter->Path.Add(point); point.Clear(); point.Alpha -= Alpha/10; point.Translate(x, y - start/5); letter->Path.Add(point); for(int j = 0; j < start; j += start/5) { point.Clear(); if(j != start) point.Alpha -= Alpha/10; point.Translate(x, y + j); letter->Path.Add(point); } point.Clear(); point.Alpha = 0; point.Translate(x, y + start); letter->Path.Add(point); } } void EllipseBack( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter* letter; Waypoint point; int length = letters.GetSize(); float x, y, R, centerX, centerY; int sch = 0; if(length > 1) R = (finish[2] - finish[0])*3; else R = 30; for (int i = 0; i < length; i++) { sch = 0; letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)Alpha; x = finish[2*i]; y = finish[2*i+1]; centerX = x; centerY = y + R; for(int temp = 0; temp < length*10; temp++) { if((i*10) >= temp) { sch++; x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Translate(x, y); letter->Path.Add(point); } else { for(int j = 0; j < R; j++) { y = centerY - sqrt(R*R - (x - centerX)*(x - centerX)); y -= finish[2*i+1]; y /= 2; y += finish[2*i+1]; point.Clear(); point.Translate(x, y); letter->Path.Add(point); x++; } for(int j = 0; j < R*2; j++) { y = centerY + sqrt(R*R - (x - centerX)*(x - centerX)); y -= finish[2*i+1]; y /= 2; y += finish[2*i+1]; point.Clear(); point.Translate(x, y); letter->Path.Add(point); x--; } for(int j = 0; j < R + 1; j++) { y = centerY - sqrt(R*R - (x - centerX)*(x - centerX)); y -= finish[2*i+1]; y /= 2; y += finish[2*i+1]; point.Clear(); point.Translate(x, y); letter->Path.Add(point); x++; } for(int j = 0;j < length*10 - sch;j++) { x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Alpha = (BYTE)0; point.Translate(x, y); letter->Path.Add(point); } break; } } } } void WheelBack( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); float x, y, R = 30; int sch = 0; for (int i = 0; i < length; i++) { sch=0; letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)Alpha; x = finish[2*i]; y = finish[2*i+1]; for(int temp = 0; temp < length*10; temp++) { if((i*10) >= temp) { sch++; x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Translate(x, y); point.Rotate(0, 0, 1); point.Scale(1, 1); letter->Path.Add(point); } else { for(float j = 0.; j < 50.; j += 1.) { float t = -54 * j/5; float s = 1 - 0.06 * j/5; x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Translate(x, y); point.Rotate(0, 0, t); point.Scale(s, s); point.Alpha -= Alpha/50 ; letter->Path.Add(point); } for(int j = 0; j < length*10 - sch; j++) { x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Translate(x, y); point.Rotate(0, 0, -540); point.Scale(0.4, 0.4); point.Alpha = (BYTE)0 ; letter->Path.Add(point); } break; } } } } void MiscarryBack( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter* letter; Waypoint point; int length = letters.GetSize(); int i; float x, y; float end = finish[2*(length-1)]; for(i = 0; i < length; i++) { letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(x, y); point.Rotate(0, 0, 0); letter->Path.Add(point); point.Clear(); point.Alpha = 0; if(i == 1) point.Alpha = (BYTE)Alpha/10; if(i == 0) point.Alpha = (BYTE)Alpha; point.Translate(end, y); point.Rotate(0, 0, 90); letter->Path.Add(point); point.Clear(); point.Alpha = 0; point.Translate(x, y); point.Rotate(0, 0, 90); letter->Path.Add(point); } } void RotationBack( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); float x, y, s; int sch = 0; for (int i = 0; i < length; i++) { sch = 0; letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)Alpha; x = finish[2*i]; y = finish[2*i+1]; for(int temp = 0; temp < length*10; temp++) { if((i*10) >= temp) { sch++; x=finish[2*i]; y=finish[2*i+1]; point.Clear(); point.Translate(x, y); point.Scale(1, 1); letter->Path.Add(point); } else { for(float j = 48.; j >= 0.; j -= 1.) { if (j >= 36) s = 0.0833*(j - 36); if ((j < 36) && (j >= 24)) s = -0.0833*(36 - j); if ((j < 24) && (j >= 12)) s = -0.0833*(j - 12); if (j < 12) s = 0.0833*(12 - j); x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Translate(x, y); point.Scale(s, 1); point.Alpha -= Alpha/48 ; letter->Path.Add(point); } for(int j = 0; j < length*10 - sch; j++) { x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Translate(x, y); point.Scale(1, 1); point.Alpha = (BYTE)0 ; letter->Path.Add(point); } break; } } } } void IncreaseBack( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter* letter; Waypoint point; int length = letters.GetSize(); int i; float x, y, start; if(length > 1) start = (finish[2] - finish[0])*10; else start = 100; for (i = 0; i < length; i++) { letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)0; x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(x, y); point.Scale(1, 1); letter->Path.Add(point); x = (finish[2*length-2] - finish[0])/2; point.Clear(); point.Alpha = Alpha/3; if(i > 2) point.Alpha = 0; point.Translate(x, y + start); point.Scale(3, 7); letter->Path.Add(point); point.Clear(); point.Alpha = 0; if(i < 3) point.Alpha = Alpha/1.5; point.Translate(x, y + start); point.Scale(1.5, 1.5); letter->Path.Add(point); point.Clear(); point.Alpha = 0; point.Translate(x, y + start); point.Scale(0.5, 0.5); letter->Path.Add(point); } } void TwoStringBack( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); float x, y, scl, str1, str2, step; int sch = 0; if(length > 1) { str1 = (finish[2]-finish[0])*5; str2 = (finish[2]-finish[0])*10; step = (finish[2]-finish[0])*2; } else { str1 = 50; str2 = 100; step = 20; } for (int i = 0; i < length; i++) { sch = 0; letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)0; for(int temp = -1; temp < length*3; temp++) { if((i*3) > temp) { sch++; x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Translate(x, y); point.Scale(1, 1); point.Alpha =(BYTE)Alpha; letter->Path.Add(point); } else { for(int j = 0; j < 10; j++) { x--; point.Clear(); point.Translate(x, y); point.Scale(1, 1); point.Alpha = (BYTE)Alpha; letter->Path.Add(point); } scl = 2.; if(i < length/2) { y = finish[2*i+1] + str1; x = finish[0] + step*i; } else { y = finish[2*i+1] + str2; x = finish[0] + step*(-length/2 + i); } for(int j = 0; j < 50; j++) { point.Clear(); point.Translate(x += step/50, y += step/100 + i/50); point.Scale(scl, scl); point.Alpha -= Alpha/50; letter->Path.Add(point); scl -= .02; } for(int j = 0; j < length*3 - sch; j++) { point.Clear(); point.Translate(x, y); point.Scale(1, 1); point.Alpha = (BYTE)0; letter->Path.Add(point); } break; } } } } void TumblingBack( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); float x, y, start, stepX, stepY, scl; int sch = 0; start = 0; if(length > 1) { stepX = (finish[2] - finish[0]) * 1.7/10; stepY = (finish[1] - start)/10; } else { stepX = 1.7; stepY = (finish[1] - start)/10; } for (int i = 0; i < length; i++) { sch = 0; scl = 1; letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)Alpha; x = finish[2*i] + stepX*10; y = start; for(int temp = 0; temp < length*1.5; temp++) { if((i*1.5) >= temp) { sch++; x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Translate(x, y); point.Rotate(0, 0, 0); point.Scale(1, 1); letter->Path.Add(point); } else { for(int j = 0; j <= 10; j++) { if(j > 7) scl += 0.333; else scl -= 0.25; point.Clear(); point.Translate(x, y); point.Rotate(0, 0, -27*j); point.Scale(scl, 1); letter->Path.Add(point); if(j <= 5) x -= stepX*2; y += stepY; } for(int j = 0; j < length*1.5 - sch; j++) { point.Clear(); point.Alpha = (BYTE)0; point.Translate(x, y); point.Rotate(0, 0, -270); point.Scale(0, 0); letter->Path.Add(point); } break; } } } } void LeaveBack( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); int i, j; float x, y, start, step; if(length > 1) start = (finish[2] - finish[0])*6; else start = 60; step = start/length; for(i = (length - 1); i >= 0; i--) { x = finish[2*i]; y = finish[2*i+1]; letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)Alpha; point.Clear(); point.Translate(x, y); letter->Path.Add(point); for(j = (length - 1); j >= 0; j--) { point.Clear(); if (i >= j) { point.Alpha = (BYTE)0; point.Translate(x, y); } else { point.Alpha = Alpha; point.Translate(x, y); } x += step; letter->Path.Add(point); } } } void UnfoldBack( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter* letter; Waypoint point; int length = letters.GetSize(); float x, y, start, stepX, stepY, step; if(length > 1) step = (finish[2] - finish[0]); else step = 10; start = finish[2*(length-1)] + step*4; stepY = (finish[1] + step*3)/50; int sch = 0; for(int i = 0; i < length; i++) { sch = 0; stepX = (finish[2*i] - start)/50; letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)Alpha; x = finish[2*i]; y = finish[2*i+1]; for(int temp = 0; temp < length*4; temp++) { if((i*4) >= temp) { sch++; x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Translate(x, y); letter->Path.Add(point); } else { x = finish[2*i]; y = finish[2*i+1]; for(float j = 0.; j < 50.; j += 1.) { point.Clear(); point.Translate(x, y); letter->Path.Add(point); x -= stepX; y -= stepY; } for(int j = 0; j < length*4 - sch; j++) { x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Translate(start, -step*3); letter->Path.Add(point); } break; } } } } void CentrifugeBack( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter* letter; Waypoint point; int length = letters.GetSize(); float x, y, center; center = (finish[2*(length-1)] + finish[0])/2; for (int i = 0; i < length; i++) { letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(center, y); point.Scale(1, 1); point.Rotate(center, 0, 0); point.Translate(-center + x, 0); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)0; point.Translate(center, y); point.Scale(0, 0); point.Rotate(center, 0, 720); point.Translate(-center + x, 0); letter->Path.Add(point); } } void HorizontalRotationBack( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); float x, y, center; center = (finish[2*(length-1)] + finish[0])/2; for (int i = 0; i < length; i++) { letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)Alpha; x = finish[2*i]; y = finish[2*i+1]; for(int j = 0; j < 6; j++) { point.Clear(); point.Translate(center, finish[2*i+1]/2); if((j == 0) || ( j == 4)) point.Scale(1, 1); else { if(j%2 == 0) point.Scale(-1,1); else point.Scale(0.1,1); } point.Translate(-center+x,finish[2*i+1]/2); if(j == 5) point.Alpha = (BYTE)0; letter->Path.Add(point); } } } void HorizontalRotation3DBack( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; float length = letters.GetSize(); float x, y, center; center = (finish[2*(length-1)] + finish[0])/2; for (float i = 0; i < length; i++) { letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)Alpha; x = finish[2*i]; y = finish[2*i+1]; for(int j = 0; j < 6; j++) { point.Clear(); point.Translate(center, finish[2*i+1]/2); if(j == 0) point.Scale(1, 1); if(j == 1) point.Scale(0.1, 1); if(j == 2) point.Scale(-1, 1); if(j == 3) point.Scale(0.1, 1); if(j == 4) point.Scale(1, 1); if(j == 5) point.Scale(0.1, 1); point.Translate(-center + x, finish[2*i+1]/2); if((j == 1) || (j == 5)) point.Scale(4.1 - i*4/length,4.1 - i*4/length); if((j == 0) || (j == 2) || (j == 4)) point.Scale(1, 1); if(j == 3) point.Scale(4.1 - (4 - i*4/length),4.1 - (4 - i*4/length)); if(j == 5) point.Alpha = 0; letter->Path.Add(point); } } } void VerticalRotationBack( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); float x, y, center; center = (finish[2*(length-1)] + finish[0])/2; for (int i = 0; i < length; i++) { letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)Alpha; x = finish[2*i]; y = finish[2*i+1]; for(int j = 0; j < 6; j++) { point.Clear(); point.Translate(center, finish[2*i+1]); if((j == 0) || (j == 4)) point.Scale(1, 1); else { if(j%2 == 0) point.Scale(1, -1); else point.Scale(1, 0.1); } point.Translate(-center + x, 0); if(j == 5) point.Alpha = (BYTE)0; letter->Path.Add(point); } } } void CheCheBack( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter* letter; Waypoint point; int length = letters.GetSize(); float x, y; int sch = 0; for(int i = 0; i < length; i++) { sch = 0; letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)Alpha; x = finish[2*i]; y = finish[2*i+1]; for(int temp = 0; temp <= length; temp++) { if((i) >= temp) { sch++; x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Translate(x, y); point.Scale(1, 1); point.Rotate(0, 0, 0); letter->Path.Add(point); } else { x = finish[2*i]; y = finish[2*i+1]; float temp = 1.; float temp2 = 1.; int koefAlpha = 0; for(int z = 0; z < 5; z++ ) { point.Alpha -= Alpha/5; if(point.Alpha < 0) point.Alpha = 0; for(float j = 1.; j >= 0.5; j -= 0.05) { point.Clear(); point.Translate(x, y); if(point.Alpha != 0) koefAlpha = point.Alpha; if((temp > 37)) { point.Alpha = 0; } else { point.Alpha = koefAlpha; } if(j > 0.75) { point.Scale(temp2, temp2); point.Rotate(0, 0, temp); temp2 -= 0.15; temp += 8; } else { point.Scale(temp2, temp2); point.Rotate(0, 0, temp); temp2 += 0.16; temp -= 8; } letter->Path.Add(point); } } for(int j = 0; j <= length - sch+1; j++) { point.Alpha = 0; x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Translate(x, y); point.Scale(1, 1); point.Rotate(0, 0, 0); letter->Path.Add(point); } break; } } } } //new2 void Boomerang( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter* letter; Waypoint point; int length = letters.GetSize(); float x, y, center, step; if(length > 1) step = finish[2] - finish[0]; else step = 10; center = (finish[2*(length-1)] + finish[0])/2; for (int i = 0; i < length; i++) { letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)0; x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Translate(finish[2*(length-1)], 0); point.Rotate(center, 0, -90); point.Scale(0.4, 1); point.Translate(-center + x, 0); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate((center + finish[2*(length-1)])/2,y + step*6); point.Rotate(center, 0, -45); point.Scale(0.5, 1); point.Translate(-center + x, 0); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(center, y); point.Rotate(center, 0, 0); point.Scale(1, 1); point.Translate(-center + x, 0); letter->Path.Add(point); } } void Flash( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); float x, y, center; center = (finish[2*(length-1)] + finish[0])/2; for (int i = 0; i < length; i++) { letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)0; x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Translate(-30, y); point.Scale(1.2, 0.1); point.Translate(-center + x, 0); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(center, y); point.Scale(1.2, 0.1); point.Translate(-center + x, 0); letter->Path.Add(point); point.Clear(); point.Translate(center, y); point.Scale(1, 1); point.Translate(-center + x, 0); letter->Path.Add(point); point.Clear(); point.Translate(center, y); point.Scale(1.3, 1.3); point.Translate(-center + x, 0); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(center, y); point.Scale(1.15, 1.15); point.Translate(-center + x, 0); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(center, y); point.Scale(1, 1); point.Translate(-center + x, 0); letter->Path.Add(point); } } void Flight( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); float x, y, center, step; if(length > 1) step = finish[2] - finish[0]; else step = 10; center = (finish[2*(length-1)] + finish[0])/2; for (int i = 0; i < length; i++) { letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)0; x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Translate(finish[2*(length-1)], 0); point.Rotate(0, 0, -90); point.Translate(x, step*2); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha/2; point.Translate((finish[2*(length-1)] + (center - step))/2, (y + step)/2); point.Rotate(0, 0, -45); point.Translate(-center + x, 0); letter->Path.Add(point); point.Clear(); point.Alpha =(BYTE)Alpha; point.Translate(center - step*4,y + step*4); point.Rotate(0, 0, 0); point.Translate(-center + x, 0); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(center, y); point.Rotate(0, 0, 0); point.Translate(-center + x, 0); letter->Path.Add(point); } } void Jump( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); float x, y, center, step, step2; if(length > 1) step = finish[2] - finish[0]; else step = 10; center = (finish[2*(length-1)] - finish[0])/2; step2 = (center - finish[0])/7; for (int i = 0; i < length; i++) { letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)Alpha; x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Translate(-center + x, -step*2); point.Scale(1, 1); letter->Path.Add(point); point.Clear(); point.Translate(-center + step2 + x, y/1.5); point.Scale(1, 0.5); letter->Path.Add(point); point.Clear(); point.Translate(-center + 2*step2 + x, y/7); point.Scale(1, 1); letter->Path.Add(point); point.Clear(); point.Translate(-center + 3*step2 + x, y/1.5); point.Scale(1, 0.5); letter->Path.Add(point); point.Clear(); point.Translate(-center + 4*step2 + x, y/4); point.Scale(1, 1); letter->Path.Add(point); point.Clear(); point.Translate(-center + 5*step2 + x, y/1.5); point.Scale(1, 0.5); letter->Path.Add(point); point.Clear(); point.Translate(-center + 6*step2 + x, y/2); point.Scale(1, 1); letter->Path.Add(point); point.Clear(); point.Translate(x, y); point.Scale(1, 1); letter->Path.Add(point); } } void Compress( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); float x, y, center; center=(finish[2*(length-1)]+finish[0])/2; for (int i = 0; i < length; i++) { letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha =(BYTE)0; x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Translate(0, y); point.Scale(2, 1); point.Translate(-center + x, 0); letter->Path.Add(point); point.Clear(); point.Alpha =(BYTE)Alpha; point.Translate(0, y); point.Scale(1, 1); point.Translate(x, 0); letter->Path.Add(point); } } void Motion( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); float x, y, step; if(length > 1) step = finish[2] - finish[0]; else step = 10; for (int i = 0; i < length; i++) { letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)0; x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Translate(x/2 - step, y); point.Alpha = (BYTE)0 ; letter->Path.Add(point); for(int j = 0; j < length; j++) { if(j == i) { point.Clear(); point.Translate(x/2 + step*j/2, y); point.Alpha = (BYTE)Alpha; letter->Path.Add(point); } if(j < i) { point.Clear(); point.Translate(x/2 + step*j/2, y); if((i - j) <= 5) point.Alpha = (BYTE)Alpha/2; letter->Path.Add(point); } else { point.Clear(); point.Translate(x, y); point.Alpha = (BYTE)Alpha; letter->Path.Add(point); } } } } void Manifestation( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); float x, y, center, step; if(length > 1) step = finish[2] - finish[0]; else step = 10; center = (finish[2*(length-1)] + finish[0])/2; for (int i = 0; i < length; i++) { letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)0; x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Translate(center,y - step*3); point.Scale(0.1, 0.1); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(x, y); point.Scale(1, 1); letter->Path.Add(point); } } void Shot( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter* letter; Waypoint point; int length = letters.GetSize(); float x, y, step; if(length > 1) step = finish[2] - finish[0]; else step = 10; for (int i = 0; i < length; i++) { letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)0; x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Translate(x + step*6,y - step*3); point.Rotate(0, 0, -90); point.Scale(1, 1); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(x, y + step*2); point.Rotate(0, 0, 0); point.Scale(0.1, 1); letter->Path.Add(point); point.Clear(); point.Translate(x, y); point.Rotate(0, 0, 0); point.Scale(1, 1); letter->Path.Add(point); } } void Reduction( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); float x, y; int sch = 0; for (int i = 0; i < length; i++) { sch = 0; letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)0; x = finish[2*i]; y = finish[2*i+1]; for(int temp = 0; temp < length*4; temp++) { if((i*4) >= temp) { sch++; x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Translate(x, y); point.Scale(1, 30); letter->Path.Add(point); } else { for(float j = 0.; j < 30.; j += 1.) { point.Clear(); point.Translate(x, y); point.Scale(1, 30 - j); point.Alpha = point.Alpha + Alpha/30; letter->Path.Add(point); } for(int j = 0; j < length*4 - sch; j++) { x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Translate(x, y); point.Scale(1, 1); letter->Path.Add(point); } break; } } } } void VHRotation( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); float x, y; for (int i = 0; i < length; i++) { letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)0; x = finish[2*i]; y = finish[2*i+1]; for(int j = 0; j < 2; j++) { if(i%2 == 0) { if(j == 0) point.Alpha = (BYTE)0; else point.Alpha = (BYTE)Alpha/2; point.Clear(); point.Translate(x, y); point.Scale(1, -1); letter->Path.Add(point); if(j == 0) point.Alpha = (BYTE)Alpha/4; else point.Alpha = (BYTE)Alpha; point.Clear(); point.Translate(x, y); point.Scale(1, 1); letter->Path.Add(point); } if(i%2 == 1) { if(j == 0) point.Alpha = (BYTE)0; else point.Alpha = (BYTE)Alpha/2; point.Clear(); point.Translate(x, y); point.Scale(-1, 1); letter->Path.Add(point); if(j == 0) point.Alpha =(BYTE)Alpha/4; else point.Alpha = (BYTE)Alpha; point.Clear(); point.Translate(x, y); point.Scale(1, 1); letter->Path.Add(point); } } } } void Rotate3D( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter* letter; Waypoint point; int length = letters.GetSize(); float x, y, step, center; center = (finish[2*(length-1)] + finish[0])/2; if(length > 1) step = finish[2] - finish[0]; else step = 10; for (int i = 0; i < length; i++) { letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Alpha = (BYTE)0; point.Translate(center, y); point.Scale(0.6, -0.6); point.Translate(-center + x, 0); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha/5; point.Translate(center, y + step*4); point.Scale(0.8, 0.01); point.Translate(-center + x, 0); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha/4; point.Translate(center, y); point.Scale(1, 1); point.Translate(-center + x, 0); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha/3; point.Translate(center, y - step*4); point.Scale(0.8, 0.01); point.Translate(-center + x, 0); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha/2; point.Translate(center, y); point.Scale(0.6, -0.6); point.Translate(-center + x, 0); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(center, y + step*4); point.Scale(0.8, 0.01); point.Translate(-center + x, 0); letter->Path.Add(point); point.Clear(); point.Translate(center, y); point.Scale(1, 1); point.Translate(-center + x, 0); letter->Path.Add(point); } } void Spiral( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter* letter; Waypoint point; int length = letters.GetSize(); float x, y, R = 30, centerX, centerY, center, scl = 0.5, stepScl; int sch = 0; center = (finish[2*(length-1)] + finish[0])/2; if(length > 1) R = (finish[2] - finish[0])*3; else R = 30; stepScl = (1 - scl)/max(0.01, R*4); for (int i = 0; i < length; i++) { sch = 0; scl = 0.5; letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)Alpha; x = finish[2*i]; y = finish[2*i+1]; centerX = x; centerY = y; for(int j = 0; j < R; j++) { y = centerY - sqrt(R*R - (x - centerX)*(x - centerX)); y -= finish[2*i+1]; y *= 2; y += finish[2*i+1]; point.Clear(); point.Translate(center, y); point.Scale(scl, scl); point.Translate(-center + x, 0); letter->Path.Add(point); scl += stepScl; x++; } centerY = finish[2*i+1] + R; for(int j = 0; j < R*2; j++) { y = centerY + sqrt(R*R - (x - centerX)*(x - centerX)); y -= finish[2*i+1]; y /= 1; y += finish[2*i+1]; point.Clear(); point.Translate(center, y); point.Scale(scl, scl); point.Translate(-center + x, 0); letter->Path.Add(point); scl += stepScl; x--; } for(int j = 0; j < R + 1; j++) { y = centerY - sqrt(R*R - (x - centerX)*(x - centerX)); y -= finish[2*i+1]; y /= 2; y += finish[2*i+1]; point.Clear(); point.Translate(center, y); point.Scale(scl, scl); point.Translate(-center + x, 0); letter->Path.Add(point); scl += stepScl; x++; } } } void Flag( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter* letter; Waypoint point; int length = letters.GetSize(); float x, y; int sch = 0; for(int i = 0; i < length; i++) { sch = 0; letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)0; x = finish[2*i]; y = finish[2*i+1]; for(int temp = 0; temp < length*2; temp++) { if((i*2) >= temp) { sch++; x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Translate(x, y); point.Scale(1, 1); letter->Path.Add(point); } else { x = finish[2*i]; y = finish[2*i+1]; float temp = 1.; float temp2 = 3.; for(int z = 0; z < 8; z++ ) { point.Alpha += Alpha/8; if(point.Alpha > 255) point.Alpha = 255; for(float j = 1.; j >= 0.5; j -= 0.05) { point.Clear(); point.Translate(x, y); if(j > 0.75) { point.Scale(j/temp*temp2, j*temp2); temp += 0.2; } else { point.Scale(j/temp*temp2, j*temp2); temp -= 0.2; } letter->Path.Add(point); } for(float j = 0.5; j <= 1.; j += 0.05) { point.Clear(); point.Translate(x, y); if(j < 0.75) { point.Scale(j/temp*temp2, j*temp2); temp += 0.2; } else { point.Scale(j/temp*temp2, j*temp2); temp -= 0.2; } letter->Path.Add(point); } temp2 -= 0.3; } for(int z = 0; z < 5; z++ ) { for(float j = 1.; j >= 0.5; j -= 0.05) { point.Clear(); point.Translate(x, y); if(j > 0.75) { point.Scale(j/temp, j); temp += 0.2; } else { point.Scale(j/temp, j); temp -= 0.2; } letter->Path.Add(point); } for(float j = 0.5; j <= 1.; j += 0.05) { point.Clear(); point.Translate(x, y); if(j < 0.75) { point.Scale(j/temp, j); temp += 0.2; } else { point.Scale(j/temp, j); temp -= 0.2; } letter->Path.Add(point); } } for(int j = 0; j < length*2 - sch; j++) { point.Alpha = Alpha; x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Translate(x, y); point.Scale(1, 1); letter->Path.Add(point); } break; } } } } void Perpendicular( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter* letter; Waypoint point; int length = letters.GetSize(); float x, y, step; if(length > 1) step = finish[2] - finish[0]; else step = 10; int flag = 0; int stop = 0; for (int i = 0; i < length; i++) { flag = 0; stop = 0; letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)0; x = finish[0]; y = finish[2*i+1] + (length - i)*step; point.Clear(); point.Alpha = (BYTE)0; point.Translate(x, y); point.Rotate(0, 0, -90); letter->Path.Add(point); for (int j = 0; j < length; j++) { if(flag == 0) { x = finish[0]; y -= step; point.Clear(); point.Translate(x, y); point.Rotate(0, 0, -90); if((point.Alpha > Alpha) || ((point.Alpha + Alpha/length) > Alpha)) point.Alpha = Alpha; else point.Alpha += Alpha/length; letter->Path.Add(point); } if ((y == finish[2*i+1]) && (flag == 0)) { x = finish[0]; y = finish[2*i+1]; point.Clear(); point.Translate(x, y); point.Rotate(0, 0, 0); if((point.Alpha > Alpha) || ((point.Alpha + Alpha/length) > Alpha)) point.Alpha = Alpha; else point.Alpha += Alpha/length; letter->Path.Add(point); flag = 1; if(i == 0) { x = finish[0]; y = finish[2*i+1]; point.Clear(); point.Translate(x, y); point.Rotate(0, 0, 0); if((point.Alpha > Alpha) || ((point.Alpha + Alpha/length) > Alpha)) point.Alpha = Alpha; else point.Alpha += Alpha/length; letter->Path.Add(point); break; } } if (flag == 1) { for (int j = 0; j < length; j++) { if(stop == 0) { x += step; y = finish[2*i+1]; point.Clear(); point.Translate(x, y); point.Rotate(0, 0, 0); if((point.Alpha > Alpha) || ((point.Alpha + Alpha/length) > Alpha)) point.Alpha = Alpha; else point.Alpha += Alpha/length; letter->Path.Add(point); } if((x == finish[2*i]) && (stop == 0)) { x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Translate(x, y); point.Rotate(0, 0, 0); if((point.Alpha > Alpha) || ((point.Alpha + Alpha/length) > Alpha)) point.Alpha = Alpha; else point.Alpha += Alpha/length; letter->Path.Add(point); stop = 1; } } } } } } void Clock( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); float x, y, center; int sch = 0; if(length == 1) center = 0; if((length == 2) || (length == 3)) center = 1; if(length == 4) center = 2; if(length > 4) center =(int)( 0.6*(float)length); for (int i = 0; i < length; i++) { letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)0; x = finish[2*i]; y = finish[2*i+1]; if(i < center) { point.Clear(); point.Translate(finish[center*2], y); point.Scale(1, 1); point.Rotate(finish[center*2], 0, -900); point.Translate(-finish[center*2] + x, 0); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(finish[center*2], y); point.Scale(1, 1); point.Rotate(finish[center*2], 0, 0); point.Translate(-finish[center*2] + x, 0); letter->Path.Add(point); } if(i > center) { point.Clear(); point.Translate(finish[center*2], y); point.Scale(1, 1); point.Rotate(finish[center*2], 0, -225); point.Translate(-finish[center*2] + x, 0); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(finish[center*2], y); point.Scale(1, 1); point.Rotate(finish[center*2], 0, 0); point.Translate(-finish[center*2] + x, 0); letter->Path.Add(point); } if(i == center) { for(int j = 0; j<5; j++) { point.Clear(); point.Translate(x, y); point.Scale(1.5, 1.5); point.Rotate(0, 0, 0); point.Translate(0, 0); letter->Path.Add(point); point.Alpha += Alpha/5; } point.Alpha = Alpha; point.Clear(); point.Translate(x, y); point.Scale(1, 1); point.Rotate(0, 0, 0); point.Translate(0, 0); letter->Path.Add(point); } } } //Erase new2 void BoomerangBack( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter* letter; Waypoint point; int length = letters.GetSize(); float x, y, center, step; if(length > 1) step = finish[2] - finish[0]; else step = 10; center = (finish[2*(length-1)] + finish[0])/2; for (int i = 0; i < length; i++) { letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)Alpha; x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(center, y); point.Rotate(center, 0, 0); point.Scale(1, 1); point.Translate(-center + x, 0); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate((center + finish[2*(length-1)])/2,y + step*7); point.Rotate(center, 0, -45); point.Scale(0.5, 1); point.Translate(-center + x, 0); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)0; point.Translate(finish[2*(length-1)], 0); point.Rotate(center, 0, -90); point.Scale(0.4, 1); point.Translate(-center + x, 0); letter->Path.Add(point); } } void FlashBack( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter* letter; Waypoint point; int length = letters.GetSize(); float x, y, center; center = (finish[2*(length-1)] + finish[0])/2; for (int i = 0; i < length; i++) { letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)Alpha; x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Translate(center, y); point.Scale(1, 1); point.Translate(-center + x, 0); letter->Path.Add(point); point.Clear(); point.Translate(center, y); point.Scale(1.15, 1.15); point.Translate(-center + x, 0); letter->Path.Add(point); point.Clear(); point.Translate(center, y); point.Scale(1.3, 1.3); point.Translate(-center + x, 0); letter->Path.Add(point); point.Clear(); point.Translate(center, y); point.Scale(1, 1); point.Translate(-center + x, 0); letter->Path.Add(point); point.Clear(); point.Translate(center, y); point.Scale(1.2, 0.1); point.Translate(-center + x, 0); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)0; point.Translate(-30, y); point.Scale(1.2, 0.1); point.Translate(-center + x, 0); letter->Path.Add(point); } } void FlightBack( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter* letter; Waypoint point; int length = letters.GetSize(); float x, y, center, step; if(length > 1) step = finish[2] - finish[0]; else step = 10; center = (finish[2*(length-1)] + finish[0])/2; for (int i = 0; i < length; i++) { letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)Alpha; x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Translate(center, y); point.Rotate(center, 0, 0); point.Translate(-center + x, 0); letter->Path.Add(point); point.Clear(); point.Translate(center - step*4, y + step*4); point.Rotate(center, 0, 0); point.Translate(-center + x, 0); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha/2; point.Translate((finish[2*(length-1)] + (center - step))/2, (y + step)/2); point.Rotate(center, 0, -45); point.Translate(-center + x, 0); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)0; point.Translate(finish[2*(length-1)], 0); point.Rotate(center, 0, -90); point.Translate(x, 0); letter->Path.Add(point); } } void JumpBack( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter* letter; Waypoint point; int length = letters.GetSize(); float x, y, center, step, step2; if(length > 1) step = finish[2] - finish[0]; else step = 10; center = (finish[2*(length-1)] - finish[0])/2; step2 = (center - finish[0])/7; for (int i = 0; i < length; i++) { letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)Alpha; x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Translate(x, y); point.Scale(1, 1); letter->Path.Add(point); point.Clear(); point.Translate(-center + 6*step2 + x, y/2); point.Scale(1, 1); letter->Path.Add(point); point.Clear(); point.Translate(-center + 5*step2 + x, y/1.5); point.Scale(1, 0.5); letter->Path.Add(point); point.Clear(); point.Translate(-center + 4*step2 + x, y/4); point.Scale(1, 1); letter->Path.Add(point); point.Clear(); point.Translate(-center + 3*step2 + x, y/1.5); point.Scale(1, 0.5); letter->Path.Add(point); point.Clear(); point.Translate(-center+ 2*step2 + x, y/7); point.Scale(1, 1); letter->Path.Add(point); point.Clear(); point.Translate(-center + step2 + x, y/1.5); point.Scale(1, 0.5); letter->Path.Add(point); point.Clear(); point.Translate(-center + x, -step*2); point.Scale(1, 1); letter->Path.Add(point); } } void CompressBack( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); float x, y, center; center = (finish[2*(length - 1)] + finish[0])/2; for (int i = 0; i < length; i++) { letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Alpha =(BYTE)Alpha; point.Translate(0, y); point.Scale(1, 1); point.Translate(x, 0); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)0; point.Translate(0, y); point.Scale(2, 1); point.Translate(-center + x, 0); letter->Path.Add(point); } } void MotionBack( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); float x, y, step; if(length > 1) step = finish[2] - finish[0]; else step = 10; for (int i = 0; i < length; i++) { letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Translate(x, y); point.Alpha = (BYTE)Alpha ; letter->Path.Add(point); for(int j = 0; j < (length + 10); j++) { if(j > i) { point.Clear(); point.Translate(x/2 + step*j/2, y); if((j-i) > 5) if(point.Alpha != 0) point.Alpha -= Alpha/3; letter->Path.Add(point); } else { point.Clear(); point.Translate(x, y); point.Alpha = (BYTE)Alpha; letter->Path.Add(point); } } } } void ManifestationBack( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter* letter; Waypoint point; int length = letters.GetSize(); float x, y, center, step; if(length > 1) step = finish[2] - finish[0]; else step = 10; center = (finish[2*(length-1)] + finish[0])/2; for (int i = 0; i < length; i++) { letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(x, y); point.Scale(1, 1); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)0; point.Translate(center, y - step*3); point.Scale(0.1, 0.1); letter->Path.Add(point); } } void ShotBack( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter* letter; Waypoint point; int length = letters.GetSize(); float x, y, step; if(length > 1) step = finish[2] - finish[0]; else step = 10; for (int i = 0; i < length; i++) { letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)Alpha;; x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Translate(x, y); point.Rotate(0, 0, 0); point.Scale(1, 1); letter->Path.Add(point); point.Clear(); point.Translate(x, y + step*2); point.Rotate(0, 0, 0); point.Scale(0.1, 1); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)0; point.Translate(x + step*6, y - step*3); point.Rotate(0, 0, -90); point.Scale(1, 1); letter->Path.Add(point); } } void ReductionBack( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); float x, y; int sch = 0; for(int i = 0; i < length; i++) { sch = 0; letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)Alpha; x = finish[2*i]; y = finish[2*i+1]; for(int temp = 0; temp < length*4; temp++) { if((i*4) >= temp) { sch++; x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Translate(x, y); point.Scale(1, 1); letter->Path.Add(point); } else { for(float j = 0.; j < 30.; j += 1.) { point.Clear(); point.Translate(x, y); point.Scale(1, j + 1); point.Alpha = point.Alpha - Alpha/30; letter->Path.Add(point); } for(int j = 0; j < length*4 - sch; j++) { x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Translate(x, y); point.Scale(1, 30); point.Alpha = (BYTE)0; letter->Path.Add(point); } break; } } } } void VHRotationBack( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter* letter; Waypoint point; int length = letters.GetSize(); float x, y; for (int i = 0; i < length; i++) { letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)0; x = finish[2*i]; y = finish[2*i+1]; for(int j = 0; j < 2; j++) { if(i%2 == 0) { if(j == 0) point.Alpha = (BYTE)Alpha; else point.Alpha = (BYTE)Alpha/4; point.Clear(); point.Translate(x, y); point.Scale(1, 1); letter->Path.Add(point); if(j == 0) point.Alpha = (BYTE)Alpha/2; else point.Alpha = (BYTE)0; point.Clear(); point.Translate(x, y); point.Scale(1, -1); letter->Path.Add(point); } if(i%2 == 1) { if(j == 0) point.Alpha = (BYTE)Alpha; else point.Alpha = (BYTE)Alpha/4; point.Clear(); point.Translate(x, y); point.Scale(1, 1); letter->Path.Add(point); if(j == 0) point.Alpha = (BYTE)Alpha/2; else point.Alpha = (BYTE)0; point.Clear(); point.Translate(x, y); point.Scale(-1, 1); letter->Path.Add(point); } } } } void Rotate3DBack( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter* letter; Waypoint point; int length = letters.GetSize(); float x, y, step, center; center = (finish[2*(length - 1)] + finish[0])/2; if(length > 1) step = finish[2] - finish[0]; else step = 10; for (int i = 0; i < length; i++) { letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(center, y); point.Scale(1, 1); point.Translate(-center + x, 0); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha/2; point.Translate(center, y - step*4); point.Scale(0.8, 0.01); point.Translate(-center + x, 0); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha/3; point.Translate(center, y); point.Scale(0.6, -0.6); point.Translate(-center + x, 0); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha/4; point.Translate(center, y + step*4); point.Scale(0.8, 0.01); point.Translate(-center + x, 0); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha/5; point.Translate(center, y); point.Scale(1, 1); point.Translate(-center + x, 0); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha/6; point.Translate(center, y - step*4); point.Scale(0.8, 0.01); point.Translate(-center + x, 0); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)0; point.Translate(center, y); point.Scale(0.6, -0.6); point.Translate(-center + x, 0); letter->Path.Add(point); } } void SpiralBack( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter* letter; Waypoint point; int length = letters.GetSize(); float x, y, R = 30, centerX, centerY, center, scl = 1, stepScl; int sch = 0; center = (finish[2*(length-1)] + finish[0])/2; if(length > 1) R = (finish[2] - finish[0])*3; else R = 30; if (R < 2) R = 2; stepScl = 0.5 / (R*4); for (int i = 0; i < length; i++) { sch = 0; scl = 1; letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)Alpha; x = finish[2*i]; y = finish[2*i+1]; centerX = x; centerY = y; x++; centerY = finish[2*i+1] + R; for(int j = R; j >= 0; j--) { y = centerY - sqrt(max(0, R*R - (x - centerX)*(x - centerX))); y -= finish[2*i+1]; y /= 2; y += finish[2*i+1]; point.Clear(); point.Translate(center, y); point.Scale(scl, scl); point.Translate(-center + x, 0); letter->Path.Add(point); scl -= stepScl; x--; } for(int j=R*2-1;j>=0;j--) { y = centerY + sqrt(R*R - (x - centerX)*(x - centerX)); y -= finish[2*i+1]; y /= 1; y += finish[2*i+1]; point.Clear(); point.Translate(center, y); point.Scale(scl, scl); point.Translate(-center + x, 0); letter->Path.Add(point); scl -= stepScl; x++; } centerX = finish[2*i]; centerY = finish[2*i+1]; for(int j = R - 1; j >= 0; j--) { y = centerY - sqrt(R*R - (x - centerX)*(x - centerX)); y -= finish[2*i+1]; y *= 2; y += finish[2*i+1]; point.Clear(); point.Translate(center, y); point.Scale(scl, scl); point.Translate(-center + x, 0); letter->Path.Add(point); scl -= stepScl; x--; } } } void FlagBack( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter* letter; Waypoint point; int length = letters.GetSize(); float x, y; int sch = 0; for(int i = 0; i < length; i++) { sch = 0; letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)Alpha; x = finish[2*i]; y = finish[2*i+1]; for(int temp = 0; temp < length*2; temp++) { if((i*2) >= temp) { sch++; x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Translate(x, y); point.Scale(1, 1); letter->Path.Add(point); } else { x = finish[2*i]; y = finish[2*i+1]; float temp = 1.; float temp2 = 1.; for(int z = 0; z < 5; z++ ) { for(float j = 1.; j >= 0.5; j -= 0.05) { point.Clear(); point.Translate(x, y); if(j > 0.75) { point.Scale(j/temp, j); temp += 0.2; } else { point.Scale(j/temp, j); temp -= 0.2; } letter->Path.Add(point); } for(float j = 0.5; j <= 1.; j += 0.05) { point.Clear(); point.Translate(x, y); if(j < 0.75) { point.Scale(j/temp, j); temp += 0.2; } else { point.Scale(j/temp, j); temp -= 0.2; } letter->Path.Add(point); } } for(int z = 0; z < 8; z++ ) { point.Alpha -= Alpha/8; if(point.Alpha < 0) point.Alpha = 0; for(float j = 1.; j >= 0.5; j -= 0.05) { point.Clear(); point.Translate(x, y); if(j > 0.75) { point.Scale(j/temp*temp2, j*temp2); temp += 0.2; } else { point.Scale(j/temp*temp2, j*temp2); temp -= 0.2; } letter->Path.Add(point); } for(float j = 0.5; j <= 1.; j += 0.05) { point.Clear(); point.Translate(x, y); if(j < 0.75) { point.Scale(j/temp*temp2, j*temp2); temp += 0.2; } else { point.Scale(j/temp*temp2, j*temp2); temp -= 0.2; } letter->Path.Add(point); } temp2 += 0.3; } for(int j = 0; j < length*2 - sch; j++) { point.Alpha = 0; x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Translate(x, y); point.Scale(1, 1); letter->Path.Add(point); } break; } } } } void PerpendicularBack( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter* letter; Waypoint point; int length = letters.GetSize(); float x, y, step; int flag = 0; int stop = 0; if(length > 1) step = finish[2] - finish[0]; else step = 10; for (int i = 0; i < length; i++) { flag = 0; stop = 0; letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)Alpha; x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(x, y); point.Rotate(0, 0, 0); letter->Path.Add(point); for (int j = 0; j < length; j++) { if (flag == 0) { x += step; y = finish[2*i+1]; point.Clear(); point.Translate(x, y); point.Rotate(0, 0, 0); if((point.Alpha < 0) || (point.Alpha < Alpha/length)) point.Alpha = 0; else point.Alpha -= Alpha/length; letter->Path.Add(point); } if ((x == finish[2*(length - 1)] + step) && (flag == 0)) { point.Clear(); point.Translate(x, y); point.Rotate(0, 0, 90); if((point.Alpha < 0) || (point.Alpha < Alpha/length)) point.Alpha = 0; else point.Alpha -= Alpha/length; letter->Path.Add(point); flag = 1; if(i == 0) { y+=step; point.Clear(); point.Translate(x, y); point.Rotate(0, 0, 90); if((point.Alpha < 0) || (point.Alpha < Alpha/length)) point.Alpha = 0; else point.Alpha -= Alpha/length; letter->Path.Add(point); break; } } if (flag == 1) { for (int j = 0; j < length; j++) { if(stop == 0) { y += step; point.Clear(); point.Translate(x, y); point.Rotate(0, 0, 90); if((point.Alpha < 0) || (point.Alpha < Alpha/length)) point.Alpha = 0; else point.Alpha -= Alpha/length; letter->Path.Add(point); } if((y == (i*step + finish[2*i+1])) && (stop == 0)) { y += step; point.Clear(); point.Translate(x, y); point.Rotate(0, 0, 90); if((point.Alpha < 0) || (point.Alpha < Alpha/length)) point.Alpha = 0; else point.Alpha -= Alpha/length; letter->Path.Add(point); stop = 1; } } } } y += step; point.Clear(); point.Alpha = 0; point.Translate(x, y); point.Rotate(0, 0, 90); letter->Path.Add(point); } } void ClockBack( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); float x, y, center; int sch = 0; if(length == 1) center = 0; if((length == 2) || (length == 3)) center = 1; if(length == 4) center = 2; if(length > 4) center =(int)( 0.6*(float)length); for (int i = 0; i < length; i++) { letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)Alpha; x = finish[2*i]; y = finish[2*i+1]; if(i < center) { point.Clear(); point.Translate(finish[center*2], y); point.Scale(1, 1); point.Rotate(finish[center*2], 0, 0); point.Translate(-finish[center*2] + x, 0); letter->Path.Add(point); point.Clear(); point.Alpha = 0; point.Translate(finish[center*2], y); point.Scale(1, 1); point.Rotate(finish[center*2], 0, 900); point.Translate(-finish[center*2] + x, 0); letter->Path.Add(point); } if(i > center) { point.Clear(); point.Translate(finish[center*2], y); point.Scale(1, 1); point.Rotate(finish[center*2], 0, 0); point.Translate(-finish[center*2] + x, 0); letter->Path.Add(point); point.Clear(); point.Alpha = 0; point.Translate(finish[center*2], y); point.Scale(1, 1); point.Rotate(finish[center*2], 0, 225); point.Translate(-finish[center*2] + x, 0); letter->Path.Add(point); } if(i == center) { point.Alpha = Alpha; point.Clear(); point.Translate(x, y); point.Scale(1, 1); point.Rotate(0, 0, 0); point.Translate(0, 0); letter->Path.Add(point); for(int j = 0; j<5; j++) { if(j == 4) point.Alpha = 0; point.Clear(); point.Translate(x, y); point.Scale(1.5, 1.5); point.Rotate(0, 0, 0); point.Translate(0, 0); letter->Path.Add(point); point.Alpha -= Alpha/5; } } } } //new3 void Galaxy( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); float x, y, center, multip = 0.1; int koef; int sch = 0; if(length == 1) center = 0; if((length == 2) || (length == 3)) center = 1; if(length == 4) center = 2; if(length > 4) center =(int)( 0.5*(float)length); for (int i = 0; i < length; i++) { letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)Alpha; x = finish[2*i]; y = finish[2*i+1]; if(i <= center) { koef = (int)(0.7 * center); if(i < koef) multip += ((float)length)/1000.; else multip -= ((float)length)/1000.; point.Clear(); point.Alpha = 0; point.Translate(finish[center*2], y); point.Scale(0.1, 0.01); point.Rotate(finish[center*2], 0, multip * 1000.); point.Translate(-finish[center*2] + x, 0); letter->Path.Add(point); point.Clear(); point.Alpha = Alpha; point.Translate(finish[center*2], y); point.Scale(1, 1); point.Rotate(finish[center*2], 0, 0); point.Translate(-finish[center*2] + x, 0); letter->Path.Add(point); } if(i > center) { koef = (int)(1.4*center); if(i < koef) multip += ((float)length)/1000.; else multip -= ((float)length)/1000.; point.Clear(); point.Alpha = 0; point.Translate(finish[center*2], y); point.Scale(0.1, 0.1); point.Rotate(finish[center*2], 0, multip * 1000.); point.Translate(-finish[center*2] + x, 0); letter->Path.Add(point); point.Clear(); point.Alpha = Alpha; point.Translate(finish[center*2], y); point.Scale(1, 1); point.Rotate(finish[center*2], 0, 0); point.Translate(-finish[center*2] + x, 0); letter->Path.Add(point); } } } void WaveRotate3D( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter* letter; Waypoint point; int length = letters.GetSize(); int sch; float x, y, step, center; center = (finish[2*(length-1)] - finish[0])/2; if(length > 1) step = finish[2] - finish[0]; else step = 10; for (int i = 0; i < length; i++) { sch = 0; letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; for(int temp = 0; temp <= length; temp++) { if((i) >= temp) { sch++; x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Alpha = (BYTE)0; point.Translate(center, y + step); point.Scale(0.6, -0.6); point.Translate(-center + x, 0); letter->Path.Add(point); } else { x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Alpha = (BYTE)Alpha/4; point.Translate(center, y); point.Scale(0.6, -0.6); point.Translate(-center + x, 0); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha/3; point.Translate(center, y - step*2); point.Scale(0.65, -0.3); point.Translate(-center + x, 0); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha/2; point.Translate(center, y - step*4); point.Scale(0.8, 0.01); point.Translate(-center + x, 0); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha/1.5; point.Translate(center, y - step*2); point.Scale(0.95, 0.6); point.Translate(-center + x, 0); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(center, y); point.Scale(1, 1); point.Translate(-center + x, 0); letter->Path.Add(point); for(int j = 0; j < length - sch; j++) { point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(center, y); point.Scale(1, 1); point.Translate(-center + x, 0); letter->Path.Add(point); } break; } } } } void RandomJump( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter* letter; Waypoint point; int length = letters.GetSize(); float x, y, jumpY, sclX, sclY; int flag = 1; int sch = 0; int stop = 1; int step; if(length > 1) step = finish[2] - finish[0]; else step = 10; if (step < 1) step = 1; for (int i = 0; i < length; i++) { sch = 0; stop = 1; letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)0; x = finish[2*i]; y = finish[2*i+1]; for(int j = 0; j < 7; j++) { flag = rand() % 2; if(flag == 0) flag = -1; else flag = 1; if(stop) { stop = rand() % 3; jumpY = rand() % (step * 4); sclX = rand() % 3; if(sclX == 0) sclX = 0.1; sclY = rand() % 3; if(sclY == 0) sclY = 0.1; point.Clear(); point.Translate(x, jumpY); point.Scale(sclX, sclY); point.Rotate(0, 0, flag * (rand() % 30)); letter->Path.Add(point); point.Clear(); point.Alpha = Alpha; point.Translate(x, y); point.Scale(1, 1); point.Rotate(0, 0, 0); letter->Path.Add(point); } } } } void Galaxy2( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); float x, y, center, multip = 0.1; int koef; int sch = 0; if(length == 1) center = 0; if((length == 2) || (length == 3)) center = 1; if(length == 4) center = 2; if(length > 4) center =(int)( 0.5*(float)length); for (int i = 0; i < length; i++) { letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)Alpha; x = finish[2*i]; y = finish[2*i+1]; if(i <= center) { koef = (int)(0.7 * center); if(i < koef) multip += ((float)length)/100.; else multip -= ((float)length)/100.; point.Clear(); point.Alpha = 0; point.Translate(finish[center*2], y); point.Scale(0.01, 0.01); point.Rotate(finish[center*2], 0, multip * 500.); point.Translate(-finish[center*2] + x, 0); letter->Path.Add(point); point.Clear(); point.Alpha = Alpha; point.Translate(finish[center*2], y); point.Scale(1, 1); point.Rotate(finish[center*2], 0, 0); point.Translate(-finish[center*2] + x, 0); letter->Path.Add(point); } if(i > center) { if(length < 18) koef = (int)(1.6*center); else koef = (int)(1.4*center); if(i < koef) multip += ((float)length)/100.; else multip -= ((float)length)/100.; point.Clear(); point.Alpha = 0; point.Translate(finish[center*2], y); point.Scale(0.01, 0.01); point.Rotate(finish[center*2], 0, multip * 500.); point.Translate(-finish[center*2] + x, 0); letter->Path.Add(point); point.Clear(); point.Alpha = Alpha; point.Translate(finish[center*2], y); point.Scale(1, 1); point.Rotate(finish[center*2], 0, 0); point.Translate(-finish[center*2] + x, 0); letter->Path.Add(point); } } } void Roll( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter* letter; Waypoint point; int length = letters.GetSize(); float x, y, start; start = finish[2*(length - 1)]; for (int i = 0; i < length; i++) { letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)0; x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Translate(x - start - 20, y); point.Rotate(0, 0, -50 * length); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(x, y); point.Rotate(0, 0, 0); letter->Path.Add(point); } } void Conga( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter* letter; Waypoint point; int length = letters.GetSize(); int sch; float x, y, step, center; center = (finish[2*(length-1)] - finish[0])/2; if(length > 1) step = finish[2] - finish[0]; else step = 10; for (int i = 0; i < length; i++) { sch = 0; letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; for(int temp = 0; temp <= length; temp++) { if((i) >= temp) { sch++; x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Alpha = (BYTE)0; point.Translate(x, y - step*6); point.Scale(1.2, 1.2); letter->Path.Add(point); } else { x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(x, y); point.Scale(1.2, 1.2); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(x + step, y + step); point.Scale(0.8, 0.8); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(x + step*1.5, y + step/2); point.Scale(0.6, 0.6); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(x + step*1.5, y - step/2); point.Scale(0.6, 0.6); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(x - step, y); point.Scale(0.4, 0.4); letter->Path.Add(point); for(int j = 0; j <= (length - sch); j++) { point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(x, y); point.Scale(1, 1); letter->Path.Add(point); } break; } } } } void _Matrix( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter* letter; Waypoint point; int length = letters.GetSize(); float x, y, sclX, sclY; int flag = 1; int sch = 0; int stop = 1; int step; if(length > 1) step = finish[2] - finish[0]; else step = 10; for (int i = 0; i < length; i++) { sch = 0; stop = 1; letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)0; x = finish[2*i]; y = finish[2*i+1]; for(int j = 0; j < 7; j++) { flag = rand() % 2; if(flag == 0) flag = -1; else flag = 1; if(stop) { stop = rand() % 3; sclX = rand() % 3; if(sclX == 0) sclX = 0.1; sclY = rand() % 3; if(sclY == 0) sclY = 0.1; point.Clear(); point.Alpha = 0; point.Translate(x, y - step*12); point.Scale(sclX, sclY); letter->Path.Add(point); point.Clear(); point.Alpha = Alpha; point.Translate(x, y); point.Scale(sclX, sclY); letter->Path.Add(point); point.Clear(); point.Alpha = 0; point.Translate(x, y + step*12); point.Scale(sclX, sclY); letter->Path.Add(point); } } point.Clear(); point.Alpha = 0; point.Translate(x, y - step*12); point.Scale(sclX, sclY); letter->Path.Add(point); point.Clear(); point.Alpha = Alpha; point.Translate(x, y); point.Scale(1, 1); letter->Path.Add(point); } } void HotPinkSpin( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter* letter; Waypoint point; int length = letters.GetSize(); int sch; float x, y, step; if(length > 1) step = finish[2] - finish[0]; else step = 10; for (int i = 0; i < length; i++) { sch = 0; letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; for(int temp = 0; temp <= length; temp++) { if((i) >= temp) { sch++; x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Alpha = (BYTE)0; point.Translate(x, y); point.Rotate(0, 0, 90); point.Shear(-2, 0); point.Scale(-3, 5); letter->Path.Add(point); } else { x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Alpha = (BYTE)0; point.Translate(x, y); point.Rotate(0, 0, 90); point.Shear(-2, 0); point.Scale(-3, 5); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(x, y); point.Rotate(0, 0, 45); point.Shear(-3, 0); point.Scale(-1, 5); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(x, y); point.Rotate(0, 0, 0); point.Shear(-4, 0); point.Scale(1, 5); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(x, y); point.Rotate(0, 0, 0); point.Shear(-2.25, 0); point.Scale(1, 4); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(x, y); point.Rotate(0, 0, 0); point.Shear(-0.5, 0); point.Scale(1, 3); letter->Path.Add(point); for(int j = 0; j <= length - sch; j++) { point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(x, y); point.Rotate(0, 0, 0); point.Shear(0, 0); point.Scale(1, 1); letter->Path.Add(point); } break; } } } } void HopInJumpOut( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter* letter; Waypoint point; int length = letters.GetSize(); int sch; float x, y, step, scl = 3., transX, transY, rot; if(length > 1) step = finish[2] - finish[0]; else step = 10; if (step < 0.01) step = 0.01; for (int i = 0; i < length; i++) { sch = 0; scl = 3.; rot = 0; transY = 12.; transX = 3.; letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; for(int temp = 0; temp <= length*4; temp++) { if((i*4) >= temp) { sch++; x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Alpha = (BYTE)0; point.Translate(x - step*transX, y - step*transY); point.Rotate(0, 0, 0); point.Scale(scl +1, scl); letter->Path.Add(point); } else { x = finish[2*i]; y = finish[2*i+1]; for(int z = 0; z < 100; z++) { point.Clear(); if(point.Alpha < Alpha/2) point.Alpha += Alpha/200; point.Translate(x - step*transX, y - step*transY); point.Rotate(0, 0, 0); point.Scale(scl + 1, scl); letter->Path.Add(point); scl += 0.01; transX += 0.04; transY -= 0.09; } for(int z = 0; z < 50; z++) { point.Clear(); if(point.Alpha < (point.Alpha + Alpha/100)) point.Alpha += Alpha/100; else point.Alpha = Alpha; point.Translate(x - step*transX, y - step*transY); point.Rotate(0, 0, rot); point.Scale(scl + 1, scl); letter->Path.Add(point); scl -= 0.04; rot += 2; transX -= 0.1; transY -= 0.6/step; } point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(x - step*2, y); point.Rotate(0, 0, 0); point.Scale(1, 1); letter->Path.Add(point); transX = 2; for(int z = 0; z < 50; z++) { point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(x - step*transX, y - step * z * 0.02); if(z < 25) point.Rotate(0, 0, -z*0.25); else point.Rotate(0, 0, z*0.25); point.Scale(1, 1); letter->Path.Add(point); scl += 0.02; transX -= 0.02; } for(int z = 0; z < 50; z++) { point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(x - step*transX, y - step * (50-z) * 0.02); if(z < 25) point.Rotate(0, 0, z*0.25); else point.Rotate(0, 0, -z*0.25); point.Scale(1, 1); letter->Path.Add(point); scl += 0.02; transX -= 0.02; } for(int j = 0; j <= length*4 - sch; j++) { point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(x, y); point.Rotate(0, 0, 0); point.Scale(1, 1); letter->Path.Add(point); } break; } } } } void ConJoin( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter* letter; Waypoint point; int length = letters.GetSize(); int sch; float x, y, step; if(length > 1) step = finish[2] - finish[0]; else step = 10; for (int i = 0; i < length; i++) { sch = 0; letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; for(int temp = 0; temp <= length; temp++) { if((i) >= temp) { sch++; x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Alpha = (BYTE)0; point.Translate(x, y); point.Scale(3, 3); letter->Path.Add(point); } else { x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Alpha = (BYTE)Alpha/4; point.Translate(x, y + step*4); point.Scale(3, 3); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha/3; point.Translate(x, y); point.Scale(0.65, -0.3); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha/2; point.Translate(x, y); point.Scale(0.8, 0.01); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha/1.5; point.Translate(x, y); point.Scale(0.95, 0.6); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(x, y); point.Scale(1, 1); letter->Path.Add(point); for(int j = 0; j < length - sch; j++) { point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(x, y); point.Scale(1, 1); letter->Path.Add(point); } break; } } } } void HopsCotch( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter* letter; Waypoint point; int length = letters.GetSize(); int sch; float x, y, step; if(length > 1) step = finish[2] - finish[0]; else step = 10; for (int i = 0; i < length; i++) { sch = 0; letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; for(int temp = 0; temp <= length; temp++) { if((i) >= temp) { sch++; x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Alpha = (BYTE)0; point.Translate(x - step*3, y); point.Scale(3, 3); point.Rotate(0, 0, 0); letter->Path.Add(point); } else { x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Alpha = (BYTE)Alpha/4; point.Translate(x + step*10, y); point.Scale(3, 3); point.Rotate(0, 0, 0); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha/3; point.Translate(x, y); point.Scale(1, 1); point.Rotate(0, 0, 0); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha/3; point.Translate(x - step, y); point.Scale(1, 1); point.Rotate(0, 0, -50); letter->Path.Add(point); for(int j = 0; j <= length - sch; j++) { point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(x, y); point.Scale(1, 1); point.Rotate(0, 0, 0); letter->Path.Add(point); } break; } } } } void Twist( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); float x, y, step, center, multip = 0; int koef, centr_ind; int sch = 0; if(length == 1) center = 0; if((length == 2) || (length == 3)) center = 1; if(length == 4) center = 2; if(length > 4) center = (finish[2*(length - 1)] + finish[0])/2; centr_ind = (int)( 0.7*(float)length); if(length > 1) step = finish[2] - finish[0]; else step = 10; for (int i = 0; i < length; i++) { letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)0; x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Alpha = (BYTE)0; point.Translate(center, y); point.Scale(0.6, -0.6); point.Translate(-center + x, 0); letter->Path.Add(point); if(i <= centr_ind) { multip++; x = finish[2*i]; y = finish[2*i+1]; for(int j = 0; j < multip; j++) { if(j%2 == 0) { point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(center, y); point.Scale(0.6, -0.6); point.Translate(-center + x, 0); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(center, y + step*4); point.Scale(0.8, 0.01); point.Translate(-center + x, 0); letter->Path.Add(point); } else { point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(center, y); point.Scale(1, 1); point.Translate(-center + x, 0); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(center, y - step*4); point.Scale(0.8, 0.01); point.Translate(-center + x, 0); letter->Path.Add(point); } } } if(i > centr_ind) { x = finish[2*i]; y = finish[2*i+1]; for(int j = 0; j < multip; j++) { if(j%2 == 0) { point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(center, y); point.Scale(0.6, -0.6); point.Translate(-center + x, 0); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(center, y + step*4); point.Scale(0.8, 0.01); point.Translate(-center + x, 0); letter->Path.Add(point); } else { point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(center, y); point.Scale(1, 1); point.Translate(-center + x, 0); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(center, y - step*4); point.Scale(0.8, 0.01); point.Translate(-center + x, 0); letter->Path.Add(point); } } } point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(center, y); point.Scale(1, 1); point.Translate(-center + x, 0); letter->Path.Add(point); } } void StarWars( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); float x, y, step, center, multip = 0, shr = -1; int koef, centr_ind; int trans = 12; float scl = 3; int sch = 0; if(length == 1) center = 0; if((length == 2) || (length == 3)) center = 1; if(length == 4) center = 2; if(length > 4) center = (finish[2*(length - 1)] + finish[0])/2; centr_ind = (int)( 0.5*(float)length); if(length > 1) step = finish[2] - finish[0]; else step = 10; for (int i = 0; i < length; i++) { scl = 3; trans = 12; letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)0; x = finish[2*i]; y = finish[2*i+1]; for(int j = 0; j < 18; j++) { point.Clear(); point.Translate(center, y + step*trans); point.Shear(shr, 0); point.Scale(scl, scl/1.5); point.Translate(-center + x, 0); letter->Path.Add(point); point.Alpha = (BYTE)Alpha; scl -= 0.15; trans--; } point.Clear(); point.Alpha = (BYTE)0; point.Translate(center, y + step*trans); point.Shear(shr, 0); point.Scale(scl, scl/1.5); point.Translate(-center + x, 0); letter->Path.Add(point); shr += (float)(2./length); } } void Squeeze( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter* letter; Waypoint point; int length = letters.GetSize(); float x, y, step, koef; if(length > 1) step = finish[2] - finish[0]; else step = 10; for (int i = 0; i < length; i++) { koef = 8; letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)0; x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Translate(x - step*koef, y); point.Scale(1, 1); point.Shear(0, 0); letter->Path.Add(point); koef--; point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(x - step*koef, y); point.Scale(0.75, 1); point.Shear(0, -0.25); letter->Path.Add(point); koef--; point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(x - step*koef, y); point.Scale(0.5, 1); point.Shear(0, -0.5); letter->Path.Add(point); koef--; point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(x - step*koef, y); point.Scale(0.75, 1); point.Shear(0, -0.25); letter->Path.Add(point); koef--; point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(x - step*koef, y); point.Scale(1, 1); point.Shear(0, 0); letter->Path.Add(point); koef--; point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(x - step*koef, y); point.Scale(0.01, 1); point.Shear(0, 1); letter->Path.Add(point); koef--; point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(x - step*koef, y); point.Scale(-1, 1); point.Shear(0, 0); letter->Path.Add(point); koef--; point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(x - step*koef, y); point.Scale(0.01, 1); point.Shear(0, -1); letter->Path.Add(point); koef--; point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(x - step*koef, y); point.Scale(1, 1); point.Shear(0, 0); letter->Path.Add(point); koef--; } } void Terminator( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); float x, y, center; center = (finish[2*(length-1)] + finish[0])/2; for (int i = 0; i < length; i++) { letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)0; x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Translate(center, y); point.Scale(0.1, 0.1); point.Translate(0, 0); letter->Path.Add(point); point.Alpha = (BYTE)Alpha; point.Clear(); point.Translate(center, y); point.Scale(0.1, 0.1); point.Translate(0, 0); letter->Path.Add(point); point.Clear(); point.Translate(center, y); point.Scale(1, 0.1); point.Translate(-center + x, 0); letter->Path.Add(point); point.Clear(); point.Translate(center, y); point.Scale(1, 0.1); point.Translate(-center + x, 0); letter->Path.Add(point); point.Clear(); point.Translate(x, y); point.Scale(1, 1); point.Translate(0, 0); letter->Path.Add(point); } } //Erase new3 void GalaxyBack( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); float x, y, center, multip = 0.1; int koef; int sch = 0; if(length == 1) center = 0; if((length == 2) || (length == 3)) center = 1; if(length == 4) center = 2; if(length > 4) center =(int)( 0.5*(float)length); for (int i = 0; i < length; i++) { letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)Alpha; x = finish[2*i]; y = finish[2*i+1]; if(i <= center) { koef = (int)(0.7 * center); if(i < koef) multip += ((float)length)/1000.; else multip -= ((float)length)/1000.; point.Clear(); point.Alpha = Alpha; point.Translate(finish[center*2], y); point.Scale(1, 1); point.Rotate(finish[center*2], 0, 0); point.Translate(-finish[center*2] + x, 0); letter->Path.Add(point); point.Clear(); point.Alpha = 0; point.Translate(finish[center*2], y); point.Scale(0.1, 0.01); point.Rotate(finish[center*2], 0, multip * 1000.); point.Translate(-finish[center*2] + x, 0); letter->Path.Add(point); } if(i > center) { koef = (int)(1.4*center); if(i < koef) multip += ((float)length)/1000.; else multip -= ((float)length)/1000.; point.Clear(); point.Alpha = Alpha; point.Translate(finish[center*2], y); point.Scale(1, 1); point.Rotate(finish[center*2], 0, 0); point.Translate(-finish[center*2] + x, 0); letter->Path.Add(point); point.Clear(); point.Alpha = 0; point.Translate(finish[center*2], y); point.Scale(0.1, 0.1); point.Rotate(finish[center*2], 0, multip * 1000.); point.Translate(-finish[center*2] + x, 0); letter->Path.Add(point); } } } void WaveRotate3DBack( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter* letter; Waypoint point; int length = letters.GetSize(); int sch; float x, y, step, center; center = (finish[2*(length-1)] - finish[0])/2; if(length > 1) step = finish[2] - finish[0]; else step = 10; for (int i = 0; i < length; i++) { sch = 0; letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; for(int temp = 0; temp <= length; temp++) { if((i) >= temp) { sch++; x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(center, y); point.Scale(1, 1); point.Translate(-center + x, 0); letter->Path.Add(point); } else { x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(center, y); point.Scale(1, 1); point.Translate(-center + x, 0); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha/1.5; point.Translate(center, y - step*2); point.Scale(0.95, 0.6); point.Translate(-center + x, 0); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha/2; point.Translate(center, y - step*4); point.Scale(0.8, 0.01); point.Translate(-center + x, 0); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha/3; point.Translate(center, y - step*2); point.Scale(0.65, -0.3); point.Translate(-center + x, 0); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha/4; point.Translate(center, y); point.Scale(0.6, -0.6); point.Translate(-center + x, 0); letter->Path.Add(point); for(int j = 0; j <= length - sch; j++) { point.Clear(); point.Alpha = (BYTE)0; point.Translate(center, y + step); point.Scale(0.6, -0.6); point.Translate(-center + x, 0); letter->Path.Add(point); } break; } } } } void RandomJumpBack( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter* letter; Waypoint point; int length = letters.GetSize(); float x, y, jumpY, sclX, sclY; int flag = 1; int sch = 0; int stop = 1; int step; if(length > 1) step = finish[2] - finish[0]; else step = 10; if (step < 1) step = 1; for (int i = 0; i < length; i++) { sch = 0; stop = 1; letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)Alpha; x = finish[2*i]; y = finish[2*i+1]; for(int j = 0; j < 7; j++) { flag = rand() % 2; if(flag == 0) flag = -1; else flag = 1; if(stop) { stop = rand() % 3; point.Clear(); point.Translate(x, y); point.Scale(1, 1); point.Rotate(0, 0, 0); letter->Path.Add(point); jumpY = rand() % (step * 4); sclX = rand() % 3; if(sclX == 0) sclX = 0.1; sclY = rand() % 3; if(sclY == 0) sclY = 0.1; point.Clear(); if((stop == 0) || (j == 6)) point.Alpha = 0; point.Translate(x, jumpY); point.Scale(sclX, sclY); point.Rotate(0, 0, flag * (rand() % 30)); letter->Path.Add(point); } } } } void Galaxy2Back( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); float x, y, center, multip = 0.1; int koef; int sch = 0; if(length == 1) center = 0; if((length == 2) || (length == 3)) center = 1; if(length == 4) center = 2; if(length > 4) center =(int)( 0.5*(float)length); for (int i = 0; i < length; i++) { letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)Alpha; x = finish[2*i]; y = finish[2*i+1]; if(i <= center) { koef = (int)(0.7 * center); if(i < koef) multip += ((float)length)/100.; else multip -= ((float)length)/100.; point.Clear(); point.Alpha = Alpha; point.Translate(finish[center*2], y); point.Scale(1, 1); point.Rotate(finish[center*2], 0, 0); point.Translate(-finish[center*2] + x, 0); letter->Path.Add(point); point.Clear(); point.Alpha = 0; point.Translate(finish[center*2], y); point.Scale(0.01, 0.01); point.Rotate(finish[center*2], 0, multip * 500.); point.Translate(-finish[center*2] + x, 0); letter->Path.Add(point); } if(i > center) { if(length < 18) koef = (int)(1.6*center); else koef = (int)(1.4*center); if(i < koef) multip += ((float)length)/100.; else multip -= ((float)length)/100.; point.Clear(); point.Alpha = Alpha; point.Translate(finish[center*2], y); point.Scale(1, 1); point.Rotate(finish[center*2], 0, 0); point.Translate(-finish[center*2] + x, 0); letter->Path.Add(point); point.Clear(); point.Alpha = 0; point.Translate(finish[center*2], y); point.Scale(0.01, 0.01); point.Rotate(finish[center*2], 0, multip * 500.); point.Translate(-finish[center*2] + x, 0); letter->Path.Add(point); } } } void RollBack( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter* letter; Waypoint point; int length = letters.GetSize(); float x, y, start; start = finish[2*(length - 1)]; for (int i = 0; i < length; i++) { letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)Alpha; x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Translate(x, y); point.Rotate(0, 0, 0); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)0; point.Translate(x + start + 20, y); point.Rotate(0, 0, 50 * length); letter->Path.Add(point); } } void CongaBack( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter* letter; Waypoint point; int length = letters.GetSize(); int sch; float x, y, step, center; center = (finish[2*(length-1)] - finish[0])/2; if(length > 1) step = finish[2] - finish[0]; else step = 10; for (int i = 0; i < length; i++) { sch = 0; letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; for(int temp = 0; temp <= length; temp++) { if((i) >= temp) { sch++; x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(x, y); point.Scale(1, 1); letter->Path.Add(point); } else { x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(x - step, y); point.Scale(0.4, 0.4); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(x + step*1.5, y - step/2); point.Scale(0.6, 0.6); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(x + step*1.5, y + step/2); point.Scale(0.6, 0.6); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(x + step, y + step); point.Scale(0.8, 0.8); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(x, y); point.Scale(1.2, 1.2); letter->Path.Add(point); for(int j = 0; j <= (length - sch); j++) { point.Clear(); point.Alpha = (BYTE)0; point.Translate(x, y - step*6); point.Scale(1.2, 1.2); letter->Path.Add(point); } break; } } } } void _MatrixBack( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter* letter; Waypoint point; int length = letters.GetSize(); float x, y, sclX, sclY; int flag = 1; int sch = 0; int stop = 1; int step; if(length > 1) step = finish[2] - finish[0]; else step = 10; for (int i = 0; i < length; i++) { sch = 0; stop = 1; letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)Alpha; x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Translate(x, y); point.Scale(1, 1); letter->Path.Add(point); point.Clear(); point.Alpha = 0; point.Translate(x, y + step*12); point.Scale(1, 1); letter->Path.Add(point); for(int j = 0; j < 7; j++) { flag = rand() % 2; if(flag == 0) flag = -1; else flag = 1; if(stop) { stop = rand() % 3; sclX = rand() % 3; if(sclX == 0) sclX = 0.1; sclY = rand() % 3; if(sclY == 0) sclY = 0.1; point.Clear(); point.Alpha = 0; point.Translate(x, y - step*12); point.Scale(sclX, sclY); letter->Path.Add(point); point.Clear(); point.Alpha = Alpha; point.Translate(x, y); point.Scale(sclX, sclY); letter->Path.Add(point); point.Clear(); point.Alpha = 0; point.Translate(x, y + step*12); point.Scale(sclX, sclY); letter->Path.Add(point); } } } } void HotPinkSpinBack( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter* letter; Waypoint point; int length = letters.GetSize(); int sch; float x, y, step; if(length > 1) step = finish[2] - finish[0]; else step = 10; for (int i = 0; i < length; i++) { sch = 0; letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; for(int temp = 0; temp <= length; temp++) { if((i) >= temp) { sch++; x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(x, y); point.Rotate(0, 0, 0); point.Shear(0, 0); point.Scale(1, 1); letter->Path.Add(point); } else { x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(x, y); point.Rotate(0, 0, 0); point.Shear(-0.5, 0); point.Scale(1, 3); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(x, y); point.Rotate(0, 0, 0); point.Shear(-2.25, 0); point.Scale(1, 4); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(x, y); point.Rotate(0, 0, 0); point.Shear(-4, 0); point.Scale(1, 5); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(x, y); point.Rotate(0, 0, 45); point.Shear(-3, 0); point.Scale(-1, 5); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)0; point.Translate(x, y); point.Rotate(0, 0, 90); point.Shear(-2, 0); point.Scale(-3, 5); letter->Path.Add(point); for(int j = 0; j <= length - sch; j++) { point.Clear(); point.Alpha = (BYTE)0; point.Translate(x, y); point.Rotate(0, 0, 90); point.Shear(-2, 0); point.Scale(-3, 5); letter->Path.Add(point); } break; } } } } void HopInJumpOutBack( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter* letter; Waypoint point; int length = letters.GetSize(); int sch; float x, y, step, scl = 3., transX, transY, rot; if(length > 1) step = finish[2] - finish[0]; else step = 10; if (step < 0.1) step = 0.1; for (int i = 0; i < length; i++) { sch = 0; scl = 3.; rot = 0; transY = 12.; transX = 3.; letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; for(int temp = 0; temp <= length*4; temp++) { if((i*4) >= temp) { sch++; x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(x, y); point.Rotate(0, 0, 0); point.Scale(1, 1); letter->Path.Add(point); } else { x = finish[2*i]; y = finish[2*i+1]; transX = 0; for(int z = 0; z < 50; z++) { point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(x - step*transX, y - step * z * 0.02); if(z < 25) point.Rotate(0, 0, -z*0.25); else point.Rotate(0, 0, z*0.25); point.Scale(1, 1); letter->Path.Add(point); scl += 0.02; transX += 0.02; } //transX = 2; for(int z = 0; z < 50; z++) { point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(x - step*transX, y - step * (50-z) * 0.02); if(z < 25) point.Rotate(0, 0, z*0.25); else point.Rotate(0, 0, -z*0.25); point.Scale(1, 1); letter->Path.Add(point); scl += 0.02; transX += 0.02; } point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(x - step*2, y); point.Rotate(0, 0, 0); point.Scale(1, 1); letter->Path.Add(point); transX = 2; transY = 0; rot = 90; for(int z = 0; z < 50; z++) { point.Clear(); if(point.Alpha > Alpha/100) point.Alpha -= Alpha/100; else point.Alpha = 0; point.Translate(x - step*transX, y - step*transY); point.Rotate(0, 0, rot); point.Scale(scl + 1, scl); letter->Path.Add(point); scl -= 0.04; rot -= 2; transX += 0.1; transY += 0.6/step; } for(int z = 0; z < 100; z++) { point.Clear(); if(point.Alpha > Alpha/200) point.Alpha -= Alpha/200; else point.Alpha = 0; point.Translate(x - step*transX, y - step*transY); point.Rotate(0, 0, 0); point.Scale(scl + 1, scl); letter->Path.Add(point); scl -= 0.01; transX -= 0.04; transY += 0.09; } for(int j = 0; j <= length*4 - sch; j++) { point.Clear(); point.Alpha = (BYTE)0; point.Translate(x - step*transX, y - step*transY); point.Rotate(0, 0, 0); point.Scale(scl +1, scl); letter->Path.Add(point); } break; } } } } void ConJoinBack( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter* letter; Waypoint point; int length = letters.GetSize(); int sch; float x, y, step; if(length > 1) step = finish[2] - finish[0]; else step = 10; for (int i = 0; i < length; i++) { sch = 0; letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; for(int temp = 0; temp <= length; temp++) { if((i) >= temp) { sch++; x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(x, y); point.Scale(1, 1); letter->Path.Add(point); } else { x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(x, y); point.Scale(1, 1); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha/1.5; point.Translate(x, y); point.Scale(0.95, 0.6); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha/2; point.Translate(x, y); point.Scale(0.8, 0.01); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha/3; point.Translate(x, y); point.Scale(0.65, -0.3); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha/4; point.Translate(x, y + step*4); point.Scale(3, 3); letter->Path.Add(point); for(int j = 0; j <= length - sch; j++) { point.Clear(); point.Alpha = (BYTE)0; point.Translate(x, y); point.Scale(3, 3); letter->Path.Add(point); } break; } } } } void HopsCotchBack( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter* letter; Waypoint point; int length = letters.GetSize(); int sch; float x, y, step; if(length > 1) step = finish[2] - finish[0]; else step = 10; for (int i = 0; i < length; i++) { sch = 0; letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; for(int temp = 0; temp <= length; temp++) { if((i) >= temp) { sch++; x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(x, y); point.Scale(1, 1); point.Rotate(0, 0, 0); letter->Path.Add(point); } else { x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Alpha = (BYTE)Alpha/3; point.Translate(x - step, y); point.Scale(1, 1); point.Rotate(0, 0, -50); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha/3; point.Translate(x, y); point.Scale(1, 1); point.Rotate(0, 0, 0); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha/4; point.Translate(x + step*10, y); point.Scale(3, 3); point.Rotate(0, 0, 0); letter->Path.Add(point); for(int j = 0; j <= length - sch; j++) { point.Clear(); point.Alpha = (BYTE)0; point.Translate(x - step*3, y); point.Scale(3, 3); point.Rotate(0, 0, 0); letter->Path.Add(point); } break; } } } } void TwistBack( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); float x, y, step, center, multip = 0; int koef, centr_ind; int sch = 0; if(length == 1) center = 0; if((length == 2) || (length == 3)) center = 1; if(length == 4) center = 2; if(length > 4) center = (finish[2*(length - 1)] + finish[0])/2; centr_ind = (int)( 0.7*(float)length); if(length > 1) step = finish[2] - finish[0]; else step = 10; for (int i = 0; i < length; i++) { letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)0; x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(center, y); point.Scale(1, 1); point.Translate(-center + x, 0); letter->Path.Add(point); if(i <= centr_ind) { multip++; x = finish[2*i]; y = finish[2*i+1]; for(int j = 0; j < multip; j++) { if(j%2 == 1) { point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(center, y); point.Scale(0.6, -0.6); point.Translate(-center + x, 0); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(center, y + step*4); point.Scale(0.8, 0.01); point.Translate(-center + x, 0); letter->Path.Add(point); } else { point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(center, y); point.Scale(1, 1); point.Translate(-center + x, 0); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(center, y - step*4); point.Scale(0.8, 0.01); point.Translate(-center + x, 0); letter->Path.Add(point); } } } if(i > centr_ind) { x = finish[2*i]; y = finish[2*i+1]; for(int j = 0; j < multip; j++) { if(j%2 == 1) { point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(center, y); point.Scale(0.6, -0.6); point.Translate(-center + x, 0); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(center, y + step*4); point.Scale(0.8, 0.01); point.Translate(-center + x, 0); letter->Path.Add(point); } else { point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(center, y); point.Scale(1, 1); point.Translate(-center + x, 0); letter->Path.Add(point); point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(center, y - step*4); point.Scale(0.8, 0.01); point.Translate(-center + x, 0); letter->Path.Add(point); } } } point.Clear(); point.Alpha = (BYTE)0; point.Translate(center, y); point.Scale(0.6, -0.6); point.Translate(-center + x, 0); letter->Path.Add(point); } } void StarWarsBack( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); float x, y, step, center, multip = 0, shr = -1; int koef, centr_ind; int trans = -6; float scl = 0.3; int sch = 0; if(length == 1) center = 0; if((length == 2) || (length == 3)) center = 1; if(length == 4) center = 2; if(length > 4) center = (finish[2*(length - 1)] + finish[0])/2; centr_ind = (int)( 0.5*(float)length); if(length > 1) step = finish[2] - finish[0]; else step = 10; for (int i = 0; i < length; i++) { scl = 0.3; trans = -6; letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)0; x = finish[2*i]; y = finish[2*i+1]; for(int j = 0; j < 18; j++) { point.Clear(); point.Translate(center, y + step*trans); point.Shear(shr, 0); point.Scale(scl, scl/1.5); point.Translate(-center + x, 0); letter->Path.Add(point); point.Alpha = (BYTE)Alpha; scl += 0.15; trans++; } point.Clear(); point.Alpha = (BYTE)0; point.Translate(center, y + step*trans); point.Shear(shr, 0); point.Scale(scl, scl/1.5); point.Translate(-center + x, 0); letter->Path.Add(point); shr += (float)(2./length); } } void SqueezeBack( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter* letter; Waypoint point; int length = letters.GetSize(); float x, y, step, koef; if(length > 1) step = finish[2] - finish[0]; else step = 10; for (int i = 0; i < length; i++) { koef = 0; letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)Alpha; x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Translate(x - step*koef, y); point.Scale(1, 1); point.Shear(0, 0); letter->Path.Add(point); koef--; point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(x - step*koef, y); point.Scale(0.75, 1); point.Shear(0, -0.25); letter->Path.Add(point); koef--; point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(x - step*koef, y); point.Scale(0.5, 1); point.Shear(0, -0.5); letter->Path.Add(point); koef--; point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(x - step*koef, y); point.Scale(0.75, 1); point.Shear(0, -0.25); letter->Path.Add(point); koef--; point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(x - step*koef, y); point.Scale(1, 1); point.Shear(0, 0); letter->Path.Add(point); koef--; point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(x - step*koef, y); point.Scale(0.01, 1); point.Shear(0, 1); letter->Path.Add(point); koef--; point.Clear(); point.Alpha = (BYTE)Alpha; point.Translate(x - step*koef, y); point.Scale(-1, 1); point.Shear(0, 0); letter->Path.Add(point); koef--; point.Clear(); point.Alpha = (BYTE)Alpha/2; point.Translate(x - step*koef, y); point.Scale(0.01, 1); point.Shear(0, -1); letter->Path.Add(point); koef--; point.Clear(); point.Alpha = (BYTE)0; point.Translate(x - step*koef, y); point.Scale(1, 1); point.Shear(0, 0); letter->Path.Add(point); koef--; } } void TerminatorBack( CSimpleArray &letters, CSimpleArray &finish, long Alpha ) { Letter * letter; Waypoint point; int length = letters.GetSize(); float x, y, center; center = (finish[2*(length-1)] + finish[0])/2; for (int i = 0; i < length; i++) { letter = &(letters[i]); point.Name = letter->Name; point.Visible = TRUE; point.Alpha = (BYTE)Alpha; x = finish[2*i]; y = finish[2*i+1]; point.Clear(); point.Translate(x, y); point.Scale(1, 1); point.Translate(0, 0); letter->Path.Add(point); point.Clear(); point.Translate(center, y); point.Scale(1, 0.1); point.Translate(-center + x, 0); letter->Path.Add(point); point.Clear(); point.Translate(center, y); point.Scale(1, 0.1); point.Translate(-center + x, 0); letter->Path.Add(point); point.Clear(); point.Translate(center, y); point.Scale(0.1, 0.1); point.Translate(0, 0); letter->Path.Add(point); point.Alpha = (BYTE)0; point.Clear(); point.Translate(center, y); point.Scale(0.1, 0.1); point.Translate(0, 0); letter->Path.Add(point); } }