#include "stdafx.h" #include "..\XUI\XUI_SettingsAll.h" int CScene_SettingsAll::m_iDifficultySettingA[4]= { IDS_DIFFICULTY_PEACEFUL, IDS_DIFFICULTY_EASY, IDS_DIFFICULTY_NORMAL, IDS_DIFFICULTY_HARD }; int CScene_SettingsAll::m_iDifficultyTitleSettingA[4]= { IDS_DIFFICULTY_TITLE_PEACEFUL, IDS_DIFFICULTY_TITLE_EASY, IDS_DIFFICULTY_TITLE_NORMAL, IDS_DIFFICULTY_TITLE_HARD }; HRESULT CScene_SettingsAll::OnInit( XUIMessageInit* pInitData, BOOL& bHandled ) { wchar_t TempString[256]; m_iPad=*(int *)pInitData->pvInitData; bool bNotInGame=(Minecraft::GetInstance()->level==NULL); bool bPrimaryPlayer = ProfileManager.GetPrimaryPad()==m_iPad; MapChildControls(); // Display the tooltips HRESULT hr = S_OK; HXUIOBJ hSlider; m_SliderA[SLIDER_SETTINGS_MUSIC].SetValue(app.GetGameSettings(m_iPad,eGameSetting_MusicVolume)); swprintf(TempString, 256, L"%ls: %d%%", app.GetString( IDS_SLIDER_MUSIC ), app.GetGameSettings(m_iPad,eGameSetting_MusicVolume)); m_SliderA[SLIDER_SETTINGS_MUSIC].SetText(TempString); m_SliderA[SLIDER_SETTINGS_SOUND].SetValue(app.GetGameSettings(m_iPad,eGameSetting_SoundFXVolume)); swprintf(TempString, 256, L"%ls: %d%%", app.GetString( IDS_SLIDER_SOUND ), app.GetGameSettings(m_iPad,eGameSetting_SoundFXVolume)); m_SliderA[SLIDER_SETTINGS_SOUND].SetText(TempString); m_SliderA[SLIDER_SETTINGS_GAMMA].SetValue(app.GetGameSettings(m_iPad,eGameSetting_Gamma)); swprintf(TempString, 256, L"%ls: %d%%", app.GetString( IDS_SLIDER_GAMMA ), app.GetGameSettings(m_iPad,eGameSetting_Gamma)); m_SliderA[SLIDER_SETTINGS_GAMMA].SetText(TempString); m_SliderA[SLIDER_SETTINGS_SENSITIVITY].SetValue(app.GetGameSettings(m_iPad,eGameSetting_Sensitivity)); swprintf(TempString, 256, L"%ls: %d%%", app.GetString( IDS_SLIDER_SENSITIVITY_INGAME ), app.GetGameSettings(m_iPad,eGameSetting_Sensitivity)); //IDS_SLIDER_SENSITIVITY m_SliderA[SLIDER_SETTINGS_SENSITIVITY].SetText(TempString); m_SplitScreen.SetCheck((app.GetGameSettings(m_iPad,eGameSetting_SplitScreenVertical)!=0)?TRUE:FALSE); m_SplitScreen.SetText(app.GetString( IDS_CHECKBOX_VERTICAL_SPLIT_SCREEN )); m_ViewBob.SetCheck((app.GetGameSettings(m_iPad,eGameSetting_ViewBob)!=0)?TRUE:FALSE); m_ViewBob.SetText(app.GetString( IDS_VIEW_BOBBING )); m_VisibleOnMaps.SetCheck((app.GetGameSettings(m_iPad,eGameSetting_ViewBob)!=0)?TRUE:FALSE); //eGameSetting_VisibleOnMaps m_VisibleOnMaps.SetText(app.GetString( IDS_OFF )); //IDS_VISIBLE_ON_MAPS m_SliderA[SLIDER_SETTINGS_DIFFICULTY].SetValue(app.GetGameSettings(m_iPad,eGameSetting_Difficulty)); swprintf(TempString, 256, L"%ls: %ls", app.GetString( IDS_SLIDER_DIFFICULTY ), app.GetString(m_iDifficultyTitleSettingA[app.GetGameSettings(m_iPad,eGameSetting_Difficulty)])); m_SliderA[SLIDER_SETTINGS_DIFFICULTY].SetText(TempString); wstring wsText=app.GetString(m_iDifficultySettingA[app.GetGameSettings(m_iPad,eGameSetting_Difficulty)]); int size = 14; if(!RenderManager.IsHiDef() && !RenderManager.IsWidescreen()) { size = 12; } swprintf(TempString, 256, L"", app.GetHTMLColour(eHTMLColor_White), size); wsText= TempString + wsText; m_DifficultyText.SetText(wsText.c_str()); bool bRemoveDifficulty=false; bool bRemoveSettings=false; float fRemoveHeight=0.0f,fWidth,fHeight; if(!bPrimaryPlayer || !bNotInGame) { bRemoveDifficulty=true; if(!bPrimaryPlayer) { bRemoveSettings=true; } } D3DXVECTOR3 vec1,vec2,vec3; XuiElementGetPosition(m_SplitScreen,&vec1); XuiElementGetPosition(m_ViewBob,&vec2); XuiElementGetPosition(m_VisibleOnMaps,&vec3); float fCheckboxHeight=vec1.y-vec2.y-vec3.y; if(bRemoveSettings) { // MUSIC m_SliderA[SLIDER_SETTINGS_MUSIC].SetEnable(FALSE); m_SliderA[SLIDER_SETTINGS_MUSIC].SetShow(FALSE); hr=XuiElementGetChildById(m_SliderA[SLIDER_SETTINGS_MUSIC].m_hObj,L"XuiSlider",&hSlider); XuiElementSetShow(hSlider,FALSE); XuiControlSetEnable(hSlider,FALSE); m_SliderA[SLIDER_SETTINGS_MUSIC].GetBounds(&fWidth,&fHeight); fRemoveHeight+=fHeight+4.0f; // add padding // SOUND m_SliderA[SLIDER_SETTINGS_SOUND].SetEnable(FALSE); m_SliderA[SLIDER_SETTINGS_SOUND].SetShow(FALSE); hr=XuiElementGetChildById(m_SliderA[SLIDER_SETTINGS_SOUND].m_hObj,L"XuiSlider",&hSlider); XuiElementSetShow(hSlider,FALSE); XuiControlSetEnable(hSlider,FALSE); m_SliderA[SLIDER_SETTINGS_SOUND].GetBounds(&fWidth,&fHeight); fRemoveHeight+=fHeight+4.0f; // GAMMA m_SliderA[SLIDER_SETTINGS_GAMMA].SetEnable(FALSE); m_SliderA[SLIDER_SETTINGS_GAMMA].SetShow(FALSE); hr=XuiElementGetChildById(m_SliderA[SLIDER_SETTINGS_GAMMA].m_hObj,L"XuiSlider",&hSlider); XuiElementSetShow(hSlider,FALSE); XuiControlSetEnable(hSlider,FALSE); m_SliderA[SLIDER_SETTINGS_GAMMA].GetBounds(&fWidth,&fHeight); fRemoveHeight+=fHeight+4.0f; // SPLITSCREEN m_SplitScreen.SetShow(FALSE); m_SplitScreen.SetEnable(FALSE); } if(bRemoveDifficulty) { m_SliderA[SLIDER_SETTINGS_DIFFICULTY].SetEnable(FALSE); m_SliderA[SLIDER_SETTINGS_DIFFICULTY].SetShow(FALSE); m_DifficultyText.SetShow(FALSE); hr=XuiElementGetChildById(m_SliderA[SLIDER_SETTINGS_DIFFICULTY].m_hObj,L"XuiSlider",&hSlider); XuiElementSetShow(hSlider,FALSE); XuiControlSetEnable(hSlider,FALSE); m_SliderA[SLIDER_SETTINGS_DIFFICULTY].GetBounds(&fWidth,&fHeight); if (!bPrimaryPlayer) fRemoveHeight+=fHeight; //str1k3r - dont add this for the primary player or it causes a bug, and dont add padding } else { wstring wsText=app.GetString(m_iDifficultySettingA[app.GetGameSettings(m_iPad,eGameSetting_Difficulty)]); int size = 14; if(!RenderManager.IsHiDef() && !RenderManager.IsWidescreen()) { size = 12; } swprintf(TempString, 256, L"", app.GetHTMLColour(eHTMLColor_White), size); wsText= TempString + wsText; m_DifficultyText.SetText(wsText.c_str()); } if(fRemoveHeight>0.0f) { D3DXVECTOR3 vec; m_SliderA[SLIDER_SETTINGS_SENSITIVITY].GetPosition(&vec); m_SliderA[SLIDER_SETTINGS_SENSITIVITY].GetBounds(&fWidth,&fHeight); vec.y-=fRemoveHeight-fHeight; m_SliderA[SLIDER_SETTINGS_SENSITIVITY].SetPosition(&vec); m_DifficultyText.GetPosition(&vec); vec.y-=fRemoveHeight; m_DifficultyText.SetPosition(&vec); m_ViewBob.GetPosition(&vec); vec.y-=fRemoveHeight; m_ViewBob.SetPosition(&vec); m_VisibleOnMaps.GetPosition(&vec); vec.y-=fRemoveHeight; m_VisibleOnMaps.SetPosition(&vec); float fbgnWidth, fBgnHeight; GetBounds(&fbgnWidth, &fBgnHeight); SetBounds(fbgnWidth, fBgnHeight - fRemoveHeight); } // if we're not in the game, we need to use basescene 0 if(bNotInGame) { ui.SetTooltips( DEFAULT_XUI_MENU_USER, IDS_TOOLTIPS_SELECT,IDS_TOOLTIPS_BACK); CXuiSceneBase::ShowBackground( DEFAULT_XUI_MENU_USER, TRUE ); } else { ui.SetTooltips( m_iPad, IDS_TOOLTIPS_SELECT,IDS_TOOLTIPS_BACK); CXuiSceneBase::ShowBackground( m_iPad, FALSE ); } if(bPrimaryPlayer) { XuiElementSetUserFocus(m_SliderA[SLIDER_SETTINGS_MUSIC].m_hObj, m_iPad); } else { XuiElementSetUserFocus(m_SliderA[SLIDER_SETTINGS_SENSITIVITY].m_hObj, m_iPad); } if(app.GetLocalPlayerCount()>1) { app.AdjustSplitscreenScene(m_hObj,&m_OriginalPosition,m_iPad); CXuiSceneBase::ShowLogo( m_iPad, FALSE ); } else { if(bNotInGame) { // can't show the logo for 480 mode if(!RenderManager.IsHiDef()) { CXuiSceneBase::ShowLogo( DEFAULT_XUI_MENU_USER, FALSE ); } else { CXuiSceneBase::ShowLogo( DEFAULT_XUI_MENU_USER, TRUE ); } } else { // can't show the logo for 480 mode if(!RenderManager.IsHiDef()) { CXuiSceneBase::ShowLogo( m_iPad, FALSE ); } else { CXuiSceneBase::ShowLogo( m_iPad, TRUE ); } } } return S_OK; } HRESULT CScene_SettingsAll::OnNotifyValueChanged( HXUIOBJ hObjSource, XUINotifyValueChanged* pNotifyValueChanged, BOOL& bHandled ) { wchar_t TempString[256]; if(hObjSource==m_SliderA[SLIDER_SETTINGS_MUSIC].GetSlider() ) { app.SetGameSettings(m_iPad,eGameSetting_MusicVolume,pNotifyValueChanged->nValue); swprintf(TempString, 256, L"%ls: %d%%", app.GetString( IDS_SLIDER_MUSIC ),pNotifyValueChanged->nValue); m_SliderA[SLIDER_SETTINGS_MUSIC].SetText(TempString); } else if(hObjSource==m_SliderA[SLIDER_SETTINGS_SOUND].GetSlider() ) { app.SetGameSettings(m_iPad,eGameSetting_SoundFXVolume,pNotifyValueChanged->nValue); swprintf(TempString, 256, L"%ls: %d%%", app.GetString( IDS_SLIDER_SOUND ),pNotifyValueChanged->nValue); m_SliderA[SLIDER_SETTINGS_SOUND].SetText(TempString); } if(hObjSource==m_SliderA[SLIDER_SETTINGS_GAMMA].GetSlider() ) { app.SetGameSettings(m_iPad,eGameSetting_Gamma,pNotifyValueChanged->nValue); swprintf(TempString, 256, L"%ls: %d%%", app.GetString( IDS_SLIDER_GAMMA ),pNotifyValueChanged->nValue); m_SliderA[SLIDER_SETTINGS_GAMMA].SetText(TempString); } if(hObjSource==m_SliderA[SLIDER_SETTINGS_SENSITIVITY].GetSlider() ) { app.SetGameSettings(m_iPad,eGameSetting_Sensitivity,pNotifyValueChanged->nValue); swprintf(TempString, 256, L"%ls: %d%%", app.GetString( IDS_SLIDER_SENSITIVITY_INGAME ),pNotifyValueChanged->nValue); //IDS_SLIDER_SENSITIVITY m_SliderA[SLIDER_SETTINGS_SENSITIVITY].SetText(TempString); } else if(hObjSource==m_SliderA[SLIDER_SETTINGS_DIFFICULTY].GetSlider() ) { app.SetGameSettings(m_iPad,eGameSetting_Difficulty,pNotifyValueChanged->nValue); swprintf(TempString, 256, L"%ls: %ls", app.GetString( IDS_SLIDER_DIFFICULTY ),app.GetString(m_iDifficultyTitleSettingA[pNotifyValueChanged->nValue])); m_SliderA[SLIDER_SETTINGS_DIFFICULTY].SetText(TempString); wstring wsText=app.GetString(m_iDifficultySettingA[pNotifyValueChanged->nValue]); int size = 14; if(!RenderManager.IsHiDef() && !RenderManager.IsWidescreen()) { size = 12; } swprintf(TempString, 256, L"", app.GetHTMLColour(eHTMLColor_White), size); wsText= TempString + wsText; m_DifficultyText.SetText(wsText.c_str()); } return S_OK; } HRESULT CScene_SettingsAll::OnKeyDown(XUIMessageInput* pInputData, BOOL& rfHandled) { ui.AnimateKeyPress(pInputData->UserIndex, pInputData->dwKeyCode); HRESULT hr=S_OK; // Explicitly handle B button presses switch(pInputData->dwKeyCode) { case VK_PAD_B: case VK_ESCAPE: // check the checkboxes app.SetGameSettings(m_iPad,eGameSetting_SplitScreenVertical,m_SplitScreen.IsChecked()?1:0); app.SetGameSettings(m_iPad,eGameSetting_ViewBob,m_ViewBob.IsChecked()?1:0); app.SetGameSettings(m_iPad,eGameSetting_ViewBob,m_VisibleOnMaps.IsChecked()?1:0); //eGameSetting_VisibleOnMaps app.NavigateBack(pInputData->UserIndex); rfHandled = TRUE; break; } return hr; } //---------------------------------------------------------------------------------- // Handler for the button press message. //---------------------------------------------------------------------------------- HRESULT CScene_SettingsAll::OnNotifyPressEx(HXUIOBJ hObjPressed, XUINotifyPress* pNotifyPressData, BOOL& rfHandled) { // This assumes all buttons can only be pressed with the A button ui.AnimateKeyPress(pNotifyPressData->UserIndex, VK_PAD_A); return S_OK; } HRESULT CScene_SettingsAll::OnControlNavigate(XUIMessageControlNavigate *pControlNavigateData, BOOL& bHandled) { // added so we can skip greyed out items pControlNavigateData->hObjDest=XuiControlGetNavigation(pControlNavigateData->hObjSource,pControlNavigateData->nControlNavigate,TRUE,TRUE); if(pControlNavigateData->hObjDest!=NULL) { bHandled=TRUE; } return S_OK; } HRESULT CScene_SettingsAll::OnTransitionStart( XUIMessageTransition *pTransition, BOOL& bHandled ) { HRESULT hr; WCHAR TempString[256]; if(pTransition->dwTransAction==XUI_TRANSITION_ACTION_DESTROY ) return S_OK; if(pTransition->dwTransType == XUI_TRANSITION_TO || pTransition->dwTransType == XUI_TRANSITION_BACKTO) { float fMaxTextLen=0.0f; float fMaxLen=0.0f; HXUIOBJ hSlider,hVisual,hText; XUIRect xuiRect; float fWidth,fHeight; D3DXVECTOR3 vec,vSlider,vecCheckboxText,vecCheckbox; // don't display values on these - we handle that for(int i=0;ifMaxTextLen) fMaxTextLen=xuiRect.right; if(fWidth>fMaxLen) fMaxLen=fWidth; } if(fMaxLen1) { // scene width needs to be more that the text width on buttons fWidth=vSlider.x; vec.x=floorf((640.0f-(fMaxTextLen+fWidth))/2.0f); XuiElementSetPosition(m_hObj,&vec); XuiElementSetBounds(m_hObj,fMaxTextLen+(fWidth*2.0f),fHeight); } else { fWidth=vSlider.x; vec.x=floorf((1280.0f-(fMaxTextLen+fWidth))/2.0f); XuiElementSetPosition(m_hObj,&vec); XuiElementSetBounds(m_hObj,fMaxTextLen+(fWidth*2.0f),fHeight); } // Need to refresh the scenes visual since the object size has now changed XuiControlAttachVisual(m_hObj); // centre is vec.x+(fWidth/2) for(int i=0;i