00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #include "Common/Time.h"
00012 #include "Common/Game.h"
00013 #include "Common/Command.h"
00014 #include "Render/Render.h"
00015 #include "Render/Font.h"
00016 #include "Mod/Mod.h"
00017 #include "Client/GameClient.h"
00018 #include "Common/LocalizedString.h"
00019
00020 #include "Mod_Aeternis_Client/A_Interface.h"
00021 #include "Mod_Aeternis_Client/A_ClientGameManager.h"
00022
00023 #include "Mod_Aeternis_Client/A_WinLoading.h"
00024 #include "Mod_Aeternis_Client/A_WinScore.h"
00025
00026
00027
00028
00029 KAWinLoading::KAWinLoading( KWin* pFather, KFPt& Pos, KFPt& Size, KInterface* pInterface )
00030 : KWin( pFather, Pos, Size, pInterface )
00031 {
00032 m_hBackGround = KSHADER_NO;
00033 m_eLoadingState = E_LOADING_STATE_WAITING ;
00034 m_fProgressBar = 0.0f;
00035 m_sBackGround = "GUI/Loading";
00036
00037 m_fTimeOut = g_pGame->GetpIniFile()->ReadFloat( "NETWORK", "TimeOut", 10000 ) ;
00038
00039 m_pText1 = new KText(this, KFPt( 0.5f, 0.80f ), KFPt( 0.0f, 0.04f ), m_pInterface,"",KRGB( 255, 255, 200 ),KWTA_CENTER) ;
00040 m_pText2 = new KText(this, KFPt( 0.5f, 0.85f ), KFPt( 0.0f, 0.04f ), m_pInterface,"",KRGB( 255, 255, 200 ),KWTA_CENTER) ;
00041 }
00042
00043
00044 KAWinLoading::~KAWinLoading()
00045 {
00046 }
00047
00048
00049 void KAWinLoading::Display()
00050 {
00051 u8 FadeAlpha = (u8)(255.0f * GetFade());
00052
00053 m_pInterface->HideMouse();
00054
00055
00056 DrawQuad( 0.0f, 0.0f, 1.0f, 1.0f, m_hBackGround, KRGBA( 255, 255, 255, FadeAlpha ) );
00057
00058
00059 if((m_eLoadingState == E_LOADING_STATE_LOADINGMAP ) ||
00060 (m_eLoadingState == E_LOADING_STATE_CONNECTION) ||
00061 (m_eLoadingState == E_LOADING_STATE_CONNECTION_TIMEOUT))
00062 {
00063 DrawQuad( 0.19f, 0.88f, 0.62f, 0.06f, KSHADER_NO, KRGBA( 56, 91, 149, FadeAlpha / 4 ), KRGB_BLACK, KRM_MODULATE );
00064 DrawQuad( 0.2f, 0.89f, 0.6f * m_fProgressBar, 0.04f, KSHADER_NO, KRGBA( 5, 134, 254, FadeAlpha / 4 ), KRGB_BLACK, KRM_MODULATE );
00065 }
00066 }
00067
00068
00069 void KAWinLoading::Manage()
00070 {
00071 KGameInfos* pGameInfo = g_pClientGameManager->GetpGameInfos() ;
00072
00073 if((m_eLoadingState != E_LOADING_STATE_LOADINGMAP) && (m_eLoadingState != E_LOADING_STATE_WAITING))
00074 {
00075 if((g_Time.GetTime() - m_currentTime) >= (m_fTimeOut - 1000))
00076 {
00077 SetState(E_LOADING_STATE_CONNECTION_TIMEOUT) ;
00078 }
00079 }
00080
00081 switch( m_eLoadingState )
00082 {
00083 case E_LOADING_STATE_WAITING:
00084 return;
00085
00086 case E_LOADING_STATE_CONNECTION:
00087 {
00088 m_fProgressBar = (g_Time.GetTime() - m_currentTime) / (m_fTimeOut - 1000) ;
00089
00090 return;
00091 }
00092
00093 case E_LOADING_STATE_LOADINGMAP:
00094 {
00095 char cTemp[1024] = "" ;
00096
00097 m_fProgressBar = g_pClientGameManager->GetLoadProgression() ;
00098
00099 sprintf(cTemp,"%s %s : %.0f%%",GETLOCALSTRING( LS_LOADINGMAP ),pGameInfo->GetsMapName().GetpString(),m_fProgressBar*100.0f) ;
00100 m_pText2->SetpText(cTemp) ;
00101 return;
00102 }
00103 case E_LOADING_STATE_CONNECTION_TIMEOUT:
00104 {
00105 if((g_Time.GetTime() - m_currentTime) >= m_fTimeOut)
00106 {
00107 g_pGame->GetpCommand()->ExecCommand( KStr("disconnect"), KStr("") );
00108 ((KAInterface*)m_pInterface)->SetWin( KAIW_MULTIPLAYER );
00109 }
00110 return ;
00111 }
00112 }
00113 }
00114
00115
00116 void KAWinLoading::Load()
00117 {
00118 KWin::Load();
00119
00120 m_fProgressBar = 0.0f ;
00121
00122 if(((KAInterface*)m_pInterface)->GetpWinScore()->IsShowed())
00123 ((KAInterface*)m_pInterface)->GetpWinScore()->Hide() ;
00124
00125 m_hBackGround = m_pRender->GetpShaderBank()->LoadShader( m_sBackGround );
00126 }
00127
00128
00129 void KAWinLoading::Unload()
00130 {
00131 KWin::Unload();
00132
00133 m_pRender->GetpShaderBank()->UnloadShader( m_hBackGround );
00134 }
00135
00136
00137 void KAWinLoading::SetState(E_LOADING_STATE eState)
00138 {
00139 switch(eState)
00140 {
00141 case E_LOADING_STATE_CONNECTION :
00142 {
00143 KStr sText = GETLOCALSTRING( LS_CONNECTING_TO );
00144 sText += " ";
00145 sText += ((KGameClient*)g_pGame)->GetNet().GetInetAddr().GetpAddress();
00146 sText += ":";
00147 sText += (s32)((KGameClient*)g_pGame)->GetNet().GetInetAddr().GetPort();
00148 sText += "...";
00149 m_pText1->SetpText( sText );
00150 m_pText2->SetpText( "" );
00151
00152 m_sBackGround = "GUI/Loading";
00153 m_pRender->GetpShaderBank()->UnloadShader( m_hBackGround );
00154 m_hBackGround = m_pRender->GetpShaderBank()->LoadShader( m_sBackGround );
00155
00156 m_eLoadingState = E_LOADING_STATE_CONNECTION ;
00157
00158 m_fProgressBar = 0.0f ;
00159 m_currentTime = g_Time.GetTime() ;
00160 }
00161 break ;
00162 case E_LOADING_STATE_CONNECTION_ACCEPTED :
00163 {
00164 KStr sText = GETLOCALSTRING( LS_CONNECTING_TO );
00165 sText += " ";
00166 sText += ((KGameClient*)g_pGame)->GetNet().GetInetAddr().GetpAddress();
00167 sText += ":";
00168 sText += (s32)((KGameClient*)g_pGame)->GetNet().GetInetAddr().GetPort();
00169 sText += " ";
00170 sText += GETLOCALSTRING( LS_CONNECTION_ACCEPTED );
00171 m_pText1->SetpText( sText );
00172 m_pText2->SetpText( "" );
00173
00174 m_sBackGround = "GUI/Loading";
00175 m_pRender->GetpShaderBank()->UnloadShader( m_hBackGround );
00176 m_hBackGround = m_pRender->GetpShaderBank()->LoadShader( m_sBackGround );
00177
00178 m_eLoadingState = E_LOADING_STATE_CONNECTION_ACCEPTED ;
00179 }
00180 break ;
00181 case E_LOADING_STATE_CONNECTION_TIMEOUT :
00182 {
00183 char cTemp[256] = "" ;
00184 u16 uPort = ((KGameClient*)g_pGame)->GetNet().GetInetAddr().GetPort() ;
00185 char *pAddresse = ((KGameClient*)g_pGame)->GetNet().GetInetAddr().GetpAddress() ;
00186
00187 sprintf(cTemp,"%s %s:%d ..... %s",GETLOCALSTRING(LS_CONNECTING_TO),pAddresse,uPort,GETLOCALSTRING(LS_CONNECTION_TIMEOUT)) ;
00188 m_pText1->SetpText(cTemp) ;
00189 m_pText2->SetpText( "" );
00190
00191 m_eLoadingState = E_LOADING_STATE_CONNECTION_TIMEOUT ;
00192 }
00193 break ;
00194 case E_LOADING_STATE_LOADINGMAP :
00195 {
00196 KGameInfos* pGameInfo = g_pClientGameManager->GetpGameInfos() ;
00197
00198 m_sBackGround = "Maps/Loading_";
00199 m_sBackGround += pGameInfo->GetsMapName();
00200
00201 m_pRender->GetpShaderBank()->UnloadShader( m_hBackGround );
00202 m_hBackGround = m_pRender->GetpShaderBank()->LoadShader( m_sBackGround );
00203
00204 m_eLoadingState = E_LOADING_STATE_LOADINGMAP ;
00205 }
00206 break;
00207 case E_LOADING_STATE_WAITING :
00208 {
00209 m_sBackGround = "GUI/Loading";
00210
00211 m_pRender->GetpShaderBank()->UnloadShader( m_hBackGround );
00212 m_hBackGround = m_pRender->GetpShaderBank()->LoadShader( m_sBackGround );
00213 m_eLoadingState = E_LOADING_STATE_WAITING;
00214 }
00215 break ;
00216
00217 }
00218 }