the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
at main 263 lines 8.7 kB view raw
1#include "stdafx.h" 2#include "..\XUI\XUI_SettingsAudio.h" 3 4//---------------------------------------------------------------------------------- 5// Performs initialization tasks - retrieves controls. 6//---------------------------------------------------------------------------------- 7HRESULT CScene_SettingsAudio::OnInit( XUIMessageInit* pInitData, BOOL& bHandled ) 8{ 9 WCHAR TempString[256]; 10 m_iPad=*(int *)pInitData->pvInitData; 11 // if we're not in the game, we need to use basescene 0 12 bool bNotInGame=(Minecraft::GetInstance()->level==NULL); 13 14 MapChildControls(); 15 16 // Display the tooltips 17 HRESULT hr = S_OK; 18 HXUIOBJ hSlider; 19 20 m_SliderA[SLIDER_SETTINGS_MUSIC].SetValue(app.GetGameSettings(m_iPad,eGameSetting_MusicVolume)); 21 swprintf( (WCHAR *)TempString, 256, L"%ls: %d%%", app.GetString( IDS_SLIDER_MUSIC ),app.GetGameSettings(m_iPad,eGameSetting_MusicVolume)); 22 m_SliderA[SLIDER_SETTINGS_MUSIC].SetText(TempString); 23 24 m_SliderA[SLIDER_SETTINGS_SOUND].SetValue(app.GetGameSettings(m_iPad,eGameSetting_SoundFXVolume)); 25 swprintf( (WCHAR *)TempString, 256, L"%ls: %d%%", app.GetString( IDS_SLIDER_SOUND ),app.GetGameSettings(m_iPad,eGameSetting_SoundFXVolume)); 26 m_SliderA[SLIDER_SETTINGS_SOUND].SetText(TempString); 27 28 // only the primary player gets to change the music and sound settings 29 // only the primary player gets to change the gamma and splitscreen settings 30 // only the primary player gets to change the difficulty settings 31 if(ProfileManager.GetPrimaryPad()!=m_iPad) 32 { 33 D3DXVECTOR3 vec; 34 35 m_SliderA[SLIDER_SETTINGS_MUSIC].GetPosition(&vec); 36 m_SliderA[SLIDER_SETTINGS_MUSIC].SetEnable(FALSE); 37 m_SliderA[SLIDER_SETTINGS_MUSIC].SetShow(FALSE); 38 hr=XuiElementGetChildById(m_SliderA[SLIDER_SETTINGS_MUSIC].m_hObj,L"XuiSlider",&hSlider); 39 XuiElementSetShow(hSlider,FALSE); 40 XuiControlSetEnable(hSlider,FALSE); 41 m_SliderA[SLIDER_SETTINGS_SOUND].SetEnable(FALSE); 42 m_SliderA[SLIDER_SETTINGS_SOUND].SetShow(FALSE); 43 hr=XuiElementGetChildById(m_SliderA[SLIDER_SETTINGS_SOUND].m_hObj,L"XuiSlider",&hSlider); 44 XuiElementSetShow(hSlider,FALSE); 45 XuiControlSetEnable(hSlider,FALSE); 46 } 47 48 49 // if we're not in the game, we need to use basescene 0 50 if(bNotInGame) 51 { 52 ui.SetTooltips( DEFAULT_XUI_MENU_USER, IDS_TOOLTIPS_SELECT,IDS_TOOLTIPS_BACK); 53 CXuiSceneBase::ShowBackground( DEFAULT_XUI_MENU_USER, TRUE ); 54 } 55 else 56 { 57 ui.SetTooltips( m_iPad, IDS_TOOLTIPS_SELECT,IDS_TOOLTIPS_BACK); 58 CXuiSceneBase::ShowBackground( m_iPad, FALSE ); 59 } 60 61 62 if(app.GetLocalPlayerCount()>1) 63 { 64 app.AdjustSplitscreenScene(m_hObj,&m_OriginalPosition,m_iPad); 65 CXuiSceneBase::ShowLogo( m_iPad, FALSE ); 66 } 67 else 68 { 69 if(bNotInGame) 70 { 71 CXuiSceneBase::ShowLogo( DEFAULT_XUI_MENU_USER, TRUE ); 72 } 73 else 74 { 75 CXuiSceneBase::ShowLogo( m_iPad, TRUE ); 76 } 77 } 78 79 return S_OK; 80} 81 82HRESULT CScene_SettingsAudio::OnNotifyValueChanged( HXUIOBJ hObjSource, XUINotifyValueChanged* pNotifyValueChanged, BOOL& bHandled ) 83{ 84 WCHAR TempString[256]; 85 86 if(hObjSource==m_SliderA[SLIDER_SETTINGS_MUSIC].GetSlider() ) 87 { 88 app.SetGameSettings(m_iPad,eGameSetting_MusicVolume,pNotifyValueChanged->nValue); 89 swprintf( (WCHAR *)TempString, 256, L"%ls: %d%%", app.GetString( IDS_SLIDER_MUSIC ),pNotifyValueChanged->nValue); 90 m_SliderA[SLIDER_SETTINGS_MUSIC].SetText(TempString); 91 } 92 else if(hObjSource==m_SliderA[SLIDER_SETTINGS_SOUND].GetSlider() ) 93 { 94 app.SetGameSettings(m_iPad,eGameSetting_SoundFXVolume,pNotifyValueChanged->nValue); 95 swprintf( (WCHAR *)TempString, 256, L"%ls: %d%%", app.GetString( IDS_SLIDER_SOUND ),pNotifyValueChanged->nValue); 96 m_SliderA[SLIDER_SETTINGS_SOUND].SetText(TempString); 97 } 98 99 100 return S_OK; 101} 102 103 104HRESULT CScene_SettingsAudio::OnKeyDown(XUIMessageInput* pInputData, BOOL& rfHandled) 105{ 106 ui.AnimateKeyPress(pInputData->UserIndex, pInputData->dwKeyCode); 107 108 HRESULT hr=S_OK; 109 110 // Explicitly handle B button presses 111 switch(pInputData->dwKeyCode) 112 { 113 case VK_PAD_B: 114 case VK_ESCAPE: 115 // if the profile data has been changed, then force a profile write 116 // It seems we're allowed to break the 5 minute rule if it's the result of a user action 117 118 // Not in this scene - app.CheckGameSettingsChanged(true,pInputData->UserIndex); 119 120 app.NavigateBack(pInputData->UserIndex); 121 rfHandled = TRUE; 122 break; 123 } 124 125 return hr; 126} 127 128//---------------------------------------------------------------------------------- 129// Handler for the button press message. 130//---------------------------------------------------------------------------------- 131HRESULT CScene_SettingsAudio::OnNotifyPressEx(HXUIOBJ hObjPressed, XUINotifyPress* pNotifyPressData, BOOL& rfHandled) 132{ 133 // This assumes all buttons can only be pressed with the A button 134 ui.AnimateKeyPress(pNotifyPressData->UserIndex, VK_PAD_A); 135 136 return S_OK; 137} 138 139HRESULT CScene_SettingsAudio::OnControlNavigate(XUIMessageControlNavigate *pControlNavigateData, BOOL& bHandled) 140{ 141 // added so we can skip greyed out items 142 pControlNavigateData->hObjDest=XuiControlGetNavigation(pControlNavigateData->hObjSource,pControlNavigateData->nControlNavigate,TRUE,TRUE); 143 144 if(pControlNavigateData->hObjDest!=NULL) 145 { 146 bHandled=TRUE; 147 } 148 149 return S_OK; 150} 151 152HRESULT CScene_SettingsAudio::OnTransitionStart( XUIMessageTransition *pTransition, BOOL& bHandled ) 153{ 154 HRESULT hr; 155 WCHAR TempString[256]; 156 if(pTransition->dwTransAction==XUI_TRANSITION_ACTION_DESTROY ) return S_OK; 157 158 if(pTransition->dwTransType == XUI_TRANSITION_TO || pTransition->dwTransType == XUI_TRANSITION_BACKTO) 159 { 160 // 4J-PB - Going to resize buttons if the text is too big to fit on any of them (Br-pt problem with the length of Unlock Full Game) 161 162 float fMaxTextLen=0.0f; 163 float fMaxLen=0.0f; 164 165 // sliders first 166 HXUIOBJ hSlider,hVisual,hText;//,hCheckboxText; 167 XUIRect xuiRect; 168 float fWidth,fHeight,fTemp; 169 D3DXVECTOR3 vec,vecCheckboxText,vSlider,vecCheckbox; 170 171 // don't display values on these - we handle that 172 for(int i=0;i<SLIDER_SETTINGS_AUDIO_MAX;i++) 173 { 174 m_SliderA[i].SetValueDisplay(FALSE); 175 } 176 177 hr=XuiElementGetChildById(m_SliderA[SLIDER_SETTINGS_MUSIC].m_hObj,L"XuiSlider",&hSlider); 178 hr=XuiControlGetVisual(hSlider,&hVisual); 179 hr=XuiElementGetChildById(hVisual,L"text_Label",&hText); 180 hr=XuiElementGetPosition(m_SliderA[SLIDER_SETTINGS_MUSIC].m_hObj,&vSlider); 181 182 for(int i=0;i<SLIDER_SETTINGS_AUDIO_MAX;i++) 183 { 184 switch(i) 185 { 186 case SLIDER_SETTINGS_MUSIC: // 3 digits 187 swprintf( (WCHAR *)TempString, 256, L"%ls: %d%%", app.GetString( IDS_SLIDER_MUSIC ),999); 188 break; 189 case SLIDER_SETTINGS_SOUND: // 3 digits 190 swprintf( (WCHAR *)TempString, 256, L"%ls: %d%%", app.GetString( IDS_SLIDER_SOUND ),999); 191 break; 192 } 193 194 hr=XuiTextPresenterMeasureText(hText, TempString, &xuiRect); 195 // 4J-PB - the text measuring doesn't seem to be long enough - add a fudge 196 xuiRect.right+=25.0f; 197 m_SliderA[i].GetBounds(&fWidth,&fHeight); 198 if(xuiRect.right>fMaxTextLen) fMaxTextLen=xuiRect.right; 199 if(fWidth>fMaxLen) fMaxLen=fWidth; 200 } 201 202 if(fMaxLen<fMaxTextLen) 203 { 204 float fWidth; 205 XuiElementGetPosition(m_hObj,&vec); 206 XuiElementGetBounds(m_hObj,&fWidth,&fHeight); 207 208 // need to centre the scene now the size has changed 209 if((!RenderManager.IsHiDef() && !RenderManager.IsWidescreen()) || app.GetLocalPlayerCount()>1) 210 { 211 // scene width needs to be more that the text width on buttons 212 fWidth=vSlider.x; 213 vec.x=floorf((640.0f-(fMaxTextLen+fWidth))/2.0f); 214 XuiElementSetPosition(m_hObj,&vec); 215 XuiElementSetBounds(m_hObj,fMaxTextLen+(fWidth*2.0f),fHeight); 216 } 217 else 218 { 219 fWidth=vSlider.x; 220 vec.x=floorf((1280.0f-(fMaxTextLen+fWidth))/2.0f); 221 XuiElementSetPosition(m_hObj,&vec); 222 XuiElementSetBounds(m_hObj,fMaxTextLen+(fWidth*2.0f),fHeight); 223 } 224 // Need to refresh the scenes visual since the object size has now changed 225 XuiControlAttachVisual(m_hObj); 226 227 // centre is vec.x+(fWidth/2) 228 for(int i=0;i<SLIDER_SETTINGS_AUDIO_MAX;i++) 229 { 230 hr=XuiElementGetChildById(m_SliderA[i].m_hObj,L"XuiSlider",&hSlider); 231 XuiElementGetPosition(hSlider,&vec); 232 XuiElementGetBounds(hSlider,&fTemp,&fHeight); 233 XuiElementSetBounds(hSlider,fMaxTextLen,fHeight); 234 } 235 } 236 } 237 238 return S_OK; 239} 240 241HRESULT CScene_SettingsAudio::OnNavReturn(HXUIOBJ hObj,BOOL& rfHandled) 242{ 243 bool bNotInGame=(Minecraft::GetInstance()->level==NULL); 244 245 // if we're not in the game, we need to use basescene 0 246 if(bNotInGame) 247 { 248 ui.SetTooltips( DEFAULT_XUI_MENU_USER, IDS_TOOLTIPS_SELECT,IDS_TOOLTIPS_BACK); 249 } 250 else 251 { 252 ui.SetTooltips( m_iPad, IDS_TOOLTIPS_SELECT,IDS_TOOLTIPS_BACK); 253 } 254 255 return S_OK; 256} 257 258HRESULT CScene_SettingsAudio::OnCustomMessage_Splitscreenplayer(bool bJoining, BOOL& bHandled) 259{ 260 bHandled=true; 261 return app.AdjustSplitscreenScene_PlayerChanged(m_hObj,&m_OriginalPosition,m_iPad,bJoining); 262} 263