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 &= 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 ) ;  
}