the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
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