📄 crender.cpp
字号:
#include "CRender.h"
HTARGET CRender::m_Target = NULL;
HTEXTURE CRender::m_Texture = NULL;
hgeSprite* CRender::m_Sprite = NULL;
HTARGET CRender::m_TargetSave = NULL;
HTEXTURE CRender::m_TextureSave = NULL;
hgeSprite* CRender::m_SpriteSave = NULL;
//=========================================================================
// Name:CRender
// Desc:Constructors
//
//=========================================================================
CRender::CRender( HGE *hge , hgeResourceManager *resMgr )
{
//the enginer and the managers
m_hgeEngine = hge;
m_resMgr = resMgr;
m_ParMgr = NULL;
m_SplashBombPar = NULL;
m_SplashExplPar = NULL;
m_SplashBack = NULL;
m_SplashBombAnim = NULL;
m_GameBombpar = NULL;
m_GameExppar = NULL;
m_GameColChangepar = NULL;
m_GameLeveluppar = NULL;
m_GameDirChangerpar = NULL;
m_GameLightpar = NULL;
m_GameBack = NULL;
m_GameBack2 = NULL;
m_Mouse = NULL;
m_Font = NULL;
m_digiFont = NULL;
m_alpha_tag = true;
}
//=========================================================================
// Name:Init
// Desc:Init the render, read all the Resources
//
//=========================================================================
bool CRender::Init()
{
if( m_Target == NULL )
{
m_Target = m_hgeEngine->Target_Create( TILE_SIZE*8, TILE_SIZE*8, false);
}
//Creat the SaveScreen Texture
if( m_Texture == NULL )
{
m_Texture = m_hgeEngine->Texture_Create( TILE_SIZE*8, TILE_SIZE*8 );
}
if( m_Sprite == NULL )
{
m_Sprite = new hgeSprite( this->m_Texture, 0, 0,
(float)m_hgeEngine->Texture_GetWidth(this->m_Texture), (float)m_hgeEngine->Texture_GetHeight(this->m_Texture) );
//m_Sprite->SetBlendMode( BLEND_COLORMUL | BLEND_NOZWRITE | BLEND_ALPHAADD );
}
////////////////////////////////////
//Creat the SaveScreen Target
if( m_TargetSave == NULL )
{
m_TargetSave = m_hgeEngine->Target_Create(800, 600, false);
}
//Creat the SaveScreen Texture
if( m_TextureSave == NULL )
{
m_TextureSave = m_hgeEngine->Texture_Create(800, 600);
}
if( m_SpriteSave == NULL )
{
m_SpriteSave = new hgeSprite( this->m_TextureSave, 0, 0,
(float)m_hgeEngine->Texture_GetWidth(this->m_TextureSave), (float)m_hgeEngine->Texture_GetHeight(this->m_TextureSave) );
}
m_ParMgr = new hgeParticleManager();
m_SplashBombPar = m_resMgr->GetParticleSystem( "splash_bomb" );
m_SplashBombPar->info.colColorStart = hgeColor( ARGB( 255, 255, 255,0 ) );
m_SplashExplPar = m_resMgr->GetParticleSystem( "splash_expl" );
m_SplashExplPar->info.sprite->SetBlendMode( BLEND_COLORMUL | BLEND_NOZWRITE | BLEND_ALPHAADD );
m_SplashBack = m_resMgr->GetSprite( "spSplash" );
m_SplashBombAnim = m_resMgr->GetAnimation( "splashBombAnim" );
m_SplashBombAnim->Play();
m_GameBombpar = m_resMgr->GetParticleSystem( "parBomb" );
m_GameBombpar->info.sprite->SetBlendMode( BLEND_COLORMUL | BLEND_NOZWRITE | BLEND_ALPHAADD );
m_GameExppar = m_resMgr->GetParticleSystem( "parExp" );
m_GameColChangepar = m_resMgr->GetParticleSystem( "parColChange" );
m_GameColChangepar->info.sprite->SetBlendMode( BLEND_COLORMUL | BLEND_NOZWRITE | BLEND_ALPHAADD );
m_GameLeveluppar = m_resMgr->GetParticleSystem( "parLevelup" );
m_GameLeveluppar->info.sprite->SetBlendMode( BLEND_COLORMUL | BLEND_NOZWRITE | BLEND_ALPHAADD );
m_GameDirChangerpar = m_resMgr->GetParticleSystem( "parDirChange" );
m_GameDirChangerpar->info.sprite->SetBlendMode( BLEND_COLORMUL | BLEND_NOZWRITE | BLEND_ALPHAADD );
m_GameLightpar = m_resMgr->GetParticleSystem( "parLight" );
m_Mouse = m_resMgr->GetSprite( "Mouse" );
m_GameBack = m_resMgr->GetSprite( "Background" );
m_GameBack2 = m_resMgr->GetSprite( "spGameBack" );
m_Font = m_resMgr->GetFont( "charFont" );
m_digiFont = m_resMgr->GetFont( "digiFont" );
return true;
}
//=========================================================================
// Name:Release
// Desc:
//
//=========================================================================
void CRender::Release()
{
//SAFE_DELETE( m_dis );
SAFE_DELETE( m_ParMgr );
}
void CRender::AddSplashPar( e_SplashPar ParType )
{
switch( ParType )
{
case SPLASH_BOMB:
m_ParMgr->SpawnPS( &m_SplashBombPar->info, 322, 112 );
break;
case SPLASH_EXPL:
m_ParMgr->SpawnPS( &m_SplashExplPar->info, 322, 112 );
break;
}
}
void CRender::AddGamePar( e_GamePar ParType , float x, float y, int type)
{
switch( ParType )
{
case GAME_BOMB:
m_ParMgr->SpawnPS( &m_GameBombpar->info, x, y );
break;
case GAME_EXPL:
m_GameExppar->info.colColorStart = BrickColor[ type ];
m_GameExppar->info.colColorEnd = m_GameExppar->info.colColorStart;
m_GameExppar->info.sprite->SetBlendMode( BLEND_COLORMUL | BLEND_NOZWRITE | BLEND_ALPHAADD );
m_ParMgr->SpawnPS( &m_GameExppar->info, x, y );
break;
case GAME_LEVELUP:
m_ParMgr->SpawnPS( &m_GameLeveluppar->info, x, y );
break;
case GAME_CHANGE:
m_GameColChangepar->info.colColorStart = BrickColor[ type ];
m_GameColChangepar->info.colColorEnd = m_GameExppar->info.colColorStart;
m_ParMgr->SpawnPS( &m_GameColChangepar->info, x, y );
break;
case GAME_LIGHT:
m_GameLightpar->info.fDirection = M_PI/2;
m_ParMgr->SpawnPS( &m_GameLightpar->info, x, y );
m_GameLightpar->info.fDirection = 0;
m_ParMgr->SpawnPS( &m_GameLightpar->info, x, y );
break;
case GAME_DIR:
m_ParMgr->SpawnPS( &m_GameDirChangerpar->info, x, y );
break;
}
}
void CRender::RenderPar()
{
m_ParMgr->Update( m_hgeEngine->Timer_GetDelta() );
m_ParMgr->Render();
}
void CRender::RenderSplashBack()
{
m_SplashBack->Render(0,0);
m_SplashBombAnim->Update( m_hgeEngine->Timer_GetDelta() );
m_SplashBombAnim->Render( 227, 100 );
}
void CRender::RenderGameBackground()
{
m_GameBack->Render(0, 0);
}
void CRender::RenderGameBackgroundUp()
{
m_GameBack2->Render(0, 0);
}
void CRender::RenderMouse(float x, float y)
{
m_Mouse->Render(x,y);
}
void CRender::RenderStatus( int score, int level )
{
char info[256] = {0};
sprintf( info, "%d", score );
m_digiFont->Render( 68, 40, HGETEXT_CENTER, info);
sprintf( info, "%d", level );
m_digiFont->Render( 68, 100, HGETEXT_CENTER, info );
}
void CRender::SaveToTexture()
{
m_Texture = m_hgeEngine->Target_GetTexture( m_Target );
m_Sprite->SetBlendMode( BLEND_DEFAULT );
m_Sprite->SetTexture( m_Texture );
m_Sprite->SetHotSpot( 4*TILE_SIZE, 4*TILE_SIZE );
}
void CRender::SaveToTextureSave()
{
m_TextureSave = m_hgeEngine->Target_GetTexture( m_TargetSave );
m_SpriteSave->SetBlendMode( BLEND_DEFAULT );
m_SpriteSave->SetTexture( m_TextureSave );
}
bool CRender::RenderRotate( int RotateDir )
{
float dt = m_hgeEngine->Timer_GetDelta();
if( RotateDir == 1 )
{
static float angle = 0;
static float size = 1;
angle += dt*1.3f;
if( angle > M_PI/4 )
{
size = (float)(1.42/2 / cos( M_PI/4 - angle ));
}
else
{
size = (float)(1.42/2 / cos( M_PI/4 - angle ));
}
if( angle > M_PI/2 )
{
angle = 0;
size = 1;
return true;
}
m_Sprite->RenderEx(AREA_BEGIN_X + 7*TILE_SIZE, AREA_BEGIN_Y + 7*TILE_SIZE, angle, size );
}
else
{
static float angle = 0;
static float size = 1;
angle -= dt*1.3f;
if( angle < -M_PI/4 )
{
size = (float)(1.42/2 / cos( M_PI/4 + angle ));
}
else
{
size = (float)(1.42/2 / cos( M_PI/4 + angle ));
}
if( angle < -M_PI/2 )
{
angle = 0;
size = 1;
return true;
}
m_Sprite->RenderEx(AREA_BEGIN_X + 7*TILE_SIZE, AREA_BEGIN_Y + 7*TILE_SIZE, angle, size );
}
return false;
}
//=========================================================================
// Name:RenderStarAlpah
// Desc:Render the effect when the game are changing the scene
//
//=========================================================================
void CRender::RenderStarAlpah()
{
float dt = m_hgeEngine->Timer_GetDelta();
static float step = 254;
if( m_alpha_tag )
{
step -= 200 * dt;
}
if(step < 0)
{
step = 255;
m_alpha_tag = 0;
}
if( step != 255 )
{
m_SpriteSave->SetColor( ARGB((int)step,255,255,255) );
m_SpriteSave->Render(0, 0);
}
}
void CRender::RenderSplashWord()
{
m_digiFont->SetColor(ARGB(255,0,0,0));
m_digiFont->Render( 720, 210, HGETEXT_CENTER, "C.T.");
m_digiFont->SetColor(ARGB(200,70,20,203));
m_digiFont->Render( 400, 370, HGETEXT_CENTER, "I just Remade this game, the final owner is BrickShooter Jr's writer!");
m_digiFont->Render( 400, 400, HGETEXT_CENTER, "Please don't use for business!");
m_digiFont->Render( 400, 420, HGETEXT_CENTER, "If you want the src, join my QQ: 88220282");
m_digiFont->SetColor(ARGB(200,170,70,70));
m_digiFont->Render( 400, 450, HGETEXT_CENTER, "Here I want to say to my ever girlfriend WQ, I miss you very much!");
m_digiFont->Render( 400, 470, HGETEXT_CENTER, "I can give up every things ,Just want you come back");
m_digiFont->Render( 400, 490, HGETEXT_CENTER, "I Love You Forever");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -