#include "stdafx.h" #include "UI.h" #include "UIScene_SettingsOptionsMenu.h" int UIScene_SettingsOptionsMenu::m_iDifficultyTitleSettingA[4]= { IDS_DIFFICULTY_TITLE_PEACEFUL, IDS_DIFFICULTY_TITLE_EASY, IDS_DIFFICULTY_TITLE_NORMAL, IDS_DIFFICULTY_TITLE_HARD }; UIScene_SettingsOptionsMenu::UIScene_SettingsOptionsMenu(int iPad, void *initData, UILayer *parentLayer) : UIScene(iPad, parentLayer) { // m_bNavigateToLanguageSelector = false; // Setup all the Iggy references we need for this scene initialiseMovie(); m_bNotInGame = (Minecraft::GetInstance()->level==nullptr); m_bNeedsMultiListPopulate = true; m_bNavigateToLanguageSelector = false; m_bInitialPopulateDone = false; m_bPendingSliderUpdate = false; m_iPendingSliderId = 0; m_iPendingSliderValue = 0; doHorizontalResizeCheck(); if(app.GetLocalPlayerCount()>1) { #if TO_BE_IMPLEMENTED app.AdjustSplitscreenScene(m_hObj,&m_OriginalPosition,m_iPad); #endif } } UIScene_SettingsOptionsMenu::~UIScene_SettingsOptionsMenu() { } wstring UIScene_SettingsOptionsMenu::getMoviePath() { if(app.GetLocalPlayerCount() > 1) { return L"MultilistMenuSplit"; } else { return L"MultilistMenu"; } } void UIScene_SettingsOptionsMenu::tick() { if(m_bNeedsMultiListPopulate) { m_bNeedsMultiListPopulate = false; m_multiList.setupControl(this, m_rootPath, "MultiList"); m_multiList.init(eControl_MultiList); m_multiList.AddNewCheckbox(app.GetString(IDS_CHECKBOX_VERTICAL_SPLIT_SCREEN), eControl_VerticalSplitscreen, (app.GetGameSettings(m_iPad,eGameSetting_SplitScreenVertical)!=0)); m_multiList.AddNewCheckbox(app.GetString(IDS_VIEW_BOBBING), eControl_ViewBob, (app.GetGameSettings(m_iPad,eGameSetting_ViewBob)!=0)); m_multiList.AddNewCheckbox(app.GetString(IDS_HINTS), eControl_Hints, (app.GetGameSettings(m_iPad,eGameSetting_Hints)!=0)); m_multiList.AddNewCheckbox(app.GetString(IDS_CHECKBOX_DEATH_MESSAGES), eControl_DeathMessages, (app.GetGameSettings(m_iPad,eGameSetting_DeathMessages)!=0)); if(m_bNotInGame) { m_multiList.AddNewButton(app.GetString(IDS_LANGUAGE_SELECTOR), eControl_Languages); } WCHAR TempString[256]; int autosaveVal = app.GetGameSettings(m_iPad,eGameSetting_Autosave); if(autosaveVal == 0) swprintf(TempString, 256, L"%ls", app.GetString(IDS_SLIDER_AUTOSAVE_OFF)); else swprintf(TempString, 256, L"%ls: %d %ls", app.GetString(IDS_SLIDER_AUTOSAVE), autosaveVal*15, app.GetString(IDS_MINUTES)); m_multiList.AddNewSlider(TempString, eControl_Autosave, 0, 8, 1, autosaveVal); swprintf(TempString, 256, L"%ls: %d%%", app.GetString(IDS_SLIDER_SENSITIVITY_INGAME), app.GetGameSettings(m_iPad,eGameSetting_Sensitivity_InGame)); m_multiList.AddNewSlider(TempString, eControl_Sensitivity_InGame, 0, 200, 1, app.GetGameSettings(m_iPad,eGameSetting_Sensitivity_InGame)); int diffVal = app.GetGameSettings(m_iPad,eGameSetting_Difficulty); swprintf(TempString, 256, L"%ls: %ls", app.GetString(IDS_SLIDER_DIFFICULTY), app.GetString(m_iDifficultyTitleSettingA[diffVal])); m_multiList.AddNewSlider(TempString, eControl_Difficulty, 0, 3, 1, diffVal); IggyName funcDoVert = registerFastName(L"DoVerticalResizeCheck"); IggyName funcHideDesc = registerFastName(L"HideDescription"); IggyDataValue result; IggyPlayerCallMethodRS(getMovie(), &result, m_rootPath, funcDoVert, 0, nullptr); doHorizontalResizeCheck(); IggyPlayerCallMethodRS(getMovie(), &result, m_rootPath, funcHideDesc, 0, nullptr); m_multiList.HighlightItem(eControl_ViewBob); m_multiList.HighlightItem(eControl_VerticalSplitscreen); } if(m_bNavigateToLanguageSelector) { m_bNavigateToLanguageSelector = false; setGameSettings(); ui.NavigateToScene(m_iPad, eUIScene_LanguageSelector); } if(m_bPendingSliderUpdate) { m_bPendingSliderUpdate = false; m_multiList.SetSliderValue(m_iPendingSliderId, m_iPendingSliderValue); WCHAR TempString[256]; switch(m_iPendingSliderId) { case eControl_Autosave: app.SetGameSettings(m_iPad, eGameSetting_Autosave, m_iPendingSliderValue); app.SetAutosaveTimerTime(); if(m_iPendingSliderValue == 0) swprintf(TempString, 256, L"%ls", app.GetString(IDS_SLIDER_AUTOSAVE_OFF)); else swprintf(TempString, 256, L"%ls: %d %ls", app.GetString(IDS_SLIDER_AUTOSAVE), m_iPendingSliderValue*15, app.GetString(IDS_MINUTES)); m_multiList.SetSliderLabel(eControl_Autosave, TempString); break; case eControl_Sensitivity_InGame: app.SetGameSettings(m_iPad, eGameSetting_Sensitivity_InGame, m_iPendingSliderValue); swprintf(TempString, 256, L"%ls: %d%%", app.GetString(IDS_SLIDER_SENSITIVITY_INGAME), m_iPendingSliderValue); m_multiList.SetSliderLabel(eControl_Sensitivity_InGame, TempString); break; case eControl_Difficulty: app.SetGameSettings(m_iPad, eGameSetting_Difficulty, m_iPendingSliderValue); swprintf(TempString, 256, L"%ls: %ls", app.GetString(IDS_SLIDER_DIFFICULTY), app.GetString(m_iDifficultyTitleSettingA[m_iPendingSliderValue])); m_multiList.SetSliderLabel(eControl_Difficulty, TempString); break; } } UIScene::tick(); m_bInitialPopulateDone = true; } void UIScene_SettingsOptionsMenu::updateTooltips() { ui.SetTooltips( m_iPad, IDS_TOOLTIPS_SELECT,IDS_TOOLTIPS_BACK); } void UIScene_SettingsOptionsMenu::updateComponents() { bool bNotInGame=(Minecraft::GetInstance()->level==nullptr); if(bNotInGame) { m_parentLayer->showComponent(m_iPad,eUIComponent_Panorama,true); m_parentLayer->showComponent(m_iPad,eUIComponent_Logo,true); } else { m_parentLayer->showComponent(m_iPad,eUIComponent_Panorama,false); if( app.GetLocalPlayerCount() == 1 ) m_parentLayer->showComponent(m_iPad,eUIComponent_Logo,true); else m_parentLayer->showComponent(m_iPad,eUIComponent_Logo,false); } } void UIScene_SettingsOptionsMenu::handleInput(int iPad, int key, bool repeat, bool pressed, bool released, bool &handled) { ui.AnimateKeyPress(m_iPad, key, repeat, pressed, released); switch(key) { case ACTION_MENU_CANCEL: if(pressed) { setGameSettings(); navigateBack(); } break; case ACTION_MENU_OK: #ifdef __ORBIS__ case ACTION_MENU_TOUCHPAD_PRESS: #endif sendInputToMovie(key, repeat, pressed, released); break; case ACTION_MENU_UP: case ACTION_MENU_DOWN: case ACTION_MENU_LEFT: case ACTION_MENU_RIGHT: sendInputToMovie(key, repeat, pressed, released); break; } } void UIScene_SettingsOptionsMenu::handlePress(F64 controlId, F64 childId) { //CD - Added for audio ui.PlayUISFX(eSFX_Press); switch(static_cast(childId)) { case eControl_Languages: m_bNavigateToLanguageSelector = true; break; } } void UIScene_SettingsOptionsMenu::handleCheckboxToggled(F64 controlId, bool selected) { if(m_bInitialPopulateDone) ui.PlayUISFX(eSFX_Press); } void UIScene_SettingsOptionsMenu::handleSliderMove(F64 sliderId, F64 currentValue) { int sliderIdInt = static_cast(sliderId); int value = static_cast(currentValue); ui.PlayUISFX(eSFX_Scroll); switch(sliderIdInt) { case eControl_Autosave: case eControl_Sensitivity_InGame: case eControl_Difficulty: m_bPendingSliderUpdate = true; m_iPendingSliderId = sliderIdInt; m_iPendingSliderValue = value; break; } } void UIScene_SettingsOptionsMenu::setGameSettings() { bool bSplitChanged = (app.GetGameSettings(m_iPad,eGameSetting_SplitScreenVertical)!=(m_multiList.GetCheckboxValue(eControl_VerticalSplitscreen)?1:0)); app.SetGameSettings(m_iPad,eGameSetting_SplitScreenVertical,m_multiList.GetCheckboxValue(eControl_VerticalSplitscreen)?1:0); app.SetGameSettings(m_iPad,eGameSetting_ViewBob,m_multiList.GetCheckboxValue(eControl_ViewBob)?1:0); app.SetGameSettings(m_iPad,eGameSetting_Hints,m_multiList.GetCheckboxValue(eControl_Hints)?1:0); app.SetGameSettings(m_iPad,eGameSetting_DeathMessages,m_multiList.GetCheckboxValue(eControl_DeathMessages)?1:0); app.SetGameSettings(m_iPad,eGameSetting_Autosave,m_multiList.GetSliderValue(eControl_Autosave)); app.SetGameSettings(m_iPad,eGameSetting_Sensitivity_InGame,m_multiList.GetSliderValue(eControl_Sensitivity_InGame)); app.SetGameSettings(m_iPad,eGameSetting_Difficulty,m_multiList.GetSliderValue(eControl_Difficulty)); if(bSplitChanged && app.GetLocalPlayerCount()==2) { ui.CloseAllPlayersScenes(); } } void UIScene_SettingsOptionsMenu::handleGainFocus(bool navBack) { if(navBack) { m_bNeedsMultiListPopulate = true; m_bInitialPopulateDone = false; } } // handled = true; // if the splitscreen vertical/horizontal has changed, need to update the scenes // 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 //app.CheckGameSettingsChanged(true,pInputData->UserIndex);