/* =========================================================================== ARX FATALIS GPL Source Code Copyright (C) 1999-2010 Arkane Studios SA, a ZeniMax Media company. This file is part of the Arx Fatalis GPL Source Code ('Arx Fatalis Source Code'). Arx Fatalis Source Code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Arx Fatalis Source Code is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Arx Fatalis Source Code. If not, see . In addition, the Arx Fatalis Source Code is also subject to certain additional terms. You should have received a copy of these additional terms immediately following the terms and conditions of the GNU General Public License which accompanied the Arx Fatalis Source Code. If not, please request a copy in writing from Arkane Studios at the address below. If you have questions concerning this license or the applicable additional terms, you may contact in writing Arkane Studios, c/o ZeniMax Media Inc., Suite 120, Rockville, Maryland 20850 USA. =========================================================================== */ //----------------------------------------------------------------------------- // Arx_Menu2.cpp //----------------------------------------------------------------------------- #include #include #include "danae.h" #include "arx_menu.h" #include "arx_menu2.h" #include "ARX_MenuPublic.h" #include "ARX_Sound.h" #include "ARX_Loc.h" #include "ARX_Text.h" #include "ARX_ViewImage.h" #include "ARX_Interface.h" #include "Mercury_dx_input.h" #include "arx_time.h" #include "eerietexture.h" #include "eeriepoly.h" #include "eeriedraw.h" #define _CRTDBG_MAP_ALLOC #include #define new new(_NORMAL_BLOCK,__FILE__, __LINE__) extern char * GetVersionString(); #define NODEBUGZONE //----------------------------------------------------------------------------- #define RATIO_X(a) (((float)a)*Xratio) #define RATIO_Y(a) (((float)a)*Yratio) //----------------------------------------------------------------------------- extern ARX_MENU_DATA ARXmenu; extern TextureContainer * scursor[]; extern bool bGameNotFirstLaunch; extern long DANAESIZX; extern long DANAESIZY; extern long LastEERIEMouseButton; extern long save_c; extern SaveGame *save_l; extern bool bForceReInitAllTexture; extern bool bALLOW_BUMP; extern long WILL_RELOAD_ALL_TEXTURES; extern long FINAL_RELEASE; extern long GAME_EDITOR; extern long ARX_DEMO; extern long INTRO_NOT_LOADED; extern long REFUSE_GAME_RETURN; extern bool bGATI8500; extern bool bForceNoEAX; extern long _EERIEMouseXdep; extern long _EERIEMouseYdep; extern float PROGRESS_BAR_TOTAL; extern float OLD_PROGRESS_BAR_COUNT; extern float PROGRESS_BAR_COUNT; extern float SOFTNEARCLIPPZ; extern long GERMAN_VERSION; extern long FRENCH_VERSION; extern long INTERNATIONAL_MODE; extern long CURRENT_GAME_INSTANCE; extern char GameSavePath[]; void ARX_GAMESAVE_MakePath(); extern long GORE_MODE; float INTERFACE_RATIO(float a); bool bNoMenu=false; void ARXMenu_Private_Options_Video_SetResolution(int _iWidth,int _iHeight,int _iBpp); void ARX_SetAntiAliasing(); void ARX_MENU_LaunchAmb(char *_lpszAmb); //----------------------------------------------------------------------------- bool bGLOBAL_DINPUT_MENU=true; bool bGLOBAL_DINPUT_GAME=true; CDirectInput *pGetInfoDirectInput=NULL; CMenuConfig *pMenuConfig; static CWindowMenu *pWindowMenu=NULL; CMenuState *pMenu; CMenuElement *pMenuElementResume=NULL; CMenuElement *pMenuElementApply=NULL; CMenuElementText *pLoadConfirm=NULL; CMenuSliderText *pMenuSliderResol=NULL; CMenuSliderText *pMenuSliderBpp=NULL; CMenuSliderText *pMenuSliderTexture=NULL; CMenuCheckButton *pMenuCheckButtonBump=NULL; float ARXTimeMenu; float ARXOldTimeMenu; float ARXDiffTimeMenu; bool bForceGDI; bool bFade=false; bool bFadeInOut=false; int iFadeAction=-1; float fFadeInOut=0.f; void ARX_MENU_Clicked_CREDITS(); void ARX_MENU_Clicked_NEWQUEST(); long ARX_CHANGELEVEL_Load(long); TextureContainer *pTextureLoad=NULL; static TextureContainer *pTextureLoadRender=NULL; #define QUICK_SAVE_ID "ARX_QUICK_ARX" #define QUICK_SAVE_ID1 "ARX_QUICK_ARX1" int iTimeToDrawD7=-3000; char pStringMod[256]; char pStringModSfx[256]; char pStringModSpeech[256]; //----------------------------------------------------------------------------- bool isTimeBefore(SYSTEMTIME s1, SYSTEMTIME s2) { if (s1.wYear < s2.wYear) return true; if (s1.wYear > s2.wYear) return false; if (s1.wYear == s2.wYear) { if (s1.wMonth < s2.wMonth) return true; if (s1.wMonth > s2.wMonth) return false; if (s1.wMonth == s2.wMonth) { if (s1.wDay < s2.wDay) return true; if (s1.wDay > s2.wDay) return false; if (s1.wDay == s2.wDay) { if (s1.wHour < s2.wHour) return true; if (s1.wHour > s2.wHour) return false; if (s1.wHour == s2.wHour) { if (s1.wMinute < s2.wMinute) return true; if (s1.wMinute > s2.wMinute) return false; if (s1.wMinute == s2.wMinute) { if (s1.wSecond < s2.wSecond) return true; if (s1.wSecond > s2.wSecond) return false; if (s1.wSecond == s2.wSecond) { if (s1.wMilliseconds < s2.wMilliseconds) return true; if (s1.wMilliseconds > s2.wMilliseconds) return false; if (s1.wMilliseconds == s2.wMilliseconds) return true; } } } } } } return false; } //----------------------------------------------------------------------------- void ARX_QuickSave() { if( REFUSE_GAME_RETURN ) return; FreeSaveGameList(); CreateSaveGameList(); _TCHAR szMenuText[256]; _tcscpy( szMenuText, _T( QUICK_SAVE_ID ) ); _TCHAR szMenuText1[256]; _tcscpy( szMenuText1, _T( QUICK_SAVE_ID1 ) ); int iOldGamma; ARXMenu_Options_Video_GetGamma( iOldGamma ); ARXMenu_Options_Video_SetGamma( ( iOldGamma - 1 ) < 0 ? 0 : ( iOldGamma - 1 ) ); ARX_SOUND_MixerPause( ARX_SOUND_MixerGame ); bool bFound0 = false; bool bFound1 = false; int iNbSave0 = 0; // will be used if >0 (0 will so mean NOTFOUND) int iNbSave1 = 0; // will be used if >0 (0 will so mean NOTFOUND) SYSTEMTIME sTime0; SYSTEMTIME sTime1; ZeroMemory( &sTime0, sizeof(SYSTEMTIME) );// will be used if iNbSave0>0 (iNbSave0==0 will so mean NOTFOUND and sTime0 will not be used) ZeroMemory( &sTime1, sizeof(SYSTEMTIME) );// will be used if iNbSave0>0 (iNbSave1==0 will so mean NOTFOUND and sTime1 will not be used) for( int iI = 1 ; iI < (save_c) ; iI++ ) { _TCHAR tex2[256]; _stprintf( tex2, _T( "%S"), save_l[iI].name ); _tcsupr( tex2 ); if( _tcsstr( szMenuText, tex2 ) ) { bFound0 = true; sTime0 = save_l[iI].stime; iNbSave0 = iI; } else if( _tcsstr( szMenuText1, tex2 ) ) { bFound1 = true; sTime1 = save_l[iI].stime; iNbSave1 = iI; } } if ( bFound0 && bFound1 && ( iNbSave0 > 0 ) && ( iNbSave0 < save_c ) && ( iNbSave1 > 0 ) && ( iNbSave1 < save_c ) ) { int iSave; if ( isTimeBefore( sTime0, sTime1 ) ) iSave = iNbSave0; else iSave = iNbSave1; UpdateSaveGame( iSave ); ARXMenu_Options_Video_SetGamma( iOldGamma ); ARX_SOUND_MixerResume( ARX_SOUND_MixerGame ); return; } char tcSrc[256]; char tcDst[256]; sprintf( tcSrc, "%sSCT_0.BMP", Project.workingdir ); sprintf( tcDst, "%sSCT_1.BMP", Project.workingdir ); CopyFile( tcSrc, tcDst, FALSE ); if ( bFound0 == false ) { strcpy( save_l[0].name, QUICK_SAVE_ID ); UpdateSaveGame( 0 ); ARXMenu_Options_Video_SetGamma( iOldGamma ); ARX_SOUND_MixerResume( ARX_SOUND_MixerGame ); CopyFile( tcDst, tcSrc, FALSE ); DeleteFile( tcDst ); } if ( bFound1 == false ) { strcpy( save_l[0].name, QUICK_SAVE_ID1 ); UpdateSaveGame( 0 ); ARXMenu_Options_Video_SetGamma( iOldGamma ); ARX_SOUND_MixerResume( ARX_SOUND_MixerGame ); } DeleteFile( tcSrc ); DeleteFile( tcDst ); } //----------------------------------------------------------------------------- void ARX_DrawAfterQuickLoad() { ARX_CHECK_INT(iTimeToDrawD7 - FrameDiff); iTimeToDrawD7 -= ARX_CLEAN_WARN_CAST_INT(FrameDiff); float fColor; if(iTimeToDrawD7>0) { fColor=1.f; } else { int iFade=-iTimeToDrawD7; if(iFade>1000) return; fColor=1.f-(((float)iFade)/1000.f); } TextureContainer *pTex = MakeTCFromFile("\\Graph\\interface\\icons\\Menu_main_save.bmp"); if(!pTex) return; GDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE,TRUE); GDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND,D3DBLEND_ONE); GDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND,D3DBLEND_ONE); EERIEDrawBitmap2( GDevice, 0, 0, INTERFACE_RATIO_DWORD(pTex->m_dwWidth), INTERFACE_RATIO_DWORD(pTex->m_dwHeight), 0.f, pTex, D3DRGB(fColor,fColor,fColor) ); GDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE,FALSE); } //----------------------------------------------------------------------------- bool ARX_QuickLoad() { FreeSaveGameList(); CreateSaveGameList(); _TCHAR szMenuText[256]; _tcscpy( szMenuText, _T( QUICK_SAVE_ID ) ); _TCHAR szMenuText1[256]; _tcscpy( szMenuText1, _T( QUICK_SAVE_ID1 ) ); bool bFound0 = false; bool bFound1 = false; int iNbSave0 = 0; // will be used if >0 (0 will so mean NOTFOUND) int iNbSave1 = 0; // will be used if >0 (0 will so mean NOTFOUND) SYSTEMTIME sTime0; SYSTEMTIME sTime1; ZeroMemory( &sTime0, sizeof(SYSTEMTIME) );// will be used if iNbSave0>0 (iNbSave0==0 will so mean NOTFOUND and sTime0 will not be used) ZeroMemory( &sTime1, sizeof(SYSTEMTIME) );// will be used if iNbSave0>0 (iNbSave1==0 will so mean NOTFOUND ans sTime1 will not be used) for( int iI = 1 ; iI < (save_c) ; iI++ ) { _TCHAR tex2[256]; _stprintf( tex2, _T( "%S" ), save_l[iI].name ); _tcsupr( tex2 ); if( _tcsstr( szMenuText, tex2 ) ) { bFound0 = true; sTime0 = save_l[iI].stime; iNbSave0 = iI; } else if( _tcsstr( szMenuText1, tex2 ) ) { bFound1 = true; sTime1 = save_l[iI].stime; iNbSave1 = iI; } } ARX_SOUND_MixerPause( ARX_SOUND_MixerGame ); if ( bFound0 && bFound1 && ( iNbSave0 > 0 ) && ( iNbSave0 < save_c ) && ( iNbSave1 > 0 ) && ( iNbSave1 < save_c ) ) { int iSave; if ( isTimeBefore( sTime0, sTime1 ) ) iSave = iNbSave1; else iSave = iNbSave0; INTRO_NOT_LOADED = 1; LoadLevelScreen(); PROGRESS_BAR_TOTAL = 238; OLD_PROGRESS_BAR_COUNT = PROGRESS_BAR_COUNT=0; PROGRESS_BAR_COUNT += 1.f; LoadLevelScreen( GDevice, save_l[iSave].level ); DanaeClearLevel(); ARX_CHANGELEVEL_Load( save_l[iSave].num ); REFUSE_GAME_RETURN = 0; ARX_SOUND_MixerResume( ARX_SOUND_MixerGame ); return true; } if ( bFound0 != false ) { INTRO_NOT_LOADED = 1; LoadLevelScreen(); PROGRESS_BAR_TOTAL = 238; OLD_PROGRESS_BAR_COUNT = PROGRESS_BAR_COUNT=0; PROGRESS_BAR_COUNT += 1.f; LoadLevelScreen( GDevice, save_l[iNbSave0].level ); DanaeClearLevel(); ARX_CHANGELEVEL_Load( save_l[iNbSave0].num ); REFUSE_GAME_RETURN = 0; ARX_SOUND_MixerResume( ARX_SOUND_MixerGame ); return true; } if ( bFound1 != false ) { INTRO_NOT_LOADED = 1; LoadLevelScreen(); PROGRESS_BAR_TOTAL = 238; OLD_PROGRESS_BAR_COUNT = PROGRESS_BAR_COUNT=0; PROGRESS_BAR_COUNT += 1.f; LoadLevelScreen( GDevice, save_l[iNbSave1].level ); DanaeClearLevel(); ARX_CHANGELEVEL_Load( save_l[iNbSave1].num ); REFUSE_GAME_RETURN = 0; ARX_SOUND_MixerResume( ARX_SOUND_MixerGame ); return true; } return false; } //----------------------------------------------------------------------------- bool MENU_NoActiveWindow() { if( (!pWindowMenu)|| ((pWindowMenu)&& (pWindowMenu->eCurrentMenuState==MAIN)) ) return true; return false; } //----------------------------------------------------------------------------- void GetTextSize(HFONT _hFont, _TCHAR *_lpszUText, int *_iWidth, int *_iHeight) { HDC hDC; if (danaeApp.m_pddsRenderTarget) { if (SUCCEEDED( danaeApp.m_pddsRenderTarget->GetDC(&hDC))) { SelectObject(hDC, _hFont); SIZE sSize; GetTextExtentPoint32W(hDC, _lpszUText, _tcslen(_lpszUText), &sSize); *_iWidth = sSize.cx; *_iHeight = sSize.cy; danaeApp.m_pddsRenderTarget->ReleaseDC(hDC); } } } //----------------------------------------------------------------------------- void FontRenderText(HFONT _hFont, EERIE_3D pos, _TCHAR *_pText, COLORREF _c) { if(pTextManage) { RECT rRect; ARX_CHECK_LONG( pos.y ); ARX_CHECK_LONG( pos.x ); ARX_CHECK_LONG( pos.x + 999 ); ARX_CHECK_LONG( pos.y + 999 ); //------------ rRect.top = ARX_CLEAN_WARN_CAST_LONG( pos.y ); rRect.left = ARX_CLEAN_WARN_CAST_LONG( pos.x ); rRect.right = ARX_CLEAN_WARN_CAST_LONG( pos.x + 999 ); rRect.bottom= ARX_CLEAN_WARN_CAST_LONG( pos.y + 999 ); ARX_TEXT pText; ARX_Text_Init(&pText); pText.lpszUText = _pText; pText.lCol = _c; pText.rRect = rRect; pTextManage->AddText( _hFont, _pText, rRect, _c, 0x00FF00FF); } } //----------------------------------------------------------------------------- CMenuConfig::CMenuConfig() { First(); } //----------------------------------------------------------------------------- void CMenuConfig::First() { ResetActionKey(); sakActionDefaultKey[CONTROLS_CUST_JUMP].iKey[0]=DIK_SPACE; sakActionDefaultKey[CONTROLS_CUST_JUMP].iKey[1]=-1; sakActionDefaultKey[CONTROLS_CUST_MAGICMODE].iKey[0]=DIK_LCONTROL; sakActionDefaultKey[CONTROLS_CUST_MAGICMODE].iKey[1]=DIK_RCONTROL; sakActionDefaultKey[CONTROLS_CUST_STEALTHMODE].iKey[0]=DIK_LSHIFT; sakActionDefaultKey[CONTROLS_CUST_STEALTHMODE].iKey[1]=DIK_RSHIFT; sakActionDefaultKey[CONTROLS_CUST_WALKFORWARD].iKey[0] = DIK_W; sakActionDefaultKey[CONTROLS_CUST_WALKFORWARD].iKey[1]=DIK_UP; sakActionDefaultKey[CONTROLS_CUST_WALKBACKWARD].iKey[0] = DIK_S; sakActionDefaultKey[CONTROLS_CUST_WALKBACKWARD].iKey[1]=DIK_DOWN; sakActionDefaultKey[CONTROLS_CUST_STRAFELEFT].iKey[0] = DIK_A; sakActionDefaultKey[CONTROLS_CUST_STRAFELEFT].iKey[1]=-1; sakActionDefaultKey[CONTROLS_CUST_STRAFERIGHT].iKey[0] = DIK_D; sakActionDefaultKey[CONTROLS_CUST_STRAFERIGHT].iKey[1]=-1; sakActionDefaultKey[CONTROLS_CUST_LEANLEFT].iKey[0] = DIK_Q; sakActionDefaultKey[CONTROLS_CUST_LEANLEFT].iKey[1]=-1; sakActionDefaultKey[CONTROLS_CUST_LEANRIGHT].iKey[0] = DIK_E; sakActionDefaultKey[CONTROLS_CUST_LEANRIGHT].iKey[1]=-1; sakActionDefaultKey[CONTROLS_CUST_CROUCH].iKey[0] = DIK_X; sakActionDefaultKey[CONTROLS_CUST_CROUCH].iKey[1]=-1; if (INTERNATIONAL_MODE) { sakActionDefaultKey[CONTROLS_CUST_MOUSELOOK].iKey[0]=DIK_F; sakActionDefaultKey[CONTROLS_CUST_MOUSELOOK].iKey[1]=DIK_RETURN; } else { sakActionDefaultKey[CONTROLS_CUST_MOUSELOOK].iKey[0]=DIK_BUTTON2; sakActionDefaultKey[CONTROLS_CUST_MOUSELOOK].iKey[1]=-1; } sakActionDefaultKey[CONTROLS_CUST_ACTION].iKey[0]=DIK_BUTTON1; sakActionDefaultKey[CONTROLS_CUST_ACTION].iKey[1]=-1; if (INTERNATIONAL_MODE) { sakActionDefaultKey[CONTROLS_CUST_INVENTORY].iKey[0] = DIK_I; sakActionDefaultKey[CONTROLS_CUST_INVENTORY].iKey[1]=-1; } else { sakActionDefaultKey[CONTROLS_CUST_INVENTORY].iKey[0] = DIK_I; sakActionDefaultKey[CONTROLS_CUST_INVENTORY].iKey[1]=-1; } sakActionDefaultKey[CONTROLS_CUST_INVENTORY].iPage=1; sakActionDefaultKey[CONTROLS_CUST_BOOK].iKey[0]=DIK_BACKSPACE; sakActionDefaultKey[CONTROLS_CUST_BOOK].iKey[1]=-1; sakActionDefaultKey[CONTROLS_CUST_BOOK].iPage=1; sakActionDefaultKey[CONTROLS_CUST_BOOKCHARSHEET].iKey[0] = DIK_F1; sakActionDefaultKey[CONTROLS_CUST_BOOKCHARSHEET].iPage=1; sakActionDefaultKey[CONTROLS_CUST_BOOKSPELL].iKey[0] = DIK_F2; sakActionDefaultKey[CONTROLS_CUST_BOOKSPELL].iPage=1; sakActionDefaultKey[CONTROLS_CUST_BOOKMAP].iKey[0] = DIK_F3; sakActionDefaultKey[CONTROLS_CUST_BOOKMAP].iPage=1; sakActionDefaultKey[CONTROLS_CUST_BOOKQUEST].iKey[0] = DIK_F4; sakActionDefaultKey[CONTROLS_CUST_BOOKQUEST].iPage=1; sakActionDefaultKey[CONTROLS_CUST_DRINKPOTIONLIFE].iKey[0] = DIK_H; sakActionDefaultKey[CONTROLS_CUST_DRINKPOTIONLIFE].iKey[1]=-1; sakActionDefaultKey[CONTROLS_CUST_DRINKPOTIONLIFE].iPage=1; sakActionDefaultKey[CONTROLS_CUST_DRINKPOTIONMANA].iKey[0] = DIK_G; sakActionDefaultKey[CONTROLS_CUST_DRINKPOTIONMANA].iKey[1]=-1; sakActionDefaultKey[CONTROLS_CUST_DRINKPOTIONMANA].iPage=1; sakActionDefaultKey[CONTROLS_CUST_TORCH].iKey[0]=DIK_T; sakActionDefaultKey[CONTROLS_CUST_TORCH].iKey[1]=-1; sakActionDefaultKey[CONTROLS_CUST_TORCH].iPage=1; sakActionDefaultKey[CONTROLS_CUST_CANCELCURSPELL].iKey[0] = DIK_4; sakActionDefaultKey[CONTROLS_CUST_CANCELCURSPELL].iKey[1] = -1; sakActionDefaultKey[CONTROLS_CUST_CANCELCURSPELL].iPage=1; sakActionDefaultKey[CONTROLS_CUST_PRECAST1].iKey[0] = DIK_1; sakActionDefaultKey[CONTROLS_CUST_PRECAST1].iPage=1; sakActionDefaultKey[CONTROLS_CUST_PRECAST2].iKey[0] = DIK_2; sakActionDefaultKey[CONTROLS_CUST_PRECAST2].iPage=1; sakActionDefaultKey[CONTROLS_CUST_PRECAST3].iKey[0] = DIK_3; sakActionDefaultKey[CONTROLS_CUST_PRECAST3].iPage=1; sakActionDefaultKey[CONTROLS_CUST_WEAPON].iKey[0] = DIK_TAB; sakActionDefaultKey[CONTROLS_CUST_WEAPON].iKey[1] = DIK_NUMPAD0; sakActionDefaultKey[CONTROLS_CUST_WEAPON].iPage=1; sakActionDefaultKey[CONTROLS_CUST_QUICKLOAD].iKey[0] = DIK_F9; sakActionDefaultKey[CONTROLS_CUST_QUICKLOAD].iPage=1; sakActionDefaultKey[CONTROLS_CUST_QUICKSAVE].iKey[0] = DIK_F5; sakActionDefaultKey[CONTROLS_CUST_QUICKSAVE].iPage=1; sakActionDefaultKey[CONTROLS_CUST_TURNLEFT].iKey[0]=DIK_LEFT; sakActionDefaultKey[CONTROLS_CUST_TURNLEFT].iKey[1]=-1; sakActionDefaultKey[CONTROLS_CUST_TURNRIGHT].iKey[0]=DIK_RIGHT; sakActionDefaultKey[CONTROLS_CUST_TURNRIGHT].iKey[1]=-1; sakActionDefaultKey[CONTROLS_CUST_LOOKUP].iKey[0]=DIK_PGUP; sakActionDefaultKey[CONTROLS_CUST_LOOKUP].iKey[1]=-1; sakActionDefaultKey[CONTROLS_CUST_LOOKDOWN].iKey[0]=DIK_PGDN; sakActionDefaultKey[CONTROLS_CUST_LOOKDOWN].iKey[1]=-1; sakActionDefaultKey[CONTROLS_CUST_STRAFE].iKey[0]=DIK_LALT; sakActionDefaultKey[CONTROLS_CUST_STRAFE].iKey[1]=-1; sakActionDefaultKey[CONTROLS_CUST_CENTERVIEW].iKey[0]=DIK_END; sakActionDefaultKey[CONTROLS_CUST_CENTERVIEW].iKey[1]=-1; if (INTERNATIONAL_MODE) { sakActionDefaultKey[CONTROLS_CUST_FREELOOK].iKey[0]=DIK_L; sakActionDefaultKey[CONTROLS_CUST_FREELOOK].iKey[1]=DIK_BUTTON2; } else { sakActionDefaultKey[CONTROLS_CUST_FREELOOK].iKey[0]=DIK_L; sakActionDefaultKey[CONTROLS_CUST_FREELOOK].iKey[1]=-1; } sakActionDefaultKey[CONTROLS_CUST_PREVIOUS].iKey[0] = GetDIKWithASCII(")"); sakActionDefaultKey[CONTROLS_CUST_PREVIOUS].iPage=1; sakActionDefaultKey[CONTROLS_CUST_NEXT].iKey[0] = GetDIKWithASCII("="); sakActionDefaultKey[CONTROLS_CUST_NEXT].iPage=1; sakActionDefaultKey[CONTROLS_CUST_CROUCHTOGGLE].iKey[0] = GetDIKWithASCII("C"); sakActionDefaultKey[CONTROLS_CUST_UNEQUIPWEAPON].iKey[0] = DIK_B; sakActionDefaultKey[CONTROLS_CUST_UNEQUIPWEAPON].iKey[1] = -1; sakActionDefaultKey[CONTROLS_CUST_UNEQUIPWEAPON].iPage=1; sakActionDefaultKey[CONTROLS_CUST_MINIMAP].iKey[0] = DIK_R; sakActionDefaultKey[CONTROLS_CUST_MINIMAP].iKey[1] = DIK_M; sakActionDefaultKey[CONTROLS_CUST_MINIMAP].iPage=1; bChangeResolution = false; bChangeTextures = false; bNoReturnToWindows=false; bLinkMouseLookToUse=false; bForceMetalTwoPass=false; bForceZBias=false; SetDefaultKey(); DefaultValue(); } //----------------------------------------------------------------------------- CMenuConfig::CMenuConfig(char *_pName) { if(!stricmp((const char*)"cfg",(const char*)_pName)) { pcName=strdup("cfg.ini"); } else { pcName=strdup(_pName); } First(); } //----------------------------------------------------------------------------- void CMenuConfig::DefaultValue() { //VIDEO iWidth=640; iHeight=480; iNewWidth=iWidth; iNewHeight=iHeight; iBpp=16; iNewBpp=iBpp; bFullScreen=true; bBumpMapping=false; bNewBumpMapping=bBumpMapping; iTextureResol=2; iNewTextureResol=iTextureResol; iMeshReduction=0; iLevelOfDetails=2; iFogDistance=5; iLuminosite=4; iContrast=5; iGamma=5; bShowCrossHair=true; //AUDIO iMasterVolume=10; iSFXVolume=10; iSpeechVolume=10; iAmbianceVolume=8; bEAX=false; //INPUT bInvertMouse=false; bAutoReadyWeapon=false; bMouseLookToggle=false; bAutoDescription=true; iMouseSensitivity=4; bMouseSmoothing=false; //MISC INTERNATIONAL_MODE=1; } //----------------------------------------------------------------------------- bool CDirectInput::GetMouseButtonDoubleClick(int _iNumButton,int _iTime) { return ((iMouseTimeSet[_iNumButton]==2)&&(iMouseTime[_iNumButton]<_iTime)) ; } //----------------------------------------------------------------------------- CMenuConfig::~CMenuConfig() { if(pcName) { free((void*)pcName); pcName = NULL; } } //----------------------------------------------------------------------------- void CMenuConfig::SetDefaultKey() { int iI=MAX_ACTION_KEY; while(iI--) { sakActionKey[iI].iKey[0]=sakActionDefaultKey[iI].iKey[0]; sakActionKey[iI].iKey[1]=sakActionDefaultKey[iI].iKey[1]; sakActionKey[iI].iPage=sakActionDefaultKey[iI].iPage; } if (!INTERNATIONAL_MODE) { bLinkMouseLookToUse=true; } else { bLinkMouseLookToUse=false; } } //----------------------------------------------------------------------------- int CMenuConfig::GetDIKWithASCII(char *_pcTouch) { _TCHAR pcT[256]; MultiByteToWideChar(CP_ACP, 0, _pcTouch, -1, pcT, strlen(_pcTouch)+1); if(!_tcsicmp(pcT,_T("---"))) { return -1; } for(int iI=0;iI<256;iI++) { _TCHAR *pcT1=pGetInfoDirectInput->GetFullNameTouch(iI); if(!_tcsicmp(pcT,pcT1)) { free((void*)pcT1); return iI; } free((void*)pcT1); pcT1 = pGetInfoDirectInput->GetFullNameTouch(iI | (DIK_LSHIFT << 16)); if(!_tcsicmp(pcT,pcT1)) { free((void*)pcT1); return iI|(DIK_LSHIFT<<16); } free((void*)pcT1); pcT1=pGetInfoDirectInput->GetFullNameTouch(iI|(DIK_RSHIFT<<16)); if(!_tcsicmp(pcT,pcT1)) { free((void*)pcT1); return iI|(DIK_RSHIFT<<16); } free((void*)pcT1); pcT1=pGetInfoDirectInput->GetFullNameTouch(iI|(DIK_LCONTROL<<16)); if(!_tcsicmp(pcT,pcT1)) { free((void*)pcT1); return iI|(DIK_LCONTROL<<16); } free((void*)pcT1); pcT1=pGetInfoDirectInput->GetFullNameTouch(iI|(DIK_RCONTROL<<16)); if(!_tcsicmp(pcT,pcT1)) { free((void*)pcT1); return iI|(DIK_RCONTROL<<16); } free((void*)pcT1); pcT1=pGetInfoDirectInput->GetFullNameTouch(iI|(DIK_LALT<<16)); if(!_tcsicmp(pcT,pcT1)) { free((void*)pcT1); return iI|(DIK_LALT<<16); } free((void*)pcT1); pcT1=pGetInfoDirectInput->GetFullNameTouch(iI|(DIK_RALT<<16)); if(!_tcsicmp(pcT,pcT1)) { free((void*)pcT1); return iI|(DIK_RALT<<16); } free((void*)pcT1); } for(int iI=DIK_BUTTON1;iI<=DIK_BUTTON32;iI++) { _TCHAR *pcT1=pGetInfoDirectInput->GetFullNameTouch(iI); if(!_tcsicmp(pcT,pcT1)) { free((void*)pcT1); return iI; } free((void*)pcT1); } for(int iI=DIK_WHEELUP;iI<=DIK_WHEELDOWN;iI++) { _TCHAR *pcT1=pGetInfoDirectInput->GetFullNameTouch(iI); if(!_tcsicmp(pcT,pcT1)) { free((void*)pcT1); return iI; } free((void*)pcT1); } return -1; } //----------------------------------------------------------------------------- char * CMenuConfig::ReadConfig(char *_pcSection,char *_pcKey) { char tcText[256]; int iI=GetPrivateProfileString(_pcSection,_pcKey,"",tcText,256,pcName); if(iI<=0) return NULL; char *pcText=(char*)malloc(strlen(tcText)+1); if(!pcText) return NULL; strcpy(pcText,tcText); return pcText; } //----------------------------------------------------------------------------- int CMenuConfig::ReadConfigInt(char *_pcSection,char *_pcKey,bool &_bOk) { char *pcText=ReadConfig(_pcSection,_pcKey); if(!pcText) { _bOk=false; return 0; } int iI=atoi(pcText); free((void*)pcText); pcText=NULL; _bOk=true; return iI; } //----------------------------------------------------------------------------- char* CMenuConfig::ReadConfigString(char *_pcSection,char *_pcKey) { return ReadConfig(_pcSection,_pcKey); } //----------------------------------------------------------------------------- bool CMenuConfig::WriteConfig(char *_pcSection,char *_pcKey,char *_pcDatas) { int iErreur=0; char tcText[256]; if(!GetPrivateProfileSection(_pcSection,tcText,256,pcName)) { if(WritePrivateProfileSection(_pcSection,"",pcName)) iErreur++; } if(WritePrivateProfileString(_pcSection,_pcKey,_pcDatas,pcName)) iErreur++; return (iErreur==2); } //----------------------------------------------------------------------------- bool CMenuConfig::WriteConfigInt(char *_pcSection,char *_pcKey,int _iDatas) { char tcTxt[256]; sprintf(tcTxt,"%d",_iDatas); return WriteConfig(_pcSection,_pcKey,(char*)tcTxt); } //----------------------------------------------------------------------------- bool CMenuConfig::WriteConfigString(char *_pcSection,char *_pcKey,char *_pcDatas) { return WriteConfig(_pcSection,_pcKey,_pcDatas); } //----------------------------------------------------------------------------- void CMenuConfig::ResetActionKey() { for (unsigned int iI=0; iI=MAX_ACTION_KEY)|| (_iActionNum>1) ) return false; bool bChange=false; bool bSecondChoice=false; int iOldVirtualKey=sakActionKey[_iAction].iKey[_iActionNum]; sakActionKey[_iAction].iKey[_iActionNum]=_iVirtualKey; if(_iActionNum) { if(sakActionKey[_iAction].iKey[0]==-1) { sakActionKey[_iAction].iKey[0]=iOldVirtualKey; bSecondChoice=true; } if(sakActionKey[_iAction].iKey[0]==_iVirtualKey) { sakActionKey[_iAction].iKey[0]=-1; } bChange=true; } else { if(sakActionKey[_iAction].iKey[1]==-1) { sakActionKey[_iAction].iKey[1]=iOldVirtualKey; bSecondChoice=true; } if(sakActionKey[_iAction].iKey[1]==_iVirtualKey) { sakActionKey[_iAction].iKey[1]=-1; } bChange=true; } if(bSecondChoice) { bChange=true; iOldVirtualKey=-1; } //on remove les doublons de keys int iI=MAX_ACTION_KEY; while(iI--) { if(iI==_iAction) continue; if(sakActionKey[iI].iPage!=sakActionKey[_iAction].iPage) continue; if(sakActionKey[iI].iKey[0]==_iVirtualKey) { sakActionKey[iI].iKey[0]=iOldVirtualKey; bChange=true; break; } else { if(sakActionKey[iI].iKey[1]==_iVirtualKey) { sakActionKey[iI].iKey[1]=iOldVirtualKey; bChange=true; break; } } } return bChange; } //----------------------------------------------------------------------------- bool CMenuConfig::WriteConfigKey(char *_pcKey,int _iAction) { char tcTxt[256]; char tcTxt2[256]; char *pcText; bool bOk=true; _TCHAR *pcText1; strcpy(tcTxt,_pcKey); int iL; pcText1=pGetInfoDirectInput->GetFullNameTouch(sakActionKey[_iAction].iKey[0]); iL=_tcslen(pcText1)+1; pcText=(char*)malloc(iL); while(iL--) { pcText[iL]=char(pcText1[iL]); } free((void*)pcText1); pcText1=NULL; if(pcText) { strcpy(tcTxt2,tcTxt); strcat(tcTxt2,"_k0"); bOk&=WriteConfigString("KEY",tcTxt2,pcText); free((void*)pcText); pcText=NULL; } pcText1=pGetInfoDirectInput->GetFullNameTouch(sakActionKey[_iAction].iKey[1]); iL=_tcslen(pcText1)+1; pcText=(char*)malloc(iL); while(iL--) { pcText[iL]=char(pcText1[iL]); } free((void*)pcText1); pcText1=NULL; if(pcText) { strcpy(tcTxt2,tcTxt); strcat(tcTxt2,"_k1"); bOk&=WriteConfigString("KEY",tcTxt2,pcText); free((void*)pcText); pcText=NULL; } return bOk; } //----------------------------------------------------------------------------- void CMenuConfig::ReInitActionKey(CWindowMenuConsole *_pwmcWindowMenuConsole) { int iID=BUTTON_MENUOPTIONS_CONTROLS_CUST_JUMP1; int iI=MAX_ACTION_KEY; bool bOldTouch=pGetInfoDirectInput->bTouch; int iOldVirtualKey=pGetInfoDirectInput->iKeyId; pGetInfoDirectInput->bTouch=true; while(iI--) { int iTab=(iID-BUTTON_MENUOPTIONS_CONTROLS_CUST_JUMP1)>>1; CMenuZone *pmzMenuZone = _pwmcWindowMenuConsole->MenuAllZone.GetZoneWithID(iID); if (pmzMenuZone) { if(pmzMenuZone) { _pwmcWindowMenuConsole->pZoneClick=(CMenuElement*)pmzMenuZone; pGetInfoDirectInput->iKeyId=sakActionKey[iTab].iKey[0]; _pwmcWindowMenuConsole->GetTouch(); } pmzMenuZone=_pwmcWindowMenuConsole->MenuAllZone.GetZoneWithID(iID+1); if(pmzMenuZone) { _pwmcWindowMenuConsole->pZoneClick=(CMenuElement*)pmzMenuZone; pGetInfoDirectInput->iKeyId=sakActionKey[iTab].iKey[1]; _pwmcWindowMenuConsole->GetTouch(); } } iID+=2; } pGetInfoDirectInput->bTouch=bOldTouch; pGetInfoDirectInput->iKeyId=iOldVirtualKey; } //----------------------------------------------------------------------------- bool CMenuConfig::ReadConfigKey(char *_pcKey,int _iAction) { char tcTxt[256]; char tcTxt2[256]; char *pcText; bool bOk=true; strcpy(tcTxt, _pcKey); int iDIK; strcpy(tcTxt2,tcTxt); strcat(tcTxt2,"_k0"); pcText=ReadConfigString("KEY",tcTxt2); if(!pcText) { bOk=false; } else { iDIK=GetDIKWithASCII(pcText); if(iDIK==-1) { sakActionKey[_iAction].iKey[0]=-1; } else { SetActionKey(_iAction,0,iDIK); } free((void*)pcText); pcText=NULL; } strcpy(tcTxt2,tcTxt); strcat(tcTxt2,"_k1"); pcText=ReadConfigString("KEY",tcTxt2); if(!pcText) { bOk=false; } else { iDIK=GetDIKWithASCII(pcText); if(iDIK==-1) { sakActionKey[_iAction].iKey[1]=-1; } else { SetActionKey(_iAction,1,iDIK); } free((void*)pcText); pcText=NULL; } return bOk; } //----------------------------------------------------------------------------- bool CMenuConfig::SaveAll() { char tcTxt[256]; bool bOk=true; //language strcpy(tcTxt,"\""); strcat(tcTxt,Project.localisationpath); strcat(tcTxt,"\""); bOk&=WriteConfigString("LANGUAGE","string",tcTxt); bOk&=WriteConfigInt("FIRSTRUN","int", bGameNotFirstLaunch?1:0); //video sprintf(tcTxt,"%dx%d",iWidth,iHeight); bOk&=WriteConfigString("VIDEO","resolution",tcTxt); bOk&=WriteConfigInt("VIDEO","bpp",iBpp); bOk&=WriteConfigInt("VIDEO","full_screen",(bFullScreen)?1:0); bOk&=WriteConfigInt("VIDEO","bump",(bBumpMapping)?1:0); bOk&=WriteConfigInt("VIDEO","texture",iTextureResol); bOk&=WriteConfigInt("VIDEO","mesh_reduction",iMeshReduction); bOk&=WriteConfigInt("VIDEO","others_details",iLevelOfDetails); bOk&=WriteConfigInt("VIDEO","fog",iFogDistance); bOk&=WriteConfigInt("VIDEO","gamma",iGamma); bOk&=WriteConfigInt("VIDEO","luminosity",iLuminosite); bOk&=WriteConfigInt("VIDEO","contrast",iContrast); bOk&=WriteConfigInt("VIDEO","show_crosshair",bShowCrossHair?1:0); bOk&=WriteConfigInt("VIDEO","antialiasing",bAntiAliasing?1:0); //audio bOk&=WriteConfigInt("AUDIO","master_volume",iMasterVolume); bOk&=WriteConfigInt("AUDIO","effects_volume",iSFXVolume); bOk&=WriteConfigInt("AUDIO","speech_volume",iSpeechVolume); bOk&=WriteConfigInt("AUDIO","ambiance_volume",iAmbianceVolume); bOk&=WriteConfigInt("AUDIO","EAX",(bEAX)?1:0); //input bOk&=WriteConfigInt("INPUT","invert_mouse",(bInvertMouse)?1:0); bOk&=WriteConfigInt("INPUT","auto_ready_weapon",(bAutoReadyWeapon)?1:0); bOk&=WriteConfigInt("INPUT","mouse_look_toggle",(bMouseLookToggle)?1:0); bOk&=WriteConfigInt("INPUT","mouse_sensitivity",iMouseSensitivity); bOk&=WriteConfigInt("INPUT","mouse_smoothing",(bMouseSmoothing)?1:0); bOk&=WriteConfigInt("INPUT","auto_description",(bAutoDescription)?1:0); //key bOk&=WriteConfigKey("jump",CONTROLS_CUST_JUMP); bOk&=WriteConfigKey("magic_mode",CONTROLS_CUST_MAGICMODE); bOk&=WriteConfigKey("stealth_mode",CONTROLS_CUST_STEALTHMODE); bOk&=WriteConfigKey("walk_forward",CONTROLS_CUST_WALKFORWARD); bOk&=WriteConfigKey("walk_backward",CONTROLS_CUST_WALKBACKWARD); bOk&=WriteConfigKey("strafe_left",CONTROLS_CUST_STRAFELEFT); bOk&=WriteConfigKey("strafe_right",CONTROLS_CUST_STRAFERIGHT); bOk&=WriteConfigKey("lean_left",CONTROLS_CUST_LEANLEFT); bOk&=WriteConfigKey("lean_right",CONTROLS_CUST_LEANRIGHT); bOk&=WriteConfigKey("crouch",CONTROLS_CUST_CROUCH); bOk&=WriteConfigKey("mouselook",CONTROLS_CUST_MOUSELOOK); bOk&=WriteConfigInt("INPUT","link_mouse_look_to_use",(bLinkMouseLookToUse)?1:0); bOk&=WriteConfigKey("action_combine",CONTROLS_CUST_ACTION); bOk&=WriteConfigKey("inventory",CONTROLS_CUST_INVENTORY); bOk&=WriteConfigKey("book",CONTROLS_CUST_BOOK); bOk&=WriteConfigKey("char_sheet",CONTROLS_CUST_BOOKCHARSHEET); bOk&=WriteConfigKey("magic_book",CONTROLS_CUST_BOOKSPELL); bOk&=WriteConfigKey("map",CONTROLS_CUST_BOOKMAP); bOk&=WriteConfigKey("quest_book",CONTROLS_CUST_BOOKQUEST); bOk&=WriteConfigKey("drink_potion_life",CONTROLS_CUST_DRINKPOTIONLIFE); bOk&=WriteConfigKey("drink_potion_mana",CONTROLS_CUST_DRINKPOTIONMANA); bOk&=WriteConfigKey("torch",CONTROLS_CUST_TORCH); bOk&=WriteConfigKey("cancel_current_spell",CONTROLS_CUST_CANCELCURSPELL); bOk&=WriteConfigKey("precast_1",CONTROLS_CUST_PRECAST1); bOk&=WriteConfigKey("precast_2",CONTROLS_CUST_PRECAST2); bOk&=WriteConfigKey("precast_3",CONTROLS_CUST_PRECAST3); bOk&=WriteConfigKey("draw_weapon",CONTROLS_CUST_WEAPON); bOk&=WriteConfigKey("quicksave",CONTROLS_CUST_QUICKSAVE); bOk&=WriteConfigKey("quickload",CONTROLS_CUST_QUICKLOAD); bOk&=WriteConfigKey("turn_left",CONTROLS_CUST_TURNLEFT); bOk&=WriteConfigKey("turn_right",CONTROLS_CUST_TURNRIGHT); bOk&=WriteConfigKey("look_up",CONTROLS_CUST_LOOKUP); bOk&=WriteConfigKey("look_down",CONTROLS_CUST_LOOKDOWN); bOk&=WriteConfigKey("strafe",CONTROLS_CUST_STRAFE); bOk&=WriteConfigKey("center_view",CONTROLS_CUST_CENTERVIEW); bOk&=WriteConfigKey("freelook",CONTROLS_CUST_FREELOOK); bOk&=WriteConfigKey("previous",CONTROLS_CUST_PREVIOUS); bOk&=WriteConfigKey("next",CONTROLS_CUST_NEXT); bOk&=WriteConfigKey("crouch_toggle",CONTROLS_CUST_CROUCHTOGGLE); bOk&=WriteConfigKey("unequip_weapon",CONTROLS_CUST_UNEQUIPWEAPON); bOk&=WriteConfigKey("minimap",CONTROLS_CUST_MINIMAP); //misc bOk&=WriteConfigInt("MISC","softfog",(bATI)?1:0); bOk&=WriteConfigInt("MISC","clearnearcorrection",(bGATI8500)?1:0); bOk&=WriteConfigInt("MISC","forcesoftrender",(bDebugSetting)?1:0); bOk&=WriteConfigInt("MISC","forcenoeax",(bForceNoEAX)?1:0); bOk&=WriteConfigInt("MISC","forcegdi",(bForceGDI)?1:0); bOk&=WriteConfigInt("MISC","forcemetaltwopass",(bForceMetalTwoPass)?1:0); bOk&=WriteConfigInt("MISC","forcezbias",(bForceZBias)?1:0); bOk&=WriteConfigInt("MISC","newcontrol",(INTERNATIONAL_MODE)?1:0); bOk&=WriteConfigInt("MISC","forcetoggle",(bOneHanded)?1:0); bOk&=WriteConfigInt("MISC","fg",uiGoreMode); return bOk; } extern bool IsNoGore( void ); //----------------------------------------------------------------------------- bool CMenuConfig::ReadAll() { char *pcText; bool bOk=false; bool bOkTemp; int iTemp; //language if (strlen(Project.localisationpath) == 0) { if(GERMAN_VERSION) { pcText = strdup("Deutsch"); } else { if(FRENCH_VERSION) { pcText=ReadConfigString("LANGUAGE","string"); if( pcText&& (stricmp(pcText,"francais")&& stricmp(pcText,"deutsch")) ) { free(pcText); pcText = strdup("Francais"); } else { if(!pcText) { pcText = strdup("Francais"); } } } else { pcText=ReadConfigString("LANGUAGE","string"); } } if(pcText) { strcpy(Project.localisationpath,pcText); free((void*)pcText); pcText=NULL; } } bool bWarningGore=false; if (!stricmp(Project.localisationpath, "Deutsch")) { //no gore GERMAN_VERSION=1; uiGoreMode=0; GORE_MODE=0; bWarningGore=true; } ARX_Localisation_Init(); bGameNotFirstLaunch = ReadConfigInt("FIRSTRUN","int",bOkTemp)?true:false; //video pcText=ReadConfigString("VIDEO","resolution"); if(pcText) { char *pcTextCurr=pcText; int iI=strlen(pcText); while(iI--) { if(*pcTextCurr=='x') { *pcTextCurr=0; pcTextCurr++; bOk=true; break; } pcTextCurr++; } if(bOk) { iWidth = atoi(pcText); iHeight = atoi(pcTextCurr); } else { ARXMenu_Options_Video_GetResolution(iWidth,iHeight,iBpp); } free((void*)pcText); pcText=NULL; } else { ARXMenu_Options_Video_GetResolution(iWidth,iHeight,iBpp); bOk=false; } iNewWidth=iWidth; iNewHeight=iHeight; iTemp=ReadConfigInt("VIDEO","bpp",bOkTemp); bOk&=bOkTemp; if(!bOkTemp) { ARXMenu_Options_Video_GetBitPlane(iBpp); iTemp=iBpp; } iNewBpp=iBpp=iTemp; iTemp=ReadConfigInt("VIDEO","full_screen",bOkTemp); bOk&=bOkTemp; if(!bOkTemp) { ARXMenu_Options_Video_GetFullscreen(bFullScreen); } else { bFullScreen=(iTemp)?true:false; } iTemp=ReadConfigInt("VIDEO","bump",bOkTemp); bOk&=bOkTemp; if(!bOkTemp) { ARXMenu_Options_Video_GetBump(bBumpMapping); bNewBumpMapping=bBumpMapping; } else { bNewBumpMapping=bBumpMapping=(iTemp)?true:false; } bBumpMapping=bNewBumpMapping; if(bBumpMapping) { EERIE_ActivateBump(); } else { EERIE_DesactivateBump(); } bALLOW_BUMP=bBumpMapping; iTemp=ReadConfigInt("VIDEO","texture",bOkTemp); bOk&=bOkTemp; if(!bOkTemp) { ARXMenu_Options_Video_GetTextureQuality(iTextureResol); iTemp=iNewTextureResol=iTextureResol; } iTextureResol=iNewTextureResol=iTemp; if(iTextureResol==2) Project.TextureSize=0; if(iTextureResol==1) Project.TextureSize=2; if(iTextureResol==0) Project.TextureSize=64; WILL_RELOAD_ALL_TEXTURES=1; iTemp=ReadConfigInt("VIDEO","mesh_reduction",bOkTemp); bOk&=bOkTemp; if(!bOkTemp) { ARXMenu_Options_Video_GetLODQuality(iMeshReduction); iMeshReduction=iTemp; } iMeshReduction=iTemp; iTemp=ReadConfigInt("VIDEO","others_details",bOkTemp); bOk&=bOkTemp; if(!bOkTemp) { ARXMenu_Options_Video_GetDetailsQuality(iLevelOfDetails); iTemp=iLevelOfDetails; } iLevelOfDetails=iTemp; iTemp=ReadConfigInt("VIDEO","fog",bOkTemp); bOk&=bOkTemp; if(!bOkTemp) { ARXMenu_Options_Video_GetFogDistance(iFogDistance); iTemp=iFogDistance; } iFogDistance=iTemp; iTemp=ReadConfigInt("VIDEO","gamma",bOkTemp); bOk&=bOkTemp; if(!bOkTemp) { iTemp=5; } iGamma=iTemp; iTemp=ReadConfigInt("VIDEO","luminosity",bOkTemp); bOk&=bOkTemp; if(!bOkTemp) { iTemp=4; } iLuminosite=iTemp; if((iLuminosite<0)||(iLuminosite>10)) { iLuminosite=4; } iTemp=ReadConfigInt("VIDEO","contrast",bOkTemp); bOk&=bOkTemp; if(!bOkTemp) { iTemp=5; } iContrast=iTemp; if((iContrast<0)||(iContrast>10)) { iContrast=5; } iTemp=ReadConfigInt("VIDEO","show_crosshair",bOkTemp); bOk&=bOkTemp; if(!bOkTemp) { iTemp=1; } bShowCrossHair = iTemp?true:false; iTemp=ReadConfigInt("VIDEO","antialiasing",bOkTemp); bOk&=bOkTemp; if(!bOkTemp) { iTemp=0; } bAntiAliasing=iTemp?true:false; iTemp=ReadConfigInt("MISC","forcesoftrender",bOkTemp); if(!bOkTemp) { iTemp=0; } bDebugSetting=iTemp?true:false; //audio iTemp=ReadConfigInt("AUDIO","master_volume",bOkTemp); bOk&=bOkTemp; if(!bOkTemp) { iTemp=iMasterVolume; } iMasterVolume=iTemp; iTemp=ReadConfigInt("AUDIO","effects_volume",bOkTemp); bOk&=bOkTemp; if(!bOkTemp) { iTemp=iSFXVolume; } iSFXVolume=iTemp; iTemp=ReadConfigInt("AUDIO","speech_volume",bOkTemp); bOk&=bOkTemp; if(!bOkTemp) { iTemp=iSpeechVolume; } iSpeechVolume=iTemp; iTemp=ReadConfigInt("AUDIO","ambiance_volume",bOkTemp); bOk&=bOkTemp; if(!bOkTemp) { iTemp=iAmbianceVolume; } iAmbianceVolume=iTemp; iTemp=ReadConfigInt("AUDIO","EAX",bOkTemp); bOk&=bOkTemp; if(!bOkTemp) { ARXMenu_Options_Audio_GetEAX(bEAX); } else { bEAX=(iTemp)?true:false; } //input iTemp=ReadConfigInt("INPUT","invert_mouse",bOkTemp); bOk&=bOkTemp; if(!bOkTemp) { ARXMenu_Options_Control_GetInvertMouse(bInvertMouse); } else { bInvertMouse=(iTemp)?true:false; } iTemp=ReadConfigInt("INPUT","auto_ready_weapon",bOkTemp); bOk&=bOkTemp; if(!bOkTemp) { ARXMenu_Options_Control_GetAutoReadyWeapon(bAutoReadyWeapon); } else { bAutoReadyWeapon=(iTemp)?true:false; } iTemp=ReadConfigInt("INPUT","mouse_look_toggle",bOkTemp); bOk&=bOkTemp; if(!bOkTemp) { bMouseLookToggle=true; } else { bMouseLookToggle=(iTemp)?true:false; } iTemp=ReadConfigInt("INPUT","mouse_sensitivity",bOkTemp); bOk&=bOkTemp; if(!bOkTemp) { ARXMenu_Options_Control_GetMouseSensitivity(iMouseSensitivity); iTemp=iMouseSensitivity; } iMouseSensitivity=iTemp; iTemp=ReadConfigInt("INPUT","mouse_smoothing",bOkTemp); bOk&=bOkTemp; if(!bOkTemp) { bMouseSmoothing=false; } else { bMouseSmoothing=(iTemp)?true:false; } iTemp=ReadConfigInt("INPUT","auto_description",bOkTemp); bOk&=bOkTemp; if(!bOkTemp) { bAutoDescription=true; } else { bAutoDescription=(iTemp)?true:false; } //key bool bOk2=true; bOk2&=ReadConfigKey("jump",CONTROLS_CUST_JUMP); bOk2&=ReadConfigKey("magic_mode",CONTROLS_CUST_MAGICMODE); bOk2&=ReadConfigKey("stealth_mode",CONTROLS_CUST_STEALTHMODE); bOk2&=ReadConfigKey("walk_forward",CONTROLS_CUST_WALKFORWARD); bOk2&=ReadConfigKey("walk_backward",CONTROLS_CUST_WALKBACKWARD); bOk2&=ReadConfigKey("strafe_left",CONTROLS_CUST_STRAFELEFT); bOk2&=ReadConfigKey("strafe_right",CONTROLS_CUST_STRAFERIGHT); bOk2&=ReadConfigKey("lean_left",CONTROLS_CUST_LEANLEFT); bOk2&=ReadConfigKey("lean_right",CONTROLS_CUST_LEANRIGHT); bOk2&=ReadConfigKey("crouch",CONTROLS_CUST_CROUCH); bOk2&=ReadConfigKey("mouselook",CONTROLS_CUST_MOUSELOOK); iTemp=ReadConfigInt("INPUT","link_mouse_look_to_use",bOkTemp); if(!bOkTemp) { bLinkMouseLookToUse=true; } else { bLinkMouseLookToUse=(iTemp)?true:false; } bOk2&=ReadConfigKey("action_combine",CONTROLS_CUST_ACTION); bOk2&=ReadConfigKey("inventory",CONTROLS_CUST_INVENTORY); bOk2&=ReadConfigKey("book",CONTROLS_CUST_BOOK); bOk2&=ReadConfigKey("char_sheet",CONTROLS_CUST_BOOKCHARSHEET); bOk2&=ReadConfigKey("magic_book",CONTROLS_CUST_BOOKSPELL); bOk2&=ReadConfigKey("map",CONTROLS_CUST_BOOKMAP); bOk2&=ReadConfigKey("quest_book",CONTROLS_CUST_BOOKQUEST); bOk2&=ReadConfigKey("drink_potion_life",CONTROLS_CUST_DRINKPOTIONLIFE); bOk2&=ReadConfigKey("drink_potion_mana",CONTROLS_CUST_DRINKPOTIONMANA); bOk2&=ReadConfigKey("torch",CONTROLS_CUST_TORCH); bOk2&=ReadConfigKey("cancel_current_spell",CONTROLS_CUST_CANCELCURSPELL); bOk2&=ReadConfigKey("precast_1",CONTROLS_CUST_PRECAST1); bOk2&=ReadConfigKey("precast_2",CONTROLS_CUST_PRECAST2); bOk2&=ReadConfigKey("precast_3",CONTROLS_CUST_PRECAST3); bOk2&=ReadConfigKey("draw_weapon",CONTROLS_CUST_WEAPON); bOk2&=ReadConfigKey("quicksave",CONTROLS_CUST_QUICKSAVE); bOk2&=ReadConfigKey("quickload",CONTROLS_CUST_QUICKLOAD); bOk2&=ReadConfigKey("turn_left",CONTROLS_CUST_TURNLEFT); bOk2&=ReadConfigKey("turn_right",CONTROLS_CUST_TURNRIGHT); bOk2&=ReadConfigKey("look_up",CONTROLS_CUST_LOOKUP); bOk2&=ReadConfigKey("look_down",CONTROLS_CUST_LOOKDOWN); bOk2&=ReadConfigKey("strafe",CONTROLS_CUST_STRAFE); bOk2&=ReadConfigKey("center_view",CONTROLS_CUST_CENTERVIEW); bOk2&=ReadConfigKey("freelook",CONTROLS_CUST_FREELOOK); bOk2&=ReadConfigKey("previous",CONTROLS_CUST_PREVIOUS); bOk2&=ReadConfigKey("next",CONTROLS_CUST_NEXT); bOk2&=ReadConfigKey("crouch_toggle",CONTROLS_CUST_CROUCHTOGGLE); bOk2&=ReadConfigKey("unequip_weapon",CONTROLS_CUST_UNEQUIPWEAPON); bOk2&=ReadConfigKey("minimap",CONTROLS_CUST_MINIMAP); bOk2&=bOk; if(!bOk2) { int iI=MAX_ACTION_KEY; while(iI--) { sakActionKey[iI].iKey[0]=sakActionDefaultKey[iI].iKey[0]; sakActionKey[iI].iKey[1]=sakActionDefaultKey[iI].iKey[1]; } } //misc iTemp=ReadConfigInt("MISC","softfog",bOkTemp); bOk&=bOkTemp; if(!bOkTemp) { bATI=false; } else { bATI=(iTemp)?true:false; } iTemp=ReadConfigInt("MISC","clearnearcorrection",bOkTemp); bOk&=bOkTemp; if(!bOkTemp) { bGATI8500=false; } else { bGATI8500=(iTemp)?true:false; } if(bGATI8500) { SOFTNEARCLIPPZ = 5.f; } iTemp=ReadConfigInt("MISC","forcenoeax",bOkTemp); bOk&=bOkTemp; if(!bOkTemp) { bForceNoEAX=false; } else { bForceNoEAX=(iTemp)?true:false; } iTemp=ReadConfigInt("MISC","forcegdi",bOkTemp); bOk&=bOkTemp; if(!bOkTemp) { bForceGDI=false; } else { bForceGDI=(iTemp)?true:false; } iTemp=ReadConfigInt("MISC","forcemetaltwopass",bOkTemp); bOk&=bOkTemp; if(!bOkTemp) { bForceMetalTwoPass=false; } else { bForceMetalTwoPass=(iTemp)?true:false; } iTemp=ReadConfigInt("MISC","forcezbias",bOkTemp); bOk&=bOkTemp; if(!bOkTemp) { bForceZBias=false; } else { bForceZBias=(iTemp)?true:false; } iTemp=ReadConfigInt("MISC","newcontrol",bOkTemp); bOk&=bOkTemp; if(!bOkTemp) { INTERNATIONAL_MODE=1; } else { INTERNATIONAL_MODE=(iTemp)?1:0; } if(INTERNATIONAL_MODE) { bLinkMouseLookToUse=false; } iTemp=ReadConfigInt("MISC","forcetoggle",bOkTemp); bOk&=bOkTemp; if(!bOkTemp) { bOneHanded=false; } else { bOneHanded=(iTemp)?true:false; } char* pcTextMod=ReadConfigString("MISC","mod"); if( (pcTextMod)&& (strlen(pcTextMod)<256) ) { strcpy(pStringMod,pcTextMod); } else { strcpy(pStringMod,"mod.pak"); } free((void*)pcTextMod); pcTextMod=ReadConfigString("MISC","modsfx"); if( (pcTextMod)&& (strlen(pcTextMod)<256) ) { strcpy(pStringModSfx,pcTextMod); } else { strcpy(pStringModSfx,"modsfx.pak"); } free((void*)pcTextMod); pcTextMod=ReadConfigString("MISC","modspeech"); if( (pcTextMod)&& (strlen(pcTextMod)<256) ) { strcpy(pStringModSpeech,pcTextMod); } else { strcpy(pStringModSpeech,"modspeech.pak"); } free((void*)pcTextMod); uiGoreMode = ReadConfigInt("MISC", "fg", bOkTemp); bOk&=bOkTemp; if(!bOkTemp) { uiGoreMode=bWarningGore?0:1; } switch(uiGoreMode) { case 0: { if(bWarningGore) { uiGoreMode=0; GORE_MODE=0; } else { uiGoreMode=1; GORE_MODE=1; } } break; case 1: { GORE_MODE=1; } break; case 2: { GORE_MODE=0; } break; default: { uiGoreMode=0; GORE_MODE=0; } break; } //on set les options ARXMenu_Options_Video_SetFogDistance(iFogDistance); ARXMenu_Options_Video_SetTextureQuality(iTextureResol); ARXMenu_Options_Video_SetBump(bBumpMapping); ARXMenu_Options_Video_SetLODQuality(iMeshReduction); ARXMenu_Options_Video_SetDetailsQuality(iLevelOfDetails); ARXMenu_Options_Video_SetGamma(iGamma); ARX_SetAntiAliasing(); ARXMenu_Options_Video_SetSoftRender(); ARXMenu_Options_Audio_SetMasterVolume(iMasterVolume); ARXMenu_Options_Audio_SetSfxVolume(iSFXVolume); ARXMenu_Options_Audio_SetSpeechVolume(iSpeechVolume); ARXMenu_Options_Audio_SetAmbianceVolume(iAmbianceVolume); pMenuConfig->bEAX=bEAX; ARXMenu_Options_Control_SetInvertMouse(bInvertMouse); ARXMenu_Options_Control_SetAutoReadyWeapon(bAutoReadyWeapon); ARXMenu_Options_Control_SetMouseLookToggleMode(bMouseLookToggle); ARXMenu_Options_Control_SetMouseSensitivity(iMouseSensitivity); ARXMenu_Options_Control_SetAutoDescription(bAutoDescription); if(pMenu) { pMenu->bReInitAll=true; } //mixer Game ARX_SOUND_MixerSetVolume(ARX_SOUND_MixerGame, ARX_SOUND_MixerGetVolume(ARX_SOUND_MixerMenu)); ARX_SOUND_MixerSetVolume(ARX_SOUND_MixerGameSample, ARX_SOUND_MixerGetVolume(ARX_SOUND_MixerMenuSample)); ARX_SOUND_MixerSetVolume(ARX_SOUND_MixerGameSpeech, ARX_SOUND_MixerGetVolume(ARX_SOUND_MixerMenuSpeech)); ARX_SOUND_MixerSetVolume(ARX_SOUND_MixerGameAmbiance, ARX_SOUND_MixerGetVolume(ARX_SOUND_MixerMenuAmbiance)); ARX_Localisation_Close(); GORE_MODE = IsNoGore()? 0 : 1; return bOk; } //----------------------------------------------------------------------------- static void CalculTextPosition( HDC& _hDC, wstring& phrase, CreditsTextInformations &infomations, float& drawpos ) { //Center the text on the screen GetTextExtentPoint32W(_hDC, phrase.c_str(), phrase.length(), &(infomations.sPos)); if (infomations.sPos.cx < DANAESIZX) infomations.sPos.cx = ARX_CLEAN_WARN_CAST_INT((DANAESIZX - infomations.sPos.cx) * DIV2); //Calcul height position (must be calculate after GetTextExtendPoint32 because sPos is writted) infomations.sPos.cy = ARX_CLEAN_WARN_CAST_INT(drawpos) ; drawpos += CreditsData.iFontAverageHeight ; } static void ExtractPhraseColor( wstring &phrase, CreditsTextInformations &infomations ) { //Get the good color if (phrase[0] == _T('~')) { phrase[0] = _T(' '); infomations.fColors = RGB(255,255,255); } else //print in gold color { infomations.fColors = RGB(232,204,143); } } //Use to calculate an Average height for text fonts static void CalculAverageWidth( HDC& _hDC ) { SelectObject(_hDC, hFontCredits); SIZE size; //calculate the average value GetTextExtentPoint32W(_hDC, _T("aA("),3, &size); CreditsData.iFontAverageHeight = size.cy; } //Use to extract string info from src buffer static void ExtractAllCreditsTextInformations(HDC& _hDC) { //Recupere les lignes ŕ afficher wistringstream iss(ARXmenu.mda->str_cre_credits); wstring phrase; //Use to calculate the positions float drawpos = ARX_CLEAN_WARN_CAST_FLOAT(DANAESIZY); bool firstLine = true ; while ( std::getline( iss, phrase) ) { //Remove the first tild if (firstLine) { firstLine = false ; phrase[1] = ' '; } //Case of separator line if (phrase.length() == 0) { drawpos += CreditsData.iFontAverageHeight >> 3; continue ; } //Create a data containers CreditsTextInformations infomations ; ExtractPhraseColor(phrase, infomations); CalculTextPosition(_hDC, phrase, infomations, drawpos); //Assign the text modified by ExtractPhase Color infomations.sText = phrase; //Bufferize it CreditsData.aCreditsInformations.push_back(infomations); } } static void InitCredits( void ) { HDC hDC; if( SUCCEEDED( danaeApp.m_pddsRenderTarget->GetDC(&hDC) ) ) { CalculAverageWidth(hDC); ExtractAllCreditsTextInformations(hDC); danaeApp.m_pddsRenderTarget->ReleaseDC(hDC); } } static void DrawCredits(void) { int drawn = 0 ; //We initialize the datas if (CreditsData.iFontAverageHeight == -1) { InitCredits(); } int iSize = CreditsData.aCreditsInformations.size() ; //We display them if (CreditsData.iFontAverageHeight != -1) { HDC hDC; COLORREF oldRef = RGB(0,0,0); //Set the device if(!danaeApp.DANAEStartRender()) return; SETALPHABLEND(GDevice,FALSE); GDevice->SetRenderState( D3DRENDERSTATE_FOGENABLE, false); SETZWRITE(GDevice,true); GDevice->SetRenderState( D3DRENDERSTATE_ZENABLE,false); //Draw Background if(ARXmenu.mda->pTexCredits) { EERIEDrawBitmap2(GDevice, 0, 0, ARX_CLEAN_WARN_CAST_FLOAT(DANAESIZX), ARX_CLEAN_WARN_CAST_FLOAT(DANAESIZY + 1), .999f, ARXmenu.mda->pTexCredits, 0xFFFFFFFF); } danaeApp.DANAEEndRender(); //Use time passed between frame to create scroll effect //ARX_LOG("CreditStart %f, CreditGet ARX_TIME_Get %f ", ARXmenu.mda->creditstart,ARX_TIME_Get( false )); ARXmenu.mda->creditspos-=0.025f*(float)(ARX_TIME_Get( false )-ARXmenu.mda->creditstart); ARXmenu.mda->creditstart=ARX_TIME_Get( false ); if( SUCCEEDED( danaeApp.m_pddsRenderTarget->GetDC(&hDC) ) ) { SetBkMode(hDC,TRANSPARENT); std::vector::const_iterator it = CreditsData.aCreditsInformations.begin() + CreditsData.iFirstLine ; for (; it != CreditsData.aCreditsInformations.end(); ++it) { //Update the Y word display float yy = it->sPos.cy + ARXmenu.mda->creditspos; //Display the text only if he is on the viewport if ((yy >= -CreditsData.iFontAverageHeight) && (yy <= DANAESIZY)) { if (oldRef != it->fColors) //Little optimization { SetTextColor(hDC, it->fColors); oldRef = it->fColors; } SelectObject(hDC, hFontCredits); //Display the text on the screen TextOutW( hDC, it->sPos.cx, ARX_CLEAN_WARN_CAST_INT(yy), it->sText.c_str(), it->sText.length() ); ++drawn; } if (yy <= -CreditsData.iFontAverageHeight) { ++CreditsData.iFirstLine; } if ( yy >= DANAESIZY ) break ; //it's useless to continue because next phrase will not be inside the viewport } danaeApp.m_pddsRenderTarget->ReleaseDC(hDC); } } if ( (iSize <= CreditsData.iFirstLine) && ( iFadeAction != AMCM_MAIN ) ) { ARXmenu.mda->creditspos = 0; ARXmenu.mda->creditstart = 0 ; CreditsData.iFirstLine = 0 ; bFadeInOut = true; bFade = true; iFadeAction=AMCM_MAIN; ARX_MENU_LaunchAmb(AMB_MENU); } danaeApp.DANAEStartRender(); if(ProcessFadeInOut(bFadeInOut,0.1f)) { switch(iFadeAction) { case AMCM_MAIN: ARXmenu.currentmode=AMCM_MAIN; iFadeAction=-1; bFadeInOut=false; bFade=true; break; } } danaeApp.DANAEEndRender(); SETZWRITE(GDevice,true); danaeApp.EnableZBuffer(); } //----------------------------------------------------------------------------- void Check_Apply() { if(pMenuElementApply) { if( (pMenuConfig->bBumpMapping!=pMenuConfig->bNewBumpMapping)|| (pMenuConfig->iTextureResol!=pMenuConfig->iNewTextureResol)|| (pMenuConfig->iWidth!=pMenuConfig->iNewWidth)|| (pMenuConfig->iHeight!=pMenuConfig->iNewHeight)|| (pMenuConfig->iBpp!=pMenuConfig->iNewBpp) ) { pMenuElementApply->SetCheckOn(); ((CMenuElementText*)pMenuElementApply)->lColor=((CMenuElementText*)pMenuElementApply)->lOldColor; } else { if(((CMenuElementText*)pMenuElementApply)->lColor!=RGB(127,127,127)) { pMenuElementApply->SetCheckOff(); ((CMenuElementText*)pMenuElementApply)->lOldColor=((CMenuElementText*)pMenuElementApply)->lColor; ((CMenuElementText*)pMenuElementApply)->lColor=RGB(127,127,127); } } } } //----------------------------------------------------------------------------- static void FadeInOut(float _fVal) { D3DTLVERTEX d3dvertex[4]; int iColor=D3DRGBA(_fVal,_fVal,_fVal,1.f); d3dvertex[0].sx=0; d3dvertex[0].sy=0; d3dvertex[0].sz=0.f; d3dvertex[0].rhw=0.999999f; d3dvertex[0].color=iColor; d3dvertex[1].sx=ARX_CLEAN_WARN_CAST_D3DVALUE(DANAESIZX); d3dvertex[1].sy=0; d3dvertex[1].sz=0.f; d3dvertex[1].rhw=0.999999f; d3dvertex[1].color=iColor; d3dvertex[2].sx=0; d3dvertex[2].sy=ARX_CLEAN_WARN_CAST_D3DVALUE(DANAESIZY); d3dvertex[2].sz=0.f; d3dvertex[2].rhw=0.999999f; d3dvertex[2].color=iColor; d3dvertex[3].sx=ARX_CLEAN_WARN_CAST_D3DVALUE(DANAESIZX); d3dvertex[3].sy=ARX_CLEAN_WARN_CAST_D3DVALUE(DANAESIZY); d3dvertex[3].sz=0.f; d3dvertex[3].rhw=0.999999f; d3dvertex[3].color=iColor; SETTC(GDevice,NULL); SETALPHABLEND(GDevice,TRUE); GDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_ZERO); GDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_INVSRCCOLOR); SETZWRITE(GDevice, false); GDevice->SetRenderState(D3DRENDERSTATE_ZENABLE,false); GDevice->SetRenderState( D3DRENDERSTATE_CULLMODE,D3DCULL_NONE); EERIEDRAWPRIM( GDevice, D3DPT_TRIANGLESTRIP, D3DFVF_TLVERTEX | D3DFVF_DIFFUSE, d3dvertex, 4, 0, EERIE_NOCOUNT ); SETALPHABLEND(GDevice,FALSE); SETZWRITE(GDevice, true); danaeApp.EnableZBuffer(); GDevice->SetRenderState( D3DRENDERSTATE_CULLMODE,D3DCULL_CCW); } //----------------------------------------------------------------------------- bool ProcessFadeInOut(bool _bFadeIn,float _fspeed) { FadeInOut(fFadeInOut); if(!bFade) return true; if(_bFadeIn) { fFadeInOut+=_fspeed*ARXDiffTimeMenu*DIV100; if(fFadeInOut>1.f) { fFadeInOut=1.f; bFade=false; } } else { fFadeInOut-=_fspeed*ARXDiffTimeMenu*DIV100; if(fFadeInOut<0.f) { fFadeInOut=0.f; bFade=false; } } return false; } //----------------------------------------------------------------------------- bool Menu2_Render() { ARXOldTimeMenu = ARXTimeMenu; ARXTimeMenu = ARX_TIME_Get( false ); ARXDiffTimeMenu = ARXTimeMenu-ARXOldTimeMenu; if (ARXDiffTimeMenu < 0) //this mean ArxTimeMenu is reseted ARXDiffTimeMenu = 0 ; GDevice->SetTextureStageState(0,D3DTSS_MINFILTER,D3DTFP_LINEAR); GDevice->SetTextureStageState(0,D3DTSS_MAGFILTER,D3DTFP_LINEAR); if ((AMCM_NEWQUEST==ARXmenu.currentmode) || (AMCM_CREDITS==ARXmenu.currentmode) || (AMCM_CDNOTFOUND==ARXmenu.currentmode)) { if(pWindowMenu) { delete pWindowMenu; pWindowMenu=NULL; } if(pMenu) { delete pMenu; pMenu=NULL; } switch(ARXmenu.currentmode) { case AMCM_CREDITS: DrawCredits(); return true; break; } return FALSE; } if(!danaeApp.DANAEStartRender()) { return true; } if(pTextManage) { pTextManage->Clear(); } GDevice->SetTextureStageState(0,D3DTSS_ADDRESS,D3DTADDRESS_CLAMP); GDevice->SetRenderState( D3DRENDERSTATE_FOGENABLE, false); SETZWRITE(GDevice, false); GDevice->SetRenderState( D3DRENDERSTATE_ZENABLE,false); GDevice->SetRenderState( D3DRENDERSTATE_CULLMODE,D3DCULL_NONE); MENUSTATE eOldMenuState=NOP; MENUSTATE eM; if(!pMenu) { eM=NOP; } else { eM=pMenu->eOldMenuWindowState; } long lColor = RGB(232, 204, 142); if( (!pMenu)|| ((pMenu)&&(pMenu->bReInitAll)) ) { _TCHAR szMenuText[256]; bool bBOOL = false; CMenuElementText *me; if( (pMenu) && (pMenu->bReInitAll) ) { eOldMenuState=pMenu->eOldMenuState; if(pWindowMenu) { delete pWindowMenu; pWindowMenu=NULL; } if(pMenu) { delete pMenu; pMenu=NULL; } } pMenu = new CMenuState(MAIN); pMenu->eOldMenuWindowState=eM; pMenu->pTexBackGround = MakeTCFromFile("Graph\\Interface\\menus\\menu_main_background.bmp"); int iPosMenuPrincipaleX = 370; int iPosMenuPrincipaleY=100; int iDecMenuPrincipaleY=50; #define MACRO_MENU_PRINCIPALE(MACRO_button,MACRO_menu,MACRO_locate,MACRO_check){\ PAK_UNICODE_GetPrivateProfileString(_T(MACRO_locate), _T("string"), _T(""), szMenuText, 256, NULL);\ me = new CMenuElementText(MACRO_button, hFontMainMenu, szMenuText, RATIO_X(iPosMenuPrincipaleX), RATIO_Y(iPosMenuPrincipaleY), lColor, 1.8f, MACRO_menu);\ if(MACRO_check)\ {\ pMenuElementResume=me;\ ARXMenu_GetResumeGame(bBOOL);\ if (bBOOL)\ {\ me->SetCheckOn();\ }\ else\ {\ me->SetCheckOff();\ me->lColor=RGB(127,127,127);\ }\ }\ pMenu->AddMenuElement(me);\ iPosMenuPrincipaleY+=iDecMenuPrincipaleY;\ } MACRO_MENU_PRINCIPALE(BUTTON_MENUMAIN_RESUMEGAME,RESUME_GAME,"system_menus_main_resumegame",1); MACRO_MENU_PRINCIPALE(BUTTON_MENUMAIN_NEWQUEST,NEW_QUEST,"system_menus_main_newquest",0); MACRO_MENU_PRINCIPALE(-1,EDIT_QUEST,"system_menus_main_editquest",0); MACRO_MENU_PRINCIPALE(BUTTON_MENUMAIN_OPTIONS,OPTIONS,"system_menus_main_options",0); MACRO_MENU_PRINCIPALE(BUTTON_MENUMAIN_CREDITS,CREDITS,"system_menus_main_credits",0); MACRO_MENU_PRINCIPALE(-1,QUIT,"system_menus_main_quit",0); #undef MACRO_MENU_PRINCIPALE //version _TCHAR twVersion[32]; MultiByteToWideChar(CP_ACP, 0, GetVersionString()+3, -1, twVersion, 32 ); me = new CMenuElementText( -1, hFontControls, twVersion, RATIO_X(580), RATIO_Y(65), lColor, 1.0f, NOP ); me->SetCheckOff(); me->lColor=RGB(127,127,127); pMenu->AddMenuElement(me); } bool bScroll=true; { if(pMenuElementResume) { bool bTemp; ARXMenu_GetResumeGame(bTemp); if(bTemp) { pMenuElementResume->SetCheckOn(); ((CMenuElementText*)pMenuElementResume)->lColor=lColor; } else { pMenuElementResume->SetCheckOff(); ((CMenuElementText*)pMenuElementResume)->lColor=RGB(127,127,127); } } ARX_CHECK_INT(ARXDiffTimeMenu); MENUSTATE eMenuState = pMenu->Update(ARX_CLEAN_WARN_CAST_INT(ARXDiffTimeMenu)); if(eOldMenuState!=NOP) { eMenuState=eOldMenuState; bScroll=false; } if( eMenuState == RESUME_GAME ) { pTextManage->Clear(); ARXmenu.currentmode = AMCM_OFF; pMenu->eMenuState = NOP; pMenu->pZoneClick = NULL; if(pWindowMenu) { delete pWindowMenu; pWindowMenu=NULL; } if(pMenu) { delete pMenu; pMenu=NULL; } SETALPHABLEND(GDevice,FALSE); GDevice->SetTextureStageState(0,D3DTSS_ADDRESS,D3DTADDRESS_WRAP); SETZWRITE(GDevice, true); danaeApp.EnableZBuffer(); danaeApp.DANAEEndRender(); return true; } else if (eMenuState!=NOP ) { pMenu->eOldMenuState=eMenuState; if(pWindowMenu) { delete pWindowMenu; pWindowMenu=NULL; } //suivant la resolution int iWindowMenuWidth=(321); int iWindowMenuHeight=(430); int iWindowMenuPosX=(20); int iWindowMenuPosY=(480-iWindowMenuHeight)>>1; int iWindowConsoleOffsetX=(0); int iWindowConsoleOffsetY=(14-10); int iWindowConsoleWidth=(iWindowMenuWidth-iWindowConsoleOffsetX); int iWindowConsoleHeight=(iWindowMenuHeight-iWindowConsoleOffsetY+20); /////////////////////// float fPosX1 = RATIO_X(20); float fPosX2 = RATIO_X(200); ARX_CHECK_INT(fPosX2); int iPosX2 = ARX_CLEAN_WARN_CAST_INT(fPosX2); float fPosBack = RATIO_X(10); float fPosBackY = RATIO_Y(190); float fPosNext = RATIO_X(140); float fPosApply = RATIO_X(240); float fPosBDAY = RATIO_Y(380); pWindowMenu = new CWindowMenu(iWindowMenuPosX,iWindowMenuPosY,iWindowMenuWidth,iWindowMenuHeight,1); switch(eMenuState) { //------------------ START NEW_QUEST case NEW_QUEST: { _TCHAR szMenuText[256]; bool bBOOL = false; ARXMenu_GetResumeGame(bBOOL); if (!bBOOL) { break; } CMenuElement *me = NULL; CWindowMenuConsole *pWindowMenuConsole=new CWindowMenuConsole(iWindowConsoleOffsetX,iWindowConsoleOffsetY,iWindowConsoleWidth,iWindowConsoleHeight,NEW_QUEST); PAK_UNICODE_GetPrivateProfileString(_T("system_menus_main_editquest_confirm"), _T("string"), _T(""), szMenuText, 256, NULL); me=new CMenuElementText(-1, hFontMenu, szMenuText,0,0,lColor,1.f, NOP); me->bCheck = false; pWindowMenuConsole->AddMenuCenter(me); PAK_UNICODE_GetPrivateProfileString(_T("system_menus_main_newquest_confirm"), _T("string"), _T(""), szMenuText, 256, NULL); me=new CMenuElementText(-1, hFontMenu, szMenuText,0,0,lColor,1.f, NOP); me->bCheck = false; pWindowMenuConsole->AddMenuCenter(me); CMenuPanel *pPanel = new CMenuPanel(); PAK_UNICODE_GetPrivateProfileString(_T("system_yes"), _T("string"), _T(""), szMenuText, 256, NULL); _tcscat(szMenuText, _T(" ")); me = new CMenuElementText(BUTTON_MENUNEWQUEST_CONFIRM, hFontMenu, szMenuText, 0, 0,lColor,1.f, NEW_QUEST_ENTER_GAME); me->SetPos(RATIO_X(iWindowConsoleWidth - (me->GetWidth() + 10)),0); pPanel->AddElementNoCenterIn(me); PAK_UNICODE_GetPrivateProfileString(_T("system_no"), _T("string"), _T(""), szMenuText, 256, NULL); me = new CMenuElementText(-1, hFontMenu, szMenuText, fPosBack, 0,lColor,1.f, MAIN); me->SetShortCut(DIK_ESCAPE); pPanel->AddElementNoCenterIn(me); ARX_CHECK_INT(fPosBDAY); pPanel->Move(0, ARX_CLEAN_WARN_CAST_INT(fPosBDAY) ); pWindowMenuConsole->AddMenu(pPanel); pWindowMenu->AddConsole(pWindowMenuConsole); pWindowMenu->eCurrentMenuState=NEW_QUEST; } break; //------------------ END NEW_QUEST case EDIT_QUEST: { CMenuElement *me; CMenuElement *me01; CMenuPanel *pPanel; TextureContainer *pTex; _TCHAR szMenuText[256]; CWindowMenuConsole *pWindowMenuConsole=new CWindowMenuConsole(iWindowConsoleOffsetX,iWindowConsoleOffsetY,iWindowConsoleWidth,iWindowConsoleHeight,EDIT_QUEST); PAK_UNICODE_GetPrivateProfileString(_T("system_menus_main_editquest_load"), _T("string"), _T(""), szMenuText, 256, NULL); me = new CMenuElementText(BUTTON_MENUEDITQUEST_LOAD_INIT, hFontMenu, szMenuText, 0, 0, lColor, 1.f, EDIT_QUEST_LOAD); pWindowMenuConsole->AddMenuCenter(me); PAK_UNICODE_GetPrivateProfileString(_T("system_menus_main_editquest_save"), _T("string"), _T(""), szMenuText, 256, NULL); me = new CMenuElementText(-1, hFontMenu, szMenuText, 0, 0, lColor, 1.f, EDIT_QUEST_SAVE); bool bBOOL; ARXMenu_GetResumeGame(bBOOL); if(!FINAL_RELEASE) bBOOL=true; if (!bBOOL) { me->SetCheckOff(); ((CMenuElementText*)me)->lColor=RGB(127,127,127); } pWindowMenuConsole->AddMenuCenter(me); pTex = MakeTCFromFile("\\Graph\\interface\\menus\\back.bmp"); me = new CMenuCheckButton(-1, fPosBack, fPosBackY, pTex?pTex->m_dwWidth:0, pTex, NULL, NULL); me->eMenuState = MAIN; me->SetShortCut(DIK_ESCAPE); pWindowMenuConsole->AddMenu(me); pWindowMenu->eCurrentMenuState = EDIT_QUEST; pWindowMenu->AddConsole(pWindowMenuConsole); // LOAD --------------------------------------------------- pWindowMenuConsole=new CWindowMenuConsole(iWindowConsoleOffsetX,iWindowConsoleOffsetY-(40),iWindowConsoleWidth,iWindowConsoleHeight,EDIT_QUEST_LOAD); pWindowMenuConsole->iInterligne = 5; pTex = MakeTCFromFile("\\Graph\\interface\\icons\\Menu_main_Load.bmp"); me = new CMenuCheckButton(-1, 0, 0, pTex?pTex->m_dwWidth:0, pTex, NULL, NULL); ((CMenuCheckButton *)me)->bCheck = false; pWindowMenuConsole->AddMenuCenter(me); { //QUICK LOAD _TCHAR szMenuText[256]; _tcscpy(szMenuText,_T(QUICK_SAVE_ID)); _TCHAR szMenuText1[256]; _tcscpy(szMenuText1,_T(QUICK_SAVE_ID1)); //LOAD int iI; int iFirst=2; bool b1 = false; bool b2 = false; while(iFirst>=0) { for(iI=1; iI<(save_c); iI++) { _TCHAR tex[256]; _stprintf(tex, _T("%S"), save_l[iI].name); CMenuElementText *me02; _TCHAR tex2[256]; _tcscpy(tex2,tex); _tcsupr(tex2); if(!_tcscmp(szMenuText, tex2) || !_tcscmp(szMenuText1, tex2)) { if(!iFirst || (b1 && b2)) continue; PAK_UNICODE_GetPrivateProfileString(_T("system_menus_main_quickloadsave"), _T("string"), _T("Quick"), tex, 256, NULL); if (_tcsstr(szMenuText, tex2)) { if (b1) continue; b1 = true; } else if (_tcsstr(szMenuText1, tex2)) { if (b2) continue; b2 = true; } char tex3[256]; char tex4[256]; strcpy(tex4," "); GetDateFormat( LOCALE_SYSTEM_DEFAULT, 0, &save_l[iI].stime, "MMM dd yyyy", tex3, 256); strcat(tex4,tex3); GetTimeFormat( LOCALE_SYSTEM_DEFAULT, 0, &save_l[iI].stime, " HH:mm", tex3, 256); strcat(tex4,tex3); MultiByteToWideChar( CP_ACP, 0, tex4, -1, tex2, 256); _tcscat(tex,tex2); me02 = new CMenuElementText(BUTTON_MENUEDITQUEST_LOAD, hFontControls, tex, fPosX1, 0.f, lColor, 0.8f, NOP); me02->lData=iI; pWindowMenuConsole->AddMenuCenterY((CMenuElementText*)me02); break; } else { if(iFirst) continue; char tex3[256]; char tex4[256]; strcpy(tex4," "); GetDateFormat( LOCALE_SYSTEM_DEFAULT, 0, &save_l[iI].stime, "MMM dd yyyy", tex3, 256); strcat(tex4,tex3); GetTimeFormat( LOCALE_SYSTEM_DEFAULT, 0, &save_l[iI].stime, " HH:mm", tex3, 256); strcat(tex4,tex3); MultiByteToWideChar( CP_ACP, 0, tex4, -1, tex2, 256); _tcscat(tex,tex2); me02=new CMenuElementText(BUTTON_MENUEDITQUEST_LOAD, hFontControls,tex, fPosX1,0.f,lColor, 0.8f, NOP); } me02->lData=iI; pWindowMenuConsole->AddMenuCenterY((CMenuElementText*)me02); } iFirst--; } me01 = new CMenuElementText(-1, hFontControls, _T(" "), fPosX1, 0.f, lColor, 0.8f, EDIT_QUEST_SAVE_CONFIRM); me01->SetCheckOff(); pWindowMenuConsole->AddMenuCenterY((CMenuElementText*)me01); CMenuPanel *pc = new CMenuPanel(); PAK_UNICODE_GetPrivateProfileString(_T("system_menus_main_editquest_load"), _T("string"), _T(""), szMenuText, 256, NULL); _tcscat(szMenuText, _T(" ")); me = new CMenuElementText(BUTTON_MENUEDITQUEST_LOAD_CONFIRM, hFontMenu, szMenuText, 0, 0,lColor,1.f, MAIN); me->SetPos(RATIO_X(iWindowConsoleWidth-10)-me->GetWidth(), fPosBDAY + RATIO_Y(40)); pLoadConfirm=(CMenuElementText*)me; me->SetCheckOff(); ((CMenuElementText*)me)->lOldColor=((CMenuElementText*)me)->lColor; ((CMenuElementText*)me)->lColor=RGB(127,127,127); pWindowMenuConsole->AddMenu(me); pTex = MakeTCFromFile("\\Graph\\interface\\menus\\back.bmp"); me = new CMenuCheckButton(-1, fPosBack, fPosBackY + RATIO_Y(20), pTex?pTex->m_dwWidth:0, pTex, NULL, NULL); me->eMenuState = EDIT_QUEST; me->SetShortCut(DIK_ESCAPE); pc->AddElementNoCenterIn(me); pWindowMenuConsole->AddMenu(pc); } pWindowMenu->AddConsole(pWindowMenuConsole); // SAVE---------------------------------------------------- pWindowMenuConsole=new CWindowMenuConsole(iWindowConsoleOffsetX,iWindowConsoleOffsetY - (40), iWindowConsoleWidth,iWindowConsoleHeight,EDIT_QUEST_SAVE); pWindowMenuConsole->iInterligne = 5; pTex = MakeTCFromFile("\\Graph\\interface\\icons\\Menu_main_save.bmp"); me = new CMenuCheckButton(-1, fPosBack-(pTex?(pTex->m_dwDeviceWidth-pTex->m_dwWidth):0), 0, pTex?pTex->m_dwWidth:0, pTex, NULL, NULL); ((CMenuCheckButton *)me)->bCheck = false; pWindowMenuConsole->AddMenuCenter(me); //QUICK SAVE _TCHAR szMenuText1[256]; _tcscpy(szMenuText,_T(QUICK_SAVE_ID)); _tcscpy(szMenuText1,_T(QUICK_SAVE_ID1)); //SAVE int iFirst=2; bool b1 = false; bool b2 = false; while(iFirst>=0) { if(save_c!=1) { for(int iI=1;iI<(save_c);iI++) { _TCHAR tex[256]; _stprintf(tex, _T("%S"), save_l[iI].name); _TCHAR tex2[256]; _tcscpy(tex2,tex); _tcsupr(tex2); if(!_tcscmp(szMenuText, tex2) || !_tcscmp(szMenuText1, tex2)) { if(!iFirst || (b1 && b2)) continue; PAK_UNICODE_GetPrivateProfileString(_T("system_menus_main_quickloadsave"), _T("string"), _T("Quick"), tex, 256, NULL); if (_tcsstr(szMenuText, tex2)) { if (b1) continue; b1 = true; } else if (_tcsstr(szMenuText1, tex2)) { if (b2) continue; b2 = true; } char tex3[256]; char tex4[256]; strcpy(tex4," "); GetDateFormat( LOCALE_SYSTEM_DEFAULT, 0, &save_l[iI].stime, "MMM dd yyyy", tex3, 256); strcat(tex4,tex3); GetTimeFormat( LOCALE_SYSTEM_DEFAULT, 0, &save_l[iI].stime, " HH:mm", tex3, 256); strcat(tex4,tex3); MultiByteToWideChar( CP_ACP, 0, tex4, -1, tex2, 256); _tcscat(tex,tex2); me = new CMenuElementText(BUTTON_MENUEDITQUEST_SAVEINFO, hFontControls, tex, fPosX1, 0.f, RGB(127, 127, 127), 0.8f, EDIT_QUEST_SAVE_CONFIRM); me->SetCheckOff(); me->lData=iI; pWindowMenuConsole->AddMenuCenterY(me); break; } else { if(iFirst) continue; char tex3[256]; char tex4[256]; strcpy(tex4," "); GetDateFormat( LOCALE_SYSTEM_DEFAULT, 0, &save_l[iI].stime, "MMM dd yyyy", tex3, 256); strcat(tex4,tex3); GetTimeFormat( LOCALE_SYSTEM_DEFAULT, 0, &save_l[iI].stime, " HH:mm", tex3, 256); strcat(tex4,tex3); MultiByteToWideChar( CP_ACP, 0, tex4, -1, tex2, 256); _tcscat(tex,tex2); me = new CMenuElementText(BUTTON_MENUEDITQUEST_SAVEINFO, hFontControls, tex, fPosX1, 0.f, lColor, 0.8f, EDIT_QUEST_SAVE_CONFIRM); } me->lData=iI; pWindowMenuConsole->AddMenuCenterY(me); } } iFirst--; } pTex = MakeTCFromFile("\\Graph\\interface\\Icons\\Arx_logo_08.bmp"); for(int iI=save_c; iI<=15; iI++) { _TCHAR tex[256]; _stprintf(tex, _T("-%04d-") ,iI); CMenuElementText * me01 = new CMenuElementText(-1, hFontControls, tex, fPosX1, 0.f, lColor, 0.8f, EDIT_QUEST_SAVE_CONFIRM); me01->eMenuState=EDIT_QUEST_SAVE_CONFIRM; me01->lData=0; pWindowMenuConsole->AddMenuCenterY((CMenuElementText*)me01); } me01 = new CMenuElementText(-1, hFontControls, _T(" "), fPosX1, 0.f, lColor, 0.8f, EDIT_QUEST_SAVE_CONFIRM); me01->SetCheckOff(); pWindowMenuConsole->AddMenuCenterY((CMenuElementText*)me01); pTex = MakeTCFromFile("\\Graph\\interface\\menus\\back.bmp"); me = new CMenuCheckButton(-1, fPosBack, fPosBackY + RATIO_Y(20), pTex?pTex->m_dwWidth:0, pTex, NULL, NULL); me->eMenuState = EDIT_QUEST; me->SetShortCut(DIK_ESCAPE); pWindowMenuConsole->AddMenu(me); pWindowMenu->AddConsole(pWindowMenuConsole); // SAVE CONFIRM-------------------------------------------- pWindowMenuConsole = new CWindowMenuConsole(iWindowConsoleOffsetX,iWindowConsoleOffsetY,iWindowConsoleWidth,iWindowConsoleHeight,EDIT_QUEST_SAVE_CONFIRM); pTex = MakeTCFromFile("\\Graph\\interface\\icons\\Menu_main_save.bmp"); me = new CMenuCheckButton(-1, 0, 0, pTex?pTex->m_dwWidth:0, pTex, NULL, NULL); ((CMenuCheckButton *)me)->bCheck = false; pWindowMenuConsole->AddMenuCenter(me); PAK_UNICODE_GetPrivateProfileString(_T("system_menu_editquest_newsavegame"), _T("string"), _T("---"), szMenuText, 256, NULL); me = new CMenuElementText(-1, hFontMenu, szMenuText, fPosX1, 0.f, lColor, 1.f, NOP); me->lData=0; pWindowMenuConsole->AddMenuCenter(me); me->eState=EDIT; me->ePlace=CENTER; pPanel = new CMenuPanel(); PAK_UNICODE_GetPrivateProfileString(_T("system_menus_main_editquest_save"), _T("string"), _T(""), szMenuText, 256, NULL); me = new CMenuElementText(BUTTON_MENUEDITQUEST_SAVE, hFontMenu, szMenuText, 0, 0,lColor,1.f, MAIN); me->SetPos(RATIO_X(iWindowConsoleWidth-10)-me->GetWidth(), fPosBDAY); pPanel->AddElementNoCenterIn(me); pTex = MakeTCFromFile("\\Graph\\interface\\menus\\back.bmp"); me = new CMenuCheckButton(-1, fPosBack, fPosBackY, pTex?pTex->m_dwWidth:0, pTex, NULL, NULL); me->eMenuState = EDIT_QUEST_SAVE; me->SetShortCut(DIK_ESCAPE); pPanel->AddElementNoCenterIn(me); pWindowMenuConsole->AddMenu(pPanel); pWindowMenu->AddConsole(pWindowMenuConsole); } break; //------------------ END SAVE_QUEST case MULTIPLAYER: { } break; //------------------ START OPTIONS case OPTIONS_INPUT: { MessageBox(0, "", "", 0); } break; case OPTIONS: { _TCHAR szMenuText[256]; CMenuElement *me; CMenuPanel *pc; TextureContainer *pTex; CWindowMenuConsole *pWindowMenuConsole=new CWindowMenuConsole(iWindowConsoleOffsetX,iWindowConsoleOffsetY,iWindowConsoleWidth,iWindowConsoleHeight,OPTIONS); PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_video"), _T("string"), _T(""), szMenuText, 256, NULL); me = new CMenuElementText(BUTTON_MENUOPTIONSVIDEO_INIT, hFontMenu, szMenuText, 0, 0,lColor,1.f,OPTIONS_VIDEO); pWindowMenuConsole->AddMenuCenter(me); PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_audio"), _T("string"), _T(""), szMenuText, 256, NULL); me = new CMenuElementText(-1, hFontMenu, szMenuText, 0, 0,lColor,1.f,OPTIONS_AUDIO); pWindowMenuConsole->AddMenuCenter(me); PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_input"), _T("string"), _T(""), szMenuText, 256, NULL); me = new CMenuElementText(-1, hFontMenu, szMenuText, 0, 0,lColor,1.f,OPTIONS_INPUT); pWindowMenuConsole->AddMenuCenter(me); pTex = MakeTCFromFile("\\Graph\\interface\\menus\\back.bmp"); me = new CMenuCheckButton(-1, fPosBack, fPosBackY, pTex?pTex->m_dwWidth:0, pTex, NULL, NULL); me->eMenuState = MAIN; me->SetShortCut(DIK_ESCAPE); pWindowMenuConsole->AddMenu(me); pWindowMenu->AddConsole(pWindowMenuConsole); //------------------ END OPTIONS //------------------ START VIDEO pWindowMenuConsole=new CWindowMenuConsole(iWindowConsoleOffsetX,iWindowConsoleOffsetY - (40),iWindowConsoleWidth,iWindowConsoleHeight, OPTIONS_VIDEO); pc = new CMenuPanel(); PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_video_resolution"), _T("string"), _T(""), szMenuText, 256, NULL); _tcscat(szMenuText, _T(" ")); me = new CMenuElementText(-1, hFontMenu, szMenuText, fPosX1, 0.f, lColor, 1.f, NOP); me->SetCheckOff(); pc->AddElement(me); int iOffsetX = iPosX2; int iModeX,iModeY,iModeBpp; ARXMenu_Options_Video_GetResolution(iModeX,iModeY,iModeBpp); me = new CMenuSliderText(BUTTON_MENUOPTIONSVIDEO_RESOLUTION, 0, 0); pMenuSliderResol =(CMenuSliderText*)me; int nb=danaeApp.m_pDeviceInfo->dwNumModes; vector vBpp; vBpp.clear(); int i=0; for(;ipddsdModes[i].dwWidth,danaeApp.m_pDeviceInfo->pddsdModes[i].dwHeight); ARX_CHECK_NOT_NEG( iModeBpp ); if( danaeApp.m_pDeviceInfo->pddsdModes[i].ddpfPixelFormat.dwRGBBitCount == ARX_CAST_UINT( iModeBpp ) ) { ((CMenuSliderText *)me)->AddText(new CMenuElementText(-1, hFontMenu, szMenuText, 0, 0,lColor,1.f, (MENUSTATE)(OPTIONS_VIDEO_RESOLUTION_0+i))); ARX_CHECK_NOT_NEG( iModeX ); ARX_CHECK_NOT_NEG( iModeY ); if( ( danaeApp.m_pDeviceInfo->pddsdModes[i].dwWidth == ARX_CAST_UINT( iModeX ) ) && ( danaeApp.m_pDeviceInfo->pddsdModes[i].dwHeight == ARX_CAST_UINT( iModeY ) ) ) { ((CMenuSliderText*)me)->iPos = ((CMenuSliderText *)me)->vText.size()-1; danaeApp.m_pDeviceInfo->ddsdFullscreenMode=danaeApp.m_pDeviceInfo->pddsdModes[i]; danaeApp.m_pDeviceInfo->dwCurrentMode=i; } } //bpp bool bExist=false; vector::iterator ii; for(ii=vBpp.begin();ii!=vBpp.end();ii++) { if (ARX_CAST_UINT(*ii) == danaeApp.m_pDeviceInfo->pddsdModes[i].ddpfPixelFormat.dwRGBBitCount) { bExist=true; break; } } if(!bExist) { vBpp.insert(vBpp.end(),danaeApp.m_pDeviceInfo->pddsdModes[i].ddpfPixelFormat.dwRGBBitCount); } } } float fRatio = (RATIO_X(iWindowConsoleWidth-9) - me->GetWidth()); ARX_CHECK_INT(fRatio); me->Move( ARX_CLEAN_WARN_CAST_INT(fRatio) ,0); pc->AddElement(me); pWindowMenuConsole->AddMenuCenterY(pc); CMenuPanel *pc1 = new CMenuPanel(); PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_video_texture"), _T("string"), _T(""), szMenuText, 256, NULL); _tcscat(szMenuText, _T(" ")); me = new CMenuElementText(-1, hFontMenu, szMenuText, fPosX1, 0.f, lColor, 1.f, NOP); me->SetCheckOff(); pc1->AddElement(me); iOffsetX = iPosX2; me = new CMenuSliderText(BUTTON_MENUOPTIONSVIDEO_TEXTURES, 0, 0); pMenuSliderTexture = (CMenuSliderText*)me; PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_video_texture_low"), _T("string"), _T(""), szMenuText, 256, NULL); ((CMenuSliderText *)me)->AddText(new CMenuElementText(-1, hFontMenu, szMenuText, 0, 0,lColor,1.f, OPTIONS_VIDEO)); PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_video_texture_med"), _T("string"), _T(""), szMenuText, 256, NULL); ((CMenuSliderText *)me)->AddText(new CMenuElementText(-1, hFontMenu, szMenuText, 0, 0,lColor,1.f, OPTIONS_VIDEO)); PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_video_texture_high"), _T("string"), _T(""), szMenuText, 256, NULL); ((CMenuSliderText *)me)->AddText(new CMenuElementText(-1, hFontMenu, szMenuText, 0, 0,lColor,1.f, OPTIONS_VIDEO)); fRatio = (RATIO_X(iWindowConsoleWidth-9) - me->GetWidth()); ARX_CHECK_INT(fRatio); me->Move( ARX_CLEAN_WARN_CAST_INT(fRatio) ,0); int iSize = me->GetWidth(); pc1->AddElement(me); int iQuality = 0; ARXMenu_Options_Video_GetTextureQuality(iQuality); ((CMenuSliderText *)me)->iPos = iQuality; pc = new CMenuPanel(); PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_video_bpp"), _T("string"), _T(""), szMenuText, 256, NULL); _tcscat(szMenuText, _T(" ")); me = new CMenuElementText(-1, hFontMenu, szMenuText, fPosX1, 0.f, lColor, 1.f, NOP); me->SetCheckOff(); pc->AddElement(me); me = new CMenuSliderText(BUTTON_MENUOPTIONSVIDEO_BPP, 0, 0); pMenuSliderBpp = (CMenuSliderText*)me; vector::iterator ii; for(ii=vBpp.begin();ii!=vBpp.end();ii++) { _itot(*ii,szMenuText,10); ((CMenuSliderText*)me)->AddText(new CMenuElementText(-1, hFontMenu, szMenuText, 0, 0, lColor, 1.f, (MENUSTATE)(BUTTON_MENUOPTIONSVIDEO_BPP+i))); if(*ii==iModeBpp) { ((CMenuSliderText*)me)->iPos = ((CMenuSliderText*)me)->vText.size()-1; } } ((CMenuSliderText *)me)->SetWidth(iSize); fRatio = (RATIO_X(iWindowConsoleWidth-9) - me->GetWidth()); ARX_CHECK_INT(fRatio); me->Move( ARX_CLEAN_WARN_CAST_INT(fRatio) ,0); pc->AddElement(me); pWindowMenuConsole->AddMenuCenterY(pc); pWindowMenuConsole->AddMenuCenterY(pc1); pc = new CMenuPanel(); PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_detail"), _T("string"), _T(""), szMenuText, 256, NULL); _tcscat(szMenuText, _T(" ")); me = new CMenuElementText(-1, hFontMenu, szMenuText, fPosX1, 0.f, lColor, 1.f, NOP); me->SetCheckOff(); pc->AddElement(me); iOffsetX = iPosX2; me = new CMenuSliderText(BUTTON_MENUOPTIONSVIDEO_OTHERSDETAILS, 0, 0); PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_video_texture_low"), _T("string"), _T(""), szMenuText, 256, NULL); ((CMenuSliderText *)me)->AddText(new CMenuElementText(-1, hFontMenu, szMenuText, 0, 0,lColor,1.f, OPTIONS_OTHERDETAILS)); PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_video_texture_med"), _T("string"), _T(""), szMenuText, 256, NULL); ((CMenuSliderText *)me)->AddText(new CMenuElementText(-1, hFontMenu, szMenuText, 0, 0,lColor,1.f, OPTIONS_OTHERDETAILS)); PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_video_texture_high"), _T("string"), _T(""), szMenuText, 256, NULL); ((CMenuSliderText *)me)->AddText(new CMenuElementText(-1, hFontMenu, szMenuText, 0, 0,lColor,1.f, OPTIONS_OTHERDETAILS)); fRatio = (RATIO_X(iWindowConsoleWidth-9) - me->GetWidth()); ARX_CHECK_INT(fRatio); me->Move( ARX_CLEAN_WARN_CAST_INT(fRatio) ,0); pc->AddElement(me); iQuality = 0; ARXMenu_Options_Video_GetDetailsQuality(iQuality); ((CMenuSliderText *)me)->iPos = iQuality; pWindowMenuConsole->AddMenuCenterY(pc); PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_video_bump"), _T("string"), _T(""), szMenuText, 256, NULL); _tcscat(szMenuText, _T(" ")); TextureContainer *pTex1 = MakeTCFromFile("\\Graph\\interface\\menus\\menu_checkbox_off.bmp"); TextureContainer *pTex2 = MakeTCFromFile("\\Graph\\interface\\menus\\menu_checkbox_on.bmp"); CMenuElementText * metemp = new CMenuElementText(-1, hFontMenu, szMenuText, fPosX1, 0.f, lColor, 1.f, NOP); metemp->SetCheckOff(); me = new CMenuCheckButton(BUTTON_MENUOPTIONSVIDEO_BUMP, 0, 0, pTex1->m_dwWidth, pTex1, pTex2, metemp); pMenuCheckButtonBump=(CMenuCheckButton*)me; bool bBOOL = false; ARXMenu_Options_Video_GetBump(bBOOL); if (bBOOL) { ((CMenuCheckButton*)me)->iState=1; } else { ((CMenuCheckButton*)me)->iState=0; } pWindowMenuConsole->AddMenuCenterY(me); pc = new CMenuPanel(); PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_video_brouillard"), _T("string"), _T(""), szMenuText, 256, NULL); me = new CMenuElementText(-1, hFontMenu, szMenuText, fPosX1, 0.f, lColor, 1.f, NOP); me->SetCheckOff(); pc->AddElement(me); me = new CMenuSlider(BUTTON_MENUOPTIONSVIDEO_FOG, iPosX2, 0); int iFog = 5; ARXMenu_Options_Video_GetFogDistance(iFog); ((CMenuSlider *)me)->iPos = iFog; pc->AddElement(me); pWindowMenuConsole->AddMenuCenterY(pc); pc = new CMenuPanel(); PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_video_gamma"), _T("string"), _T(""), szMenuText, 256, NULL); me = new CMenuElementText(-1, hFontMenu, szMenuText, fPosX1, 0.f, lColor, 1.f, NOP); me->SetCheckOff(); pc->AddElement(me); me = new CMenuSlider(BUTTON_MENUOPTIONSVIDEO_GAMMA, iPosX2, 0); int iGamma = 0; ARXMenu_Options_Video_GetGamma(iGamma); ((CMenuSlider*)me)->iPos = iGamma; pc->AddElement(me); pWindowMenuConsole->AddMenuCenterY(pc); pc = new CMenuPanel(); PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_video_luminosity"), _T("string"), _T("luminosity"), szMenuText, 256, NULL); me = new CMenuElementText(-1, hFontMenu, szMenuText, fPosX1, 0.f, lColor, 1.f, NOP); me->SetCheckOff(); pc->AddElement(me); me = new CMenuSlider(BUTTON_MENUOPTIONSVIDEO_LUMINOSITY, iPosX2, 0); int iLum = 0; ARXMenu_Options_Video_GetLuminosity(iLum); ((CMenuSlider*)me)->iPos = iLum; pc->AddElement(me); pWindowMenuConsole->AddMenuCenterY(pc); pc = new CMenuPanel(); PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_video_contrast"), _T("string"), _T("contrast"), szMenuText, 256, NULL); me = new CMenuElementText(-1, hFontMenu, szMenuText, fPosX1, 0.f, lColor, 1.f, NOP); me->SetCheckOff(); pc->AddElement(me); me = new CMenuSlider(BUTTON_MENUOPTIONSVIDEO_CONTRAST, iPosX2, 0); int iContrast = 0; ARXMenu_Options_Video_GetContrast(iContrast); ((CMenuSlider*)me)->iPos = iContrast; pc->AddElement(me); pWindowMenuConsole->AddMenuCenterY(pc); PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_video_crosshair"), _T("string"), _T("Show Crosshair"), szMenuText, 256, NULL); _tcscat(szMenuText, _T(" ")); pTex1 = MakeTCFromFile("\\Graph\\interface\\menus\\menu_checkbox_off.bmp"); pTex2 = MakeTCFromFile("\\Graph\\interface\\menus\\menu_checkbox_on.bmp"); metemp = new CMenuElementText(-1, hFontMenu, szMenuText, fPosX1, 0.f, lColor, 1.f, NOP); metemp->SetCheckOff(); me = new CMenuCheckButton(BUTTON_MENUOPTIONSVIDEO_CROSSHAIR, 0, 0, pTex1->m_dwWidth, pTex1, pTex2, metemp); if (pMenuConfig&&pMenuConfig->bShowCrossHair) { ((CMenuCheckButton*)me)->iState=1; } else { ((CMenuCheckButton*)me)->iState=0; } pWindowMenuConsole->AddMenuCenterY(me); PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_video_antialiasing"), _T("string"), _T("antialiasing"), szMenuText, 256, NULL); _tcscat(szMenuText, _T(" ")); pTex1 = MakeTCFromFile("\\Graph\\interface\\menus\\menu_checkbox_off.bmp"); pTex2 = MakeTCFromFile("\\Graph\\interface\\menus\\menu_checkbox_on.bmp"); metemp = new CMenuElementText(-1, hFontMenu, szMenuText, fPosX1, 0.f, lColor, 1.f, NOP); metemp->SetCheckOff(); me = new CMenuCheckButton(BUTTON_MENUOPTIONSVIDEO_ANTIALIASING, 0, 0, pTex1->m_dwWidth, pTex1, pTex2, metemp); if (pMenuConfig&&pMenuConfig->bAntiAliasing) { ((CMenuCheckButton*)me)->iState=1; } else { ((CMenuCheckButton*)me)->iState=0; } pWindowMenuConsole->AddMenuCenterY(me); ARX_SetAntiAliasing(); metemp = new CMenuElementText(-1, hFontMenu, _T("Enable Rendering Fix"), fPosX1, 0.f, lColor, 1.f, NOP); metemp->SetCheckOff(); me = new CMenuCheckButton(BUTTON_MENUOPTIONSVIDEO_DEBUGSETTING, 0, 0, pTex1->m_dwWidth, pTex1, pTex2, metemp); ((CMenuCheckButton*)me)->iState=ARXMenu_Options_Video_SetSoftRender(); pWindowMenuConsole->AddMenuCenterY(me); pc = new CMenuPanel(); PAK_UNICODE_GetPrivateProfileString(_T("system_menus_video_apply"), _T("string"), _T(""), szMenuText, 256, NULL); _tcscat(szMenuText, _T(" ")); pMenuElementApply = me = new CMenuElementText(BUTTON_MENUOPTIONSVIDEO_APPLY, hFontMenu, szMenuText, fPosApply, 0.f, lColor, 1.f, NOP); me->SetPos(RATIO_X(iWindowConsoleWidth-10)-me->GetWidth(), fPosBDAY + RATIO_Y(40)); me->SetCheckOff(); pc->AddElementNoCenterIn(me); pTex = MakeTCFromFile("\\Graph\\interface\\menus\\back.bmp"); me = new CMenuCheckButton(BUTTON_MENUOPTIONSVIDEO_BACK, fPosBack, fPosBackY + RATIO_Y(20), pTex?pTex->m_dwWidth:0, pTex, NULL, NULL); me->eMenuState = OPTIONS; me->SetShortCut(DIK_ESCAPE); pc->AddElementNoCenterIn(me); pWindowMenuConsole->AddMenu(pc); pWindowMenu->AddConsole(pWindowMenuConsole); //------------------ END VIDEO //------------------ START AUDIO pWindowMenuConsole = new CWindowMenuConsole(iWindowConsoleOffsetX,iWindowConsoleOffsetY,iWindowConsoleWidth,iWindowConsoleHeight,OPTIONS_AUDIO); pc = new CMenuPanel(); PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_audio_master_volume"), _T("string"), _T(""), szMenuText, 256, NULL); me = new CMenuElementText(-1, hFontMenu, szMenuText, fPosX1, 0.f, lColor, 1.f, OPTIONS_AUDIO_VOLUME); me->SetCheckOff(); pc->AddElement(me); me = new CMenuSlider(BUTTON_MENUOPTIONSAUDIO_MASTER, iPosX2, 0); int iMaster = 0; ARXMenu_Options_Audio_GetMasterVolume(iMaster); ((CMenuSlider *)me)->iPos = iMaster; pc->AddElement(me); pWindowMenuConsole->AddMenuCenterY(pc); pc = new CMenuPanel(); PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_audio_effects_volume"), _T("string"), _T(""), szMenuText, 256, NULL); me = new CMenuElementText(-1, hFontMenu, szMenuText, fPosX1, 0.f, lColor, 1.f, OPTIONS_AUDIO); me->SetCheckOff(); pc->AddElement(me); me = new CMenuSlider(BUTTON_MENUOPTIONSAUDIO_SFX, iPosX2, 0); int iSfx = 0; ARXMenu_Options_Audio_GetSfxVolume(iSfx); ((CMenuSlider *)me)->iPos = iSfx; pc->AddElement(me); pWindowMenuConsole->AddMenuCenterY(pc); pc = new CMenuPanel(); PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_audio_speech_volume"), _T("string"), _T(""), szMenuText, 256, NULL); me = new CMenuElementText(-1, hFontMenu, szMenuText, fPosX1, 0.f, lColor, 1.f, OPTIONS_AUDIO); me->SetCheckOff(); pc->AddElement(me); me = new CMenuSlider(BUTTON_MENUOPTIONSAUDIO_SPEECH, iPosX2, 0); int iSpeech = 0; ARXMenu_Options_Audio_GetSpeechVolume(iSpeech); ((CMenuSlider *)me)->iPos = iSpeech; pc->AddElement(me); pWindowMenuConsole->AddMenuCenterY(pc); pc = new CMenuPanel(); PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_audio_ambiance_volume"), _T("string"), _T(""), szMenuText, 256, NULL); me = new CMenuElementText(-1, hFontMenu, szMenuText, fPosX1, 0.f, lColor, 1.f, OPTIONS_AUDIO); me->SetCheckOff(); pc->AddElement(me); me = new CMenuSlider(BUTTON_MENUOPTIONSAUDIO_AMBIANCE, iPosX2, 0); int iAmbiance = 0; ARXMenu_Options_Audio_GetAmbianceVolume(iAmbiance); ((CMenuSlider *)me)->iPos = iAmbiance; pc->AddElement(me); pWindowMenuConsole->AddMenuCenterY(pc); PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_audio_eax"), _T("string"), _T("EAX"), szMenuText, 256, NULL); _tcscat(szMenuText, _T(" ")); pTex1 = MakeTCFromFile("\\Graph\\interface\\menus\\menu_checkbox_off.bmp"); pTex2 = MakeTCFromFile("\\Graph\\interface\\menus\\menu_checkbox_on.bmp"); CMenuElementText * pElementText = new CMenuElementText(-1, hFontMenu, szMenuText, fPosX1, 0.f, lColor, 1.f, OPTIONS_INPUT); me = new CMenuCheckButton(BUTTON_MENUOPTIONSAUDIO_EAX, 0, 0, pTex1->m_dwWidth, pTex1, pTex2, pElementText); bool bEAX = true; if (bEAX) { ((CMenuCheckButton*)me)->iState=pMenuConfig->bEAX?1:0; } else { me->SetCheckOff(); pElementText->lColor=RGB(127,127,127); } pWindowMenuConsole->AddMenuCenterY(me); pTex = MakeTCFromFile("\\Graph\\interface\\menus\\back.bmp"); me = new CMenuCheckButton(-1, fPosBack, fPosBackY, pTex?pTex->m_dwWidth:0, pTex, NULL, NULL); me->eMenuState = OPTIONS; me->SetShortCut(DIK_ESCAPE); pWindowMenuConsole->AddMenu(me); pWindowMenu->AddConsole(pWindowMenuConsole); //------------------ END AUDIO //------------------ START INPUT pWindowMenuConsole = new CWindowMenuConsole(iWindowConsoleOffsetX,iWindowConsoleOffsetY,iWindowConsoleWidth,iWindowConsoleHeight, OPTIONS_INPUT); PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_input_customize_controls"), _T("string"), _T(""), szMenuText, 256, NULL); me = new CMenuElementText(-1, hFontMenu, szMenuText, fPosX1, 0.f, lColor, 1.f, OPTIONS_INPUT_CUSTOMIZE_KEYS_1); pWindowMenuConsole->AddMenuCenterY(me); PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_input_invert_mouse"), _T("string"), _T(""), szMenuText, 256, NULL); _tcscat(szMenuText, _T(" ")); pTex1 = MakeTCFromFile("\\Graph\\interface\\menus\\menu_checkbox_off.bmp"); pTex2 = MakeTCFromFile("\\Graph\\interface\\menus\\menu_checkbox_on.bmp"); me = new CMenuCheckButton(BUTTON_MENUOPTIONS_CONTROLS_INVERTMOUSE, 0, 0, pTex1->m_dwWidth, pTex1, pTex2, new CMenuElementText(-1, hFontMenu, szMenuText, fPosX1, 0.f, lColor, 1.f, OPTIONS_INPUT)); bBOOL = false; ARXMenu_Options_Control_GetInvertMouse(bBOOL); if (bBOOL) { ((CMenuCheckButton*)me)->iState=1; } else { ((CMenuCheckButton*)me)->iState=0; } pWindowMenuConsole->AddMenuCenterY(me); PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_auto_ready_weapon"), _T("string"), _T(""), szMenuText, 256, NULL); _tcscat(szMenuText, _T(" ")); pTex1 = MakeTCFromFile("\\Graph\\interface\\menus\\menu_checkbox_off.bmp"); pTex2 = MakeTCFromFile("\\Graph\\interface\\menus\\menu_checkbox_on.bmp"); me = new CMenuCheckButton(BUTTON_MENUOPTIONS_CONTROLS_AUTOREADYWEAPON, 0, 0, pTex1->m_dwWidth, pTex1, pTex2, new CMenuElementText(-1, hFontMenu, szMenuText, fPosX1, 0.f, lColor, 1.f, OPTIONS_INPUT)); bBOOL = false; ARXMenu_Options_Control_GetAutoReadyWeapon(bBOOL); if (bBOOL) { ((CMenuCheckButton*)me)->iState=1; } else { ((CMenuCheckButton*)me)->iState=0; } pWindowMenuConsole->AddMenuCenterY(me); PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_input_mouse_look_toggle"), _T("string"), _T(""), szMenuText, 256, NULL); _tcscat(szMenuText, _T(" ")); pTex1 = MakeTCFromFile("\\Graph\\interface\\menus\\menu_checkbox_off.bmp"); pTex2 = MakeTCFromFile("\\Graph\\interface\\menus\\menu_checkbox_on.bmp"); me = new CMenuCheckButton(BUTTON_MENUOPTIONS_CONTROLS_MOUSELOOK, 0, 0, pTex1->m_dwWidth, pTex1, pTex2, new CMenuElementText(-1, hFontMenu, szMenuText, fPosX1, 0.f, lColor, 1.f, OPTIONS_INPUT)); bBOOL = false; ARXMenu_Options_Control_GetMouseLookToggleMode(bBOOL); if (bBOOL) { ((CMenuCheckButton*)me)->iState=1; } else { ((CMenuCheckButton*)me)->iState=0; } pWindowMenuConsole->AddMenuCenterY(me); pc = new CMenuPanel(); PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_input_mouse_sensitivity"), _T("string"), _T(""), szMenuText, 256, NULL); me = new CMenuElementText(-1, hFontMenu, szMenuText, fPosX1, 0.f, lColor, 1.f, NOP); me->SetCheckOff(); pc->AddElement(me); me = new CMenuSlider(BUTTON_MENUOPTIONS_CONTROLS_MOUSESENSITIVITY, iPosX2, 0); int iSensitivity = 0; ARXMenu_Options_Control_GetMouseSensitivity(iSensitivity); ((CMenuSlider*)me)->iPos = iSensitivity; pc->AddElement(me); pWindowMenuConsole->AddMenuCenterY(pc); if (INTERNATIONAL_MODE) { PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_input_mouse_smoothing"), _T("string"), _T("mouse_smoothing"), szMenuText, 256, NULL); _tcscat(szMenuText, _T(" ")); pTex1 = MakeTCFromFile("\\Graph\\interface\\menus\\menu_checkbox_off.bmp"); pTex2 = MakeTCFromFile("\\Graph\\interface\\menus\\menu_checkbox_on.bmp"); me = new CMenuCheckButton(BUTTON_MENUOPTIONS_CONTROLS_MOUSE_SMOOTHING, 0, 0, pTex1->m_dwWidth, pTex1, pTex2, new CMenuElementText(-1, hFontMenu, szMenuText, fPosX1, 0.f, lColor, 1.f, OPTIONS_INPUT)); bBOOL = false; ARXMenu_Options_Control_GetMouseSmoothing(bBOOL); if (bBOOL) { ((CMenuCheckButton*)me)->iState=1; } else { ((CMenuCheckButton*)me)->iState=0; } pWindowMenuConsole->AddMenuCenterY(me); PAK_UNICODE_GetPrivateProfileString(_T("system_menus_autodescription"), _T("string"), _T("auto_description"), szMenuText, 256, NULL); _tcscat(szMenuText, _T(" ")); pTex1 = MakeTCFromFile("\\Graph\\interface\\menus\\menu_checkbox_off.bmp"); pTex2 = MakeTCFromFile("\\Graph\\interface\\menus\\menu_checkbox_on.bmp"); me = new CMenuCheckButton(BUTTON_MENUOPTIONS_CONTROLS_AUTODESCRIPTION, 0, 0, pTex1->m_dwWidth, pTex1, pTex2, new CMenuElementText(-1, hFontMenu, szMenuText, fPosX1, 0.f, lColor, 1.f, OPTIONS_INPUT)); bBOOL = false; ARXMenu_Options_Control_GetAutoDescription(bBOOL); if (bBOOL) { ((CMenuCheckButton*)me)->iState=1; } else { ((CMenuCheckButton*)me)->iState=0; } pWindowMenuConsole->AddMenuCenterY(me); } pTex = MakeTCFromFile("\\Graph\\interface\\menus\\back.bmp"); me = new CMenuCheckButton(-1, fPosBack, fPosBackY, pTex?pTex->m_dwWidth:0, pTex, NULL, NULL); me->eMenuState = OPTIONS; me->SetShortCut(DIK_ESCAPE); pWindowMenuConsole->AddMenu(me); pWindowMenu->AddConsole(pWindowMenuConsole); //------------------ END INPUT //------------------ START CUSTOM CONTROLS _TCHAR pNoDef1[]=_T("---"); _TCHAR pNoDef2[]=_T("---"); #define CUSTOM_CTRL_X0 RATIO_X(20) #define CUSTOM_CTRL_X1 RATIO_X(150) #define CUSTOM_CTRL_X2 RATIO_X(245) long fControlPosY = ARX_CLEAN_WARN_CAST_LONG(RATIO_Y(8.f)); #define CUSTOM_CTRL_FUNC(a,b,c,d){\ pc=new CMenuPanel();\ PAK_UNICODE_GetPrivateProfileString(_T(a), _T("string"), _T("?"), szMenuText, 256, NULL);\ me = new CMenuElementText(-1, hFontControls, szMenuText, CUSTOM_CTRL_X0, 0,lColor,.7f, NOP);\ me->SetCheckOff();\ pc->AddElement(me);\ me = new CMenuElementText(c, hFontControls, pNoDef1, CUSTOM_CTRL_X1, 0,lColor,.7f, NOP);\ me->eState=GETTOUCH;\ if((!b)||(c<0))\ {\ me->SetCheckOff();\ ((CMenuElementText*)me)->lColor=RGB(127,127,127);\ }\ pc->AddElement(me);\ me = new CMenuElementText(d, hFontControls, pNoDef2, CUSTOM_CTRL_X2, 0,lColor,.7f, NOP);\ me->eState=GETTOUCH;\ if(d<0)\ {\ me->SetCheckOff();\ ((CMenuElementText*)me)->lColor=RGB(127,127,127);\ }\ pc->AddElement(me);\ pc->Move(0,fControlPosY);\ pWindowMenuConsole->AddMenu(pc);\ fControlPosY += ARX_CLEAN_WARN_CAST_LONG( pc->GetHeight() + RATIO_Y(3.f) );\ }; #define CUSTOM_CTRL_FUNC2(a,b,c,d){\ pc=new CMenuPanel();\ PAK_UNICODE_GetPrivateProfileString(_T(a), _T("string"), _T("?"), szMenuText, 256, NULL);\ _tcscat(szMenuText,_T("2"));\ me = new CMenuElementText(-1, hFontControls, szMenuText, CUSTOM_CTRL_X0, 0,lColor,.7f, NOP);\ me->SetCheckOff();\ pc->AddElement(me);\ me = new CMenuElementText(c, hFontControls, pNoDef1, CUSTOM_CTRL_X1, 0,lColor,.7f, NOP);\ me->eState=GETTOUCH;\ if((!b)||(c<0))\ {\ me->SetCheckOff();\ ((CMenuElementText*)me)->lColor=RGB(127,127,127);\ }\ pc->AddElement(me);\ me = new CMenuElementText(d, hFontControls, pNoDef2, CUSTOM_CTRL_X2, 0,lColor,.7f, NOP);\ me->eState=GETTOUCH;\ if(d<0)\ {\ me->SetCheckOff();\ ((CMenuElementText*)me)->lColor=RGB(127,127,127);\ }\ pc->AddElement(me);\ pc->Move(0,fControlPosY);\ pWindowMenuConsole->AddMenu(pc);\ fControlPosY += ARX_CLEAN_WARN_CAST_LONG( pc->GetHeight() + RATIO_Y(3.f) );\ }; pWindowMenuConsole=new CWindowMenuConsole(iWindowConsoleOffsetX,iWindowConsoleOffsetY,iWindowConsoleWidth,iWindowConsoleHeight,OPTIONS_INPUT_CUSTOMIZE_KEYS_1); CUSTOM_CTRL_FUNC("system_menus_options_input_customize_controls_mouselook",1, BUTTON_MENUOPTIONS_CONTROLS_CUST_MOUSELOOK1, BUTTON_MENUOPTIONS_CONTROLS_CUST_MOUSELOOK2); if (!INTERNATIONAL_MODE) { PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_input_customize_controls_link_use_to_mouselook"), _T("string"), _T("?"), szMenuText, 256, NULL); \ pTex1 = MakeTCFromFile("\\Graph\\interface\\menus\\menu_checkbox_off.bmp"); pTex2 = MakeTCFromFile("\\Graph\\interface\\menus\\menu_checkbox_on.bmp"); pElementText= new CMenuElementText(-1, hFontControls, szMenuText, CUSTOM_CTRL_X0, 0,lColor,.7f, NOP); me = new CMenuCheckButton(BUTTON_MENUOPTIONS_CONTROLS_LINK, 0, 0, pTex1->m_dwWidth>>1, pTex1, pTex2, pElementText); me->Move(0,fControlPosY); pWindowMenuConsole->AddMenu(me); \ fControlPosY += ARX_CLEAN_WARN_CAST_LONG(me->GetHeight() + RATIO_Y(3.f)); if(pMenuConfig->bLinkMouseLookToUse) { ((CMenuCheckButton*)me)->iState=1; } } CUSTOM_CTRL_FUNC("system_menus_options_input_customize_controls_action_combine",1, BUTTON_MENUOPTIONS_CONTROLS_CUST_ACTIONCOMBINE1, BUTTON_MENUOPTIONS_CONTROLS_CUST_ACTIONCOMBINE2); CUSTOM_CTRL_FUNC("system_menus_options_input_customize_controls_jump",1,BUTTON_MENUOPTIONS_CONTROLS_CUST_JUMP1, BUTTON_MENUOPTIONS_CONTROLS_CUST_JUMP2); CUSTOM_CTRL_FUNC("system_menus_options_input_customize_controls_magic_mode",1, BUTTON_MENUOPTIONS_CONTROLS_CUST_MAGICMODE1, BUTTON_MENUOPTIONS_CONTROLS_CUST_MAGICMODE2); CUSTOM_CTRL_FUNC("system_menus_options_input_customize_controls_stealth_mode",1, BUTTON_MENUOPTIONS_CONTROLS_CUST_STEALTHMODE1, BUTTON_MENUOPTIONS_CONTROLS_CUST_STEALTHMODE2); CUSTOM_CTRL_FUNC("system_menus_options_input_customize_controls_walk_forward",1, BUTTON_MENUOPTIONS_CONTROLS_CUST_WALKFORWARD1, BUTTON_MENUOPTIONS_CONTROLS_CUST_WALKFORWARD2); CUSTOM_CTRL_FUNC("system_menus_options_input_customize_controls_walk_backward",1, BUTTON_MENUOPTIONS_CONTROLS_CUST_WALKBACKWARD1, BUTTON_MENUOPTIONS_CONTROLS_CUST_WALKBACKWARD2); CUSTOM_CTRL_FUNC("system_menus_options_input_customize_controls_strafe_left",1, BUTTON_MENUOPTIONS_CONTROLS_CUST_STRAFELEFT1, BUTTON_MENUOPTIONS_CONTROLS_CUST_STRAFELEFT2); CUSTOM_CTRL_FUNC("system_menus_options_input_customize_controls_strafe_right",1, BUTTON_MENUOPTIONS_CONTROLS_CUST_STRAFERIGHT1, BUTTON_MENUOPTIONS_CONTROLS_CUST_STRAFERIGHT2); CUSTOM_CTRL_FUNC("system_menus_options_input_customize_controls_lean_left",1, BUTTON_MENUOPTIONS_CONTROLS_CUST_LEANLEFT1, BUTTON_MENUOPTIONS_CONTROLS_CUST_LEANLEFT2); CUSTOM_CTRL_FUNC("system_menus_options_input_customize_controls_lean_right",1, BUTTON_MENUOPTIONS_CONTROLS_CUST_LEANRIGHT1, BUTTON_MENUOPTIONS_CONTROLS_CUST_LEANRIGHT2); CUSTOM_CTRL_FUNC("system_menus_options_input_customize_controls_crouch",1, BUTTON_MENUOPTIONS_CONTROLS_CUST_CROUCH1, BUTTON_MENUOPTIONS_CONTROLS_CUST_CROUCH2); CUSTOM_CTRL_FUNC("system_menus_options_input_customize_controls_crouch_toggle",1, BUTTON_MENUOPTIONS_CONTROLS_CUST_CROUCHTOGGLE1, BUTTON_MENUOPTIONS_CONTROLS_CUST_CROUCHTOGGLE2); CUSTOM_CTRL_FUNC("system_menus_options_input_customize_controls_strafe",1, BUTTON_MENUOPTIONS_CONTROLS_CUST_STRAFE1, BUTTON_MENUOPTIONS_CONTROLS_CUST_STRAFE2); CUSTOM_CTRL_FUNC("system_menus_options_input_customize_controls_center_view",1, BUTTON_MENUOPTIONS_CONTROLS_CUST_CENTERVIEW1, BUTTON_MENUOPTIONS_CONTROLS_CUST_CENTERVIEW2); CUSTOM_CTRL_FUNC("system_menus_options_input_customize_controls_freelook",1, BUTTON_MENUOPTIONS_CONTROLS_CUST_FREELOOK1, BUTTON_MENUOPTIONS_CONTROLS_CUST_FREELOOK2); CUSTOM_CTRL_FUNC("system_menus_options_input_customize_controls_turn_left",1, BUTTON_MENUOPTIONS_CONTROLS_CUST_TURNLEFT1, BUTTON_MENUOPTIONS_CONTROLS_CUST_TURNLEFT2); CUSTOM_CTRL_FUNC("system_menus_options_input_customize_controls_turn_right",1, BUTTON_MENUOPTIONS_CONTROLS_CUST_TURNRIGHT1, BUTTON_MENUOPTIONS_CONTROLS_CUST_TURNRIGHT2); CUSTOM_CTRL_FUNC("system_menus_options_input_customize_controls_look_up",1, BUTTON_MENUOPTIONS_CONTROLS_CUST_LOOKUP1, BUTTON_MENUOPTIONS_CONTROLS_CUST_LOOKUP2); CUSTOM_CTRL_FUNC("system_menus_options_input_customize_controls_look_down",1, BUTTON_MENUOPTIONS_CONTROLS_CUST_LOOKDOWN1, BUTTON_MENUOPTIONS_CONTROLS_CUST_LOOKDOWN2); pc=new CMenuPanel(); pTex = MakeTCFromFile("\\Graph\\interface\\menus\\back.bmp"); me = new CMenuCheckButton(BUTTON_MENUOPTIONS_CONTROLS_CUST_BACK, fPosBack, fPosBackY, pTex?pTex->m_dwWidth:0, pTex, NULL, NULL); me->eMenuState = OPTIONS_INPUT; me->SetShortCut(DIK_ESCAPE); pc->AddElementNoCenterIn(me); PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_input_customize_default"), _T("string"), _T(""), szMenuText, 256, NULL); me = new CMenuElementText(BUTTON_MENUOPTIONS_CONTROLS_CUST_DEFAULT, hFontMenu, szMenuText, 0, 0,lColor,1.f, NOP); me->SetPos((RATIO_X(iWindowConsoleWidth) - me->GetWidth())*0.5f, fPosBDAY); pc->AddElementNoCenterIn(me); pTex = MakeTCFromFile("\\Graph\\interface\\menus\\next.bmp"); me = new CMenuCheckButton(BUTTON_MENUOPTIONS_CONTROLS_CUST_BACK, fPosNext, fPosBackY, pTex?pTex->m_dwWidth:0, pTex, NULL, NULL); me->eMenuState = OPTIONS_INPUT_CUSTOMIZE_KEYS_2; me->SetShortCut(DIK_ESCAPE); pc->AddElementNoCenterIn(me); pWindowMenuConsole->AddMenu(pc); pWindowMenu->AddConsole(pWindowMenuConsole); pMenuConfig->ReInitActionKey(pWindowMenuConsole); pWindowMenuConsole=new CWindowMenuConsole(iWindowConsoleOffsetX,iWindowConsoleOffsetY,iWindowConsoleWidth,iWindowConsoleHeight,OPTIONS_INPUT_CUSTOMIZE_KEYS_2); fControlPosY = ARX_CLEAN_WARN_CAST_LONG(RATIO_Y(8.f)); CUSTOM_CTRL_FUNC("system_menus_options_input_customize_controls_inventory",1, BUTTON_MENUOPTIONS_CONTROLS_CUST_INVENTORY1, BUTTON_MENUOPTIONS_CONTROLS_CUST_INVENTORY2); CUSTOM_CTRL_FUNC("system_menus_options_input_customize_controls_book",1, BUTTON_MENUOPTIONS_CONTROLS_CUST_BOOK1, BUTTON_MENUOPTIONS_CONTROLS_CUST_BOOK2); CUSTOM_CTRL_FUNC("system_menus_options_input_customize_controls_bookcharsheet",1, BUTTON_MENUOPTIONS_CONTROLS_CUST_BOOKCHARSHEET1, BUTTON_MENUOPTIONS_CONTROLS_CUST_BOOKCHARSHEET2); CUSTOM_CTRL_FUNC("system_menus_options_input_customize_controls_bookmap",1, BUTTON_MENUOPTIONS_CONTROLS_CUST_BOOKMAP1, BUTTON_MENUOPTIONS_CONTROLS_CUST_BOOKMAP2); CUSTOM_CTRL_FUNC("system_menus_options_input_customize_controls_bookspell",1, BUTTON_MENUOPTIONS_CONTROLS_CUST_BOOKSPELL1, BUTTON_MENUOPTIONS_CONTROLS_CUST_BOOKSPELL2); CUSTOM_CTRL_FUNC("system_menus_options_input_customize_controls_bookquest",1, BUTTON_MENUOPTIONS_CONTROLS_CUST_BOOKQUEST1, BUTTON_MENUOPTIONS_CONTROLS_CUST_BOOKQUEST2); CUSTOM_CTRL_FUNC("system_menus_options_input_customize_controls_drink_potion_life",1, BUTTON_MENUOPTIONS_CONTROLS_CUST_DRINKPOTIONLIFE1, BUTTON_MENUOPTIONS_CONTROLS_CUST_DRINKPOTIONLIFE2); CUSTOM_CTRL_FUNC("system_menus_options_input_customize_controls_drink_potion_mana",1, BUTTON_MENUOPTIONS_CONTROLS_CUST_DRINKPOTIONMANA1, BUTTON_MENUOPTIONS_CONTROLS_CUST_DRINKPOTIONMANA2); CUSTOM_CTRL_FUNC("system_menus_options_input_customize_controls_torch",1, BUTTON_MENUOPTIONS_CONTROLS_CUST_TORCH1, BUTTON_MENUOPTIONS_CONTROLS_CUST_TORCH2); CUSTOM_CTRL_FUNC("system_menus_options_input_customize_controls_cancelcurrentspell",1, BUTTON_MENUOPTIONS_CONTROLS_CUST_CANCELCURSPELL1, BUTTON_MENUOPTIONS_CONTROLS_CUST_CANCELCURSPELL2); CUSTOM_CTRL_FUNC("system_menus_options_input_customize_controls_precast1",1, BUTTON_MENUOPTIONS_CONTROLS_CUST_PRECAST1, BUTTON_MENUOPTIONS_CONTROLS_CUST_PRECAST1_2); CUSTOM_CTRL_FUNC("system_menus_options_input_customize_controls_precast2",1, BUTTON_MENUOPTIONS_CONTROLS_CUST_PRECAST2, BUTTON_MENUOPTIONS_CONTROLS_CUST_PRECAST2_2); CUSTOM_CTRL_FUNC("system_menus_options_input_customize_controls_precast3",1, BUTTON_MENUOPTIONS_CONTROLS_CUST_PRECAST3, BUTTON_MENUOPTIONS_CONTROLS_CUST_PRECAST3_2); CUSTOM_CTRL_FUNC("system_menus_options_input_customize_controls_weapon",1, BUTTON_MENUOPTIONS_CONTROLS_CUST_WEAPON1, BUTTON_MENUOPTIONS_CONTROLS_CUST_WEAPON2); CUSTOM_CTRL_FUNC("system_menus_options_input_customize_controls_unequipweapon",1, BUTTON_MENUOPTIONS_CONTROLS_CUST_UNEQUIPWEAPON1, BUTTON_MENUOPTIONS_CONTROLS_CUST_UNEQUIPWEAPON2); CUSTOM_CTRL_FUNC("system_menus_options_input_customize_controls_previous",1, BUTTON_MENUOPTIONS_CONTROLS_CUST_PREVIOUS1, BUTTON_MENUOPTIONS_CONTROLS_CUST_PREVIOUS2); CUSTOM_CTRL_FUNC("system_menus_options_input_customize_controls_next",1, BUTTON_MENUOPTIONS_CONTROLS_CUST_NEXT1, BUTTON_MENUOPTIONS_CONTROLS_CUST_NEXT2); CUSTOM_CTRL_FUNC("system_menus_options_input_customize_controls_quickload",1, BUTTON_MENUOPTIONS_CONTROLS_CUST_QUICKLOAD, BUTTON_MENUOPTIONS_CONTROLS_CUST_QUICKLOAD2); CUSTOM_CTRL_FUNC("system_menus_options_input_customize_controls_quicksave",1, BUTTON_MENUOPTIONS_CONTROLS_CUST_QUICKSAVE, BUTTON_MENUOPTIONS_CONTROLS_CUST_QUICKSAVE2); CUSTOM_CTRL_FUNC2("system_menus_options_input_customize_controls_bookmap",1, BUTTON_MENUOPTIONS_CONTROLS_CUST_MINIMAP1, BUTTON_MENUOPTIONS_CONTROLS_CUST_MINIMAP2); pc=new CMenuPanel(); pTex = MakeTCFromFile("\\Graph\\interface\\menus\\back.bmp"); me = new CMenuCheckButton(BUTTON_MENUOPTIONS_CONTROLS_CUST_BACK, fPosBack, fPosBackY, pTex?pTex->m_dwWidth:0, pTex, NULL, NULL); me->eMenuState = OPTIONS_INPUT_CUSTOMIZE_KEYS_1; me->SetShortCut(DIK_ESCAPE); pc->AddElementNoCenterIn(me); PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_input_customize_default"), _T("string"), _T(""), szMenuText, 256, NULL); me = new CMenuElementText(BUTTON_MENUOPTIONS_CONTROLS_CUST_DEFAULT, hFontMenu, szMenuText, 0, 0,lColor,1.f, NOP); me->SetPos((RATIO_X(iWindowConsoleWidth) - me->GetWidth())*0.5f, fPosBDAY); pc->AddElementNoCenterIn(me); pWindowMenuConsole->AddMenu(pc); pWindowMenu->AddConsole(pWindowMenuConsole); pMenuConfig->ReInitActionKey(pWindowMenuConsole); #undef CUSTOM_CTRL_X0 #undef CUSTOM_CTRL_X1 #undef CUSTOM_CTRL_X2 #undef CUSTOM_CTRL_FUNC #undef CUSTOM_CTRL_FUNC2 //------------------ END CUSTOM CONTROLS pWindowMenu->eCurrentMenuState=OPTIONS; } break; case QUIT: { _TCHAR szMenuText[256]; CMenuElement *me = NULL; CWindowMenuConsole *pWindowMenuConsole=new CWindowMenuConsole(iWindowConsoleOffsetX,iWindowConsoleOffsetY,iWindowConsoleWidth,iWindowConsoleHeight,QUIT); PAK_UNICODE_GetPrivateProfileString(_T("system_menus_main_quit"), _T("string"), _T(""), szMenuText, 256, NULL); me=new CMenuElementText(-1, hFontMenu, szMenuText,0,0,lColor,1.f, NOP); me->bCheck = false; pWindowMenuConsole->AddMenuCenter(me); PAK_UNICODE_GetPrivateProfileString(_T("system_menus_main_editquest_confirm"), _T("string"), _T(""), szMenuText, 256, NULL); me=new CMenuElementText(-1, hFontMenu, szMenuText,0,0,lColor,1.f, NOP); me->bCheck = false; pWindowMenuConsole->AddMenuCenter(me); CMenuPanel *pPanel = new CMenuPanel(); PAK_UNICODE_GetPrivateProfileString(_T("system_yes"), _T("string"), _T(""), szMenuText, 256, NULL); me = new CMenuElementText(BUTTON_MENUMAIN_QUIT, hFontMenu, szMenuText, 0, 0,lColor,1.f, NEW_QUEST_ENTER_GAME); me->SetPos(RATIO_X(iWindowConsoleWidth-10)-me->GetWidth(), 0); pPanel->AddElementNoCenterIn(me); PAK_UNICODE_GetPrivateProfileString(_T("system_no"), _T("string"), _T(""), szMenuText, 256, NULL); me = new CMenuElementText(-1, hFontMenu, szMenuText, fPosBack, 0,lColor,1.f, MAIN); me->SetShortCut(DIK_ESCAPE); pPanel->AddElementNoCenterIn(me); ARX_CHECK_INT(fPosBDAY); pPanel->Move(0,ARX_CLEAN_WARN_CAST_INT(fPosBDAY)); pWindowMenuConsole->AddMenu(pPanel); pWindowMenu->AddConsole(pWindowMenuConsole); pWindowMenu->eCurrentMenuState=QUIT; } break; } } } pMenu->Render(); if(pWindowMenu) { if(!bScroll) { pWindowMenu->fAngle=90.f; pWindowMenu->eCurrentMenuState=pMenu->eOldMenuWindowState; } ARX_CHECK_INT(ARXDiffTimeMenu); pWindowMenu->Update(ARX_CLEAN_WARN_CAST_INT(ARXDiffTimeMenu)); if (pWindowMenu) { MENUSTATE eMS=pWindowMenu->Render(); if(eMS!=NOP) { pMenu->eOldMenuWindowState=eMS; } } Check_Apply(); } bNoMenu=false; danaeApp.DANAEEndRender(); if(pTextManage) { pTextManage->Update(ARXDiffTimeMenu); pTextManage->Render(); } danaeApp.DANAEStartRender(); GDevice->SetTextureStageState(0,D3DTSS_ADDRESS,D3DTADDRESS_CLAMP); GDevice->SetRenderState( D3DRENDERSTATE_FOGENABLE, false); SETZWRITE(GDevice, false); GDevice->SetRenderState( D3DRENDERSTATE_ZENABLE,false); GDevice->SetRenderState( D3DRENDERSTATE_CULLMODE,D3DCULL_NONE); pGetInfoDirectInput->DrawCursor(); if(pMenu->bReInitAll) { GDevice->Clear( 0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER, D3DRGBA(0,0,0,0), 1.0f, 0L); if(bForceReInitAllTexture) { D3DTextr_RestoreAllTextures(GDevice); bForceReInitAllTexture=false; } } if (pTextureLoadRender) { GDevice->SetRenderState(D3DRENDERSTATE_ZENABLE,FALSE); int iOffsetX = 0; int iOffsetY=0; if ((DANAEMouse.y + INTERFACE_RATIO_DWORD(pTextureLoad->m_dwHeight)) > DANAESIZY) { float fOffestY = iOffsetY - INTERFACE_RATIO_DWORD(pTextureLoad->m_dwHeight) ; ARX_CHECK_INT(fOffestY); iOffsetY = ARX_CLEAN_WARN_CAST_INT(fOffestY); } EERIEDrawBitmap( GDevice, ARX_CLEAN_WARN_CAST_FLOAT(DANAEMouse.x + iOffsetX), ARX_CLEAN_WARN_CAST_FLOAT(DANAEMouse.y + iOffsetY), (float)INTERFACE_RATIO_DWORD(pTextureLoad->m_dwWidth), (float)INTERFACE_RATIO_DWORD(pTextureLoad->m_dwHeight), 0.001f, pTextureLoad, ARX_OPAQUE_WHITE); SETTC(GDevice,NULL); EERIEDraw2DRect( GDevice, ARX_CLEAN_WARN_CAST_FLOAT(DANAEMouse.x + iOffsetX), ARX_CLEAN_WARN_CAST_FLOAT(DANAEMouse.y + iOffsetY), DANAEMouse.x+iOffsetX+(float)INTERFACE_RATIO_DWORD(pTextureLoad->m_dwWidth), DANAEMouse.y+iOffsetY+(float)INTERFACE_RATIO_DWORD(pTextureLoad->m_dwHeight), 0.01f, ARX_OPAQUE_WHITE); pTextureLoadRender=NULL; } if(ProcessFadeInOut(bFadeInOut,0.1f)) { switch(iFadeAction) { case AMCM_CREDITS: ARX_MENU_Clicked_CREDITS(); iFadeAction=-1; bFadeInOut=false; bFade=true; break; case AMCM_NEWQUEST: ARX_MENU_Clicked_NEWQUEST(); iFadeAction=-1; bFadeInOut=false; bFade=true; CINEMASCOPE = 0; break; case AMCM_OFF: GAME_EDITOR = 0; ARX_MENU_Clicked_QUIT_GAME(); iFadeAction=-1; bFadeInOut=false; bFade=true; break; } } SETALPHABLEND(GDevice,FALSE); GDevice->SetTextureStageState(0,D3DTSS_MINFILTER,D3DTFP_LINEAR); GDevice->SetTextureStageState(0,D3DTSS_MAGFILTER,D3DTFP_LINEAR); GDevice->SetTextureStageState(0,D3DTSS_ADDRESS,D3DTADDRESS_WRAP); SETZWRITE(GDevice, true); danaeApp.EnableZBuffer(); GDevice->SetRenderState( D3DRENDERSTATE_CULLMODE,D3DCULL_CCW); danaeApp.DANAEEndRender(); return true; } //----------------------------------------------------------------------------- CMenuElement::CMenuElement(MENUSTATE _ms) : CMenuZone() { ePlace=NOCENTER; eState=TNOP; eMenuState=_ms; iShortCut=-1; } //----------------------------------------------------------------------------- CMenuElement::~CMenuElement() { if( this == pMenuElementApply ) { pMenuElementApply = NULL; } if( this == pMenuElementResume ) { pMenuElementResume = NULL; } if( this == pLoadConfirm ) { pLoadConfirm = NULL; } if( this == pMenuSliderResol ) { pMenuSliderResol = NULL; } if( this == pMenuSliderBpp ) { pMenuSliderBpp = NULL; } if( this == pMenuSliderTexture ) { pMenuSliderTexture = NULL; } if( this == pMenuCheckButtonBump ) { pMenuCheckButtonBump = NULL; } } //----------------------------------------------------------------------------- CMenuElement* CMenuElement::OnShortCut() { if(iShortCut==-1) return NULL; if( (pGetInfoDirectInput)&& (pGetInfoDirectInput->IsVirtualKeyPressedNowUnPressed(iShortCut)) ) { return this; } return NULL; } //----------------------------------------------------------------------------- CMenuElementText::CMenuElementText(int _iID, HFONT _pHFont,_TCHAR *_pText,float _fPosX,float _fPosY,long _lColor,float _fSize,MENUSTATE _eMs) : CMenuElement(_eMs) { iID = _iID; pHFont = _pHFont; if(!_tcscmp(_pText,_T("---"))) { bTestYDouble=true; } lpszText=_tcsdup(_pText); ARX_CHECK_LONG(_fPosX); ARX_CHECK_LONG(_fPosY); rZone.left = ARX_CLEAN_WARN_CAST_LONG(_fPosX); rZone.top = ARX_CLEAN_WARN_CAST_LONG(_fPosY); GetTextSize(pHFont, _pText, (int*)&rZone.right, (int*)&rZone.bottom); rZone.right+=rZone.left; rZone.bottom+=rZone.top; lColor=_lColor; lColorHighlight=lOldColor=RGB(255, 255, 255); fSize=_fSize; iId=(int)this; bSelected = false; iPosCursor=_tcslen(_pText)+1; } //----------------------------------------------------------------------------- CMenuElementText::~CMenuElementText() { if(lpszText) { free((void*)lpszText); lpszText = NULL; } } //----------------------------------------------------------------------------- void CMenuElementText::SetText(_TCHAR *_pText) { if(lpszText) { free((void*)lpszText); lpszText = NULL; } lpszText=_tcsdup(_pText); GetTextSize(pHFont, _pText, (int*)&rZone.right, (int*)&rZone.bottom); rZone.right+=rZone.left; rZone.bottom+=rZone.top; } //----------------------------------------------------------------------------- void CMenuElementText::Update(int _iDTime) { } //----------------------------------------------------------------------------- bool CMenuElementText::OnMouseDoubleClick(int _iMouseButton) { switch(iID) { case BUTTON_MENUEDITQUEST_LOAD: OnMouseClick(_iMouseButton); if (pWindowMenu) { for (UINT i = 0 ; i < pWindowMenu->vWindowConsoleElement.size() ; i++) { CWindowMenuConsole *p = pWindowMenu->vWindowConsoleElement[i]; if ( p->eMenuState == EDIT_QUEST_LOAD ) { for (UINT j = 0 ; j < p->MenuAllZone.vMenuZone.size() ; j++) { CMenuElement *pMenuElement = (CMenuElement*) ( (CMenuElement*)p->MenuAllZone.vMenuZone[j] )->GetZoneWithID( BUTTON_MENUEDITQUEST_LOAD_CONFIRM ); if( pMenuElement ) { pMenuElement->OnMouseClick( _iMouseButton ); } } } } } return true; } return false; } //----------------------------------------------------------------------------- // true: block les zones de checks bool CMenuElementText::OnMouseClick(int _iMouseButton) { switch(eState) { case EDIT: eState=EDIT_TIME; return true; case GETTOUCH: eState=GETTOUCH_TIME; lOldColor=lColorHighlight; return true; } if (iID != BUTTON_MENUMAIN_RESUMEGAME) { ARX_SOUND_PlayMenu(SND_MENU_CLICK); } switch (iID) { case -1: { return false; } break; // MENUMAIN case BUTTON_MENUMAIN_RESUMEGAME: { pTextManage->Clear(); ARXMenu_ResumeGame(); ARX_SOUND_PlayMenu(SND_MENU_CLICK); } break; case BUTTON_MENUMAIN_NEWQUEST: { bool bBOOL = false; ARXMenu_GetResumeGame(bBOOL); if (!bBOOL) { ARXMenu_NewQuest(); } } break; case BUTTON_MENUMAIN_LOADQUEST: { }break; case BUTTON_MENUMAIN_SAVEQUEST: { }break; case BUTTON_MENUMAIN_MULTIPLAYER: { }break; case BUTTON_MENUMAIN_OPTIONS: { }break; case BUTTON_MENUMAIN_CREDITS: { ARXMenu_Credits(); } break; case BUTTON_MENUMAIN_QUIT: { ARXMenu_Quit(); } break; case BUTTON_MENUNEWQUEST_CONFIRM: { ARXMenu_NewQuest(); } break; // MENULOADQUEST case BUTTON_MENUOPTIONSVIDEO_INIT: { pMenuConfig->iNewWidth = pMenuConfig->iWidth; pMenuConfig->iNewHeight = pMenuConfig->iHeight; pMenuConfig->iNewBpp = pMenuConfig->iBpp; pMenuConfig->iNewTextureResol = pMenuConfig->iTextureResol; pMenuConfig->bChangeResolution = false; pMenuConfig->bChangeTextures = false; } break; case BUTTON_MENUEDITQUEST_LOAD_INIT: { if ( pWindowMenu ) for (UINT i = 0 ; i < pWindowMenu->vWindowConsoleElement.size() ; i++) { CWindowMenuConsole *p = pWindowMenu->vWindowConsoleElement[i]; if ( p->eMenuState == EDIT_QUEST_LOAD ) { pWindowMenu->vWindowConsoleElement[i]->lData = lData; for (UINT j = 0 ; j < p->MenuAllZone.vMenuZone.size() ; j++) { CMenuZone *cz = p->MenuAllZone.vMenuZone[j]; if ( cz->iID == BUTTON_MENUEDITQUEST_LOAD ) { ( (CMenuElementText *)cz )->bSelected = false; } } } } } break; case BUTTON_MENUEDITQUEST_LOAD: { if (pWindowMenu) { pLoadConfirm->SetCheckOn(); pLoadConfirm->lColor=pLoadConfirm->lOldColor; for (UINT i = 0 ; i < pWindowMenu->vWindowConsoleElement.size() ; i++) { CWindowMenuConsole *p = pWindowMenu->vWindowConsoleElement[i]; if ( p->eMenuState == EDIT_QUEST_LOAD ) { pWindowMenu->vWindowConsoleElement[i]->lData = lData; for (UINT j = 0 ; j < p->MenuAllZone.vMenuZone.size(); j++) { CMenuZone *cz = p->MenuAllZone.vMenuZone[j]; if ( cz->iID == BUTTON_MENUEDITQUEST_LOAD ) { ( (CMenuElementText *)cz )->bSelected = false; } } bSelected = true; } } } } break; case BUTTON_MENUEDITQUEST_LOAD_CONFIRM: { if (pWindowMenu) { for (UINT i = 0 ; i < pWindowMenu->vWindowConsoleElement.size() ; i++) { CWindowMenuConsole *p = pWindowMenu->vWindowConsoleElement[i]; if ( p->eMenuState == EDIT_QUEST_LOAD ) { lData = pWindowMenu->vWindowConsoleElement[i]->lData; if ( lData ) { { _TCHAR szT[256]; _stprintf(szT, _T("%lu - %S"), lData, lpszText); char ml[256]; memset( ml, 0, 256 ); eMenuState = MAIN; GDevice->Clear( 0, NULL, D3DCLEAR_ZBUFFER,0, 1.0f, 0L ); ARXMenu_LoadQuest( lData ); bNoMenu=true; if( pTextManage ) { pTextManage->Clear(); } break; } } } } pLoadConfirm->SetCheckOff(); pLoadConfirm->lColor=RGB( 127, 127, 127 ); } } break; case BUTTON_MENUEDITQUEST_LOAD_CONFIRM_BACK: pLoadConfirm->SetCheckOff(); pLoadConfirm->lColor=RGB(127,127,127); break; // MENUSAVEQUEST case BUTTON_MENUEDITQUEST_SAVE: { if (pWindowMenu) for (UINT i = 0 ; i < pWindowMenu->vWindowConsoleElement.size() ; i++) { CWindowMenuConsole *p = pWindowMenu->vWindowConsoleElement[i]; if ( p->eMenuState == EDIT_QUEST_SAVE_CONFIRM ) { pWindowMenu->vWindowConsoleElement[i]->lData = lData; CMenuElementText * me = (CMenuElementText *) p->MenuAllZone.vMenuZone[1]; if ( me ) { _TCHAR szT[256]; _stprintf( szT, _T("%lu - %S"), me->lData, me->lpszText ); char ml[256]; memset( ml, 0, 256 ); WideCharToMultiByte( CP_ACP, 0, me->lpszText, _tcslen( me->lpszText ), ml, _tcslen( me->lpszText ) + 1, "_", NULL ); strcpy( save_l[me->lData].name, ml ); eMenuState = MAIN; ARXMenu_SaveQuest( me->lData ); break; } } } } break; case BUTTON_MENUEDITQUEST_DELETE: { if (pWindowMenu) for (UINT i = 0 ; i < pWindowMenu->vWindowConsoleElement.size() ; i++) { CWindowMenuConsole *p = pWindowMenu->vWindowConsoleElement[i]; if ( p->eMenuState == EDIT_QUEST_DELETE_CONFIRM ) { pWindowMenu->vWindowConsoleElement[i]->lData = lData; CMenuElementText * me = (CMenuElementText *) p->MenuAllZone.vMenuZone[1]; if ( me ) { _TCHAR szT[256]; _stprintf( szT, _T("%lu - %S"), me->lData, me->lpszText ); char ml[256]; memset(ml,0,256); WideCharToMultiByte( CP_ACP, 0, me->lpszText, _tcslen( me->lpszText ), ml, _tcslen( me->lpszText ) + 1, "_", NULL ); strcpy( save_l[me->lData].name, ml ); eMenuState = MAIN; ARXMenu_DeleteQuest( me->lData ); FreeSaveGameList(); CreateSaveGameList(); break; } } } } break; case BUTTON_MENUOPTIONSVIDEO_APPLY: { //----------BUMP if(pMenuConfig->bNewBumpMapping!=pMenuConfig->bBumpMapping) { pMenuConfig->bBumpMapping=pMenuConfig->bNewBumpMapping; if(pMenuConfig->bBumpMapping) { EERIE_ActivateBump(); } else { EERIE_DesactivateBump(); } if(pMenuConfig->bBumpMapping!=bALLOW_BUMP) { bForceReInitAllTexture=true; } bALLOW_BUMP=pMenuConfig->bBumpMapping; pMenuCheckButtonBump->iOldState=-1; } //----------END_BUMP //----------CHANGE_TEXTURE if(pMenuConfig->iNewTextureResol!=pMenuConfig->iTextureResol) { pMenuConfig->iTextureResol=pMenuConfig->iNewTextureResol; if(pMenuConfig->iTextureResol==2)Project.TextureSize=0; if(pMenuConfig->iTextureResol==1)Project.TextureSize=2; if(pMenuConfig->iTextureResol==0)Project.TextureSize=64; WILL_RELOAD_ALL_TEXTURES=1; pMenuSliderTexture->iOldPos=-1; } //----------END_CHANGE_TEXTURE //----------RESOLUTION if( (pMenuConfig->iNewWidth!=pMenuConfig->iWidth)|| (pMenuConfig->iNewHeight!=pMenuConfig->iHeight)|| (pMenuConfig->iNewBpp!=pMenuConfig->iBpp) ) { pMenuConfig->iWidth=pMenuConfig->iNewWidth; pMenuConfig->iHeight=pMenuConfig->iNewHeight; pMenuConfig->iBpp=pMenuConfig->iNewBpp; ARXMenu_Private_Options_Video_SetResolution( pMenuConfig->iWidth, pMenuConfig->iHeight, pMenuConfig->iBpp); pMenuSliderResol->iOldPos=-1; pMenuSliderBpp->iOldPos=-1; } //----------END_RESOLUTION pMenuConfig->bChangeResolution = false; pMenuConfig->bChangeTextures = false; pMenu->bReInitAll=true; } break; // MENUOPTIONS_CONTROLS case BUTTON_MENUOPTIONS_CONTROLS_CUST_JUMP1: { }break; case BUTTON_MENUOPTIONS_CONTROLS_CUST_JUMP2: { }break; case BUTTON_MENUOPTIONS_CONTROLS_CUST_MAGICMODE1: { }break; case BUTTON_MENUOPTIONS_CONTROLS_CUST_MAGICMODE2: { }break; case BUTTON_MENUOPTIONS_CONTROLS_CUST_STEALTHMODE1: { }break; case BUTTON_MENUOPTIONS_CONTROLS_CUST_STEALTHMODE2: { }break; case BUTTON_MENUOPTIONS_CONTROLS_CUST_WALKFORWARD1: { }break; case BUTTON_MENUOPTIONS_CONTROLS_CUST_WALKFORWARD2: { }break; case BUTTON_MENUOPTIONS_CONTROLS_CUST_WALKBACKWARD1: { }break; case BUTTON_MENUOPTIONS_CONTROLS_CUST_WALKBACKWARD2: { }break; case BUTTON_MENUOPTIONS_CONTROLS_CUST_STRAFELEFT1: { }break; case BUTTON_MENUOPTIONS_CONTROLS_CUST_STRAFELEFT2: { }break; case BUTTON_MENUOPTIONS_CONTROLS_CUST_STRAFERIGHT1: { }break; case BUTTON_MENUOPTIONS_CONTROLS_CUST_STRAFERIGHT2: { }break; case BUTTON_MENUOPTIONS_CONTROLS_CUST_LEANLEFT1: { }break; case BUTTON_MENUOPTIONS_CONTROLS_CUST_LEANLEFT2: { }break; case BUTTON_MENUOPTIONS_CONTROLS_CUST_LEANRIGHT1: { }break; case BUTTON_MENUOPTIONS_CONTROLS_CUST_LEANRIGHT2: { }break; case BUTTON_MENUOPTIONS_CONTROLS_CUST_CROUCH1: { }break; case BUTTON_MENUOPTIONS_CONTROLS_CUST_CROUCH2: { }break; case BUTTON_MENUOPTIONS_CONTROLS_CUST_MOUSELOOK1: { }break; case BUTTON_MENUOPTIONS_CONTROLS_CUST_ACTIONCOMBINE1: { }break; case BUTTON_MENUOPTIONS_CONTROLS_CUST_INVENTORY1: { }break; case BUTTON_MENUOPTIONS_CONTROLS_CUST_INVENTORY2: { }break; case BUTTON_MENUOPTIONS_CONTROLS_CUST_BOOK1: { }break; case BUTTON_MENUOPTIONS_CONTROLS_CUST_BOOK2: { }break; case BUTTON_MENUOPTIONS_CONTROLS_CUST_DRINKPOTIONLIFE1: { }break; case BUTTON_MENUOPTIONS_CONTROLS_CUST_DRINKPOTIONLIFE2: { }break; case BUTTON_MENUOPTIONS_CONTROLS_CUST_DRINKPOTIONMANA1: { }break; case BUTTON_MENUOPTIONS_CONTROLS_CUST_DRINKPOTIONMANA2: { }break; case BUTTON_MENUOPTIONS_CONTROLS_CUST_DEFAULT: { }break; case BUTTON_MENUOPTIONS_CONTROLS_BACK: { if(pMenuConfig) pMenuConfig->SaveAll(); } break; } if ((eMenuState == EDIT_QUEST_LOAD_CONFIRM) || (eMenuState == EDIT_QUEST_SAVE_CONFIRM) || (eMenuState == EDIT_QUEST_DELETE_CONFIRM)) { for (UINT i = 0 ; i < pWindowMenu->vWindowConsoleElement.size() ; i++) { CWindowMenuConsole *p = pWindowMenu->vWindowConsoleElement[i]; if ( p->eMenuState == eMenuState ) { p->lData = lData; CMenuElementText * me = (CMenuElementText *) p->MenuAllZone.vMenuZone[1]; if ( me ) { me->lData = lData; _TCHAR szText[256]; if( lData ) _stprintf( szText, _T("%S"), save_l[lData].name ); else { PAK_UNICODE_GetPrivateProfileString( _T("system_menu_editquest_newsavegame"), _T("string"), _T(""), szText, 256, NULL ); } me->SetText( szText ); p->AlignElementCenter( me ); } } } } return false; } //----------------------------------------------------------------------------- // true: block les zones de checks CMenuElement* CMenuElementText::OnShortCut() { if(iShortCut==-1) return NULL; if( (pGetInfoDirectInput)&& (pGetInfoDirectInput->IsVirtualKeyPressedNowUnPressed(iShortCut)) ) { return this; } return NULL; } //----------------------------------------------------------------------------- void CMenuElementText::Render() { if(WILL_RELOAD_ALL_TEXTURES) return; if(bNoMenu) return; EERIE_3D ePos; ePos.x = (float) rZone.left; ePos.y = (float) rZone.top; ePos.z = 1; if (bSelected) FontRenderText(pHFont, ePos, lpszText, lColorHighlight); else FontRenderText(pHFont, ePos, lpszText, lColor); } //----------------------------------------------------------------------------- void CMenuElementText::RenderMouseOver() { if(WILL_RELOAD_ALL_TEXTURES) return; if(bNoMenu) return; pGetInfoDirectInput->SetMouseOver(); GDevice->SetRenderState( D3DRENDERSTATE_ALPHABLENDENABLE, true); GDevice->SetRenderState( D3DRENDERSTATE_SRCBLEND, D3DBLEND_ONE); GDevice->SetRenderState( D3DRENDERSTATE_DESTBLEND, D3DBLEND_ONE); EERIE_3D ePos; ePos.x = (float)rZone.left; ePos.y = (float)rZone.top; ePos.z = 1; FontRenderText(pHFont, ePos, lpszText, lColorHighlight); GDevice->SetRenderState( D3DRENDERSTATE_ALPHABLENDENABLE, false); switch (iID) { case BUTTON_MENUEDITQUEST_LOAD: { CURRENT_GAME_INSTANCE=save_l[lData].num; ARX_GAMESAVE_MakePath(); char tTxt[256]; sprintf(tTxt,"%sGSAVE.BMP",GameSavePath+strlen(Project.workingdir)); TextureContainer *pTextureTemp=GetTextureFile_NoRefinement(tTxt); if (pTextureTemp != pTextureLoad) { if (pTextureLoad) { D3DTextr_KillTexture(pTextureLoad); } pTextureLoad=pTextureTemp; if (pTextureLoad) { pTextureLoad->Restore(GDevice); pTextureLoad->bColorKey=false; } } pTextureLoadRender=pTextureLoad; } break; case BUTTON_MENUEDITQUEST_SAVEINFO: { CURRENT_GAME_INSTANCE=save_l[lData].num; ARX_GAMESAVE_MakePath(); char tTxt[256]; sprintf(tTxt,"%sGSAVE.BMP",GameSavePath+strlen(Project.workingdir)); TextureContainer *pTextureTemp=GetTextureFile_NoRefinement(tTxt); if (pTextureTemp != pTextureLoad) { if (pTextureLoad) { D3DTextr_KillTexture(pTextureLoad); } pTextureLoad=pTextureTemp; if (pTextureLoad) { pTextureLoad->Restore(GDevice); pTextureLoad->bColorKey=false; } } pTextureLoadRender=pTextureLoad; } break; default: pTextureLoadRender=NULL; break; } } //----------------------------------------------------------------------------- CMenuState::CMenuState(MENUSTATE _ms) { bReInitAll=false; eMenuState = _ms; eOldMenuState = NOP; eOldMenuWindowState= NOP; pTexBackGround = NULL; pTexBackGround1 = NULL; fPos = 0; pMenuAllZone=new CMenuAllZone(); iPosMenu=-1; } //----------------------------------------------------------------------------- CMenuState::~CMenuState() { if(pMenuAllZone) delete pMenuAllZone; if (pTexBackGround) { D3DTextr_KillTexture(pTexBackGround); pTexBackGround = NULL; } if (pTexBackGround1) { D3DTextr_KillTexture(pTexBackGround1); pTexBackGround1 = NULL; } } //----------------------------------------------------------------------------- void CMenuState::AddMenuElement(CMenuElement *_me) { pMenuAllZone->AddZone((CMenuZone*)_me); } //----------------------------------------------------------------------------- MENUSTATE CMenuState::Update(int _iDTime) { fPos += _iDTime*DIV700; pZoneClick=NULL; int iR=pMenuAllZone->CheckZone(pGetInfoDirectInput->iMouseAX,pGetInfoDirectInput->iMouseAY); bool bReturn=false; if(pGetInfoDirectInput->GetMouseButton(DXI_BUTTON0)) { if(iR!=-1) { pZoneClick=(CMenuElement*)iR; pZoneClick->OnMouseClick(1); bReturn=true; } } else { if(iR!=-1) { pZoneClick=(CMenuElement*)iR; } } //GESTION DES TOUCHES if(bReturn) { return pZoneClick->eMenuState; } return NOP; } //----------------------------------------------------------------------------- void CMenuState::Render() { if(WILL_RELOAD_ALL_TEXTURES) return; if(bNoMenu) return; if (pTexBackGround) { if (pTexBackGround->m_pddsSurface) { EERIEDrawBitmap2(GDevice, 0, 0, ARX_CLEAN_WARN_CAST_FLOAT(DANAESIZX), ARX_CLEAN_WARN_CAST_FLOAT(DANAESIZY), 0.999f, pTexBackGround, D3DCOLORWHITE); } } //------------------------------------------------------------------------ int t=pMenuAllZone->GetNbZone(); ARX_CHECK_INT(ARXDiffTimeMenu); int iARXDiffTimeMenu = ARX_CLEAN_WARN_CAST_INT(ARXDiffTimeMenu); for(int i=0;iGetZoneNum(i); pMe->Update(iARXDiffTimeMenu); pMe->Render(); } //HIGHLIGHT if(pZoneClick) { pZoneClick->RenderMouseOver(); } //DEBUG ZONE SETTC(GDevice,NULL); pMenuAllZone->DrawZone(); } //----------------------------------------------------------------------------- CMenuZone::CMenuZone() { bActif = true; bCheck=true; bTestYDouble=false; iID=-1; lData=0; pData=NULL; lPosition=0; rZone.top = 0; rZone.bottom = 0; rZone.left = 0; rZone.right = 0; } //----------------------------------------------------------------------------- CMenuZone::CMenuZone(int _iX1,int _iY1,int _iX2,int _iY2,int _iId) { bActif=true; rZone.left=_iX1; rZone.top=_iY1; rZone.right=_iX2; rZone.bottom=_iY2; iId=_iId; iID=-1; lData=0; pData=NULL; } //----------------------------------------------------------------------------- CMenuZone::~CMenuZone() { } //----------------------------------------------------------------------------- void CMenuZone::Move(int _iX,int _iY) { rZone.left += _iX; rZone.top += _iY; rZone.right += _iX; rZone.bottom += _iY; } //----------------------------------------------------------------------------- void CMenuZone::SetPos(float _fX,float _fY) { int iWidth = rZone.right - rZone.left; int iHeight = rZone.bottom - rZone.top; ARX_CHECK_INT(_fX); ARX_CHECK_INT(_fY); int iX = ARX_CLEAN_WARN_CAST_INT(_fX); int iY = ARX_CLEAN_WARN_CAST_INT(_fY); rZone.left = iX; rZone.top = iY; rZone.right = iX + abs(iWidth); rZone.bottom = iY + abs(iHeight); } //----------------------------------------------------------------------------- long CMenuZone::IsMouseOver(int _iX, int _iY) { int iYDouble=0; if(bTestYDouble) { iYDouble=(rZone.bottom-rZone.top)>>1; } if( bActif && (_iX >= rZone.left) && (_iY >= (rZone.top-iYDouble)) && (_iX <= rZone.right) && (_iY <= (rZone.bottom+iYDouble)) ) return iId; return -1; } //----------------------------------------------------------------------------- CMenuAllZone::CMenuAllZone() { vMenuZone.clear(); vector::iterator i; for(i=vMenuZone.begin();i!=vMenuZone.end();i++) { CMenuZone *zone=*i; delete zone; } } //----------------------------------------------------------------------------- CMenuAllZone::~CMenuAllZone() { vector::iterator i; for(i=vMenuZone.begin();i!=vMenuZone.end();i++) { CMenuZone *zone=*i; delete zone; } vMenuZone.clear(); } //----------------------------------------------------------------------------- void CMenuAllZone::AddZone(CMenuZone *_pMenuZone) { vMenuZone.insert(vMenuZone.end(),_pMenuZone); } //----------------------------------------------------------------------------- int CMenuAllZone::CheckZone(int _iPosX,int _iPosY) { vector::iterator i; for(i=vMenuZone.begin();i!=vMenuZone.end();i++) { CMenuZone *zone=*i; if(zone->bCheck && zone->bActif) { long iIndex = ((*i)->IsMouseOver(_iPosX, _iPosY)); if (iIndex != -1) return iIndex; } } return -1; } //----------------------------------------------------------------------------- CMenuZone * CMenuAllZone::GetZoneNum(int _iNum) { vector::iterator i; int iNum=0; for(i=vMenuZone.begin();i!=vMenuZone.end();i++) { CMenuZone *zone=*i; if(iNum==_iNum) return zone; iNum++; } return NULL; } //----------------------------------------------------------------------------- CMenuZone * CMenuAllZone::GetZoneWithID(int _iID) { vector::iterator i; for(i=vMenuZone.begin();i!=vMenuZone.end();i++) { CMenuZone *zone; CMenuElement *me=(CMenuElement*)(*i); zone=me->GetZoneWithID(_iID); if(zone) return zone; } return NULL; } //----------------------------------------------------------------------------- void CMenuAllZone::Move(int _iPosX,int _iPosY) { vector::iterator i; for(i=vMenuZone.begin();i!=vMenuZone.end();i++) { (*i)->Move(_iPosX, _iPosY); } } //----------------------------------------------------------------------------- int CMenuAllZone::GetNbZone() { return vMenuZone.size(); } //----------------------------------------------------------------------------- void CMenuAllZone::DrawZone() { #ifdef NODEBUGZONE return; #endif GDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_ONE); GDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_ONE); SETALPHABLEND(GDevice,true); vector::iterator i; SETTC(GDevice,NULL); for(i=vMenuZone.begin();i!=vMenuZone.end();i++) { CMenuZone *zone=*i; if(zone->bActif) { D3DTLVERTEX v1[3],v2[3]; v1[0].sx = (float)zone->rZone.left; v1[0].sy = (float)zone->rZone.top; v1[1].sx = (float)zone->rZone.left; v1[1].sy = (float)zone->rZone.bottom; v1[2].sx = (float)zone->rZone.right; v1[2].sy = (float)zone->rZone.bottom; v2[0].sx = (float)zone->rZone.left; v2[0].sy = (float)zone->rZone.top; v2[1].sx = (float)zone->rZone.right; v2[1].sy = (float)zone->rZone.top; v2[2].sx = (float)zone->rZone.right; v2[2].sy = (float)zone->rZone.bottom; v1[0].color=v1[1].color=v1[2].color=v2[0].color=v2[1].color=v2[2].color=0xFFFFA000; v1[0].sz=v1[1].sz=v1[2].sz=v2[0].sz=v2[1].sz=v2[2].sz=0.f; v1[0].rhw=v1[1].rhw=v1[2].rhw=v2[0].rhw=v2[1].rhw=v2[2].rhw=0.999999f; EERIEDRAWPRIM(GDevice,D3DPT_TRIANGLESTRIP,D3DFVF_TLVERTEX|D3DFVF_DIFFUSE,v1,3,0); EERIEDRAWPRIM(GDevice,D3DPT_TRIANGLESTRIP,D3DFVF_TLVERTEX|D3DFVF_DIFFUSE,v2,3,0); } } SETALPHABLEND(GDevice,false); } //----------------------------------------------------------------------------- CMenuCheckButton::CMenuCheckButton(int _iID, float _fPosX,float _fPosY,int _iTaille,TextureContainer *_pTex1,TextureContainer *_pTex2, CMenuElementText *_pText) :CMenuElement(NOP) { iID = _iID; iState = 0; iOldState = -1; ARX_CHECK_INT(_fPosX); ARX_CHECK_INT(_fPosY); iPosX = ARX_CLEAN_WARN_CAST_INT(_fPosX); iPosY = ARX_CLEAN_WARN_CAST_INT(_fPosY); iTaille = _iTaille; pText = _pText; if (_pTex1) { float fRatioX = RATIO_X(_pTex1->m_dwWidth) ; float fRatioY = RATIO_Y(_pTex1->m_dwHeight); ARX_CHECK_INT(fRatioX); ARX_CHECK_INT(fRatioY); vTex.insert(vTex.end(), _pTex1); _iTaille = max (_iTaille, ARX_CLEAN_WARN_CAST_INT(fRatioX) ); _iTaille = max (_iTaille, ARX_CLEAN_WARN_CAST_INT(fRatioY) ); } if (_pTex2) { float fRatioX = RATIO_X(_pTex2->m_dwWidth) ; float fRatioY = RATIO_Y(_pTex2->m_dwHeight); ARX_CHECK_INT(fRatioX); ARX_CHECK_INT(fRatioY); vTex.insert(vTex.end(), _pTex2); _iTaille = max (_iTaille, ARX_CLEAN_WARN_CAST_INT(fRatioX)); _iTaille = max (_iTaille, ARX_CLEAN_WARN_CAST_INT(fRatioY)); } int x = 0; int y = 0; if (pText) { GetTextSize(pText->pHFont, pText->lpszText, &x, &y); _iTaille = max (_iTaille, y); x += pText->rZone.left; pText->Move(iPosX, iPosY + (_iTaille - y) / 2); } ARX_CHECK_LONG( _fPosX ); ARX_CHECK_LONG( _fPosY ); ARX_CHECK_LONG( _fPosX + _iTaille + x ); ARX_CHECK_LONG( _fPosY + max(_iTaille, y) ); //CAST rZone.left = ARX_CLEAN_WARN_CAST_LONG( _fPosX ); rZone.top = ARX_CLEAN_WARN_CAST_LONG( _fPosY ); rZone.right = ARX_CLEAN_WARN_CAST_LONG( _fPosX + _iTaille + x ); rZone.bottom = ARX_CLEAN_WARN_CAST_LONG( _fPosY + max(_iTaille, y) ); iId=(int)this; if (_pTex2) { float rZoneR = ( RATIO_X(200.f) + RATIO_X(_pTex1->m_dwWidth) + (RATIO_X(12*9) - RATIO_X(_pTex1->m_dwWidth))*0.5f ); ARX_CHECK_LONG( rZoneR ); rZone.right = ARX_CLEAN_WARN_CAST_LONG ( rZoneR ); } Move(iPosX, iPosY); } //----------------------------------------------------------------------------- CMenuCheckButton::~CMenuCheckButton() { vTex.clear(); if (pText) { delete pText; pText = NULL; } } //----------------------------------------------------------------------------- void CMenuCheckButton::Update(int _iDTime) { } //----------------------------------------------------------------------------- void CMenuCheckButton::Move(int _iX, int _iY) { CMenuElement::Move(_iX, _iY); if (pText) { pText->Move(_iX, _iY); } } //----------------------------------------------------------------------------- bool CMenuCheckButton::OnMouseClick(int _iMouseButton) { if(iOldState<0) iOldState=iState; iState ++; //NB : It seems that iState cannot be negative (used as tabular index / used as bool) but need further approval ARX_CHECK_NOT_NEG( iState ); if (ARX_CAST_UINT( iState ) >= vTex.size()) { iState = 0; } ARX_SOUND_PlayMenu(SND_MENU_CLICK); switch (iID) { case BUTTON_MENUOPTIONSVIDEO_FULLSCREEN: { ARXMenu_Options_Video_SetFullscreen((iState)?true:false); pMenu->bReInitAll=true; } break; case BUTTON_MENUOPTIONSVIDEO_BUMP: { ARXMenu_Options_Video_SetBump((iState)?true:false); } break; case BUTTON_MENUOPTIONSVIDEO_CROSSHAIR: { if(pMenuConfig) pMenuConfig->bShowCrossHair=(iState)?true:false; } break; case BUTTON_MENUOPTIONSVIDEO_ANTIALIASING: { if(pMenuConfig) pMenuConfig->bAntiAliasing=(iState)?true:false; ARX_SetAntiAliasing(); } break; case BUTTON_MENUOPTIONSVIDEO_DEBUGSETTING: { if(pMenuConfig) { pMenuConfig->bDebugSetting=(iState)?true:false; pMenuConfig->bDebugSetting=ARXMenu_Options_Video_SetSoftRender()?1:0; } } break; case BUTTON_MENUOPTIONSAUDIO_EAX: { ARXMenu_Options_Audio_SetEAX((iState)?true:false); } break; case BUTTON_MENUOPTIONS_CONTROLS_INVERTMOUSE: { ARXMenu_Options_Control_SetInvertMouse((iState)?true:false); } break; case BUTTON_MENUOPTIONS_CONTROLS_AUTOREADYWEAPON: { ARXMenu_Options_Control_SetAutoReadyWeapon((iState)?true:false); } break; case BUTTON_MENUOPTIONS_CONTROLS_MOUSELOOK: { ARXMenu_Options_Control_SetMouseLookToggleMode((iState)?true:false); } break; case BUTTON_MENUOPTIONS_CONTROLS_AUTODESCRIPTION: { ARXMenu_Options_Control_SetAutoDescription((iState)?true:false); } break; case BUTTON_MENUOPTIONS_CONTROLS_MOUSE_SMOOTHING: { ARXMenu_Options_Control_SetMouseSmoothing((iState)?true:false); } break; case BUTTON_MENUOPTIONS_CONTROLS_LINK: { if(pMenuConfig) { pMenuConfig->bLinkMouseLookToUse=(iState)?true:false; } } break; case BUTTON_MENUOPTIONSVIDEO_BACK: { if(pMenuConfig) { if( (pMenuSliderResol)&& (pMenuSliderResol->iOldPos>=0) ) { pMenuSliderResol->iPos=pMenuSliderResol->iOldPos; pMenuSliderResol->iOldPos=-1; pMenuConfig->iNewWidth=pMenuConfig->iWidth; pMenuConfig->iNewHeight=pMenuConfig->iHeight; } if( (pMenuSliderBpp)&& (pMenuSliderBpp->iOldPos>=0) ) { pMenuSliderBpp->iPos=pMenuSliderBpp->iOldPos; pMenuSliderBpp->iOldPos=-1; pMenuConfig->iNewBpp=pMenuConfig->iBpp; } if( (pMenuSliderTexture)&& (pMenuSliderTexture->iOldPos>=0) ) { pMenuSliderTexture->iPos=pMenuSliderTexture->iOldPos; pMenuSliderTexture->iOldPos=-1; pMenuConfig->iNewTextureResol=pMenuConfig->iTextureResol; } if( (pMenuCheckButtonBump)&& (pMenuCheckButtonBump->iOldState>=0) ) { pMenuCheckButtonBump->iState=pMenuCheckButtonBump->iOldState; pMenuCheckButtonBump->iOldState=-1; pMenuConfig->bNewBumpMapping=pMenuConfig->bBumpMapping; } } } break; } return false; } //----------------------------------------------------------------------------- void CMenuCheckButton::Render() { if(WILL_RELOAD_ALL_TEXTURES) return; if(bNoMenu) return; GDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, true); GDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_ONE); GDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_ONE); if (vTex.size()) { TextureContainer *pTex = vTex[iState]; D3DTLVERTEX v[4]; unsigned long color; if(bCheck) color = ARX_OPAQUE_WHITE; else color=0xFF3F3F3F; v[0].sz=v[1].sz=v[2].sz=v[3].sz=0.f; v[0].rhw=v[1].rhw=v[2].rhw=v[3].rhw=0.999999f; float iY = 0; { iY = ARX_CLEAN_WARN_CAST_FLOAT(rZone.bottom - rZone.top); iY -= iTaille; iY = rZone.top + iY*0.5f; } //carre EERIEDrawBitmap2(GDevice, ARX_CLEAN_WARN_CAST_FLOAT(rZone.right - iTaille), iY, RATIO_X(iTaille), RATIO_Y(iTaille), 0.f, pTex, color); } if (pText) { pText->Render(); } //DEBUG GDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, false); } //----------------------------------------------------------------------------- void CMenuCheckButton::RenderMouseOver() { if(WILL_RELOAD_ALL_TEXTURES) return; if(bNoMenu) return; pGetInfoDirectInput->SetMouseOver(); GDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, true); GDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_ONE); GDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_ONE); TextureContainer *pTex = vTex[iState]; if(pTex) SETTC(GDevice, pTex); else SETTC(GDevice,NULL); D3DTLVERTEX v[4]; v[0].color = v[1].color = v[2].color = v[3].color = ARX_OPAQUE_WHITE; v[0].sz=v[1].sz=v[2].sz=v[3].sz=0.f; v[0].rhw=v[1].rhw=v[2].rhw=v[3].rhw=0.999999f; float iY = 0; iY = ARX_CLEAN_WARN_CAST_FLOAT(rZone.bottom - rZone.top); iY -= iTaille; iY = rZone.top + iY*0.5f; //carre EERIEDrawBitmap2(GDevice, ARX_CLEAN_WARN_CAST_FLOAT(rZone.right - iTaille), iY, RATIO_X(iTaille), RATIO_Y(iTaille), 0.f, pTex, ARX_OPAQUE_WHITE); //tick if (pText) { pText->RenderMouseOver(); } //DEBUG GDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, false); } //----------------------------------------------------------------------------- CWindowMenu::CWindowMenu(int _iPosX,int _iPosY,int _iTailleX,int _iTailleY,int _iNbButton) : bMouseListen (true) { iPosX=(int)RATIO_X(_iPosX); iPosY=(int)RATIO_Y(_iPosY); iTailleX=(int)RATIO_X(_iTailleX); iTailleY=(int)RATIO_Y(_iTailleY); iNbButton=_iNbButton; pTexButton=MakeTCFromFile("Graph\\interface\\menus\\menu_left_1button.bmp",0); pTexButton2=MakeTCFromFile("Graph\\interface\\menus\\menu_left_2button.bmp",0); pTexButton3=MakeTCFromFile("Graph\\interface\\menus\\menu_left_3button.bmp",0); pTexMain=MakeTCFromFile("Graph\\interface\\menus\\menu_left_main.bmp",0); pTexGlissiere=MakeTCFromFile("Graph\\interface\\menus\\menu_left_main_glissiere.bmp",0); pTexGlissiereButton=MakeTCFromFile("Graph\\interface\\menus\\menu_left_main_glissiere_button.bmp",0); vWindowConsoleElement.clear(); fPosXCalc=((float)-iTailleX); fDist=((float)(iTailleX+iPosX)); fAngle=0.f; eCurrentMenuState=NOP; float fCalc = fPosXCalc + (fDist * sin(DEG2RAD(fAngle))); ARX_CHECK_INT(fCalc); iPosX = ARX_CLEAN_WARN_CAST_INT(fCalc); bChangeConsole=false; } //----------------------------------------------------------------------------- CWindowMenu::~CWindowMenu() { vector::iterator i; for(i=vWindowConsoleElement.begin();iiOldPosX=0; _pMenuConsoleElement->iOldPosY=0; _pMenuConsoleElement->iPosX=iPosX; _pMenuConsoleElement->iPosY=iPosY; } //----------------------------------------------------------------------------- void CWindowMenu::Update(int _iDTime) { float fCalc = fPosXCalc + (fDist * sin(DEG2RAD(fAngle))); ARX_CHECK_INT(fCalc); iPosX = ARX_CLEAN_WARN_CAST_INT(fCalc); fAngle += _iDTime * 0.08f; if(fAngle>90.f) fAngle=90.f; } //----------------------------------------------------------------------------- MENUSTATE CWindowMenu::Render() { if(WILL_RELOAD_ALL_TEXTURES) return NOP; if(bNoMenu) return NOP; if(bChangeConsole) { //TO DO: faire ce que l'on veut bChangeConsole=false; } SETALPHABLEND(GDevice,false); D3DTLVERTEX v[4]; v[0].color = v[1].color = v[2].color = v[3].color = ARX_OPAQUE_WHITE; v[0].sz=v[1].sz=v[2].sz=v[3].sz=0.f; v[0].rhw=v[1].rhw=v[2].rhw=v[3].rhw=0.999999f; GDevice->SetRenderState( D3DRENDERSTATE_ALPHABLENDENABLE, false); GDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_ONE); GDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_ONE); MENUSTATE eMS=NOP; if (bMouseListen) { vector::iterator i; ARX_CHECK_INT(ARXDiffTimeMenu); int iARXDiffTimeMenu = ARX_CLEAN_WARN_CAST_INT(ARXDiffTimeMenu) ; for (i = vWindowConsoleElement.begin(); i != vWindowConsoleElement.end(); ++i) { if(eCurrentMenuState==(*i)->eMenuState) { eMS=(*i)->Update(iPosX,iPosY, 0, iARXDiffTimeMenu); if(eMS!=NOP) { break; } } } } vector::iterator i; for (i = vWindowConsoleElement.begin(); i != vWindowConsoleElement.end(); ++i) { if(eCurrentMenuState==(*i)->eMenuState) { int iNbHide; if(iNbHide=((*i)->Render())) { SETALPHABLEND(GDevice,false); } break; } } SETALPHABLEND(GDevice,false); if(eMS!=NOP) { eCurrentMenuState=eMS; bChangeConsole=true; } return eMS; } //----------------------------------------------------------------------------- CWindowMenuConsole::CWindowMenuConsole(int _iPosX,int _iPosY,int _iWidth,int _iHeight,MENUSTATE _eMenuState) : bMouseListen (true), bEdit (false), iInterligne (10), lData(0), pData(NULL) { iOX=(int)RATIO_X(_iPosX); iOY=(int)RATIO_Y(_iPosY); iWidth=(int)RATIO_X(_iWidth); iHeight=(int)RATIO_Y(_iHeight); eMenuState=_eMenuState; pTexBackground = MakeTCFromFile("Graph\\interface\\menus\\menu_console_background.bmp",0); pTexBackgroundBorder = MakeTCFromFile("Graph\\interface\\menus\\menu_console_background_border.bmp",0); bFrameOdd=false; iPosMenu=-1; } //----------------------------------------------------------------------------- void CWindowMenuConsole::AddMenu(CMenuElement *_pMenuElement) { _pMenuElement->ePlace=NOCENTER; _pMenuElement->Move(iOX,iOY); MenuAllZone.AddZone((CMenuZone*)_pMenuElement); } //----------------------------------------------------------------------------- void CWindowMenuConsole::AddMenuCenterY( CMenuElement * _pMenuElement ) { _pMenuElement->ePlace = CENTERY; int iDy = _pMenuElement->rZone.bottom-_pMenuElement->rZone.top; int iI = MenuAllZone.GetNbZone(); for( int iJ = 0 ; iJ < iI ; iJ++ ) { iDy += iInterligne; CMenuZone *pZone = MenuAllZone.GetZoneNum(iJ); iDy += pZone->rZone.bottom - pZone->rZone.top; } int iDepY; if( iDy < iHeight ) { iDepY = iOY + ( ( iHeight - iDy ) >> 1 ); } else { iDepY = iOY; } int dy = 0; iI = MenuAllZone.GetNbZone(); if( iI ) { dy = iDepY - MenuAllZone.GetZoneNum(0)->rZone.top; } //We can't go inside the for-loop else { ARX_CHECK( !( 0 < iI ) ); } for( int iJ = 0 ; iJ < iI ; iJ++ ) { CMenuZone *pZone = MenuAllZone.GetZoneNum(iJ); iDy = pZone->rZone.bottom - pZone->rZone.top; iDepY += iDy + iInterligne; pZone->Move( 0, dy ); } _pMenuElement->Move( 0, iDepY ); MenuAllZone.AddZone( (CMenuZone*) _pMenuElement ); } //----------------------------------------------------------------------------- void CWindowMenuConsole::AddMenuCenter( CMenuElement * _pMenuElement ) { _pMenuElement->ePlace = CENTER; int iDx = _pMenuElement->rZone.right - _pMenuElement->rZone.left; int dx = ( ( iWidth - iDx ) >> 1 ) - _pMenuElement->rZone.left; if( dx < 0 ) { dx = 0; } int iDy = _pMenuElement->rZone.bottom - _pMenuElement->rZone.top; int iI = MenuAllZone.GetNbZone(); for( int iJ = 0 ; iJ < iI ; iJ++ ) { iDy += iInterligne; CMenuZone *pZone = MenuAllZone.GetZoneNum(iJ); iDy += pZone->rZone.bottom - pZone->rZone.top; } int iDepY; if( iDy < iHeight ) { iDepY = iOY + ( ( iHeight - iDy ) >> 1 ); } else { iDepY = iOY; } int dy = 0; iI = MenuAllZone.GetNbZone(); if( iI ) { dy = iDepY - MenuAllZone.GetZoneNum(0)->rZone.top; } //We can't go inside the for-loop else { ARX_CHECK( !( 0 < iI ) ); } for( int iJ = 0 ; iJ < iI ; iJ++ ) { CMenuZone *pZone = MenuAllZone.GetZoneNum( iJ ); iDy = pZone->rZone.bottom - pZone->rZone.top; iDepY += iDy + iInterligne; pZone->Move( 0, dy ); } iDx = _pMenuElement->rZone.right - _pMenuElement->rZone.left; iDy = _pMenuElement->rZone.bottom - _pMenuElement->rZone.top; _pMenuElement->Move( dx, iDepY ); MenuAllZone.AddZone( (CMenuZone*) _pMenuElement ); } //----------------------------------------------------------------------------- void CWindowMenuConsole::AlignElementCenter(CMenuElement *_pMenuElement) { _pMenuElement->Move(-_pMenuElement->rZone.left, 0); _pMenuElement->ePlace=CENTER; int iDx = _pMenuElement->rZone.right-_pMenuElement->rZone.left; int dx=((iWidth-iDx)>>1)-_pMenuElement->rZone.left; if(dx<0) { dx=0; } iDx=_pMenuElement->rZone.right-_pMenuElement->rZone.left; _pMenuElement->Move(dx,0); } //----------------------------------------------------------------------------- static int scan2ascii(DWORD scancode, unsigned short* result) { static HKL layout=GetKeyboardLayout(0); static unsigned char State[256]; if (GetKeyboardState(State)==FALSE) return 0; UINT vk=MapVirtualKeyEx(scancode,1,layout); return ToAsciiEx(vk,scancode,State,result,0,layout); } //----------------------------------------------------------------------------- void CWindowMenuConsole::UpdateText() { if(pGetInfoDirectInput->bTouch) { pGetInfoDirectInput->iKeyId&=0xFFFF; if( (pGetInfoDirectInput->IsVirtualKeyPressed(DIK_RETURN))|| (pGetInfoDirectInput->IsVirtualKeyPressed(DIK_NUMPADENTER)) || (pGetInfoDirectInput->IsVirtualKeyPressed(DIK_ESCAPE)) ) { ARX_SOUND_PlayMenu(SND_MENU_CLICK); ((CMenuElementText*)pZoneClick)->eState=EDIT; if(!_tcslen(((CMenuElementText*)pZoneClick)->lpszText)) { _TCHAR szMenuText[256]; PAK_UNICODE_GetPrivateProfileString(_T("system_menu_editquest_newsavegame"), _T("string"), _T(""), szMenuText, 256, NULL); ((CMenuElementText*)pZoneClick)->SetText(szMenuText); int iDx=pZoneClick->rZone.right-pZoneClick->rZone.left; if(pZoneClick->ePlace) { pZoneClick->rZone.left=iPosX+((iWidth-iDx)>>1); if(pZoneClick->rZone.left<0) { pZoneClick->rZone.left=0; } } pZoneClick->rZone.right=pZoneClick->rZone.left+iDx; } pZoneClick=NULL; bEdit=false; return; } bool bKey=false; _TCHAR tText[256]; CMenuElementText *pZoneText=(CMenuElementText*)pZoneClick; if(pGetInfoDirectInput->IsVirtualKeyPressedOneTouch(DIK_BACKSPACE)) { _tcscpy(tText,pZoneText->lpszText); if(_tcslen(tText)) { tText[_tcslen(tText)-1]=_T('\0'); bKey=true; } } else { if(pGetInfoDirectInput->IsVirtualKeyPressedOneTouch(pGetInfoDirectInput->iKeyId)) { _tcscpy(tText,pZoneText->lpszText); unsigned short tusOutPut[2]; _TCHAR tCat[2]; int iKey = pGetInfoDirectInput->iKeyId; int iR = scan2ascii(iKey, tusOutPut); if(!iR) { bKey=true; //touche non reconnue switch(iKey) { case DIK_NUMPAD0: tCat[0]=_T('0'); tCat[1]=0; break; case DIK_NUMPAD1: tCat[0]=_T('1'); tCat[1]=0; break; case DIK_NUMPAD2: tCat[0]=_T('2'); tCat[1]=0; break; case DIK_NUMPAD3: tCat[0]=_T('3'); tCat[1]=0; break; case DIK_NUMPAD4: tCat[0]=_T('4'); tCat[1]=0; break; case DIK_NUMPAD5: tCat[0]=_T('5'); tCat[1]=0; break; case DIK_NUMPAD6: tCat[0]=_T('6'); tCat[1]=0; break; case DIK_NUMPAD7: tCat[0]=_T('7'); tCat[1]=0; break; case DIK_NUMPAD8: tCat[0]=_T('8'); tCat[1]=0; break; case DIK_NUMPAD9: tCat[0]=_T('9'); tCat[1]=0; break; case DIK_DECIMAL: tCat[0]=_T('.'); tCat[1]=0; break; case DIK_DIVIDE: tCat[0]=_T('/'); tCat[1]=0; break; default: bKey=false; break; } } else { tCat[0]=_TCHAR(unsigned char(tusOutPut[0])); tCat[1]=0; bKey=true; } if(bKey) { if ((_istalnum(tCat[0]) || _istspace(tCat[0]) || _istpunct(tCat[0])) && (tCat[0]!=_T('\t')) && (tCat[0]!=_T('*'))) _tcscat(tText,tCat); } } } if(bKey) { pZoneText->SetText(tText); if( (pZoneText->rZone.right-pZoneText->rZone.left)>(iWidth-RATIO_X(64)) ) { tText[_tcslen(tText)-1]=0; pZoneText->SetText(tText); } int iDx=pZoneClick->rZone.right-pZoneClick->rZone.left; if(pZoneClick->ePlace) { pZoneClick->rZone.left=iPosX+((iWidth-iDx)>>1); if(pZoneClick->rZone.left<0) { pZoneClick->rZone.left=0; } } pZoneClick->rZone.right=pZoneClick->rZone.left+iDx; } } if (pZoneClick->rZone.top == pZoneClick->rZone.bottom) { int w,h; GetTextSize(((CMenuElementText*)pZoneClick)->pHFont, _T("|"), (int*)&w, (int*)&h); pZoneClick->rZone.bottom += h; } //DRAW CURSOR D3DTLVERTEX v[4]; SETTC(GDevice,NULL); float col=.5f+rnd()*.5f; v[0].color=v[1].color=v[2].color=v[3].color=D3DRGBA(col,col,col,1.f); v[0].sz=v[1].sz=v[2].sz=v[3].sz=0.f; v[0].rhw=v[1].rhw=v[2].rhw=v[3].rhw=0.999999f; v[0].sx = (float)pZoneClick->rZone.right; v[0].sy = (float)pZoneClick->rZone.top; v[1].sx = v[0].sx+2.f; v[1].sy = v[0].sy; v[2].sx = v[0].sx; v[2].sy = (float)pZoneClick->rZone.bottom; v[3].sx = v[1].sx; v[3].sy = v[2].sy; EERIEDRAWPRIM(GDevice,D3DPT_TRIANGLESTRIP,D3DFVF_TLVERTEX|D3DFVF_DIFFUSE,v,4,0); } //----------------------------------------------------------------------------- int IsMouseButtonClick() { //MouseButton for(int i=DXI_BUTTON0;i<=DXI_BUTTON31;i++) { if(pGetInfoDirectInput->GetMouseButtonNowPressed(i)) { return DIK_BUTTON1+i-DXI_BUTTON0; } } //Wheel UP/DOWN if(pGetInfoDirectInput->iWheelSens<0) { return DIK_WHEELDOWN; } else { if(pGetInfoDirectInput->iWheelSens>0) { return DIK_WHEELUP; } } return 0; } //----------------------------------------------------------------------------- CMenuElement * CWindowMenuConsole::GetTouch(bool _bValidateTest) { int iMouseButton=0; if( (pGetInfoDirectInput->bTouch)|| (((iMouseButton = IsMouseButtonClick()) & 0xc0000000))) { if(!pGetInfoDirectInput->bTouch&&!bMouseAttack) { bMouseAttack=!bMouseAttack; return NULL; } CMenuElementText *pZoneText=(CMenuElementText*)pZoneClick; if(_bValidateTest) { if( (pZoneClick->iID==BUTTON_MENUOPTIONS_CONTROLS_CUST_ACTIONCOMBINE1)|| (pZoneClick->iID==BUTTON_MENUOPTIONS_CONTROLS_CUST_ACTIONCOMBINE2)) { bool bOk=true; if( (iMouseButton&0x80000000)&& !(iMouseButton&0x40000000) ) { bOk=false; } else { for(int iI=DIK_BUTTON1;iI<=DIK_BUTTON32;iI++) { if(pGetInfoDirectInput->iKeyId==iI) { bOk=false; break; } } } if(bOk) return NULL; } } _TCHAR *pText; if ( (pText=pGetInfoDirectInput->GetFullNameTouch((iMouseButton&0xc0000000)?iMouseButton:pGetInfoDirectInput->iKeyId)) ) { pZoneText->lColorHighlight=pZoneText->lOldColor; pZoneText->eState=GETTOUCH; pZoneText->SetText(pText); free((void*)pText); pText = NULL; int iDx=pZoneClick->rZone.right-pZoneClick->rZone.left; if(pZoneClick->ePlace) { pZoneClick->rZone.left=(iWidth-iDx)>>1; if(pZoneClick->rZone.left<0) { pZoneClick->rZone.left=0; } } pZoneClick->rZone.right=pZoneClick->rZone.left+iDx; pZoneClick=NULL; bEdit=false; if(iMouseButton&0xc0000000) { pGetInfoDirectInput->iKeyId=iMouseButton; } bMouseAttack=false; return (CMenuElement*)pZoneText; } } return NULL; } //----------------------------------------------------------------------------- MENUSTATE CWindowMenuConsole::Update(int _iPosX,int _iPosY,int _iOffsetY,int _FrameDiff) { bFrameOdd=!bFrameOdd; iSavePosY=_iPosY; //move les zones if(_iOffsetY) { _iPosY-=(MenuAllZone.GetZoneNum(_iOffsetY)->rZone.top)-(MenuAllZone.GetZoneNum(0)->rZone.top); } MenuAllZone.Move((iPosX-iOldPosX),(iPosY-iOldPosY)); int iI = MenuAllZone.GetNbZone(); for(int iJ=0;iJrZone.toprZone.bottom+iInterligne)>(iSavePosY+iHeight))) { pZone->bActif=false; } else { pZone->bActif=true; } pZone->bActif=true; } iOldPosX=iPosX; iOldPosY=iPosY; iPosX=_iPosX; iPosY=_iPosY; // Check if mouse over if (bMouseListen) { if (!bEdit) { pZoneClick=NULL; int iR = MenuAllZone.CheckZone(pGetInfoDirectInput->iMouseAX,pGetInfoDirectInput->iMouseAY); if(iR!=-1) { pZoneClick=(CMenuElement*)iR; if( pGetInfoDirectInput->GetMouseButtonDoubleClick(DXI_BUTTON0,300) ) { MENUSTATE e = pZoneClick->eMenuState; bEdit = pZoneClick->OnMouseDoubleClick(0); if (pZoneClick->iID == BUTTON_MENUEDITQUEST_LOAD) return MAIN; if(bEdit) return pZoneClick->eMenuState; return e; } if( pGetInfoDirectInput->GetMouseButton(DXI_BUTTON0) ) { MENUSTATE e = pZoneClick->eMenuState; bEdit = pZoneClick->OnMouseClick(0); return e; } else { pZoneClick->EmptyFunction(); } } } else { if(!pZoneClick) { int iR = MenuAllZone.CheckZone(pGetInfoDirectInput->iMouseAX,pGetInfoDirectInput->iMouseAY); if(iR!=-1) { pZoneClick=(CMenuElement*)iR; if( pGetInfoDirectInput->GetMouseButtonDoubleClick(DXI_BUTTON0,300) ) { bEdit = pZoneClick->OnMouseDoubleClick(0); if(bEdit) return pZoneClick->eMenuState; } } } } } //check les shortcuts if(!bEdit) { iI=MenuAllZone.GetNbZone(); for(int iJ=0;iJOnShortCut())) { pZoneClick=CMenuElementShortCut; MENUSTATE e = pZoneClick->eMenuState; bEdit = pZoneClick->OnMouseClick(0); pZoneClick=CMenuElementShortCut; return e; } } } return NOP; } //----------------------------------------------------------------------------- static bool UpdateGameKey(bool bEdit,CMenuElement *pmeElement) { bool bChange=false; if( (!bEdit)&& (pmeElement) ) { switch(pmeElement->iID) { case BUTTON_MENUOPTIONS_CONTROLS_CUST_JUMP1: case BUTTON_MENUOPTIONS_CONTROLS_CUST_JUMP2: bChange=pMenuConfig->SetActionKey(CONTROLS_CUST_JUMP,pmeElement->iID-BUTTON_MENUOPTIONS_CONTROLS_CUST_JUMP1,pGetInfoDirectInput->iKeyId); break; case BUTTON_MENUOPTIONS_CONTROLS_CUST_MAGICMODE1: case BUTTON_MENUOPTIONS_CONTROLS_CUST_MAGICMODE2: bChange=pMenuConfig->SetActionKey(CONTROLS_CUST_MAGICMODE,pmeElement->iID-BUTTON_MENUOPTIONS_CONTROLS_CUST_MAGICMODE1,pGetInfoDirectInput->iKeyId); break; case BUTTON_MENUOPTIONS_CONTROLS_CUST_STEALTHMODE1: case BUTTON_MENUOPTIONS_CONTROLS_CUST_STEALTHMODE2: bChange=pMenuConfig->SetActionKey(CONTROLS_CUST_STEALTHMODE,pmeElement->iID-BUTTON_MENUOPTIONS_CONTROLS_CUST_STEALTHMODE1,pGetInfoDirectInput->iKeyId); break; case BUTTON_MENUOPTIONS_CONTROLS_CUST_WALKFORWARD1: case BUTTON_MENUOPTIONS_CONTROLS_CUST_WALKFORWARD2: bChange=pMenuConfig->SetActionKey(CONTROLS_CUST_WALKFORWARD,pmeElement->iID-BUTTON_MENUOPTIONS_CONTROLS_CUST_WALKFORWARD1,pGetInfoDirectInput->iKeyId); break; case BUTTON_MENUOPTIONS_CONTROLS_CUST_WALKBACKWARD1: case BUTTON_MENUOPTIONS_CONTROLS_CUST_WALKBACKWARD2: bChange=pMenuConfig->SetActionKey(CONTROLS_CUST_WALKBACKWARD,pmeElement->iID-BUTTON_MENUOPTIONS_CONTROLS_CUST_WALKBACKWARD1,pGetInfoDirectInput->iKeyId); break; case BUTTON_MENUOPTIONS_CONTROLS_CUST_STRAFELEFT1: case BUTTON_MENUOPTIONS_CONTROLS_CUST_STRAFELEFT2: bChange=pMenuConfig->SetActionKey(CONTROLS_CUST_STRAFELEFT,pmeElement->iID-BUTTON_MENUOPTIONS_CONTROLS_CUST_STRAFELEFT1,pGetInfoDirectInput->iKeyId); break; case BUTTON_MENUOPTIONS_CONTROLS_CUST_STRAFERIGHT1: case BUTTON_MENUOPTIONS_CONTROLS_CUST_STRAFERIGHT2: bChange=pMenuConfig->SetActionKey(CONTROLS_CUST_STRAFERIGHT,pmeElement->iID-BUTTON_MENUOPTIONS_CONTROLS_CUST_STRAFERIGHT1,pGetInfoDirectInput->iKeyId); break; case BUTTON_MENUOPTIONS_CONTROLS_CUST_LEANLEFT1: case BUTTON_MENUOPTIONS_CONTROLS_CUST_LEANLEFT2: bChange=pMenuConfig->SetActionKey(CONTROLS_CUST_LEANLEFT,pmeElement->iID-BUTTON_MENUOPTIONS_CONTROLS_CUST_LEANLEFT1,pGetInfoDirectInput->iKeyId); break; case BUTTON_MENUOPTIONS_CONTROLS_CUST_LEANRIGHT1: case BUTTON_MENUOPTIONS_CONTROLS_CUST_LEANRIGHT2: bChange=pMenuConfig->SetActionKey(CONTROLS_CUST_LEANRIGHT,pmeElement->iID-BUTTON_MENUOPTIONS_CONTROLS_CUST_LEANRIGHT1,pGetInfoDirectInput->iKeyId); break; case BUTTON_MENUOPTIONS_CONTROLS_CUST_CROUCH1: case BUTTON_MENUOPTIONS_CONTROLS_CUST_CROUCH2: bChange=pMenuConfig->SetActionKey(CONTROLS_CUST_CROUCH,pmeElement->iID-BUTTON_MENUOPTIONS_CONTROLS_CUST_CROUCH1,pGetInfoDirectInput->iKeyId); break; case BUTTON_MENUOPTIONS_CONTROLS_CUST_MOUSELOOK1: case BUTTON_MENUOPTIONS_CONTROLS_CUST_MOUSELOOK2: bChange=pMenuConfig->SetActionKey(CONTROLS_CUST_MOUSELOOK,pmeElement->iID-BUTTON_MENUOPTIONS_CONTROLS_CUST_MOUSELOOK1,pGetInfoDirectInput->iKeyId); break; case BUTTON_MENUOPTIONS_CONTROLS_CUST_ACTIONCOMBINE1: case BUTTON_MENUOPTIONS_CONTROLS_CUST_ACTIONCOMBINE2: bChange=pMenuConfig->SetActionKey(CONTROLS_CUST_ACTION,pmeElement->iID-BUTTON_MENUOPTIONS_CONTROLS_CUST_ACTIONCOMBINE1,pGetInfoDirectInput->iKeyId); break; case BUTTON_MENUOPTIONS_CONTROLS_CUST_INVENTORY1: case BUTTON_MENUOPTIONS_CONTROLS_CUST_INVENTORY2: bChange=pMenuConfig->SetActionKey(CONTROLS_CUST_INVENTORY,pmeElement->iID-BUTTON_MENUOPTIONS_CONTROLS_CUST_INVENTORY1,pGetInfoDirectInput->iKeyId); break; case BUTTON_MENUOPTIONS_CONTROLS_CUST_BOOK1: case BUTTON_MENUOPTIONS_CONTROLS_CUST_BOOK2: bChange=pMenuConfig->SetActionKey(CONTROLS_CUST_BOOK,pmeElement->iID-BUTTON_MENUOPTIONS_CONTROLS_CUST_BOOK1,pGetInfoDirectInput->iKeyId); break; case BUTTON_MENUOPTIONS_CONTROLS_CUST_BOOKCHARSHEET1: case BUTTON_MENUOPTIONS_CONTROLS_CUST_BOOKCHARSHEET2: bChange=pMenuConfig->SetActionKey(CONTROLS_CUST_BOOKCHARSHEET,pmeElement->iID-BUTTON_MENUOPTIONS_CONTROLS_CUST_BOOKCHARSHEET1,pGetInfoDirectInput->iKeyId); break; case BUTTON_MENUOPTIONS_CONTROLS_CUST_BOOKSPELL1: case BUTTON_MENUOPTIONS_CONTROLS_CUST_BOOKSPELL2: bChange=pMenuConfig->SetActionKey(CONTROLS_CUST_BOOKSPELL,pmeElement->iID-BUTTON_MENUOPTIONS_CONTROLS_CUST_BOOKSPELL1,pGetInfoDirectInput->iKeyId); break; case BUTTON_MENUOPTIONS_CONTROLS_CUST_BOOKMAP1: case BUTTON_MENUOPTIONS_CONTROLS_CUST_BOOKMAP2: bChange=pMenuConfig->SetActionKey(CONTROLS_CUST_BOOKMAP,pmeElement->iID-BUTTON_MENUOPTIONS_CONTROLS_CUST_BOOKMAP1,pGetInfoDirectInput->iKeyId); break; case BUTTON_MENUOPTIONS_CONTROLS_CUST_BOOKQUEST1: case BUTTON_MENUOPTIONS_CONTROLS_CUST_BOOKQUEST2: bChange=pMenuConfig->SetActionKey(CONTROLS_CUST_BOOKQUEST,pmeElement->iID-BUTTON_MENUOPTIONS_CONTROLS_CUST_BOOKQUEST1,pGetInfoDirectInput->iKeyId); break; case BUTTON_MENUOPTIONS_CONTROLS_CUST_DRINKPOTIONLIFE1: case BUTTON_MENUOPTIONS_CONTROLS_CUST_DRINKPOTIONLIFE2: bChange=pMenuConfig->SetActionKey(CONTROLS_CUST_DRINKPOTIONLIFE,pmeElement->iID-BUTTON_MENUOPTIONS_CONTROLS_CUST_DRINKPOTIONLIFE1,pGetInfoDirectInput->iKeyId); break; case BUTTON_MENUOPTIONS_CONTROLS_CUST_DRINKPOTIONMANA1: case BUTTON_MENUOPTIONS_CONTROLS_CUST_DRINKPOTIONMANA2: bChange=pMenuConfig->SetActionKey(CONTROLS_CUST_DRINKPOTIONMANA,pmeElement->iID-BUTTON_MENUOPTIONS_CONTROLS_CUST_DRINKPOTIONMANA1,pGetInfoDirectInput->iKeyId); break; case BUTTON_MENUOPTIONS_CONTROLS_CUST_TORCH1: case BUTTON_MENUOPTIONS_CONTROLS_CUST_TORCH2: bChange=pMenuConfig->SetActionKey(CONTROLS_CUST_TORCH,pmeElement->iID-BUTTON_MENUOPTIONS_CONTROLS_CUST_TORCH1,pGetInfoDirectInput->iKeyId); break; case BUTTON_MENUOPTIONS_CONTROLS_CUST_CANCELCURSPELL1: case BUTTON_MENUOPTIONS_CONTROLS_CUST_CANCELCURSPELL2: bChange=pMenuConfig->SetActionKey(CONTROLS_CUST_CANCELCURSPELL,pmeElement->iID-BUTTON_MENUOPTIONS_CONTROLS_CUST_CANCELCURSPELL1,pGetInfoDirectInput->iKeyId); break; case BUTTON_MENUOPTIONS_CONTROLS_CUST_PRECAST1: case BUTTON_MENUOPTIONS_CONTROLS_CUST_PRECAST1_2: bChange=pMenuConfig->SetActionKey(CONTROLS_CUST_PRECAST1,pmeElement->iID-BUTTON_MENUOPTIONS_CONTROLS_CUST_PRECAST1,pGetInfoDirectInput->iKeyId); break; case BUTTON_MENUOPTIONS_CONTROLS_CUST_PRECAST2: case BUTTON_MENUOPTIONS_CONTROLS_CUST_PRECAST2_2: bChange=pMenuConfig->SetActionKey(CONTROLS_CUST_PRECAST2,pmeElement->iID-BUTTON_MENUOPTIONS_CONTROLS_CUST_PRECAST2,pGetInfoDirectInput->iKeyId); break; case BUTTON_MENUOPTIONS_CONTROLS_CUST_PRECAST3: case BUTTON_MENUOPTIONS_CONTROLS_CUST_PRECAST3_2: bChange=pMenuConfig->SetActionKey(CONTROLS_CUST_PRECAST3,pmeElement->iID-BUTTON_MENUOPTIONS_CONTROLS_CUST_PRECAST3,pGetInfoDirectInput->iKeyId); break; case BUTTON_MENUOPTIONS_CONTROLS_CUST_WEAPON1: case BUTTON_MENUOPTIONS_CONTROLS_CUST_WEAPON2: bChange=pMenuConfig->SetActionKey(CONTROLS_CUST_WEAPON,pmeElement->iID-BUTTON_MENUOPTIONS_CONTROLS_CUST_WEAPON1,pGetInfoDirectInput->iKeyId); break; case BUTTON_MENUOPTIONS_CONTROLS_CUST_QUICKLOAD: case BUTTON_MENUOPTIONS_CONTROLS_CUST_QUICKLOAD2: bChange=pMenuConfig->SetActionKey(CONTROLS_CUST_QUICKLOAD,pmeElement->iID-BUTTON_MENUOPTIONS_CONTROLS_CUST_QUICKLOAD,pGetInfoDirectInput->iKeyId); break; case BUTTON_MENUOPTIONS_CONTROLS_CUST_QUICKSAVE: case BUTTON_MENUOPTIONS_CONTROLS_CUST_QUICKSAVE2: bChange=pMenuConfig->SetActionKey(CONTROLS_CUST_QUICKSAVE,pmeElement->iID-BUTTON_MENUOPTIONS_CONTROLS_CUST_QUICKSAVE,pGetInfoDirectInput->iKeyId); break; case BUTTON_MENUOPTIONS_CONTROLS_CUST_TURNLEFT1: case BUTTON_MENUOPTIONS_CONTROLS_CUST_TURNLEFT2: bChange=pMenuConfig->SetActionKey(CONTROLS_CUST_TURNLEFT,pmeElement->iID-BUTTON_MENUOPTIONS_CONTROLS_CUST_TURNLEFT1,pGetInfoDirectInput->iKeyId); break; case BUTTON_MENUOPTIONS_CONTROLS_CUST_TURNRIGHT1: case BUTTON_MENUOPTIONS_CONTROLS_CUST_TURNRIGHT2: bChange=pMenuConfig->SetActionKey(CONTROLS_CUST_TURNRIGHT,pmeElement->iID-BUTTON_MENUOPTIONS_CONTROLS_CUST_TURNRIGHT1,pGetInfoDirectInput->iKeyId); break; case BUTTON_MENUOPTIONS_CONTROLS_CUST_LOOKUP1: case BUTTON_MENUOPTIONS_CONTROLS_CUST_LOOKUP2: bChange=pMenuConfig->SetActionKey(CONTROLS_CUST_LOOKUP,pmeElement->iID-BUTTON_MENUOPTIONS_CONTROLS_CUST_LOOKUP1,pGetInfoDirectInput->iKeyId); break; case BUTTON_MENUOPTIONS_CONTROLS_CUST_LOOKDOWN1: case BUTTON_MENUOPTIONS_CONTROLS_CUST_LOOKDOWN2: bChange=pMenuConfig->SetActionKey(CONTROLS_CUST_LOOKDOWN,pmeElement->iID-BUTTON_MENUOPTIONS_CONTROLS_CUST_LOOKDOWN1,pGetInfoDirectInput->iKeyId); break; case BUTTON_MENUOPTIONS_CONTROLS_CUST_STRAFE1: case BUTTON_MENUOPTIONS_CONTROLS_CUST_STRAFE2: bChange=pMenuConfig->SetActionKey(CONTROLS_CUST_STRAFE,pmeElement->iID-BUTTON_MENUOPTIONS_CONTROLS_CUST_STRAFE1,pGetInfoDirectInput->iKeyId); break; case BUTTON_MENUOPTIONS_CONTROLS_CUST_CENTERVIEW1: case BUTTON_MENUOPTIONS_CONTROLS_CUST_CENTERVIEW2: bChange=pMenuConfig->SetActionKey(CONTROLS_CUST_CENTERVIEW,pmeElement->iID-BUTTON_MENUOPTIONS_CONTROLS_CUST_CENTERVIEW1,pGetInfoDirectInput->iKeyId); break; case BUTTON_MENUOPTIONS_CONTROLS_CUST_FREELOOK1: case BUTTON_MENUOPTIONS_CONTROLS_CUST_FREELOOK2: bChange=pMenuConfig->SetActionKey(CONTROLS_CUST_FREELOOK,pmeElement->iID-BUTTON_MENUOPTIONS_CONTROLS_CUST_FREELOOK1,pGetInfoDirectInput->iKeyId); break; case BUTTON_MENUOPTIONS_CONTROLS_CUST_PREVIOUS1: case BUTTON_MENUOPTIONS_CONTROLS_CUST_PREVIOUS2: bChange=pMenuConfig->SetActionKey(CONTROLS_CUST_PREVIOUS,pmeElement->iID-BUTTON_MENUOPTIONS_CONTROLS_CUST_PREVIOUS1,pGetInfoDirectInput->iKeyId); break; case BUTTON_MENUOPTIONS_CONTROLS_CUST_NEXT1: case BUTTON_MENUOPTIONS_CONTROLS_CUST_NEXT2: bChange=pMenuConfig->SetActionKey(CONTROLS_CUST_NEXT,pmeElement->iID-BUTTON_MENUOPTIONS_CONTROLS_CUST_NEXT1,pGetInfoDirectInput->iKeyId); break; case BUTTON_MENUOPTIONS_CONTROLS_CUST_CROUCHTOGGLE1: case BUTTON_MENUOPTIONS_CONTROLS_CUST_CROUCHTOGGLE2: bChange=pMenuConfig->SetActionKey(CONTROLS_CUST_CROUCHTOGGLE,pmeElement->iID-BUTTON_MENUOPTIONS_CONTROLS_CUST_CROUCHTOGGLE1,pGetInfoDirectInput->iKeyId); break; case BUTTON_MENUOPTIONS_CONTROLS_CUST_UNEQUIPWEAPON1: case BUTTON_MENUOPTIONS_CONTROLS_CUST_UNEQUIPWEAPON2: bChange=pMenuConfig->SetActionKey(CONTROLS_CUST_UNEQUIPWEAPON,pmeElement->iID-BUTTON_MENUOPTIONS_CONTROLS_CUST_UNEQUIPWEAPON1,pGetInfoDirectInput->iKeyId); break; case BUTTON_MENUOPTIONS_CONTROLS_CUST_MINIMAP1: case BUTTON_MENUOPTIONS_CONTROLS_CUST_MINIMAP2: bChange=pMenuConfig->SetActionKey(CONTROLS_CUST_MINIMAP,pmeElement->iID-BUTTON_MENUOPTIONS_CONTROLS_CUST_MINIMAP1,pGetInfoDirectInput->iKeyId); break; } } return bChange; } //----------------------------------------------------------------------------- int CWindowMenuConsole::Render() { if(WILL_RELOAD_ALL_TEXTURES) return 0; if(bNoMenu) return 0; int iSlider=0; SETALPHABLEND(GDevice,TRUE); //------------------------------------------------------------------------ //Affichage de la console GDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_ZERO); GDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_INVSRCCOLOR); GDevice->SetRenderState(D3DRENDERSTATE_ZENABLE, false); EERIEDrawBitmap2(GDevice, ARX_CLEAN_WARN_CAST_FLOAT(iPosX), ARX_CLEAN_WARN_CAST_FLOAT(iSavePosY), RATIO_X(pTexBackground->m_dwWidth), RATIO_Y(pTexBackground->m_dwHeight), 0, pTexBackground, ARX_OPAQUE_WHITE); danaeApp.EnableZBuffer(); GDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_ONE); GDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_ONE); SETALPHABLEND(GDevice, false); SETALPHABLEND(GDevice,FALSE); EERIEDrawBitmap2(GDevice, ARX_CLEAN_WARN_CAST_FLOAT(iPosX), ARX_CLEAN_WARN_CAST_FLOAT(iSavePosY), RATIO_X(pTexBackgroundBorder->m_dwWidth), RATIO_Y(pTexBackgroundBorder->m_dwHeight), 0, pTexBackgroundBorder, ARX_OPAQUE_WHITE); //------------------------------------------------------------------------ int t = MenuAllZone.GetNbZone(); ARX_CHECK_INT(ARXDiffTimeMenu); int iARXDiffTimeMenu = ARX_CLEAN_WARN_CAST_INT(ARXDiffTimeMenu); for(int i=0;ibActif) { pMe->Update(iARXDiffTimeMenu); pMe->Render(); } else { iSlider++; } } //HIGHLIGHT if(pZoneClick && pZoneClick->bActif) { bool bReInit=false; pZoneClick->RenderMouseOver(); switch(pZoneClick->eState) { case EDIT_TIME: UpdateText(); break; case GETTOUCH_TIME: { if(bFrameOdd) ((CMenuElementText*)pZoneClick)->lColorHighlight=RGB(255.f, 0, 0); else ((CMenuElementText*)pZoneClick)->lColorHighlight=RGB(50.f, 0, 0); bool bOldTouch=pGetInfoDirectInput->bTouch; if( pGetInfoDirectInput->IsVirtualKeyPressed(DIK_LSHIFT)|| pGetInfoDirectInput->IsVirtualKeyPressed(DIK_RSHIFT)|| pGetInfoDirectInput->IsVirtualKeyPressed(DIK_LCONTROL)|| pGetInfoDirectInput->IsVirtualKeyPressed(DIK_RCONTROL)|| pGetInfoDirectInput->IsVirtualKeyPressed(DIK_LALT)|| pGetInfoDirectInput->IsVirtualKeyPressed(DIK_RALT) ) { if(!((pGetInfoDirectInput->iKeyId&~0x8000FFFF)>>16)) pGetInfoDirectInput->bTouch=false; } else { if(pGetInfoDirectInput->IsVirtualKeyPressedNowUnPressed(DIK_LSHIFT)) { pGetInfoDirectInput->bTouch=true; pGetInfoDirectInput->iKeyId=DIK_LSHIFT; } if(pGetInfoDirectInput->IsVirtualKeyPressedNowUnPressed(DIK_RSHIFT)) { pGetInfoDirectInput->bTouch=true; pGetInfoDirectInput->iKeyId=DIK_RSHIFT; } if(pGetInfoDirectInput->IsVirtualKeyPressedNowUnPressed(DIK_LCONTROL)) { pGetInfoDirectInput->bTouch=true; pGetInfoDirectInput->iKeyId=DIK_LCONTROL; } if(pGetInfoDirectInput->IsVirtualKeyPressedNowUnPressed(DIK_RCONTROL)) { pGetInfoDirectInput->bTouch=true; pGetInfoDirectInput->iKeyId=DIK_RCONTROL; } if(pGetInfoDirectInput->IsVirtualKeyPressedNowUnPressed(DIK_LALT)) { pGetInfoDirectInput->bTouch=true; pGetInfoDirectInput->iKeyId=DIK_LALT; } if(pGetInfoDirectInput->IsVirtualKeyPressedNowUnPressed(DIK_RALT)) { pGetInfoDirectInput->bTouch=true; pGetInfoDirectInput->iKeyId=DIK_RALT; } } CMenuElement *pmeElement=GetTouch(true); pGetInfoDirectInput->bTouch=bOldTouch; if(pmeElement) { if(UpdateGameKey(bEdit,pmeElement)) { bReInit=true; } } } break; default: { if(pGetInfoDirectInput->GetMouseButtonNowPressed(DXI_BUTTON0)) { CMenuZone *pmzMenuZone = MenuAllZone.GetZoneWithID(BUTTON_MENUOPTIONS_CONTROLS_CUST_DEFAULT); if(pmzMenuZone==pZoneClick) { pMenuConfig->SetDefaultKey(); bReInit=true; } } } break; } if(bReInit) { pMenuConfig->ReInitActionKey(this); bMouseAttack=false; } } //DEBUG ZONE MenuAllZone.DrawZone(); return iSlider; } //----------------------------------------------------------------------------- CMenuPanel::CMenuPanel() : CMenuElement(NOP) { vElement.clear(); iId = (int) this; } //----------------------------------------------------------------------------- CMenuPanel::~CMenuPanel() { vector::iterator i; for(i=vElement.begin();i::iterator i; for(i=vElement.begin();i!=vElement.end();++i) { (*i)->Move(_iX, _iY); } } //----------------------------------------------------------------------------- // patch on ajoute ŕ droite en ligne void CMenuPanel::AddElement(CMenuElement* _pElem) { vElement.insert(vElement.end(), _pElem); if(vElement.size()==1) { rZone=_pElem->rZone; } else { rZone.left = min(rZone.left, _pElem->rZone.left); rZone.top = min(rZone.top, _pElem->rZone.top); } // + taille elem rZone.right = max(rZone.right, _pElem->rZone.right); rZone.bottom = max(rZone.bottom, _pElem->rZone.bottom); _pElem->Move(0, ((GetHeight() - _pElem->rZone.bottom) / 2)); } //----------------------------------------------------------------------------- // patch on ajoute ŕ droite en ligne void CMenuPanel::AddElementNoCenterIn(CMenuElement* _pElem) { vElement.insert(vElement.end(), _pElem); if(vElement.size()==1) { rZone=_pElem->rZone; } else { rZone.left = min(rZone.left, _pElem->rZone.left); rZone.top = min(rZone.top, _pElem->rZone.top); } // + taille elem rZone.right = max(rZone.right, _pElem->rZone.right); rZone.bottom = max(rZone.bottom, _pElem->rZone.bottom); } //----------------------------------------------------------------------------- CMenuElement* CMenuPanel::OnShortCut() { vector::iterator i; for(i=vElement.begin();i!=vElement.end();++i) { if((*i)->OnShortCut()) { return *i; } } return NULL; } //----------------------------------------------------------------------------- void CMenuPanel::Update(int _iTime) { rZone.right = rZone.left; rZone.bottom = rZone.top; vector::iterator i; for(i=vElement.begin();i!=vElement.end();++i) { (*i)->Update(_iTime); rZone.right = max(rZone.right, (*i)->rZone.right); rZone.bottom = max(rZone.bottom, (*i)->rZone.bottom); } } //----------------------------------------------------------------------------- void CMenuPanel::Render() { if(WILL_RELOAD_ALL_TEXTURES) return; if(bNoMenu) return; vector::iterator i; for(i=vElement.begin();i!=vElement.end();++i) { (*i)->Render(); } } //----------------------------------------------------------------------------- CMenuZone * CMenuPanel::GetZoneWithID(int _iID) { vector::iterator i; for(i=vElement.begin();i!=vElement.end();++i) { CMenuZone *pZone; pZone=(*i)->GetZoneWithID(_iID); if(pZone) return pZone; } return NULL; } //----------------------------------------------------------------------------- long CMenuPanel::IsMouseOver(int _iX, int _iY) { if ((_iX >= rZone.left) && (_iY >= rZone.top) && (_iX <= rZone.right) && (_iY <= rZone.bottom)) { vector::iterator i; for(i=vElement.begin();i!=vElement.end();++i) { if( (*i)->bCheck && (*i)->bActif && (_iX >= (*i)->rZone.left) && (_iY >= (*i)->rZone.top) && (_iX <= (*i)->rZone.right) && (_iY <= (*i)->rZone.bottom)) return (*i)->iId; } } return -1; } //----------------------------------------------------------------------------- CMenuButton::CMenuButton(int _iID, HFONT _pHFont,MENUSTATE _eMenuState,int _iPosX,int _iPosY,_TCHAR *_pText,float _fSize,TextureContainer *_pTex,TextureContainer *_pTexOver,int _iColor,int _iTailleX,int _iTailleY) : CMenuElement(_eMenuState) { iID = _iID; pHFont = _pHFont; fSize=_fSize; rZone.left=_iPosX; rZone.top=_iPosY; rZone.right = rZone.left ; rZone.bottom = rZone.top ; vText.clear(); iPos=0; if(_pText) { AddText(_pText); } pTex=_pTex; pTexOver=_pTexOver; if (pTex) { float rZoneR = rZone.left + RATIO_X(pTex->m_dwWidth); float rZoneB = rZone.top + RATIO_Y(pTex->m_dwHeight); ARX_CHECK_LONG( rZoneR ); ARX_CHECK_LONG( rZoneB ); rZone.right = max(rZone.right, ARX_CLEAN_WARN_CAST_LONG(rZoneR) ); rZone.bottom = max(rZone.bottom, ARX_CLEAN_WARN_CAST_LONG(rZoneB) ); } if (pTexOver) { float rZoneR = rZone.left + RATIO_X(pTexOver->m_dwWidth); float rZoneB = rZone.top + RATIO_Y(pTexOver->m_dwHeight); ARX_CHECK_LONG( rZoneR ); ARX_CHECK_LONG( rZoneB ); rZone.right = max(rZone.right, ARX_CLEAN_WARN_CAST_LONG(rZoneR) ); rZone.bottom = max(rZone.bottom, ARX_CLEAN_WARN_CAST_LONG(rZoneB) ); } iColor=_iColor; iId=(int)this; } //----------------------------------------------------------------------------- CMenuButton::~CMenuButton() { vector<_TCHAR*>::iterator i; for(i=vText.begin();i!=vText.end();++i) { free((void*)(*i)); } vText.clear(); } //----------------------------------------------------------------------------- void CMenuButton::SetPos(int _iX,int _iY) { CMenuZone::SetPos(ARX_CLEAN_WARN_CAST_FLOAT(_iX), ARX_CLEAN_WARN_CAST_FLOAT(_iY)); int iWidth = 0; int iHeight = 0; if (pTex) { iWidth = max ( ARX_CAST_UINT( iWidth ), pTex->m_dwWidth ); iHeight = max ( ARX_CAST_UINT( iHeight ), pTex->m_dwHeight ); float fRatioX = RATIO_X(iWidth); float fRatioY = RATIO_Y(iHeight); ARX_CHECK_INT(fRatioX); ARX_CHECK_INT(fRatioY); iWidth = ARX_CLEAN_WARN_CAST_INT(fRatioX); iHeight = ARX_CLEAN_WARN_CAST_INT(fRatioY); } int iWidth2 = 0; int iHeight2 = 0; if (pTexOver) { iWidth2 = max ( ARX_CAST_UINT( iWidth2 ), pTexOver->m_dwWidth ); iHeight2 = max ( ARX_CAST_UINT( iHeight2 ), pTexOver->m_dwHeight ); float fRatioX = RATIO_X(iWidth2) ; float fRatioY = RATIO_Y(iHeight2); ARX_CHECK_INT(fRatioX); ARX_CHECK_INT(fRatioY); iWidth2 = ARX_CLEAN_WARN_CAST_INT(fRatioX); iHeight2 = ARX_CLEAN_WARN_CAST_INT(fRatioY); } rZone.right = _iX + max(iWidth,iWidth2); rZone.bottom = _iY + max(iHeight,iHeight2); } //----------------------------------------------------------------------------- void CMenuButton::AddText(_TCHAR *_pText) { if (!_pText) return; _TCHAR * pText2=_tcsdup(_pText); vText.insert(vText.end(),pText2); int iSizeXButton=rZone.right-rZone.left; int iSizeYButton=rZone.bottom-rZone.top; int iSizeX=0; int iSizeY=0; GetTextSize(pHFont, _pText, &iSizeX, &iSizeY); if(iSizeX>iSizeXButton) iSizeXButton=iSizeX; if(iSizeY>iSizeYButton) iSizeYButton=iSizeY; rZone.right=rZone.left+iSizeXButton; rZone.bottom=rZone.top+iSizeYButton; } //----------------------------------------------------------------------------- bool CMenuButton::OnMouseClick(int _iMouseButton) { iPos++; ARX_CHECK_NOT_NEG( iPos ); if( ARX_CAST_UINT( iPos ) >= vText.size() ) { iPos = 0; } ARX_SOUND_PlayMenu(SND_MENU_CLICK); return false; } //----------------------------------------------------------------------------- void CMenuButton::Update(int _iDTime) { } //----------------------------------------------------------------------------- void CMenuButton::Render() { if(WILL_RELOAD_ALL_TEXTURES) return; if(bNoMenu) return; //affichage de la texture if(pTex) { EERIEDrawBitmap2(GDevice, ARX_CLEAN_WARN_CAST_FLOAT(rZone.left), ARX_CLEAN_WARN_CAST_FLOAT(rZone.top), RATIO_X(pTex->m_dwWidth), RATIO_Y(pTex->m_dwHeight), 0, pTex, ARX_OPAQUE_WHITE); } //affichage de la font if(vText.size()) { _TCHAR *pText=vText[iPos]; GDevice->SetRenderState( D3DRENDERSTATE_ALPHABLENDENABLE, true); GDevice->SetRenderState( D3DRENDERSTATE_SRCBLEND, D3DBLEND_ONE); GDevice->SetRenderState( D3DRENDERSTATE_DESTBLEND, D3DBLEND_ONE); EERIE_3D ePos; ePos.x = (float)rZone.left; ePos.y = (float)rZone.top; ePos.z = 1; FontRenderText(pHFont, ePos, pText, RGB(232, 204, 142)); GDevice->SetRenderState( D3DRENDERSTATE_ALPHABLENDENABLE, false); } } //----------------------------------------------------------------------------- void CMenuButton::RenderMouseOver() { if(WILL_RELOAD_ALL_TEXTURES) return; if(bNoMenu) return; pGetInfoDirectInput->SetMouseOver(); //affichage de la texture if(pTexOver) { D3DTLVERTEX v[4]; v[0].color = v[1].color = v[2].color = v[3].color = ARX_OPAQUE_WHITE; v[0].sz=v[1].sz=v[2].sz=v[3].sz=0.f; v[0].rhw=v[1].rhw=v[2].rhw=v[3].rhw=0.999999f; SETTC(GDevice,pTexOver); v[0].sx = (float)rZone.left; v[0].sy = (float)rZone.top; v[0].tu = 0.f; v[0].tv = 0.f; v[1].sx = (float)(rZone.right); v[1].sy = v[0].sy; v[1].tu = 0.999999f; v[1].tv = 0.f; v[2].sx = v[0].sx; v[2].sy = (float)(rZone.bottom); v[2].tu = 0.f; v[2].tv = 0.999999f; v[3].sx = v[1].sx; v[3].sy = v[2].sy; v[3].tu = 0.999999f; v[3].tv = 0.999999f; EERIEDRAWPRIM(GDevice,D3DPT_TRIANGLESTRIP,D3DFVF_TLVERTEX|D3DFVF_DIFFUSE,v,4,0); } if( vText.size() ) { _TCHAR *pText=vText[iPos]; GDevice->SetRenderState( D3DRENDERSTATE_ALPHABLENDENABLE, true); GDevice->SetRenderState( D3DRENDERSTATE_SRCBLEND, D3DBLEND_ONE); GDevice->SetRenderState( D3DRENDERSTATE_DESTBLEND, D3DBLEND_ONE); EERIE_3D ePos; ePos.x = (float)rZone.left; ePos.y = (float)rZone.top; ePos.z = 1; FontRenderText(pHFont, ePos, pText, RGB(255, 255, 255)); GDevice->SetRenderState( D3DRENDERSTATE_ALPHABLENDENABLE, false); } } //----------------------------------------------------------------------------- CMenuSliderText::CMenuSliderText(int _iID, int _iPosX, int _iPosY) : CMenuElement(NOP) { iID = _iID; TextureContainer *pTex = MakeTCFromFile("\\Graph\\interface\\menus\\menu_slider_button_left.bmp"); pLeftButton = new CMenuButton(-1, hFontMenu, NOP, _iPosX, _iPosY, NULL, 1, pTex, pTex, -1, pTex?pTex->m_dwWidth:0, pTex->m_dwHeight); pTex = MakeTCFromFile("\\Graph\\interface\\menus\\menu_slider_button_right.bmp"); pRightButton = new CMenuButton(-1, hFontMenu, NOP, _iPosX, _iPosY, NULL, 1, pTex, pTex, -1, pTex?pTex->m_dwWidth:0, pTex->m_dwHeight); vText.clear(); iPos = 0; iOldPos = -1; rZone.left = _iPosX; rZone.top = _iPosY; rZone.right = _iPosX + pLeftButton->GetWidth() + pRightButton->GetWidth(); rZone.bottom = _iPosY + max(pLeftButton->GetHeight(), pRightButton->GetHeight()); iId = (int) this; } //----------------------------------------------------------------------------- CMenuSliderText::~CMenuSliderText() { if (pLeftButton) { delete pLeftButton; pLeftButton = NULL; } if (pRightButton) { delete pRightButton; pRightButton = NULL; } vector::iterator i; for(i=vText.begin();i!=vText.end();++i) { delete (*i); *i = NULL; } } //----------------------------------------------------------------------------- void CMenuSliderText::SetWidth(int _iWidth) { rZone.right = max(rZone.right, rZone.left + _iWidth); pRightButton->SetPos(rZone.right - pRightButton->GetWidth(), pRightButton->rZone.top); int dx=rZone.right-rZone.left-pLeftButton->GetWidth()-pRightButton->GetWidth(); //on recentre tout vector::iterator it; for(it=vText.begin();itpHFont, pMenuElementText->lpszText, &x, &y); int dxx=(dx-x)>>1; pMenuElementText->SetPos(ARX_CLEAN_WARN_CAST_FLOAT(pLeftButton->rZone.right + dxx), ARX_CLEAN_WARN_CAST_FLOAT(rZone.top)); } } //----------------------------------------------------------------------------- void CMenuSliderText::AddText(CMenuElementText *_pText) { _pText->Move(rZone.left + pLeftButton->GetWidth(), rZone.top + 0); vText.insert(vText.end(), _pText); int x,y; GetTextSize(_pText->pHFont, _pText->lpszText, &x, &y); rZone.right = max(rZone.right, rZone.left + pLeftButton->GetWidth() + pRightButton->GetWidth() + x); rZone.bottom = max(rZone.bottom, rZone.top + y); pLeftButton->SetPos(rZone.left, rZone.top+(y>>2)); pRightButton->SetPos(rZone.right-pRightButton->GetWidth(), rZone.top+(y>>2)); int dx=rZone.right-rZone.left-pLeftButton->GetWidth()-pRightButton->GetWidth(); //on recentre tout vector::iterator it; for(it=vText.begin();itpHFont, pMenuElementText->lpszText, &x, &y); int dxx=(dx-x)>>1; pMenuElementText->SetPos(ARX_CLEAN_WARN_CAST_FLOAT(pLeftButton->rZone.right + dxx), ARX_CLEAN_WARN_CAST_FLOAT(rZone.top)); } } //----------------------------------------------------------------------------- void CMenuSliderText::Move(int _iX, int _iY) { CMenuZone::Move(_iX, _iY); pLeftButton->Move(_iX, _iY); pRightButton->Move(_iX, _iY); vector::iterator i; for(i=vText.begin();i!=vText.end();++i) { (*i)->Move(_iX, _iY); } } //----------------------------------------------------------------------------- void CMenuSliderText::EmptyFunction() { //Touche pour la selection if(pGetInfoDirectInput->IsVirtualKeyPressedNowPressed(DIK_LEFT)) { iPos--; if (iPos <= 0) iPos = 0; } else { if( pGetInfoDirectInput->IsVirtualKeyPressedNowPressed( DIK_RIGHT ) ) { iPos++; ARX_CHECK_NOT_NEG(iPos); if ( ARX_CAST_UINT( iPos ) >= vText.size() - 1 ) iPos = vText.size() - 1; } } } //----------------------------------------------------------------------------- bool CMenuSliderText::OnMouseClick(int) { ARX_SOUND_PlayMenu(SND_MENU_CLICK); if(iOldPos<0) iOldPos=iPos; int iX = pGetInfoDirectInput->iMouseAX; int iY = pGetInfoDirectInput->iMouseAY; if ((iX >= rZone.left) && (iY >= rZone.top) && (iX <= rZone.right) && (iY <= rZone.bottom)) { if ((iX >= pLeftButton->rZone.left) && (iY >= pLeftButton->rZone.top) && (iX <= pLeftButton->rZone.right) && (iY <= pLeftButton->rZone.bottom)) { iPos--; if (iPos <= 0) iPos = 0; } else if ((iX >= pRightButton->rZone.left) && (iY >= pRightButton->rZone.top) && (iX <= pRightButton->rZone.right) && (iY <= pRightButton->rZone.bottom)) { iPos++; ARX_CHECK_NOT_NEG(iPos); if ( ARX_CAST_UINT( iPos ) >= vText.size() - 1 ) iPos = vText.size() - 1 ; } } switch (iID) { // MENUOPTIONS_VIDEO case BUTTON_MENUOPTIONSVIDEO_RESOLUTION: { _TCHAR *pcText; pcText=(vText.at(iPos))->lpszText; int iX = pMenuConfig->iWidth; int iY = pMenuConfig->iHeight; _stscanf(pcText, _T("%dx%d"), &iX, &iY); { pMenuConfig->iNewWidth = iX; pMenuConfig->iNewHeight = iY; pMenuConfig->bChangeResolution = true; } } break; // MENUOPTIONS_VIDEO case BUTTON_MENUOPTIONSVIDEO_BPP: { _TCHAR *pcText; pcText = vText[iPos]->lpszText; pMenuConfig->iNewBpp=_ttoi(pcText); pMenuConfig->bChangeResolution = true; } break; case BUTTON_MENUOPTIONSVIDEO_TEXTURES: { { pMenuConfig->iNewTextureResol = iPos; pMenuConfig->bChangeTextures = true; } } break; case BUTTON_MENUOPTIONSVIDEO_LOD: { ARXMenu_Options_Video_SetLODQuality(iPos); } break; case BUTTON_MENUOPTIONSVIDEO_OTHERSDETAILS: { ARXMenu_Options_Video_SetDetailsQuality(iPos); } break; } return false; } //----------------------------------------------------------------------------- void CMenuSliderText::Update(int _iTime) { pLeftButton->Update(_iTime); pRightButton->Update(_iTime); } //----------------------------------------------------------------------------- void CMenuSliderText::Render() { if(WILL_RELOAD_ALL_TEXTURES) return; if(bNoMenu) return; pLeftButton->Render(); pRightButton->Render(); GDevice->SetRenderState( D3DRENDERSTATE_ALPHABLENDENABLE, false); if(vText[iPos]) { vText[iPos]->Render(); } GDevice->SetRenderState( D3DRENDERSTATE_ALPHABLENDENABLE, false); } //----------------------------------------------------------------------------- void CMenuSliderText::RenderMouseOver() { if(WILL_RELOAD_ALL_TEXTURES) return; if(bNoMenu) return; pGetInfoDirectInput->SetMouseOver(); int iX = pGetInfoDirectInput->iMouseAX; int iY = pGetInfoDirectInput->iMouseAY; GDevice->SetRenderState( D3DRENDERSTATE_ALPHABLENDENABLE, true); GDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_ONE); GDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_ONE); if ((iX >= rZone.left) && (iY >= rZone.top) && (iX <= rZone.right) && (iY <= rZone.bottom)) { if ((iX >= pLeftButton->rZone.left) && (iY >= pLeftButton->rZone.top) && (iX <= pLeftButton->rZone.right) && (iY <= pLeftButton->rZone.bottom)) { pLeftButton->Render(); } else if ((iX >= pRightButton->rZone.left) && (iY >= pRightButton->rZone.top) && (iX <= pRightButton->rZone.right) && (iY <= pRightButton->rZone.bottom)) { pRightButton->Render(); } } } //----------------------------------------------------------------------------- CMenuSlider::CMenuSlider(int _iID, int _iPosX, int _iPosY) : CMenuElement(NOP) { iID = _iID; TextureContainer *pTexL = MakeTCFromFile("\\Graph\\interface\\menus\\menu_slider_button_left.bmp"); TextureContainer *pTexR = MakeTCFromFile("\\Graph\\interface\\menus\\menu_slider_button_right.bmp"); pLeftButton = new CMenuButton(-1, hFontMenu, NOP, _iPosX, _iPosY, NULL, 1, pTexL, pTexR, -1, pTexL->m_dwWidth, pTexL->m_dwHeight); pRightButton = new CMenuButton(-1, hFontMenu, NOP, _iPosX, _iPosY, NULL, 1, pTexR, pTexL, -1, pTexR->m_dwWidth, pTexR->m_dwHeight); pTex1 = MakeTCFromFile("\\Graph\\interface\\menus\\menu_slider_on.bmp"); pTex2 = MakeTCFromFile("\\Graph\\interface\\menus\\menu_slider_off.bmp"); iPos = 0; rZone.left = _iPosX; rZone.top = _iPosY; rZone.right = _iPosX + pLeftButton->GetWidth() + pRightButton->GetWidth() + 10*max(pTex1->m_dwWidth, pTex2->m_dwWidth); rZone.bottom = _iPosY + max(pLeftButton->GetHeight(), pRightButton->GetHeight()); ARX_CHECK_NOT_NEG( rZone.bottom ); rZone.bottom = max( ARX_CAST_ULONG( rZone.bottom ), max( pTex1->m_dwHeight, pTex2->m_dwHeight ) ); pRightButton->Move(pLeftButton->GetWidth() + 10*max(pTex1->m_dwWidth, pTex2->m_dwWidth), 0); iId = (int) this; } //----------------------------------------------------------------------------- CMenuSlider::~CMenuSlider() { if (pLeftButton) { delete pLeftButton; pLeftButton = NULL; } if (pRightButton) { delete pRightButton; pRightButton = NULL; } } //----------------------------------------------------------------------------- void CMenuSlider::Move(int _iX, int _iY) { CMenuZone::Move(_iX, _iY); pLeftButton->Move(_iX, _iY); pRightButton->Move(_iX, _iY); } //----------------------------------------------------------------------------- void CMenuSlider::EmptyFunction() { //Touche pour la selection if(pGetInfoDirectInput->IsVirtualKeyPressedNowPressed(DIK_LEFT)) { iPos--; if (iPos <= 0) iPos = 0; } else { if(pGetInfoDirectInput->IsVirtualKeyPressedNowPressed(DIK_RIGHT)) { iPos++; if (iPos >= 10) iPos = 10; } } } //----------------------------------------------------------------------------- bool CMenuSlider::OnMouseClick(int) { ARX_SOUND_PlayMenu(SND_MENU_CLICK); int iX = pGetInfoDirectInput->iMouseAX; int iY = pGetInfoDirectInput->iMouseAY; if ((iX >= rZone.left) && (iY >= rZone.top) && (iX <= rZone.right) && (iY <= rZone.bottom)) { if ((iX >= pLeftButton->rZone.left) && (iY >= pLeftButton->rZone.top) && (iX <= pLeftButton->rZone.right) && (iY <= pLeftButton->rZone.bottom)) { iPos--; if (iPos <= 0) iPos = 0; } else if ((iX >= pRightButton->rZone.left) && (iY >= pRightButton->rZone.top) && (iX <= pRightButton->rZone.right) && (iY <= pRightButton->rZone.bottom)) { iPos++; if (iPos >= 10) iPos = 10; } } switch (iID) { // MENUOPTIONS_VIDEO case BUTTON_MENUOPTIONSVIDEO_FOG: { ARXMenu_Options_Video_SetFogDistance(iPos); } break; case BUTTON_MENUOPTIONSVIDEO_GAMMA: { ARXMenu_Options_Video_SetGamma(iPos); } break; case BUTTON_MENUOPTIONSVIDEO_LUMINOSITY: { ARXMenu_Options_Video_SetLuminosity(iPos); } break; case BUTTON_MENUOPTIONSVIDEO_CONTRAST: { ARXMenu_Options_Video_SetContrast(iPos); } break; // MENUOPTIONS_AUDIO case BUTTON_MENUOPTIONSAUDIO_MASTER: { ARXMenu_Options_Audio_SetMasterVolume(iPos); } break; case BUTTON_MENUOPTIONSAUDIO_SFX: { ARXMenu_Options_Audio_SetSfxVolume(iPos); } break; case BUTTON_MENUOPTIONSAUDIO_SPEECH: { ARXMenu_Options_Audio_SetSpeechVolume(iPos); } break; case BUTTON_MENUOPTIONSAUDIO_AMBIANCE: { ARXMenu_Options_Audio_SetAmbianceVolume(iPos); } break; // MENUOPTIONS_CONTROLS case BUTTON_MENUOPTIONS_CONTROLS_MOUSESENSITIVITY: { ARXMenu_Options_Control_SetMouseSensitivity(iPos); } break; } return false; } //----------------------------------------------------------------------------- void CMenuSlider::Update(int _iTime) { pLeftButton->Update(_iTime); pRightButton->Update(_iTime); pRightButton->SetPos(rZone.left, rZone.top); float fWidth = pLeftButton->GetWidth() + RATIO_X(10*max(pTex1->m_dwWidth, pTex2->m_dwWidth)) ; ARX_CHECK_INT(fWidth); pRightButton->Move( ARX_CLEAN_WARN_CAST_INT(fWidth), 0); ARX_CHECK_LONG( rZone.left + pLeftButton->GetWidth() + pRightButton->GetWidth() + RATIO_X(10*max(pTex1->m_dwWidth, pTex2->m_dwWidth)) ); rZone.right = ARX_CLEAN_WARN_CAST_LONG( rZone.left + pLeftButton->GetWidth() + pRightButton->GetWidth() + RATIO_X(10*max(pTex1->m_dwWidth, pTex2->m_dwWidth)) ); rZone.bottom = rZone.top + max(pLeftButton->GetHeight(), pRightButton->GetHeight()); } //----------------------------------------------------------------------------- void CMenuSlider::Render() { if(WILL_RELOAD_ALL_TEXTURES) return; if(bNoMenu) return; pLeftButton->Render(); pRightButton->Render(); float iX = ARX_CLEAN_WARN_CAST_FLOAT( rZone.left + pLeftButton->GetWidth() ); float iY = ARX_CLEAN_WARN_CAST_FLOAT( rZone.top ); float iTexW = 0; float iTexH = 0; GDevice->SetRenderState( D3DRENDERSTATE_ALPHABLENDENABLE, true); GDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_ONE); GDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_ONE); D3DTLVERTEX v[4]; v[0].color = v[1].color = v[2].color = v[3].color = ARX_OPAQUE_WHITE; v[0].sz=v[1].sz=v[2].sz=v[3].sz=0.f; v[0].rhw=v[1].rhw=v[2].rhw=v[3].rhw=0.999999f; TextureContainer *pTex = pTex1; for (int i=0; i<10; i++) { iTexW = 0; iTexH = 0; if (im_dwWidth); iTexH = RATIO_Y(pTex1->m_dwHeight); } } else { if(pTex2) { pTex = pTex2; iTexW = RATIO_X(pTex2->m_dwWidth); iTexH = RATIO_Y(pTex2->m_dwHeight); } } EERIEDrawBitmap2(GDevice, iX, iY, RATIO_X(pTex->m_dwWidth), RATIO_Y(pTex->m_dwHeight), 0, pTex, ARX_OPAQUE_WHITE); iX += iTexW; } GDevice->SetRenderState( D3DRENDERSTATE_ALPHABLENDENABLE, false); } //----------------------------------------------------------------------------- void CMenuSlider::RenderMouseOver() { if(WILL_RELOAD_ALL_TEXTURES) return; if(bNoMenu) return; pGetInfoDirectInput->SetMouseOver(); int iX = pGetInfoDirectInput->iMouseAX; int iY = pGetInfoDirectInput->iMouseAY; GDevice->SetRenderState( D3DRENDERSTATE_ALPHABLENDENABLE, true); GDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_ONE); GDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_ONE); if ((iX >= rZone.left) && (iY >= rZone.top) && (iX <= rZone.right) && (iY <= rZone.bottom)) { if ((iX >= pLeftButton->rZone.left) && (iY >= pLeftButton->rZone.top) && (iX <= pLeftButton->rZone.right) && (iY <= pLeftButton->rZone.bottom)) { pLeftButton->Render(); } else if ((iX >= pRightButton->rZone.left) && (iY >= pRightButton->rZone.top) && (iX <= pRightButton->rZone.right) && (iY <= pRightButton->rZone.bottom)) { pRightButton->Render(); } } GDevice->SetRenderState( D3DRENDERSTATE_ALPHABLENDENABLE, false); } //----------------------------------------------------------------------------- CDirectInput::CDirectInput() { char temp[256]; MakeDir(temp,"graph\\interface\\cursors\\cursor00.bmp"); pTex[0]=D3DTextr_GetSurfaceContainer(temp); MakeDir(temp,"graph\\interface\\cursors\\cursor01.bmp"); pTex[1]=D3DTextr_GetSurfaceContainer(temp); MakeDir(temp,"graph\\interface\\cursors\\cursor02.bmp"); pTex[2]=D3DTextr_GetSurfaceContainer(temp); MakeDir(temp,"graph\\interface\\cursors\\cursor03.bmp"); pTex[3]=D3DTextr_GetSurfaceContainer(temp); MakeDir(temp,"graph\\interface\\cursors\\cursor04.bmp"); pTex[4]=D3DTextr_GetSurfaceContainer(temp); MakeDir(temp,"graph\\interface\\cursors\\cursor05.bmp"); pTex[5]=D3DTextr_GetSurfaceContainer(temp); MakeDir(temp,"graph\\interface\\cursors\\cursor06.bmp"); pTex[6]=D3DTextr_GetSurfaceContainer(temp); MakeDir(temp,"graph\\interface\\cursors\\cursor07.bmp"); pTex[7]=D3DTextr_GetSurfaceContainer(temp); SetCursorOff(); SetSensibility(2); iMouseAX=0; iMouseAY=0; iMouseAZ=0; fMouseAXTemp=fMouseAYTemp=0.f; iNbOldCoord=0; iMaxOldCoord=40; bMouseOver=false; if(pTex[0]) { fTailleX=(float)pTex[0]->m_dwWidth; fTailleY=(float)pTex[0]->m_dwHeight; } else { fTailleX=fTailleY=0.f; } iNumCursor=0; lFrameDiff=0; for(int i=DXI_BUTTON0;i<=DXI_BUTTON31;i++) { iOldMouseButton[i]=0; iMouseTime[i]=0; iMouseTimeSet[i]=0; bMouseButton[i]=bOldMouseButton[i]=false; iOldNumClick[i]=iOldNumUnClick[i]=0; } // PreCompute le ScanCode bTouch=false; HKL layout=GetKeyboardLayout(0); for(int iI=0;iI<256;iI++) { iKeyScanCode[iI]=MapVirtualKeyEx(iI,0,layout); iOneTouch[iI]=0; } bDrawCursor=true; bActive=false; iWheelSens=0; } //----------------------------------------------------------------------------- CDirectInput::~CDirectInput() { } //----------------------------------------------------------------------------- void CDirectInput::SetCursorOff() { eNumTex=CURSOR_OFF; } //----------------------------------------------------------------------------- void CDirectInput::SetCursorOn() { eNumTex=CURSOR_ON; } //----------------------------------------------------------------------------- void CDirectInput::SetMouseOver() { bMouseOver=true; SetCursorOn(); } //----------------------------------------------------------------------------- void CDirectInput::SetSensibility(int _iSensibility) { iSensibility=_iSensibility; } //----------------------------------------------------------------------------- void CDirectInput::ResetAll() { for(int i=DXI_BUTTON0;i<=DXI_BUTTON31;i++) { iOldMouseButton[i]=0; iMouseTime[i]=0; iMouseTimeSet[i]=0; bMouseButton[i]=bOldMouseButton[i]=false; iOldNumClick[i]=iOldNumUnClick[i]=0; } iKeyId=-1; bTouch=false; for(int i=0;i<256;i++) { iOneTouch[i]=0; } EERIEMouseButton=LastEERIEMouseButton=0; iWheelSens=0; } //----------------------------------------------------------------------------- void CDirectInput::GetInput() { int iDTime; DXI_ExecuteAllDevices(false); iKeyId=DXI_GetKeyIDPressed(DXI_KEYBOARD1); bTouch=(iKeyId>=0)?true:false; for(int i=0;i<256;i++) { if(IsVirtualKeyPressed(i)) { switch(i) { case DIK_LSHIFT: case DIK_RSHIFT: case DIK_LCONTROL: case DIK_RCONTROL: case DIK_LALT: case DIK_RALT: if(i!=iKeyId) iKeyId|=(i<<16); break; } if(iOneTouch[i]<2) { iOneTouch[i]++; } } else { if(iOneTouch[i]>0) { iOneTouch[i]--; } } } if(bTouch) //priorité des touches { switch(iKeyId) { case DIK_LSHIFT: case DIK_RSHIFT: case DIK_LCONTROL: case DIK_RCONTROL: case DIK_LALT: case DIK_RALT: { bool bFound=false; for(int i=0;i<256;i++) { if(bFound) { break; } switch(i&0xFFFF) { case DIK_LSHIFT: case DIK_RSHIFT: case DIK_LCONTROL: case DIK_RCONTROL: case DIK_LALT: case DIK_RALT: continue; default: { if(iOneTouch[i]) { bFound=true; iKeyId&=~0xFFFF; iKeyId|=i; } } break; } } } } } ARX_CHECK_INT(ARX_TIME_Get( false )); const int iArxTime = ARX_CLEAN_WARN_CAST_INT(ARX_TIME_Get( false )) ; for(int i=DXI_BUTTON0;i<=DXI_BUTTON31;i++) { int iNumClick; int iNumUnClick; DXI_MouseButtonCountClick(DXI_MOUSE1,i,&iNumClick,&iNumUnClick); iOldNumClick[i]+=iNumClick+iNumUnClick; if( (!bMouseButton[i])&&(iOldNumClick[i]==iNumUnClick) ) { iNumUnClick=iOldNumClick[i]=0; } bOldMouseButton[i]=bMouseButton[i]; if(bMouseButton[i]) { if(iOldNumClick[i]) { bMouseButton[i]=false; } } else { if(iOldNumClick[i]) { bMouseButton[i]=true; } } if(iOldNumClick[i]) iOldNumClick[i]--; iDTime=0; DXI_MouseButtonPressed(DXI_MOUSE1,i,&iDTime); if(iDTime) { iMouseTime[i]=iDTime; iMouseTimeSet[i]=2; } else { if( (iMouseTimeSet[i]>0)&& ((ARX_TIME_Get( false )-iMouseTime[i])>300) ) { iMouseTime[i]=0; iMouseTimeSet[i]=0; } if(GetMouseButtonNowPressed(i)) { switch(iMouseTimeSet[i]) { case 0: iMouseTime[i] = iArxTime; iMouseTimeSet[i]++; break; case 1: iMouseTime[i] = iArxTime - iMouseTime[i]; iMouseTimeSet[i]++; break; } } } } iWheelSens=pGetInfoDirectInput->GetWheelSens(DXI_MOUSE1); if( ( danaeApp.m_pFramework->m_bIsFullscreen ) && ( bGLOBAL_DINPUT_MENU ) ) { float fDX = 0.f; float fDY = 0.f; iMouseRX = iMouseRY = iMouseRZ = 0; if( DXI_GetAxeMouseXYZ(DXI_MOUSE1, &iMouseRX, &iMouseRY, &iMouseRZ) ) { float fSensMax = 1.f / 6.f; float fSensMin = 2.f; float fSens = ( ( fSensMax - fSensMin ) * ( (float)iSensibility ) / 10.f ) + fSensMin; fSens = pow( .7f, fSens ) * 2.f; fDX=( (float)iMouseRX ) * fSens * ( ( (float)DANAESIZX ) / 640.f ); fDY=( (float)iMouseRY ) * fSens * ( ( (float)DANAESIZY ) / 480.f ); fMouseAXTemp += fDX; fMouseAYTemp += fDY; ARX_CHECK_INT(fMouseAXTemp); ARX_CHECK_INT(fMouseAYTemp); iMouseAX = ARX_CLEAN_WARN_CAST_INT(fMouseAXTemp); iMouseAY = ARX_CLEAN_WARN_CAST_INT(fMouseAYTemp); iMouseAZ += iMouseRZ; if(iMouseAX<0) { iMouseAX = 0; fMouseAXTemp = 0.f; } ARX_CHECK_NOT_NEG( iMouseAX ); if( ARX_CAST_ULONG( iMouseAX ) >= danaeApp.m_pFramework->m_dwRenderWidth ) { iMouseAX = danaeApp.m_pFramework->m_dwRenderWidth - 1; fMouseAXTemp = ARX_CLEAN_WARN_CAST_FLOAT( iMouseAX ); } if(iMouseAY<0) { fMouseAYTemp= 0.f; iMouseAY = 0; } ARX_CHECK_NOT_NEG( iMouseAY ); if( ARX_CAST_ULONG( iMouseAY ) >= danaeApp.m_pFramework->m_dwRenderHeight ) { iMouseAY = danaeApp.m_pFramework->m_dwRenderHeight - 1; fMouseAYTemp = ARX_CLEAN_WARN_CAST_FLOAT( iMouseAY ); } bMouseMove=true; } else { bMouseMove=false; } if(bGLOBAL_DINPUT_GAME) { _EERIEMouseXdep=(int)fDX; _EERIEMouseYdep=(int)fDY; EERIEMouseX=iMouseAX; EERIEMouseY=iMouseAY; } } else { bMouseMove = ((iMouseAX != DANAEMouse.x) || (iMouseAY != DANAEMouse.y)); iMouseAX=DANAEMouse.x; iMouseAY=DANAEMouse.y; iMouseAZ=0; } int iDx; int iDy; if(pTex[eNumTex]) { iDx=pTex[eNumTex]->m_dwWidth>>1; iDy=pTex[eNumTex]->m_dwHeight>>1; } else { iDx=0; iDy=0; } iOldCoord[iNbOldCoord].x=iMouseAX+iDx; iOldCoord[iNbOldCoord].y=iMouseAY+iDy; iNbOldCoord++; if(iNbOldCoord>=iMaxOldCoord) { iNbOldCoord=iMaxOldCoord-1; memmove((void*)iOldCoord,(void*)(iOldCoord+1),sizeof(EERIE_2DI)*iNbOldCoord); } } //----------------------------------------------------------------------------- int CDirectInput::GetWheelSens(int _iIDbutton) { int iX,iY,iZ=0; DXI_GetAxeMouseXYZ(_iIDbutton,&iX,&iY,&iZ); return iZ; } //----------------------------------------------------------------------------- bool CDirectInput::IsVirtualKeyPressed(int _iVirtualKey) { return DXI_KeyPressed(DXI_KEYBOARD1,_iVirtualKey)?true:false; } //----------------------------------------------------------------------------- bool CDirectInput::IsVirtualKeyPressedOneTouch(int _iVirtualKey) { return( (DXI_KeyPressed(DXI_KEYBOARD1,_iVirtualKey))&& (iOneTouch[_iVirtualKey]==1) ); } //----------------------------------------------------------------------------- bool CDirectInput::IsVirtualKeyPressedNowPressed(int _iVirtualKey) { return( (DXI_KeyPressed(DXI_KEYBOARD1,_iVirtualKey))&& (iOneTouch[_iVirtualKey]==1) ); } //----------------------------------------------------------------------------- bool CDirectInput::IsVirtualKeyPressedNowUnPressed(int _iVirtualKey) { return( (!DXI_KeyPressed(DXI_KEYBOARD1,_iVirtualKey))&& (iOneTouch[_iVirtualKey]==1) ); } //----------------------------------------------------------------------------- void CDirectInput::DrawOneCursor(int _iPosX,int _iPosY,int _iColor) { GDevice->SetTextureStageState( 0, D3DTSS_MINFILTER, D3DTFN_POINT ); GDevice->SetTextureStageState( 0, D3DTSS_MAGFILTER, D3DTFG_POINT ); SETTEXTUREWRAPMODE(GDevice,D3DTADDRESS_CLAMP); EERIEDrawBitmap2(GDevice, ARX_CLEAN_WARN_CAST_FLOAT(_iPosX), ARX_CLEAN_WARN_CAST_FLOAT(_iPosY), INTERFACE_RATIO_DWORD(scursor[iNumCursor]->m_dwWidth), INTERFACE_RATIO_DWORD(scursor[iNumCursor]->m_dwHeight), 0.00000001f, scursor[iNumCursor],D3DCOLORWHITE); GDevice->SetTextureStageState(0,D3DTSS_MINFILTER,D3DTFP_LINEAR); GDevice->SetTextureStageState(0,D3DTSS_MAGFILTER,D3DTFP_LINEAR); SETTEXTUREWRAPMODE(GDevice,D3DTADDRESS_WRAP); } //----------------------------------------------------------------------------- static bool ComputePer(EERIE_2DI *_psPoint1,EERIE_2DI *_psPoint2,D3DTLVERTEX *_psd3dv1,D3DTLVERTEX *_psd3dv2,float _fSize) { EERIE_2D sTemp; float fTemp; sTemp.x=(float)(_psPoint2->x-_psPoint1->x); sTemp.y=(float)(_psPoint2->y-_psPoint1->y); fTemp=sTemp.x; sTemp.x=-sTemp.y; sTemp.y=fTemp; float fMag=(float)sqrt(sTemp.x*sTemp.x+sTemp.y*sTemp.y); if(fMagsx=(sTemp.x*fMag); _psd3dv1->sy=(sTemp.y*fMag); _psd3dv2->sx=((float)_psPoint1->x)-_psd3dv1->sx; _psd3dv2->sy=((float)_psPoint1->y)-_psd3dv1->sy; _psd3dv1->sx+=((float)_psPoint1->x); _psd3dv1->sy+=((float)_psPoint1->y); return true; } //----------------------------------------------------------------------------- static void DrawLine2D(EERIE_2DI *_psPoint1,int _iNbPt,float _fSize,float _fRed,float _fGreen,float _fBlue) { _iNbPt--; if(!_iNbPt) return; float fSize=_fSize/_iNbPt; float fTaille=fSize; float fDColorRed=_fRed/_iNbPt; float fColorRed=fDColorRed; float fDColorGreen=_fGreen/_iNbPt; float fColorGreen=fDColorGreen; float fDColorBlue=_fBlue/_iNbPt; float fColorBlue=fDColorBlue; GDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_DESTCOLOR); GDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_INVDESTCOLOR); SETTC(GDevice,NULL); SETALPHABLEND(GDevice,true); D3DTLVERTEX v[4]; v[0].sz=v[1].sz=v[2].sz=v[3].sz=0.f; v[0].rhw=v[1].rhw=v[2].rhw=v[3].rhw=0.999999f; EERIE_2DI *psOldPoint=_psPoint1++; v[0].color=v[2].color=D3DRGBA(fColorRed,fColorGreen,fColorBlue,1.f); if(!ComputePer(psOldPoint,_psPoint1,&v[0],&v[2],fTaille)) { v[0].sx=v[2].sx=(float)psOldPoint->x; v[0].sy=v[2].sy=(float)psOldPoint->y; } _iNbPt--; while(_iNbPt--) { fTaille+=fSize; fColorRed+=fDColorRed; fColorGreen+=fDColorGreen; fColorBlue+=fDColorBlue; if(ComputePer(psOldPoint,_psPoint1+1,&v[1],&v[3],fTaille)) { v[1].color=v[3].color=D3DRGBA(fColorRed,fColorGreen,fColorBlue,1.f); EERIEDRAWPRIM(GDevice,D3DPT_TRIANGLESTRIP,D3DFVF_TLVERTEX|D3DFVF_DIFFUSE,v,4,0); v[0].sx=v[1].sx; v[0].sy=v[1].sy; v[0].color=v[1].color; v[2].sx=v[3].sx; v[2].sy=v[3].sy; v[2].color=v[3].color; } psOldPoint=_psPoint1++; } fTaille+=fSize; fColorRed+=fDColorRed; fColorGreen+=fDColorGreen; fColorBlue+=fDColorBlue; if(ComputePer(_psPoint1,psOldPoint,&v[1],&v[3],fTaille)) { v[1].color=v[3].color=D3DRGBA(fColorRed,fColorGreen,fColorBlue,1.f); EERIEDRAWPRIM(GDevice,D3DPT_TRIANGLESTRIP,D3DFVF_TLVERTEX|D3DFVF_DIFFUSE,v,4,0); } SETALPHABLEND(GDevice,false); } //----------------------------------------------------------------------------- void CDirectInput::DrawCursor() { if(!bDrawCursor) return; GDevice->SetRenderState( D3DRENDERSTATE_ALPHABLENDENABLE, true); DrawLine2D(iOldCoord,iMaxOldCoord,10.f,.725f,.619f,0.56f); if(pTex[iNumCursor]) SETTC(GDevice, pTex[iNumCursor]); else SETTC(GDevice,NULL); SETALPHABLEND(GDevice,false); GDevice->SetRenderState(D3DRENDERSTATE_ZENABLE, false); DrawOneCursor(iMouseAX,iMouseAY,-1); danaeApp.EnableZBuffer(); ARX_CHECK_LONG( ARXDiffTimeMenu ); lFrameDiff += ARX_CLEAN_WARN_CAST_LONG( ARXDiffTimeMenu ); if(lFrameDiff>70) { if(bMouseOver) { if(iNumCursor<4) { iNumCursor++; } else { if(iNumCursor>4) { iNumCursor--; } } SetCursorOff(); bMouseOver=false; } else { if (iNumCursor > 0) { iNumCursor++; if(iNumCursor>7) iNumCursor=0; } } lFrameDiff=0; } GDevice->SetRenderState( D3DRENDERSTATE_ALPHABLENDENABLE, false); } //----------------------------------------------------------------------------- bool CDirectInput::GetMouseButton(int _iNumButton) { return( (bMouseButton[_iNumButton])&&(!bOldMouseButton[_iNumButton])); } //----------------------------------------------------------------------------- bool CDirectInput::GetMouseButtonRepeat(int _iNumButton) { return( bMouseButton[_iNumButton] ); } //----------------------------------------------------------------------------- bool CDirectInput::GetMouseButtonNowPressed(int _iNumButton) { return( (bMouseButton[_iNumButton])&&(!bOldMouseButton[_iNumButton])); } //----------------------------------------------------------------------------- bool CDirectInput::GetMouseButtonNowUnPressed(int _iNumButton) { return( (!bMouseButton[_iNumButton])&&(bOldMouseButton[_iNumButton]) ); } //----------------------------------------------------------------------------- _TCHAR * CDirectInput::GetFullNameTouch(int _iVirtualKey) { _TCHAR *pText=(_TCHAR*)malloc(256*sizeof(_TCHAR)); if(!pText) return NULL; long lParam; _TCHAR *pText2=NULL; if( (_iVirtualKey!=-1)&& (_iVirtualKey&~0xC000FFFF) ) //COMBINAISON { pText2=GetFullNameTouch((_iVirtualKey>>16)&0x3FFF); } lParam=((_iVirtualKey)&0x7F)<<16; switch(_iVirtualKey) { case DIK_HOME: PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_input_customize_controls_home"), _T("string"), _T("---"), pText, 256, NULL); break; case DIK_NEXT: PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_input_customize_controls_pagedown"), _T("string"), _T("---"), pText, 256, NULL); break; case DIK_END: PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_input_customize_controls_end"), _T("string"), _T("---"), pText, 256, NULL); break; case DIK_INSERT: PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_input_customize_controls_insert"), _T("string"), _T("---"), pText, 256, NULL); break; case DIK_DELETE: PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_input_customize_controls_delete"), _T("string"), _T("---"), pText, 256, NULL); break; case DIK_NUMLOCK: PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_input_customize_controls_numlock"), _T("string"), _T("---"), pText, 256, NULL); break; case DIK_DIVIDE: _tcscpy(pText,_T("_/_")); break; case DIK_MULTIPLY: _tcscpy(pText,_T("_x_")); break; case DIK_SYSRQ: _tcscpy(pText,_T("?")); break; case DIK_UP: // UpArrow on arrow keypad PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_input_customize_controls_up"), _T("string"), _T("---"), pText, 256, NULL); break; case DIK_PRIOR: // PgUp on arrow keypad PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_input_customize_controls_pageup"), _T("string"), _T("---"), pText, 256, NULL); break; case DIK_LEFT: // LeftArrow on arrow keypad PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_input_customize_controls_left"), _T("string"), _T("---"), pText, 256, NULL); break; case DIK_RIGHT: // RightArrow on arrow keypad PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_input_customize_controls_right"), _T("string"), _T("---"), pText, 256, NULL); break; case DIK_DOWN: // DownArrow on arrow keypad PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_input_customize_controls_down"), _T("string"), _T("---"), pText, 256, NULL); break; case DIK_BUTTON1: PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_input_customize_controls_button0"), _T("string"), _T("b1"), pText, 256, NULL); break; case DIK_BUTTON2: PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_input_customize_controls_button1"), _T("string"), _T("b2"), pText, 256, NULL); break; case DIK_BUTTON3: PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_input_customize_controls_button2"), _T("string"), _T("b3"), pText, 256, NULL); break; case DIK_BUTTON4: PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_input_customize_controls_button3"), _T("string"), _T("b4"), pText, 256, NULL); break; case DIK_BUTTON5: PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_input_customize_controls_button4"), _T("string"), _T("b5"), pText, 256, NULL); break; case DIK_BUTTON6: PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_input_customize_controls_button5"), _T("string"), _T("b6"), pText, 256, NULL); break; case DIK_BUTTON7: PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_input_customize_controls_button6"), _T("string"), _T("b7"), pText, 256, NULL); break; case DIK_BUTTON8: PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_input_customize_controls_button7"), _T("string"), _T("b8"), pText, 256, NULL); break; case DIK_BUTTON9: PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_input_customize_controls_button8"), _T("string"), _T("b9"), pText, 256, NULL); break; case DIK_BUTTON10: PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_input_customize_controls_button9"), _T("string"), _T("b10"), pText, 256, NULL); break; case DIK_BUTTON11: PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_input_customize_controls_button10"), _T("string"), _T("b11"), pText, 256, NULL); break; case DIK_BUTTON12: PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_input_customize_controls_button11"), _T("string"), _T("b12"), pText, 256, NULL); break; case DIK_BUTTON13: PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_input_customize_controls_button12"), _T("string"), _T("b13"), pText, 256, NULL); break; case DIK_BUTTON14: PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_input_customize_controls_button13"), _T("string"), _T("b14"), pText, 256, NULL); break; case DIK_BUTTON15: PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_input_customize_controls_button14"), _T("string"), _T("b15"), pText, 256, NULL); break; case DIK_BUTTON16: PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_input_customize_controls_button15"), _T("string"), _T("b16"), pText, 256, NULL); break; case DIK_BUTTON17: PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_input_customize_controls_button16"), _T("string"), _T("b17"), pText, 256, NULL); break; case DIK_BUTTON18: PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_input_customize_controls_button17"), _T("string"), _T("b18"), pText, 256, NULL); break; case DIK_BUTTON19: PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_input_customize_controls_button18"), _T("string"), _T("b19"), pText, 256, NULL); break; case DIK_BUTTON20: PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_input_customize_controls_button19"), _T("string"), _T("b20"), pText, 256, NULL); break; case DIK_BUTTON21: PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_input_customize_controls_button20"), _T("string"), _T("b21"), pText, 256, NULL); break; case DIK_BUTTON22: PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_input_customize_controls_button21"), _T("string"), _T("b22"), pText, 256, NULL); break; case DIK_BUTTON23: PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_input_customize_controls_button22"), _T("string"), _T("b23"), pText, 256, NULL); break; case DIK_BUTTON24: PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_input_customize_controls_button23"), _T("string"), _T("b24"), pText, 256, NULL); break; case DIK_BUTTON25: PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_input_customize_controls_button24"), _T("string"), _T("b25"), pText, 256, NULL); break; case DIK_BUTTON26: PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_input_customize_controls_button25"), _T("string"), _T("b26"), pText, 256, NULL); break; case DIK_BUTTON27: PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_input_customize_controls_button26"), _T("string"), _T("b27"), pText, 256, NULL); break; case DIK_BUTTON28: PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_input_customize_controls_button27"), _T("string"), _T("b28"), pText, 256, NULL); break; case DIK_BUTTON29: PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_input_customize_controls_button28"), _T("string"), _T("b29"), pText, 256, NULL); break; case DIK_BUTTON30: PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_input_customize_controls_button29"), _T("string"), _T("b30"), pText, 256, NULL); break; case DIK_BUTTON31: PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_input_customize_controls_button30"), _T("string"), _T("b31"), pText, 256, NULL); break; case DIK_BUTTON32: PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_input_customize_controls_button31"), _T("string"), _T("b32"), pText, 256, NULL); break; case DIK_WHEELUP: PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_input_customize_controls_wheelup"), _T("string"), _T("w0"), pText, 256, NULL); break; case DIK_WHEELDOWN: PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_input_customize_controls_wheeldown"), _T("string"), _T("w1"), pText, 256, NULL); break; case -1: _tcscpy(pText,_T("---")); break; default: { char tAnsiText[256]; GetKeyNameText(lParam,tAnsiText,256); int i=strlen(tAnsiText); if(!i) { _stprintf(pText,_T("Key_%d"),_iVirtualKey); } else { MultiByteToWideChar(CP_ACP, 0, tAnsiText, -1, pText, 256); if(_iVirtualKey==DIK_LSHIFT) { _TCHAR tText2[256]; _TCHAR *pText3; PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_input_customize_controls_left"), _T("string"), _T("---"), tText2, 256, NULL); tText2[1]=0; pText3=(_TCHAR*)malloc((_tcslen(tText2)+_tcslen(pText)+1)*sizeof(_TCHAR)); _tcscpy(pText3,tText2); _tcscat(pText3,pText); free((void*)pText); pText=pText3; } if(_iVirtualKey==DIK_LCONTROL) { _TCHAR tText2[256]; _TCHAR *pText3; PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_input_customize_controls_left"), _T("string"), _T("---"), tText2, 256, NULL); tText2[1]=0; pText3=(_TCHAR*)malloc((_tcslen(tText2)+_tcslen(pText)+1)*sizeof(_TCHAR)); _tcscpy(pText3,tText2); _tcscat(pText3,pText); free((void*)pText); pText=pText3; } if(_iVirtualKey==DIK_LALT) { _TCHAR tText2[256]; _TCHAR *pText3; PAK_UNICODE_GetPrivateProfileString(_T("system_menus_options_input_customize_controls_left"), _T("string"), _T("---"), tText2, 256, NULL); tText2[1]=0; pText3=(_TCHAR*)malloc((_tcslen(tText2)+_tcslen(pText)+1)*sizeof(_TCHAR)); _tcscpy(pText3,tText2); _tcscat(pText3,pText); free((void*)pText); pText=pText3; } if (_iVirtualKey == DIK_NUMPADENTER) { _TCHAR *pText3; pText3=(_TCHAR*)malloc((_tcslen(pText)+1+1)*sizeof(_TCHAR)); _tcscpy(pText3,pText); _tcscat(pText3,_T("0")); free((void*)pText); pText=pText3; } if(_tcslen(pText)>8) { pText[8]=0; int iI=8; while(iI--) { if(pText[iI]==_T(' ')) { pText[iI]=0; } else break; } } } } break; } if(pText2) { _TCHAR *pText3=(_TCHAR*)malloc((_tcslen(pText2)+_tcslen(pText)+1+1)*sizeof(_TCHAR)); _tcscpy(pText3,pText2); _tcscat(pText3,_T("+")); _tcscat(pText3,pText); free((void*)pText); free((void*)pText2); pText=pText3; } return pText; } //----------------------------------------------------------------------------- void Menu2_Close() { ARXmenu.currentmode = AMCM_OFF; if (pMenu) { pMenu->eMenuState = NOP; pMenu->pZoneClick = NULL; delete pMenu; pMenu = NULL; } if(pWindowMenu) { delete pWindowMenu; pWindowMenu=NULL; } }