00001
00002
00003
00004 #include "stdafx.h"
00005 #include "Common/Time.h"
00006 #include "Common/Directory.h"
00007 #include "Common/SearchFile.h"
00008 #include "GameSetup.h"
00009 #include "GameSetupDlg.h"
00010 #include "ClientPage.h"
00011
00012 #ifdef _DEBUG
00013 #define new DEBUG_NEW
00014 #undef THIS_FILE
00015 static char THIS_FILE[] = __FILE__;
00016 #endif
00017
00019
00020
00021 IMPLEMENT_DYNCREATE(CClientPage, CDialog)
00022
00023 CClientPage::CClientPage() : CDialog(CClientPage::IDD)
00024 {
00025 m_pIni = NULL;
00026
00027 m_Name = _T("");
00028 m_MipMapLOD = 0.0f;
00029 m_LobbyRequestPort = 28001;
00030 m_LobbyRequestHost = _T("");
00031
00032 }
00033
00034 CClientPage::CClientPage( KFile& File ) : CDialog(CClientPage::IDD)
00035 {
00036 m_pIni = new KIni( File );
00037 m_MipMapLOD = 0.0f;
00038 m_LobbyRequestPort = 28001;
00039 m_LobbyRequestHost = _T("");
00040 m_Name = _T("");
00041 }
00042
00043 CClientPage::~CClientPage()
00044 {
00045 if( m_pIni )
00046 Deletep( m_pIni );
00047 }
00048
00049 void CClientPage::DoDataExchange(CDataExchange* pDX)
00050 {
00051 CDialog::DoDataExchange(pDX);
00052
00053 DDX_Control(pDX, IDC_RADIO_TEXTURE32, m_RadioTexture32);
00054 DDX_Control(pDX, IDC_RADIO_OPENGL, m_RadioOpenGL);
00055 DDX_Control(pDX, IDC_RADIO_TEXTURE16, m_RadioTexture16);
00056 DDX_Control(pDX, IDC_SPIN_MIPMAPLOD, m_SpinMipMapLOD);
00057 DDX_Control(pDX, IDC_RADIO_DIRECT3D, m_RadioDirect3D);
00058 DDX_Control(pDX, IDC_COMBO_MODE, m_ComboMode);
00059 DDX_Control(pDX, IDC_COMBO_DEVICE, m_ComboDevice);
00060 DDX_Control(pDX, IDC_CHECK_FULLSCREEN, m_CheckFullScreen);
00061 DDX_Text(pDX, IDC_EDIT_NAME, m_Name);
00062 DDX_Text(pDX, IDC_EDIT_MIPMAPLOD, m_MipMapLOD);
00063 DDV_MinMaxFloat(pDX, m_MipMapLOD, -1.f, 1.f);
00064 DDX_Text(pDX, IDC_EDIT_LOBBYREQUESTHOST, m_LobbyRequestHost);
00065 DDX_Text(pDX, IDC_EDIT_LOBBYREQUESTPORT, m_LobbyRequestPort);
00066 DDV_MinMaxUInt(pDX, m_LobbyRequestPort, 1, 65535);
00067 DDX_Control(pDX, IDC_COMBO_MOD, m_ComboMod);
00068 DDX_Control(pDX, IDC_RADIO_FRENCH, m_FrenchRadio);
00069 DDX_Control(pDX, IDC_RADIO_ENGLISH, m_EnglishRadio);
00070 DDX_Control(pDX, IDC_RADIO_SPANISH, m_SpanishRadio);
00071 DDX_Control(pDX, IDC_RADIO_ITALIAN, m_ItalianRadio);
00072 DDX_Control(pDX, IDC_RADIO_GERMAN, m_GermanRadio);
00073
00074 }
00075
00076
00077 BEGIN_MESSAGE_MAP(CClientPage, CDialog)
00078
00079 ON_BN_CLICKED(IDC_BUTTON_RUN, OnButtonRun)
00080
00081 END_MESSAGE_MAP()
00082
00084
00085 void CClientPage::Load()
00086 {
00087 KStr sName;
00088 u32 i;
00089
00090 Sleep( 1 );
00091 srand( g_Time.GetTime() );
00092 sName = "Client #";
00093 sName += (s32)(rand() % 10);
00094 sName += (s32)(rand() % 10);
00095 sName += (s32)(rand() % 10);
00096 sName += (s32)(rand() % 10);
00097
00098 m_Name = m_pIni->ReadString( "GENERAL", "Name", sName.GetpString() );
00099
00100 m_ComboDevice.SetCurSel( m_pIni->ReadInt( "RENDER", "Adapter", 0 ) );
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111 const char* pDriver = m_pIni->ReadString( "RENDER", "Driver", "RenderD3D.dll" );
00112 m_RadioDirect3D.SetCheck( ( strcmp( pDriver, "RenderD3D.dll" ) == 0 ) ? BST_CHECKED : BST_UNCHECKED );
00113 m_RadioOpenGL.SetCheck( ( strcmp( pDriver, "RenderOGL.dll" ) == 0 ) ? BST_CHECKED : BST_UNCHECKED );
00114
00115 u32 Width = m_pIni->ReadInt( "RENDER", "Width", 800 );
00116 u32 Height = m_pIni->ReadInt( "RENDER", "Height", 600 );
00117 u32 Bpp = m_pIni->ReadInt( "RENDER", "Bpp", 16 );
00118 u32 Refresh = m_pIni->ReadInt( "RENDER", "RefreshRate", 60 );
00119 u32 FullScreen = m_pIni->ReadInt( "RENDER", "FullScreen", 1 );
00120
00121 DEVMODE dm;
00122 char pMode[1024];
00123 int Index;
00124 int SelectId = 0;
00125
00126 i = 0;
00127 while( EnumDisplaySettings( NULL, i, &dm ) )
00128 {
00129 if( ( ( dm.dmBitsPerPel == 16 ) || ( dm.dmBitsPerPel == 32 ) ) && ( ( dm.dmPelsWidth / 4 ) == ( dm.dmPelsHeight / 3 ) ) )
00130 {
00131 sprintf( pMode, "%ix%i %iBpp %iHz", dm.dmPelsWidth, dm.dmPelsHeight, dm.dmBitsPerPel, dm.dmDisplayFrequency );
00132 Index = m_ComboMode.AddString( pMode );
00133
00134 if( ( dm.dmPelsWidth == Width ) && ( dm.dmPelsHeight == Height ) && ( dm.dmBitsPerPel == Bpp ) && ( dm.dmDisplayFrequency == Refresh ) )
00135 SelectId = Index;
00136 }
00137 i ++;
00138 }
00139
00140 m_ComboMode.SetCurSel( SelectId );
00141 m_CheckFullScreen.SetCheck( FullScreen ? BST_CHECKED : BST_UNCHECKED );
00142
00143 u32 TextureDepth = (u32)m_pIni->ReadInt( "RENDER", "TextureBpp", 16 );
00144
00145 m_RadioTexture16.SetCheck( ( TextureDepth == 16 ) ? BST_CHECKED : BST_UNCHECKED );
00146 m_RadioTexture32.SetCheck( ( TextureDepth == 32 ) ? BST_CHECKED : BST_UNCHECKED );
00147
00148 m_MipMapLOD = m_pIni->ReadFloat( "RENDER", "MipMapLodBias", 0.0f );
00149
00150 m_LobbyRequestHost = m_pIni->ReadString( "NETWORK", "LobbyRequestHost", "localhost" );
00151 m_LobbyRequestPort = m_pIni->ReadInt( "NETWORK", "LobbyRequestPort", 28001 );
00152
00153
00154 CString Language = m_pIni->ReadString( "GENERAL", "Language", "EN" );
00155 if( !Language.CompareNoCase( GETLANGUAGEPREFIX2(E_LANGUAGE_FRENCH) ) )
00156 {
00157 m_FrenchRadio.SetCheck( BST_CHECKED );
00158 }
00159 else if( !Language.CompareNoCase( GETLANGUAGEPREFIX2(E_LANGUAGE_ENGLISH) ) )
00160 {
00161 m_EnglishRadio.SetCheck( BST_CHECKED );
00162 }
00163 else if( !Language.CompareNoCase( GETLANGUAGEPREFIX2(E_LANGUAGE_ITALIAN) ) )
00164 {
00165 m_ItalianRadio.SetCheck( BST_CHECKED );
00166 }
00167 else if( !Language.CompareNoCase( GETLANGUAGEPREFIX2(E_LANGUAGE_SPANISH) ) )
00168 {
00169 m_SpanishRadio.SetCheck( BST_CHECKED );
00170 }
00171 else if( !Language.CompareNoCase( GETLANGUAGEPREFIX2(E_LANGUAGE_GERMAN) ) )
00172 {
00173 m_GermanRadio.SetCheck( BST_CHECKED );
00174 }
00175
00176 RefreshModList();
00177 }
00178
00179 void CClientPage::Save()
00180 {
00181 CString Mode;
00182
00183 m_ComboMode.GetLBText( m_ComboMode.GetCurSel(), Mode );
00184
00185 LPTSTR pName = m_Name.GetBuffer( 0 );
00186 LPTSTR pMode = Mode.GetBuffer( 0 );
00187 LPTSTR pHost = m_LobbyRequestHost.GetBuffer( 0 );
00188
00189 m_pIni->WriteString( "GENERAL", "Name", pName );
00190 m_pIni->WriteInt( "RENDER", "Adapter", m_ComboDevice.GetCurSel() );
00191 m_pIni->WriteString( "RENDER", "Driver", ( m_RadioDirect3D.GetCheck() == BST_CHECKED ) ? "RenderD3D.dll" : "RenderOGL.dll" );
00192
00193 u32 Width;
00194 u32 Height;
00195 u32 Bpp;
00196 u32 Refresh;
00197
00198 sscanf( pMode, "%ix%i %iBpp %iHz", &Width, &Height, &Bpp, &Refresh );
00199
00200 m_pIni->WriteInt( "RENDER", "Width", Width );
00201 m_pIni->WriteInt( "RENDER", "Height", Height );
00202 m_pIni->WriteInt( "RENDER", "Bpp", Bpp );
00203 m_pIni->WriteInt( "RENDER", "RefreshRate", Refresh );
00204 m_pIni->WriteInt( "RENDER", "FullScreen", ( m_CheckFullScreen.GetCheck() == BST_CHECKED ) ? 1 : 0 );
00205
00206 m_pIni->WriteInt( "RENDER", "TextureBpp", ( m_RadioTexture16.GetCheck() == BST_CHECKED ) ? 16 : 32 );
00207 m_pIni->WriteFloat( "RENDER", "MipMapLodBias", m_MipMapLOD );
00208
00209
00210 m_pIni->WriteString( "NETWORK", "LobbyRequestHost", pHost );
00211 m_pIni->WriteInt( "NETWORK", "LobbyRequestPort", m_LobbyRequestPort );
00212
00213 CString ModName;
00214
00215 m_ComboMod.GetLBText( m_ComboMod.GetCurSel(), ModName );
00216
00217 ModName += "_Client";
00218 char* pModName = ModName.GetBuffer( 0 );
00219 m_pIni->WriteString( "GENERAL", "Mod", pModName );
00220 ModName.ReleaseBuffer();
00221
00222 m_Name.ReleaseBuffer();
00223 Mode.ReleaseBuffer();
00224 m_LobbyRequestHost.ReleaseBuffer();
00225
00226
00227 if( m_FrenchRadio.GetCheck() == BST_CHECKED )
00228 {
00229 m_pIni->WriteString( "GENERAL", "Language", (char*)GETLANGUAGEPREFIX2(E_LANGUAGE_FRENCH) );
00230 }
00231 else if( m_EnglishRadio.GetCheck() == BST_CHECKED )
00232 {
00233 m_pIni->WriteString( "GENERAL", "Language", (char*)GETLANGUAGEPREFIX2(E_LANGUAGE_ENGLISH) );
00234 }
00235 else if( m_SpanishRadio.GetCheck() == BST_CHECKED )
00236 {
00237 m_pIni->WriteString( "GENERAL", "Language", (char*)GETLANGUAGEPREFIX2(E_LANGUAGE_SPANISH) );
00238 }
00239 else if( m_ItalianRadio.GetCheck() == BST_CHECKED )
00240 {
00241 m_pIni->WriteString( "GENERAL", "Language", (char*)GETLANGUAGEPREFIX2(E_LANGUAGE_ITALIAN) );
00242 }
00243 else if( m_GermanRadio.GetCheck() == BST_CHECKED )
00244 {
00245 m_pIni->WriteString( "GENERAL", "Language", (char*)GETLANGUAGEPREFIX2(E_LANGUAGE_GERMAN) );
00246 }
00247
00248
00249 }
00250
00251 BOOL CClientPage::OnInitDialog()
00252 {
00253 CDialog::OnInitDialog();
00254
00255 m_SpinMipMapLOD.SetRange32( -1, 1 );
00256
00257 return TRUE;
00258
00259 }
00260
00261 void CClientPage::OnButtonRun()
00262 {
00263 ((CGameSetupDlg*)AfxGetApp()->GetMainWnd())->Save();
00264
00265 if( m_pIni )
00266 Deletep( m_pIni );
00267
00268 STARTUPINFO si;
00269 PROCESS_INFORMATION pi;
00270
00271 ZeroMemory( &si, sizeof(si) );
00272 si.cb = sizeof(si);
00273
00274 CreateProcess( NULL, "Client.exe" , NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi );
00275
00276 ((CGameSetupDlg*)AfxGetApp()->GetMainWnd())->EndDialog( IDOK );
00277 }
00278
00279 void CClientPage::RefreshModList()
00280 {
00281 m_ComboMod.ResetContent();
00282 m_ComboMod.AddString( "<no mod>" );
00283
00284 KStr sPath;
00285 char pString[1024];
00286 const char* pModName;
00287 int Selection = 0;
00288 int j = 0;
00289 char* pStrMod = "Mod_";
00290 char* pStrDll = "_Client.dll";
00291
00292
00293 pModName = m_pIni->ReadString( "GENERAL", "Mod", "<no mod>" );
00294
00295
00296 sPath = g_Directory.GetPath( KStr( "Mods" ) );
00297 sPath += "*";
00298
00299 KSearchFile SearchFile( sPath );
00300
00301 for( u32 i = 0; i < SearchFile.GetnFiles(); i ++ )
00302 {
00303 strcpy( pString, SearchFile.GetpFile( i ) );
00304
00305
00306 if( strnicmp( pStrMod, pString, strlen( pStrMod ) ) != 0 )
00307 continue;
00308
00309
00310 if( strlen( pString ) <= strlen( pStrDll ) )
00311 continue;
00312
00313 char* pEnd = &pString[strlen( pString ) - strlen( pStrDll )];
00314 if( strnicmp( pStrDll, pEnd, strlen( pStrDll ) ) != 0 )
00315 continue;
00316
00317 j ++;
00318 if( strnicmp( pModName, pString, strlen( pModName ) ) == 0 )
00319 Selection = j;
00320
00321 pString[strlen( pString ) - strlen( pStrDll )] = '\0';
00322 m_ComboMod.AddString( pString );
00323 }
00324
00325 m_ComboMod.SetCurSel( Selection );
00326 }
00327