00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #include "Common/Time.h"
00012 #include "Render/Render.h"
00013 #include "Render/Font.h"
00014 #include "Common/LocalizedString.h"
00015 #include "Common/Directory.h"
00016 #include "Sound/SoundDS.h"
00017
00018 #include "Mod_Aeternis_Client/A_Interface.h"
00019 #include "Mod_Aeternis_Client/A_WinCredits.h"
00020
00021 #define GUIDIR( __gui ) KStr( "GUI/%s/%s", GETLANGUAGEPREFIX(), __gui )
00022
00023 #define BUTTONBACK GUIDIR("Return")
00024 #define BUTTONBACKHL GUIDIR("Return_HL")
00025 #define BUTTONBACKC GUIDIR("Return_C")
00026
00027
00028
00029
00030 KAWinCredits::KAWinCredits( KWin* pFather, KFPt& Pos, KFPt& Size, KInterface* pInterface )
00031 : KWin( pFather, Pos, Size, pInterface )
00032 {
00033 m_BackGround = KSHADER_NO;
00034 m_TypeMusic = KTRACK_NO;
00035
00036 KFPt ButtonSize = KFPt( 0.25f, 0.04f );
00037
00038 m_pButtonBack = new KButton( this, KFPt( 0.8f, 0.9f ) - ButtonSize / 2, ButtonSize, m_pInterface, BUTTONBACK, BUTTONBACKHL, BUTTONBACKC );
00039
00040 KStr sTextPath = g_Directory.GetPath( KStr( "Text" ), 1 ) ;
00041 sTextPath += "Credits.ini" ;
00042 m_pIniFile = new KIni( sTextPath ) ;
00043
00044 m_uiNbCreditsPage = 0 ;
00045 m_fTimeForEachPage = 0 ;
00046 m_uCurrentPage = -1 ;
00047 m_uLastPage = -2 ;
00048 m_pTabPages = NULL ;
00049
00050 KSound* pSound = ((KAInterface*)m_pInterface)->GetpSound();
00051 if( pSound )
00052 {
00053
00054 m_TypeWriterSound = pSound->LoadTrack( KStr("GUI/Machine.ogg"), KSTT_SOUND );
00055 m_TypeWriterCRSound = pSound->LoadTrack( KStr("GUI/Machine2.ogg"), KSTT_SOUND );
00056
00057
00058 m_TypeMusic = pSound->LoadStreamTrack( KStr("Musics/Woodoo.ogg") );
00059 }
00060
00061 if(m_pIniFile)
00062 {
00063 LoadIni() ;
00064 }
00065 }
00066
00067
00068 KAWinCredits::~KAWinCredits()
00069 {
00070 for(u32 uCptPages = 0 ; uCptPages < m_uiNbCreditsPage ; uCptPages ++)
00071 {
00072
00073
00074
00075
00076
00077
00078 SafeDeletev( m_pTabPages[uCptPages].pText );
00079 SafeDeletev( m_pTabPages[uCptPages].pInitText );
00080
00081
00082
00083
00084
00085
00086
00087
00088 SafeDeletev( m_pTabPages[uCptPages].pBitmap );
00089 }
00090
00091 SafeDeletev( m_pTabPages );
00092 SafeDeletep( m_pIniFile );
00093
00094 KSound* pSound = ((KAInterface*)m_pInterface)->GetpSound();
00095 if( pSound )
00096 {
00097
00098 pSound->UnloadTrack( m_TypeWriterSound );
00099 pSound->UnloadTrack( m_TypeWriterCRSound );
00100
00101
00102 pSound->UnloadStreamTrack( m_TypeMusic );
00103 }
00104 }
00105
00106
00107 bool KAWinCredits::LoadIni()
00108 {
00109 m_fTimeForEachPage = m_pIniFile->ReadFloat("GLOBAL","TIMEFOREACHPAGE",5000) ;
00110 m_uiNbCreditsPage = m_pIniFile->ReadInt("GLOBAL","NB_CREDITS_PAGES",0) ;
00111 m_fTimeForTypeWriter = m_pIniFile->ReadFloat("GLOBAL","TIMEFORTYPEwriter",70) ;
00112 m_fRollSpeed = m_pIniFile->ReadFloat("GLOBAL","ROLLSPEED",0.2f) ;
00113 KFPt ButtonSize = KFPt( 0.20f, 0.04f );
00114
00115 if(m_uiNbCreditsPage == 0)
00116 return false ;
00117
00118 m_pTabPages = new sPages[m_uiNbCreditsPage] ;
00119
00120
00121 for(u32 uCptPages = 0 ; uCptPages < m_uiNbCreditsPage ; uCptPages ++)
00122 {
00123 char cTempSection[256] = "" ;
00124 sprintf(cTempSection,"CREDIT%i",uCptPages) ;
00125 u32 uNbTexts = m_pIniFile->ReadInt(cTempSection,"NB_TEXTS",0) ;
00126 u32 uNbImages = m_pIniFile->ReadInt(cTempSection,"NB_IMAGES",0) ;
00127 m_pTabPages[uCptPages].drawMode = (DRAW_MODE)m_pIniFile->ReadInt(cTempSection,"DRAW_MODE",0) ;
00128
00129 m_pTabPages[uCptPages].pText = NULL ;
00130 m_pTabPages[uCptPages].pBitmap = NULL ;
00131 m_pTabPages[uCptPages].pInitText = NULL ;
00132 m_pTabPages[uCptPages].uNbImages = uNbImages ;
00133 m_pTabPages[uCptPages].uNbTexts = uNbTexts ;
00134 m_pTabPages[uCptPages].fValueToRoll = 1.0f ;
00135
00136 if(uNbTexts != 0)
00137 {
00138 m_pTabPages[uCptPages].pInitText = new KStr[uNbTexts] ;
00139 m_pTabPages[uCptPages].pText = new KText*[uNbTexts] ;
00140 }
00141 if(uNbImages != 0)
00142 m_pTabPages[uCptPages].pBitmap = new KWinBitmap*[uNbImages] ;
00143
00144 m_pTabPages[uCptPages].bLoaded = false ;
00145
00146
00147 for(u32 uCptText = 0 ; uCptText < uNbTexts ; uCptText ++)
00148 {
00149 char cTempText[256] = "" ;
00150 sprintf(cTempText,"TEXT%i",uCptText) ;
00151 char *pString = (char*)m_pIniFile->ReadString(cTempSection,cTempText,"") ;
00152 GetInfo(pString) ;
00153 m_pTabPages[uCptPages].pText[uCptText] = new KText(this, KFPt( m_sInfo.fPosX, m_sInfo.fPosY ) - ButtonSize / 2, ButtonSize, m_pInterface, m_sInfo.cName) ;
00154 m_pTabPages[uCptPages].pText[uCptText]->Hide() ;
00155
00156 m_pTabPages[uCptPages].pInitText[uCptText] = KStr(m_sInfo.cName);
00157 }
00158
00159
00160 for(u32 uCptImages = 0 ; uCptImages < uNbImages ; uCptImages ++)
00161 {
00162 char cTempImage[256] = "" ;
00163 sprintf(cTempImage,"IMAGE%i",uCptImages) ;
00164 char *pString = (char*)m_pIniFile->ReadString(cTempSection,cTempImage,"") ;
00165 GetInfo(pString) ;
00166 m_pTabPages[uCptPages].pBitmap[uCptImages] = new KWinBitmap(this, KFPt( m_sInfo.fPosX, m_sInfo.fPosY ), KFPt( m_sInfo.fSizeX, m_sInfo.fSizeY ), m_pInterface,KStr(m_sInfo.cName)) ;
00167 m_pTabPages[uCptPages].pBitmap[uCptImages]->Hide() ;
00168 }
00169
00170 }
00171
00172 return true ;
00173 }
00174
00175
00176 void KAWinCredits::Display()
00177 {
00178 u8 FadeAlpha = (u8)(255.0f * GetFade());
00179
00180 m_pInterface->ShowMouse();
00181 DrawQuad( 0.0f, 0.0f, 1.0f, 1.0f, m_BackGround, KRGBA( 255, 255, 255, FadeAlpha ) );
00182 DrawQuad( 0.05f, 0.25f, 0.9f, 0.6f, KSHADER_NO, KRGBA( 56, 91, 149, FadeAlpha / 4 ), KRGB_BLACK, KRM_MODULATE );
00183 }
00184
00185
00186 void KAWinCredits::Manage()
00187 {
00188 if(m_uLastPage == -2)
00189 {
00190 m_uLastPage = -1 ;
00191 NextPage() ;
00192 }
00193 KTIME currentTime = g_Time.GetTime() ;
00194
00195 if(((currentTime - m_LastTime) >= m_fTimeForEachPage) && (m_pTabPages[m_uCurrentPage].bLoaded))
00196 NextPage() ;
00197
00198 #ifdef _DEBUG
00199 if( GetAsyncKeyState( VK_SPACE ) && ((currentTime - m_LastTime) > 500))
00200 NextPage();
00201 #endif
00202
00203 DisplayPage(m_uCurrentPage) ;
00204
00205
00206 if( m_pButtonBack->IsClicked() )
00207 {
00208 m_pButtonBack->Reset() ;
00209 ((KAInterface*)m_pInterface)->SetWin( KAIW_START );
00210 }
00211 }
00212
00213
00214 void KAWinCredits::DisplayPage(s32 uPage)
00215 {
00216 if(uPage < 0)
00217 return ;
00218
00219 if(m_pTabPages[uPage].bLoaded)
00220 return ;
00221
00222 if(m_pTabPages[uPage].drawMode == DRAW_MODE_ROLL)
00223 {
00224 if(m_pTabPages[uPage].bInitDrawMode)
00225 {
00226 m_pTabPages[uPage].bInitDrawMode = false ;
00227 for(u32 uCptText = 0 ; uCptText < m_pTabPages[uPage].uNbTexts ; uCptText ++)
00228 {
00229 KFPt pos = m_pTabPages[uPage].pText[uCptText]->GetPos() ;
00230 if(m_pTabPages[uPage].fValueToRoll == 1.0f)
00231 pos.y += m_pTabPages[uPage].fValueToRoll ;
00232 else
00233 pos.y += (1.0f - m_pTabPages[uPage].fValueToRoll) ;
00234 m_pTabPages[uPage].pText[uCptText]->SetPos(pos) ;
00235 }
00236 for(u32 uCptImages = 0 ; uCptImages < m_pTabPages[uPage].uNbImages ; uCptImages ++)
00237 {
00238 KFPt pos = m_pTabPages[uPage].pBitmap[uCptImages]->GetPos() ;
00239 if(m_pTabPages[uPage].fValueToRoll == 1.0f)
00240 pos.y += m_pTabPages[uPage].fValueToRoll ;
00241 else
00242 pos.y += (1.0f - m_pTabPages[uPage].fValueToRoll) ;
00243 m_pTabPages[uPage].pBitmap[uCptImages]->SetPos(pos) ;
00244 }
00245 m_pTabPages[uPage].fValueToRoll = 1.0f ;
00246 }
00247
00248 float fTimeElapsed = (float)(g_Time.GetTime() - m_pTabPages[uPage].lastTime) ;
00249 m_pTabPages[uPage].lastTime = g_Time.GetTime() ;
00250 float fStep = (fTimeElapsed * m_fRollSpeed) / 1000.0f ;
00251 if((m_pTabPages[uPage].fValueToRoll - fStep) < 0)
00252 fStep = m_pTabPages[uPage].fValueToRoll ;
00253
00254 m_pTabPages[uPage].fValueToRoll -= fStep ;
00255
00256 for(u32 uCptText = 0 ; uCptText < m_pTabPages[uPage].uNbTexts ; uCptText ++)
00257 {
00258 KFPt pos = m_pTabPages[uPage].pText[uCptText]->GetPos() ;
00259 pos.y -= fStep ;
00260 m_pTabPages[uPage].pText[uCptText]->SetPos(pos) ;
00261
00262 if(pos.y >= 0.82f)
00263 m_pTabPages[uPage].pText[uCptText]->Hide() ;
00264 else
00265 m_pTabPages[uPage].pText[uCptText]->Show() ;
00266 }
00267 for(u32 uCptImages = 0 ; uCptImages < m_pTabPages[uPage].uNbImages ; uCptImages ++)
00268 {
00269 KFPt pos = m_pTabPages[uPage].pBitmap[uCptImages]->GetPos() ;
00270 pos.y -= fStep ;
00271 m_pTabPages[uPage].pBitmap[uCptImages]->SetPos(pos) ;
00272 }
00273
00274 if(m_pTabPages[uPage].fValueToRoll <= 0)
00275 {
00276 m_pTabPages[uPage].bLoaded = true ;
00277 m_LastTime = g_Time.GetTime() ;
00278 }
00279 }
00280 if(m_pTabPages[uPage].drawMode == DRAW_MODE_TYPEWRITER)
00281 {
00282 if(m_pTabPages[uPage].bInitDrawMode)
00283 {
00284 m_pTabPages[uPage].bInitDrawMode = false ;
00285 m_pTabPages[uPage].uCurrentText = 0 ;
00286 m_pTabPages[uPage].uPosCharacter = 0 ;
00287
00288 for(u32 uCptText = 0 ; uCptText < m_pTabPages[uPage].uNbTexts ; uCptText ++)
00289 {
00290 m_pTabPages[uPage].pText[uCptText]->SetpText("") ;
00291 }
00292 }
00293
00294 float fTimeElapsed = (float)g_Time.GetTime() - (float)m_pTabPages[uPage].lastTime ;
00295
00296 if(fTimeElapsed < m_fTimeForTypeWriter)
00297 return ;
00298 m_pTabPages[uPage].lastTime = g_Time.GetTime() ;
00299
00300 char cTemp[1024] = "" ;
00301 strncpy( cTemp, m_pTabPages[uPage].pInitText[m_pTabPages[uPage].uCurrentText].GetpString(), m_pTabPages[uPage].uPosCharacter + 1 ) ;
00302 m_pTabPages[uPage].pText[m_pTabPages[uPage].uCurrentText]->SetpText(cTemp) ;
00303
00304 KSound* pSound = ((KAInterface*)m_pInterface)->GetpSound();
00305 if( pSound )
00306 pSound->Play( m_TypeWriterSound );
00307
00308 if(strlen(m_pTabPages[uPage].pText[m_pTabPages[uPage].uCurrentText]->GetpText()) >= m_pTabPages[uPage].pInitText[m_pTabPages[uPage].uCurrentText].GetLength() )
00309 {
00310 m_pTabPages[uPage].uCurrentText ++ ;
00311 m_pTabPages[uPage].uPosCharacter = 0 ;
00312 m_pTabPages[uPage].lastTime += 500 ;
00313 if( pSound )
00314 pSound->Play( m_TypeWriterCRSound );
00315 }
00316 else
00317 m_pTabPages[uPage].uPosCharacter ++ ;
00318
00319 if(m_pTabPages[uPage].uCurrentText == m_pTabPages[uPage].uNbTexts)
00320 {
00321 m_pTabPages[uPage].bLoaded = true ;
00322 m_LastTime = g_Time.GetTime() ;
00323 }
00324 }
00325 }
00326
00327
00328 void KAWinCredits::NextPage()
00329 {
00330 m_uLastPage = m_uCurrentPage ;
00331 m_uCurrentPage ++ ;
00332
00333 if(m_uCurrentPage == m_uiNbCreditsPage)
00334 m_uCurrentPage = 0 ;
00335
00336 UnLoadPage(m_uLastPage) ;
00337 LoadPage(m_uCurrentPage) ;
00338
00339 m_LastTime = g_Time.GetTime() ;
00340 }
00341
00342
00343 void KAWinCredits::LoadPage(s32 uPage)
00344 {
00345 if(uPage < 0)
00346 return ;
00347
00348 for(u32 uCptText = 0 ; uCptText < m_pTabPages[uPage].uNbTexts ; uCptText ++)
00349 {
00350 m_pTabPages[uPage].pText[uCptText]->Show() ;
00351 m_pTabPages[uPage].pText[uCptText]->StartFadeIn() ;
00352 }
00353
00354 for(u32 uCptImages = 0 ; uCptImages < m_pTabPages[uPage].uNbImages ; uCptImages ++)
00355 {
00356 m_pTabPages[uPage].pBitmap[uCptImages]->Show() ;
00357 m_pTabPages[uPage].pBitmap[uCptImages]->StartFadeIn() ;
00358 }
00359
00360 if(m_pTabPages[uPage].drawMode == DRAW_MODE_FADE)
00361 m_pTabPages[uPage].bLoaded = true ;
00362
00363 m_pTabPages[uPage].bInitDrawMode = true ;
00364 m_pTabPages[uPage].lastTime = g_Time.GetTime() ;
00365 }
00366
00367
00368 void KAWinCredits::UnLoadPage(s32 uPage,bool bForceHide)
00369 {
00370 if(uPage < 0)
00371 return ;
00372
00373 for(u32 uCptText = 0 ; uCptText < m_pTabPages[uPage].uNbTexts ; uCptText ++)
00374 {
00375 if(bForceHide)
00376 m_pTabPages[uPage].pText[uCptText]->Hide() ;
00377 else
00378 m_pTabPages[uPage].pText[uCptText]->StartFadeOut() ;
00379 }
00380
00381 for(u32 uCptImages = 0 ; uCptImages < m_pTabPages[uPage].uNbImages ; uCptImages ++)
00382 {
00383 if(bForceHide)
00384 m_pTabPages[uPage].pBitmap[uCptImages]->Hide() ;
00385 else
00386 m_pTabPages[uPage].pBitmap[uCptImages]->StartFadeOut() ;
00387 }
00388
00389 m_pTabPages[uPage].bLoaded = false ;
00390
00391 }
00392
00393
00394 sInfo KAWinCredits::GetInfo(char *pString)
00395 {
00396 u64 uSize = strlen(pString) ;
00397
00398 u32 uiCptString = 0 ;
00399 u32 uiCptTemp = 0 ;
00400 char cTemp[256] = "" ;
00401 while((pString[uiCptString] != ';') && (uiCptString < uSize))
00402 {
00403 cTemp[uiCptTemp] = pString[uiCptString] ;
00404 uiCptString ++ ;
00405 uiCptTemp++ ;
00406 }
00407 strcpy(m_sInfo.cName,cTemp) ;
00408 strncpy(cTemp,"",256) ;
00409 uiCptString ++ ;
00410 uiCptTemp = 0 ;
00411 while((pString[uiCptString] != ';') && (uiCptString < uSize))
00412 {
00413 cTemp[uiCptTemp] = pString[uiCptString] ;
00414 uiCptString ++ ;
00415 uiCptTemp++ ;
00416 }
00417 m_sInfo.fPosX = (float)atof(cTemp) ;
00418 strncpy(cTemp,"",256) ;
00419 uiCptString ++ ;
00420 uiCptTemp = 0 ;
00421
00422 while((pString[uiCptString] != ';') && (uiCptString < uSize))
00423 {
00424 cTemp[uiCptTemp] = pString[uiCptString] ;
00425 uiCptString ++ ;
00426 uiCptTemp++ ;
00427 }
00428 m_sInfo.fPosY = (float)atof(cTemp) ;
00429 strncpy(cTemp,"",256) ;
00430 uiCptString ++ ;
00431 uiCptTemp = 0 ;
00432
00433 if(uiCptString >= uSize)
00434 return m_sInfo ;
00435
00436 while((pString[uiCptString] != ';') && (uiCptString < uSize))
00437 {
00438 cTemp[uiCptTemp] = pString[uiCptString] ;
00439 uiCptString ++ ;
00440 uiCptTemp++ ;
00441 }
00442 m_sInfo.fSizeX = (float)atof(cTemp) ;
00443 strncpy(cTemp,"",256) ;
00444 uiCptString ++ ;
00445 uiCptTemp = 0 ;
00446
00447 while((pString[uiCptString] != ';') && (uiCptString < uSize))
00448 {
00449 cTemp[uiCptTemp] = pString[uiCptString] ;
00450 uiCptString ++ ;
00451 uiCptTemp++ ;
00452 }
00453 m_sInfo.fSizeY = (float)atof(cTemp) ;
00454 strncpy(cTemp,"",256) ;
00455 uiCptString ++ ;
00456 uiCptTemp = 0 ;
00457
00458 return m_sInfo ;
00459 }
00460
00461
00462 void KAWinCredits::Load()
00463 {
00464 m_uLastPage = -2 ;
00465 m_uCurrentPage = -1 ;
00466
00467 KWin::Load();
00468
00469 for(u32 uCptPages = 0 ; uCptPages < m_uiNbCreditsPage ; uCptPages ++)
00470 {
00471 UnLoadPage(uCptPages,true) ;
00472
00473 for(u32 uCptImages = 0 ; uCptImages < m_pTabPages[uCptPages].uNbImages ; uCptImages ++)
00474 {
00475 m_pTabPages[uCptPages].pBitmap[uCptImages]->LoadShader() ;
00476 }
00477 }
00478
00479 m_BackGround = m_pRender->GetpShaderBank()->LoadShader( GUIDIR("Credits_bg") );
00480 }
00481
00482
00483 void KAWinCredits::Unload()
00484 {
00485 KWin::Unload();
00486
00487 for(u32 uCptPages = 0 ; uCptPages < m_uiNbCreditsPage ; uCptPages ++)
00488 {
00489 for(u32 uCptImages = 0 ; uCptImages < m_pTabPages[uCptPages].uNbImages ; uCptImages ++)
00490 {
00491 m_pTabPages[uCptPages].pBitmap[uCptImages]->UnLoadShader() ;
00492 }
00493 }
00494
00495 m_pRender->GetpShaderBank()->UnloadShader( m_BackGround );
00496 }
00497
00498
00499 void KAWinCredits::OnShow()
00500 {
00501 KWin::OnShow();
00502
00503 ((KAInterface*)m_pInterface)->StopMenuMusic();
00504
00505 KSound* pSound = ((KAInterface*)m_pInterface)->GetpSound();
00506 if( pSound )
00507 pSound->PlayStreamTrack( m_TypeMusic, true );
00508 }
00509
00510
00511 void KAWinCredits::OnHide()
00512 {
00513 KWin::OnHide();
00514
00515 ((KAInterface*)m_pInterface)->PlayMenuMusic();
00516
00517 KSound* pSound = ((KAInterface*)m_pInterface)->GetpSound();
00518 if( pSound )
00519 pSound->StopStreamTrack( m_TypeMusic, true );
00520 }