www.pudn.com > sxdl.zip > fader.cpp
#include "fader.h"
CFadingEntity::CFadingEntity ( FadeMode _Mode , float Duration , CFader * _Fader , SxDL * _Game )
{
Game = _Game ;
Fader = _Fader ;
Mode = _Mode ;
LifeTime = Duration ;
if ( NULL != Game )
Scale = Vector3 ( 10.0f + Game->Viewport.GetWidth ( ) , 10.0f + Game->Viewport.GetHeight ( ) , 1.0f ) ;
if ( FadeIn == Mode )
WillRenderLike ( Fader->FadeInSprite ) ;
else
WillRenderLike ( Fader->FadeOutSprite ) ;
Activate ( ) ;
}
bool CFadingEntity::OnAnimate ( float , float )
{
if ( NULL == Game )
return false ;
IsBillboarded = CCamera::Pers3D == Game->Camera.GetMode ( ) ;
Position = Game->Camera.Eye ;
if ( IsBillboarded )
{
// Real crap : Shitty stuff ( needs to be fixed with RHW sprites )
Position += 2.0f * Game->Camera.GetViewVector ( ) ;
} ;
if ( LifeTime > 0.0 )
{
Color color = Fader->color ;
// adjust alpha channel depending on entity's age
int Alpha ;
if ( FadeIn == Mode )
Alpha = ( int ) ( 255 * Fade ( ) ) ;
else
Alpha = ( int ) ( 255 * Alive ( ) ) ;
Alpha = Alpha << 24 ;
color &amt;= 0x00FFFFFF ;
color |= Alpha ;
if ( FadeIn == Mode )
Fader->FadeInSprite ->Colorize ( color ) ;
else if ( FadeOut == Mode )
Fader->FadeOutSprite ->Colorize ( color ) ;
else
; // Replaced : dont change
}
else
{
if ( Mode == Replaced )
{
LifeTime = 0.05f ;
}
else
{
if ( Fader->Entity != this )
{
Mode = Replaced ;
} ;
}
} ;
return true ;
}
void CFadingEntity::OnDying ( )
{
if ( Game != NULL )
Game->OnNotify ( SxDL::Fader , Fader ) ;
if ( FadeOut == Mode )
{
LifeTime = -1.0f ;
}
else if ( FadeIn == Mode )
{
Fader->Entity = NULL ;
}
else // Replaced
{
// Dying for good
}
}
CFader::CFader ( Color _color , int TextureId )
{
color = _color ;
// create sprites adjusting the alpha channel of the color
color |= 0xFF000000 ; // make color opaque
FadeInSprite = new CLerpingSprite ( 0 , color , 0, 0 , 0 , 0 ) ;
FadeInSprite->Layer = SxDL::Hud ;
FadeOutSprite = new CLerpingSprite ( 0 , color , 0, 0 , 0 , 0 ) ;
FadeOutSprite->Layer = SxDL::Hud ;
// remember where we're from in case we need notifications
Game = FadeInSprite->GetGame ( ) ;
Entity = NULL ;
}
void CFader::FadeIn ( float Duration )
{
// opaque to transparent
Entity = new CFadingEntity ( CFadingEntity::FadeIn , Duration , this , Game ) ;
}
void CFader::FadeOut ( float Duration )
{
// transparent to opaque
Entity = new CFadingEntity ( CFadingEntity::FadeOut , Duration , this , Game ) ;
}