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_SettingsOptions.h"
6
7int CScene_SettingsOptions::m_iDifficultySettingA[4]=
8{
9 IDS_DIFFICULTY_PEACEFUL,
10 IDS_DIFFICULTY_EASY,
11 IDS_DIFFICULTY_NORMAL,
12 IDS_DIFFICULTY_HARD
13};
14
15int CScene_SettingsOptions::m_iDifficultyTitleSettingA[4]=
16{
17 IDS_DIFFICULTY_TITLE_PEACEFUL,
18 IDS_DIFFICULTY_TITLE_EASY,
19 IDS_DIFFICULTY_TITLE_NORMAL,
20 IDS_DIFFICULTY_TITLE_HARD
21};
22
23//----------------------------------------------------------------------------------
24// Performs initialization tasks - retrieves controls.
25//----------------------------------------------------------------------------------
26HRESULT CScene_SettingsOptions::OnInit( XUIMessageInit* pInitData, BOOL& bHandled )
27{
28 WCHAR TempString[256];
29 m_iPad=*(int *)pInitData->pvInitData;
30 // if we're not in the game, we need to use basescene 0
31 bool bNotInGame=(Minecraft::GetInstance()->level==NULL);
32 bool bPrimaryPlayer = ProfileManager.GetPrimaryPad()==m_iPad;
33
34 MapChildControls();
35
36 XuiControlSetText(m_ViewBob,app.GetString(IDS_VIEW_BOBBING));
37 XuiControlSetText(m_Hints,app.GetString(IDS_HINTS));
38 XuiControlSetText(m_Tooltips,app.GetString(IDS_IN_GAME_TOOLTIPS));
39 XuiControlSetText(m_InGameGamertags,app.GetString(IDS_IN_GAME_GAMERTAGS));
40 XuiControlSetText(m_MashUpWorlds,app.GetString(IDS_UNHIDE_MASHUP_WORLDS));
41
42 // check if we should display the mash-up option
43 if(bNotInGame && app.GetMashupPackWorlds(m_iPad)!=0xFFFFFFFF)
44 {
45 // the mash-up option is needed
46 m_bMashUpWorldsUnhideOption=true;
47 m_MashUpWorlds.SetShow(TRUE);
48 }
49 else
50 {
51 m_bMashUpWorldsUnhideOption=false;
52 m_MashUpWorlds.SetShow(FALSE);
53 }
54
55 // Display the tooltips
56 HRESULT hr = S_OK;
57 HXUIOBJ hSlider;
58
59 unsigned char ucValue=app.GetGameSettings(m_iPad,eGameSetting_Autosave);
60 m_SliderA[SLIDER_SETTINGS_AUTOSAVE].SetValue(ucValue);
61 if(ucValue==0)
62 {
63 swprintf( (WCHAR *)TempString, 256, L"%ls", app.GetString( IDS_SLIDER_AUTOSAVE_OFF ));
64 }
65 else
66 {
67 swprintf( (WCHAR *)TempString, 256, L"%ls: %d %ls", app.GetString( IDS_SLIDER_AUTOSAVE ),ucValue*15, app.GetString( IDS_MINUTES ));
68 }
69
70 m_SliderA[SLIDER_SETTINGS_AUTOSAVE].SetText(TempString);
71
72
73 m_ViewBob.SetCheck( (app.GetGameSettings(m_iPad,eGameSetting_ViewBob)!=0)?TRUE:FALSE);
74 m_InGameGamertags.SetCheck( (app.GetGameSettings(m_iPad,eGameSetting_GamertagsVisible)!=0)?TRUE:FALSE);
75 m_Hints.SetCheck( (app.GetGameSettings(m_iPad,eGameSetting_Hints)!=0)?TRUE:FALSE);
76 m_Tooltips.SetCheck( (app.GetGameSettings(m_iPad,eGameSetting_Tooltips)!=0)?TRUE:FALSE);
77
78 m_SliderA[SLIDER_SETTINGS_DIFFICULTY].SetValue(app.GetGameSettings(m_iPad,eGameSetting_Difficulty));
79 swprintf( (WCHAR *)TempString, 256, L"%ls: %ls", app.GetString( IDS_SLIDER_DIFFICULTY ),app.GetString(m_iDifficultyTitleSettingA[app.GetGameSettings(m_iPad,eGameSetting_Difficulty)]));
80 m_SliderA[SLIDER_SETTINGS_DIFFICULTY].SetText(TempString);
81
82
83 wstring wsText=app.GetString(m_iDifficultySettingA[app.GetGameSettings(m_iPad,eGameSetting_Difficulty)]);
84 int size = 14;
85 if(!RenderManager.IsHiDef() && !RenderManager.IsWidescreen())
86 {
87 size = 12;
88 }
89 wchar_t startTags[64];
90 swprintf(startTags,64,L"<font color=\"#%08x\" size=%d>",app.GetHTMLColour(eHTMLColor_White),size);
91 wsText= startTags + wsText;
92
93 m_DifficultyText.SetText(wsText.c_str());
94
95
96 // If you are in-game, only the game host can change in-game gamertags, and you can't change difficulty
97 // only the primary player gets to change the autosave and difficulty settings
98
99 bool bRemoveDifficulty=false;
100 bool bRemoveAutosave=false;
101 bool bRemoveInGameGamertags=false;
102 float fRemoveHeight=0.0f,fWidth,fHeight;
103 float fSlidersMoveUp=0.0f;
104
105 if(!bPrimaryPlayer)
106 {
107 bRemoveDifficulty=true;
108 bRemoveAutosave=true;
109 bRemoveInGameGamertags=true;
110 }
111
112 if(!bNotInGame) // in the game
113 {
114 bRemoveDifficulty=true;
115 if(!g_NetworkManager.IsHost())
116 {
117 bRemoveAutosave=true;
118 bRemoveInGameGamertags=true;
119 }
120 }
121
122 D3DXVECTOR3 vec1,vec2;
123 XuiElementGetPosition(m_ViewBob,&vec1);
124 XuiElementGetPosition(m_Hints,&vec2);
125
126 float fCheckboxHeight=vec2.y-vec1.y;
127
128 if(bRemoveDifficulty)
129 {
130 m_SliderA[SLIDER_SETTINGS_DIFFICULTY].SetEnable(FALSE);
131 m_SliderA[SLIDER_SETTINGS_DIFFICULTY].SetShow(FALSE);
132 m_DifficultyText.SetShow(FALSE);
133 hr=XuiElementGetChildById(m_SliderA[SLIDER_SETTINGS_DIFFICULTY].m_hObj,L"XuiSlider",&hSlider);
134 XuiElementSetShow(hSlider,FALSE);
135 XuiControlSetEnable(hSlider,FALSE);
136 m_SliderA[SLIDER_SETTINGS_DIFFICULTY].GetBounds(&fWidth,&fHeight);
137 fRemoveHeight+=fHeight+4.0f; // add padding
138 }
139 else
140 {
141 wstring wsText=app.GetString(m_iDifficultySettingA[app.GetGameSettings(m_iPad,eGameSetting_Difficulty)]);
142 int size = 14;
143 if(!RenderManager.IsHiDef() && !RenderManager.IsWidescreen())
144 {
145 size = 12;
146 }
147 wchar_t startTags[64];
148 swprintf(startTags,64,L"<font color=\"#%08x\" size=%d>",app.GetHTMLColour(eHTMLColor_White),size);
149 wsText= startTags + wsText;
150
151 m_DifficultyText.SetText(wsText.c_str());
152 }
153
154 if(bRemoveAutosave)
155 {
156 m_SliderA[SLIDER_SETTINGS_AUTOSAVE].SetEnable(FALSE);
157 m_SliderA[SLIDER_SETTINGS_AUTOSAVE].SetShow(FALSE);
158 hr=XuiElementGetChildById(m_SliderA[SLIDER_SETTINGS_AUTOSAVE].m_hObj,L"XuiSlider",&hSlider);
159 XuiElementSetShow(hSlider,FALSE);
160 XuiControlSetEnable(hSlider,FALSE);
161 m_SliderA[SLIDER_SETTINGS_AUTOSAVE].GetBounds(&fWidth,&fHeight);
162 fRemoveHeight+=fHeight+4.0f; // add padding
163 }
164
165 if(bRemoveInGameGamertags)
166 {
167 m_InGameGamertags.SetShow(FALSE);
168 m_InGameGamertags.SetEnable(FALSE);
169 m_InGameGamertags.GetBounds(&fWidth, &fHeight);
170
171 // move the mash-up worlds option up
172 if(m_bMashUpWorldsUnhideOption)
173 {
174 D3DXVECTOR3 vec;
175 XuiElementGetPosition(m_InGameGamertags,&vec);
176 m_MashUpWorlds.SetPosition(&vec);
177 }
178 fRemoveHeight+=fCheckboxHeight;//fHeight+4.0f; // add padding
179 fSlidersMoveUp+=fCheckboxHeight;
180 }
181
182 if(!m_bMashUpWorldsUnhideOption)
183 {
184 m_MashUpWorlds.SetShow(FALSE);
185 m_MashUpWorlds.SetEnable(FALSE);
186 m_MashUpWorlds.GetBounds(&fWidth, &fHeight);
187 fRemoveHeight+=fCheckboxHeight;
188 fSlidersMoveUp+=fCheckboxHeight;
189 }
190
191
192 if(fRemoveHeight>0.0f)
193 {
194 D3DXVECTOR3 vec;
195 // autosave should move up by the height of the number of checkboxes hidden
196 m_SliderA[SLIDER_SETTINGS_AUTOSAVE].GetPosition(&vec);
197 vec.y-=fSlidersMoveUp;
198 m_SliderA[SLIDER_SETTINGS_AUTOSAVE].SetPosition(&vec);
199 m_SliderA[SLIDER_SETTINGS_DIFFICULTY].GetPosition(&vec);
200 vec.y-=fSlidersMoveUp;
201 m_SliderA[SLIDER_SETTINGS_DIFFICULTY].SetPosition(&vec);
202 m_DifficultyText.GetPosition(&vec);
203 vec.y-=fSlidersMoveUp;
204 m_DifficultyText.SetPosition(&vec);
205
206 float fbgnWidth, fBgnHeight;
207 GetBounds(&fbgnWidth, &fBgnHeight);
208 fBgnHeight-=fRemoveHeight;
209 SetBounds(fbgnWidth, fBgnHeight);
210 }
211
212 // if we're not in the game, we need to use basescene 0
213 if(bNotInGame)
214 {
215 ui.SetTooltips( DEFAULT_XUI_MENU_USER, IDS_TOOLTIPS_SELECT,IDS_TOOLTIPS_BACK);
216 CXuiSceneBase::ShowBackground( DEFAULT_XUI_MENU_USER, TRUE );
217 }
218 else
219 {
220 ui.SetTooltips( m_iPad, IDS_TOOLTIPS_SELECT,IDS_TOOLTIPS_BACK);
221 CXuiSceneBase::ShowBackground( m_iPad, FALSE );
222 }
223
224 if(app.GetLocalPlayerCount()>1)
225 {
226 app.AdjustSplitscreenScene(m_hObj,&m_OriginalPosition,m_iPad);
227 CXuiSceneBase::ShowLogo( m_iPad, FALSE );
228 }
229 else
230 {
231 if(bNotInGame)
232 {
233 // can't show the logo for 480 mode
234 if(!RenderManager.IsHiDef())
235 {
236 CXuiSceneBase::ShowLogo( DEFAULT_XUI_MENU_USER, FALSE );
237 }
238 else
239 {
240 CXuiSceneBase::ShowLogo( DEFAULT_XUI_MENU_USER, TRUE );
241 }
242 }
243 else
244 {
245 // can't show the logo for 480 mode
246 if(!RenderManager.IsHiDef())
247 {
248 CXuiSceneBase::ShowLogo( m_iPad, FALSE );
249 }
250 else
251 {
252 CXuiSceneBase::ShowLogo( m_iPad, TRUE );
253 }
254 }
255 }
256
257 return S_OK;
258}
259
260HRESULT CScene_SettingsOptions::OnNotifyValueChanged( HXUIOBJ hObjSource, XUINotifyValueChanged* pNotifyValueChanged, BOOL& bHandled )
261{
262 WCHAR TempString[256];
263
264 if(hObjSource==m_SliderA[SLIDER_SETTINGS_AUTOSAVE].GetSlider() )
265 {
266 app.SetGameSettings(m_iPad,eGameSetting_Autosave,pNotifyValueChanged->nValue);
267 // Update the autosave timer
268 app.SetAutosaveTimerTime();
269
270 if(pNotifyValueChanged->nValue==0)
271 {
272 swprintf( (WCHAR *)TempString, 256, L"%ls", app.GetString( IDS_SLIDER_AUTOSAVE_OFF ));
273 }
274 else
275 {
276 app.SetAutosaveTimerTime();
277 swprintf( (WCHAR *)TempString, 256, L"%ls: %d %ls", app.GetString( IDS_SLIDER_AUTOSAVE ),pNotifyValueChanged->nValue*15, app.GetString( IDS_MINUTES ));
278 }
279 m_SliderA[SLIDER_SETTINGS_AUTOSAVE].SetText(TempString);
280 }
281 else if(hObjSource==m_SliderA[SLIDER_SETTINGS_DIFFICULTY].GetSlider() )
282 {
283 app.SetGameSettings(m_iPad,eGameSetting_Difficulty,pNotifyValueChanged->nValue);
284 swprintf( (WCHAR *)TempString, 256, L"%ls: %ls", app.GetString( IDS_SLIDER_DIFFICULTY ),app.GetString(m_iDifficultyTitleSettingA[pNotifyValueChanged->nValue]));
285 m_SliderA[SLIDER_SETTINGS_DIFFICULTY].SetText(TempString);
286
287 wstring wsText=app.GetString(m_iDifficultySettingA[pNotifyValueChanged->nValue]);
288 int size = 14;
289 if(!RenderManager.IsHiDef() && !RenderManager.IsWidescreen())
290 {
291 size = 12;
292 }
293 wchar_t startTags[64];
294 swprintf(startTags,64,L"<font color=\"#%08x\" size=%d>",app.GetHTMLColour(eHTMLColor_White),size);
295 wsText= startTags + wsText;
296 m_DifficultyText.SetText(wsText.c_str());
297 }
298 return S_OK;
299}
300
301
302HRESULT CScene_SettingsOptions::OnKeyDown(XUIMessageInput* pInputData, BOOL& rfHandled)
303{
304 ui.AnimateKeyPress(pInputData->UserIndex, pInputData->dwKeyCode);
305
306 HRESULT hr=S_OK;
307
308 // Explicitly handle B button presses
309 switch(pInputData->dwKeyCode)
310 {
311 case VK_PAD_B:
312 case VK_ESCAPE:
313 // if the profile data has been changed, then force a profile write
314 // It seems we're allowed to break the 5 minute rule if it's the result of a user action
315
316 // check the checkboxes
317 app.SetGameSettings(m_iPad,eGameSetting_ViewBob,m_ViewBob.IsChecked()?1:0);
318 app.SetGameSettings(m_iPad,eGameSetting_GamertagsVisible,m_InGameGamertags.IsChecked()?1:0);
319 app.SetGameSettings(m_iPad,eGameSetting_Hints,m_Hints.IsChecked()?1:0);
320 app.SetGameSettings(m_iPad,eGameSetting_Tooltips,m_Tooltips.IsChecked()?1:0);
321
322 // the mashup option will only be shown if some worlds have been previously hidden
323 if(m_bMashUpWorldsUnhideOption && m_MashUpWorlds.IsChecked())
324 {
325 // unhide all worlds
326 app.EnableMashupPackWorlds(m_iPad);
327 }
328
329 // 4J-PB - don't action changes here or we might write to the profile on backing out here and then get a change in the settings all, and write again on backing out there
330 //app.CheckGameSettingsChanged(true,pInputData->UserIndex);
331
332 app.NavigateBack(pInputData->UserIndex);
333 rfHandled = TRUE;
334 break;
335 }
336
337 return hr;
338}
339
340//----------------------------------------------------------------------------------
341// Handler for the button press message.
342//----------------------------------------------------------------------------------
343HRESULT CScene_SettingsOptions::OnNotifyPressEx(HXUIOBJ hObjPressed, XUINotifyPress* pNotifyPressData, BOOL& rfHandled)
344{
345 // This assumes all buttons can only be pressed with the A button
346 ui.AnimateKeyPress(pNotifyPressData->UserIndex, VK_PAD_A);
347
348 return S_OK;
349}
350
351HRESULT CScene_SettingsOptions::OnControlNavigate(XUIMessageControlNavigate *pControlNavigateData, BOOL& bHandled)
352{
353 // added so we can skip greyed out items
354 pControlNavigateData->hObjDest=XuiControlGetNavigation(pControlNavigateData->hObjSource,pControlNavigateData->nControlNavigate,TRUE,TRUE);
355
356 if(pControlNavigateData->hObjDest!=NULL)
357 {
358 bHandled=TRUE;
359 }
360
361 return S_OK;
362}
363
364HRESULT CScene_SettingsOptions::OnTransitionStart( XUIMessageTransition *pTransition, BOOL& bHandled )
365{
366 HRESULT hr;
367 WCHAR TempString[256];
368
369 if(pTransition->dwTransAction==XUI_TRANSITION_ACTION_DESTROY ) return S_OK;
370
371 if(pTransition->dwTransType == XUI_TRANSITION_TO || pTransition->dwTransType == XUI_TRANSITION_BACKTO)
372 {
373
374 // 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)
375
376 float fMaxTextLen=0.0f;
377 float fMaxLen=0.0f;
378
379
380 // sliders first
381 HXUIOBJ hSlider,hVisual,hText,hCheckboxText;
382 XUIRect xuiRect;
383 float fWidth,fHeight;//,fTemp;
384 D3DXVECTOR3 vec,vSlider,vecCheckboxText,vecCheckbox;
385
386 // don't display values on these - we handle that
387 for(int i=0;i<OPTIONS_SLIDER_SETTINGS_MAX;i++)
388 {
389 m_SliderA[i].SetValueDisplay(FALSE);
390 }
391
392
393 hr=XuiElementGetChildById(m_SliderA[SLIDER_SETTINGS_AUTOSAVE].m_hObj,L"XuiSlider",&hSlider);
394 hr=XuiControlGetVisual(hSlider,&hVisual);
395 hr=XuiElementGetChildById(hVisual,L"text_Label",&hText);
396 hr=XuiControlGetVisual(m_InGameGamertags.m_hObj,&hVisual);
397 hr=XuiElementGetChildById(hVisual,L"text_Button",&hCheckboxText);
398 hr=XuiElementGetPosition(hCheckboxText,&vecCheckboxText);
399 hr=XuiElementGetPosition(m_InGameGamertags.m_hObj,&vecCheckbox);
400 hr=XuiElementGetPosition(m_SliderA[SLIDER_SETTINGS_AUTOSAVE].m_hObj,&vSlider);
401
402
403 for(int i=0;i<OPTIONS_SLIDER_SETTINGS_MAX;i++)
404 {
405 switch(i)
406 {
407 case SLIDER_SETTINGS_AUTOSAVE: // 3 digits
408 swprintf( (WCHAR *)TempString, 256, L"%ls: %d %ls", app.GetString( IDS_SLIDER_AUTOSAVE ),999, app.GetString( IDS_MINUTES ));
409 break;
410 case SLIDER_SETTINGS_DIFFICULTY: // 3 digits
411 swprintf( (WCHAR *)TempString, 256, L"%ls: %ls", app.GetString( IDS_SLIDER_DIFFICULTY ),app.GetString(IDS_DIFFICULTY_TITLE_PEACEFUL));
412 break;
413 }
414
415 //LPCWSTR temp=m_SliderA[i].GetText();
416 hr=XuiTextPresenterMeasureText(hText, TempString, &xuiRect);
417 // 4J-PB - the text measuring doesn't seem to be long enough - add a fudge
418 xuiRect.right+=25.0f;
419 m_SliderA[i].GetBounds(&fWidth,&fHeight);
420 if(xuiRect.right>fMaxTextLen) fMaxTextLen=xuiRect.right;
421 if(fWidth>fMaxLen) fMaxLen=fWidth;
422 }
423
424 // now the VisibleOnMaps checkbox - let's just use the visual we already have...
425 hr=XuiTextPresenterMeasureText(hCheckboxText, m_InGameGamertags.GetText(), &xuiRect);
426 m_InGameGamertags.GetBounds(&fWidth,&fHeight);
427 // need to add the size of the checkbox graphic
428 if((xuiRect.right+vecCheckbox.x+vecCheckboxText.x)>fMaxTextLen) fMaxTextLen=xuiRect.right+vecCheckbox.x+vecCheckboxText.x;
429 if(fWidth>fMaxLen) fMaxLen=fWidth;
430
431 // now the m_Hints checkbox - let's just use the visual we already have...
432 hr=XuiTextPresenterMeasureText(hCheckboxText, m_Hints.GetText(), &xuiRect);
433 m_Hints.GetBounds(&fWidth,&fHeight);
434 // need to add the size of the checkbox graphic
435 if((xuiRect.right+vecCheckbox.x+vecCheckboxText.x)>fMaxTextLen) fMaxTextLen=xuiRect.right+vecCheckbox.x+vecCheckboxText.x;
436 if(fWidth>fMaxLen) fMaxLen=fWidth;
437
438 // now the m_Tooltips checkbox - let's just use the visual we already have...
439 hr=XuiTextPresenterMeasureText(hCheckboxText, m_Tooltips.GetText(), &xuiRect);
440 m_Tooltips.GetBounds(&fWidth,&fHeight);
441 // need to add the size of the checkbox graphic
442 if((xuiRect.right+vecCheckbox.x+vecCheckboxText.x)>fMaxTextLen) fMaxTextLen=xuiRect.right+vecCheckbox.x+vecCheckboxText.x;
443 if(fWidth>fMaxLen) fMaxLen=fWidth;
444
445 if(fMaxLen<fMaxTextLen)
446 {
447 float fWidth;
448 XuiElementGetPosition(m_hObj,&vec);
449 XuiElementGetBounds(m_hObj,&fWidth,&fHeight);
450
451 // need to centre the scene now the size has changed
452 if((!RenderManager.IsHiDef() && !RenderManager.IsWidescreen()) || app.GetLocalPlayerCount()>1)
453 {
454 // scene width needs to be more that the text width on buttons
455 fWidth=vSlider.x;
456 vec.x=floorf((640.0f-(fMaxTextLen+fWidth))/2.0f);
457 XuiElementSetPosition(m_hObj,&vec);
458 XuiElementSetBounds(m_hObj,fMaxTextLen+(fWidth*2.0f),fHeight);
459 }
460 else
461 {
462 fWidth=vSlider.x;
463 vec.x=floorf((1280.0f-(fMaxTextLen+fWidth))/2.0f);
464 XuiElementSetPosition(m_hObj,&vec);
465 XuiElementSetBounds(m_hObj,fMaxTextLen+(fWidth*2.0f),fHeight);
466 }
467 // Need to refresh the scenes visual since the object size has now changed
468 XuiControlAttachVisual(m_hObj);
469
470 bool bNotInGame=(Minecraft::GetInstance()->level==NULL);
471
472 if(bNotInGame)
473 {
474 float fDiffTextW;
475 // reposition the difficulty text - this is positioned from the scene, so will be a negative value
476 m_DifficultyText.GetPosition(&vec);
477 m_DifficultyText.GetBounds(&fDiffTextW,&fHeight);
478 vec.x=floor((fMaxTextLen+(fWidth*2.0f)-fDiffTextW)/2.0f);
479 m_DifficultyText.SetPosition(&vec);
480 }
481
482 // centre is vec.x+(fWidth/2)
483 //for(int i=0;i<OPTIONS_SLIDER_SETTINGS_MAX;i++)
484 //{
485 // hr=XuiElementGetChildById(m_SliderA[i].m_hObj,L"XuiSlider",&hSlider);
486 // XuiElementGetPosition(hSlider,&vec);
487 // XuiElementGetBounds(hSlider,&fTemp,&fHeight);
488 // XuiElementSetBounds(hSlider,fMaxTextLen,fHeight);
489 //}
490
491 // the checkboxes are left aligned - put them at the same position as the sliders
492 m_ViewBob.SetBounds(fMaxTextLen,fHeight);
493 m_InGameGamertags.SetBounds(fMaxTextLen,fHeight);
494 m_Hints.SetBounds(fMaxTextLen,fHeight);
495 m_Tooltips.SetBounds(fMaxTextLen,fHeight);
496
497 }
498 }
499
500 return S_OK;
501}
502
503
504HRESULT CScene_SettingsOptions::OnCustomMessage_Splitscreenplayer(bool bJoining, BOOL& bHandled)
505{
506 bHandled=true;
507 return app.AdjustSplitscreenScene_PlayerChanged(m_hObj,&m_OriginalPosition,m_iPad,bJoining);
508}