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