* Added option to disable screen scroll transitions, one of my Android test devices has the slowest glread in the world, it's like 1 full second to walk to the next screen because of it. This might make dmods that use timing (Myster island camera sequence for example) easier though, not sure. * Fixed issue where behavior of two load_sequence commands in a row on the same sequence differed from 1.08 (in 1.08, max frame is set to the second one as long as the first one wasn't actually loaded yet. key now shows up in TGKA) * Fixed regression where offsets in Mayhem were incorrect on the hand mouse pointer * Upped max frames per seq to 100 instead of 50, fixes Echoes of the Ancient. I should probably make it dynamic but changing one const number is much easier! * Now gives a clear warning in the log.txt if a seq tries to go beyond what it can handle and will truncate it (better than breaking the whole sequence as it did before) * Added support for a weird bmp header type, fixes incorrect palette issue in the dmod The Orb of Darkness * Fixed life/exp/health to correctly interpolate between values like the original dink, huge thanks to Dan's detailed bug report on this, he even made a mod which made testing the fix a breeze! git-svn-id: svn://rtsoft.com/rtsvn/projects/RTDink@1520 353e56fe-9613-0410-8469-b96ad8e6f29c
652 lines
20 KiB
C++
652 lines
20 KiB
C++
#include "PlatformPrecomp.h"
|
||
#include "OptionsMenu.h"
|
||
#include "Entity/EntityUtils.h"
|
||
#include "App.h"
|
||
#include "../dink/Dink.h"
|
||
#include "Entity/SliderComponent.h"
|
||
#include "MainMenu.h"
|
||
#include "PauseMenu.h"
|
||
#include "GameMenu.h"
|
||
#include "Gamepad/GamepadManager.h"
|
||
#include "PopUpMenu.h"
|
||
|
||
#ifdef PLATFORM_IOS
|
||
#include "Gamepad/GamepadProvider60Beat.h"
|
||
#endif
|
||
|
||
#ifdef WINAPI
|
||
extern bool g_bUseBorderlessFullscreenOnWindows;
|
||
extern bool g_bIsFullScreen;
|
||
#endif
|
||
#include "Gamepad/GamepadProvideriCade.h"
|
||
|
||
void UpdateOptionsGUI();
|
||
|
||
void OptionsMenuOnSelect(VariantList *pVList) //0=vec2 point of click, 1=entity sent from
|
||
{
|
||
Entity *pEntClicked = pVList->m_variant[1].GetEntity();
|
||
Entity *pMenu = pEntClicked->GetParent();
|
||
|
||
LogMsg("Clicked %s entity at %s", pEntClicked->GetName().c_str(),pVList->m_variant[1].Print().c_str());
|
||
if (pEntClicked->GetName() == "music_0")
|
||
{
|
||
GetApp()->GetShared()->GetVar("musicDisabled")->Set(uint32(1));
|
||
GetAudioManager()->SetMusicEnabled(0);
|
||
}
|
||
|
||
if (pEntClicked->GetName() == "music_1")
|
||
{
|
||
GetApp()->GetShared()->GetVar("musicDisabled")->Set(uint32(0));
|
||
GetAudioManager()->SetMusicEnabled(1);
|
||
}
|
||
|
||
if (pEntClicked->GetName() == "toggle_fullscreen")
|
||
{
|
||
GetBaseApp()->OnFullscreenToggleRequest();
|
||
|
||
//if you wanted to set a specific size instead:
|
||
//GetBaseApp()->SetVideoMode(200, 200, false);
|
||
}
|
||
if (pEntClicked->GetName() == "vid_small")
|
||
{
|
||
GetBaseApp()->SetVideoMode(640, 480, false);
|
||
}
|
||
|
||
if (pEntClicked->GetName() == "vid_med")
|
||
{
|
||
GetBaseApp()->SetVideoMode(1024, 768, false);
|
||
}
|
||
|
||
if (pEntClicked->GetName() == "vid_big")
|
||
{
|
||
GetBaseApp()->SetVideoMode(1280, 960, false);
|
||
}
|
||
|
||
if (pEntClicked->GetName() == "vid_hd")
|
||
{
|
||
GetBaseApp()->SetVideoMode(1920, 1080, false);
|
||
}
|
||
|
||
|
||
if (pEntClicked->GetName() == "controls_0")
|
||
{
|
||
GetApp()->GetShared()->GetVar("controlStyle")->Set(uint32(CONTROLS_JOYPAD));
|
||
}
|
||
|
||
if (pEntClicked->GetName() == "controls_1")
|
||
{
|
||
GetApp()->GetShared()->GetVar("controlStyle")->Set(uint32(CONTROLS_DRAG_ANYWHERE));
|
||
}
|
||
|
||
if (pEntClicked->GetName() == "controls_2")
|
||
{
|
||
GetApp()->GetShared()->GetVar("controlStyle")->Set(uint32(CONTROLS_FLING));
|
||
}
|
||
|
||
|
||
if (pEntClicked->GetName() == "buttons_0")
|
||
{
|
||
GetApp()->GetShared()->GetVar("buttons")->Set(uint32(0));
|
||
}
|
||
|
||
if (pEntClicked->GetName() == "buttons_1")
|
||
{
|
||
GetApp()->GetShared()->GetVar("buttons")->Set(uint32(1));
|
||
}
|
||
|
||
if (pEntClicked->GetName() == "fps_limit_0")
|
||
{
|
||
GetApp()->GetShared()->GetVar("fpsLimit")->Set(uint32(VIDEO_FPS_LIMIT_ON));
|
||
GetApp()->UpdateVideoSettings();
|
||
}
|
||
if (pEntClicked->GetName() == "fps_limit_1")
|
||
{
|
||
GetApp()->GetShared()->GetVar("fpsLimit")->Set(uint32(VIDEO_FPS_LIMIT_OFF));
|
||
GetApp()->UpdateVideoSettings();
|
||
}
|
||
|
||
|
||
if (pEntClicked->GetName() == "smoothing_0")
|
||
{
|
||
GetApp()->GetShared()->GetVar("smoothing")->Set(uint32(1));
|
||
GetApp()->UpdateVideoSettings();
|
||
DinkUnloadUnusedGraphicsByUsageTime(0); //unload anything not used in the last second
|
||
DinkReInitSurfacesAfterVideoChange();
|
||
DinkOnForeground();
|
||
}
|
||
|
||
if (pEntClicked->GetName() == "smoothing_1")
|
||
{
|
||
GetApp()->GetShared()->GetVar("smoothing")->Set(uint32(0));
|
||
GetApp()->UpdateVideoSettings();
|
||
DinkUnloadUnusedGraphicsByUsageTime(0); //unload anything not used in the last second
|
||
DinkReInitSurfacesAfterVideoChange();
|
||
DinkOnForeground();
|
||
|
||
}
|
||
|
||
if (pEntClicked->GetName() == "check_stretch")
|
||
{
|
||
bool bChecked = IsCheckboxChecked(pEntClicked);
|
||
GetApp()->GetVar("check_stretch")->Set(uint32(bChecked));
|
||
GetApp()->UpdateVideoSettings();
|
||
DinkUnloadUnusedGraphicsByUsageTime(0); //unload anything not used in the last second
|
||
DinkReInitSurfacesAfterVideoChange();
|
||
DinkOnForeground();
|
||
}
|
||
|
||
if (pEntClicked->GetName() == "check_checkboard")
|
||
{
|
||
bool bChecked = IsCheckboxChecked(pEntClicked);
|
||
GetApp()->GetVar("checkerboard_fix")->Set(uint32(bChecked));
|
||
GetApp()->UpdateVideoSettings();
|
||
DinkUnloadUnusedGraphicsByUsageTime(0); //unload anything not used in the last second
|
||
DinkReInitSurfacesAfterVideoChange();
|
||
DinkOnForeground();
|
||
}
|
||
|
||
//if (GetEmulatedPlatformID() == PLATFORM_ID_ANDROID)
|
||
{
|
||
if (pEntClicked->GetName() == "allow_glread")
|
||
{
|
||
bool bChecked = IsCheckboxChecked(pEntClicked);
|
||
GetApp()->GetVar("disable_glread")->Set(uint32(!bChecked));
|
||
}
|
||
}
|
||
|
||
|
||
|
||
#ifdef WINAPI
|
||
if (pEntClicked->GetName() == "check_borderless")
|
||
{
|
||
bool bChecked = IsCheckboxChecked(pEntClicked);
|
||
GetApp()->GetVar("borderless_fullscreen")->Set(uint32(bChecked));
|
||
|
||
if (g_bIsFullScreen)
|
||
{
|
||
if (!g_bUseBorderlessFullscreenOnWindows)
|
||
{
|
||
g_bUseBorderlessFullscreenOnWindows = bChecked;
|
||
ChangeDisplaySettings(NULL, 0);
|
||
//GetBaseApp()->SetVideoMode(640, 480, false);
|
||
g_bIsFullScreen = false;
|
||
GetBaseApp()->OnFullscreenToggleRequest();
|
||
}
|
||
else
|
||
{
|
||
//we're currently borderless.. how to we remove that?
|
||
g_bUseBorderlessFullscreenOnWindows = bChecked;
|
||
GetBaseApp()->SetVideoMode(640, 480, true);
|
||
|
||
}
|
||
|
||
}
|
||
else
|
||
{
|
||
|
||
}
|
||
|
||
|
||
g_bUseBorderlessFullscreenOnWindows = bChecked;
|
||
|
||
/*
|
||
GetApp()->UpdateVideoSettings();
|
||
DinkUnloadUnusedGraphicsByUsageTime(0); //unload anything not used in the last second
|
||
DinkReInitSurfacesAfterVideoChange();
|
||
DinkOnForeground();
|
||
*/
|
||
}
|
||
|
||
#endif
|
||
|
||
if (pEntClicked->GetName() == "sbeat_ad")
|
||
{
|
||
string url = "http://www.60beat.com/?Click=326";
|
||
PopUpCreate(pEntClicked->GetParent()->GetParent()->GetParent(), "Would you like to visit 60beat's webpage and learn more about their gamepad?", url,
|
||
"cancel", "`wCancel", "url", "`wLaunch", true);
|
||
return;
|
||
}
|
||
|
||
if (pEntClicked->GetName() == "check_icade")
|
||
{
|
||
bool bChecked = IsCheckboxChecked(pEntClicked);
|
||
GetApp()->GetVar("check_icade")->Set(uint32(bChecked));
|
||
|
||
GetGamepadManager()->RemoveProviderByName("iCade");
|
||
GetApp()->RemoveAndroidKeyboardKeys();
|
||
|
||
if (bChecked)
|
||
{
|
||
GetApp()->AddIcadeProvider();
|
||
GetApp()->RemoveAndAttachAllAvailableGamepads();
|
||
} else
|
||
{
|
||
GetApp()->AddDroidKeyboardKeys();
|
||
//GetBaseApp()->SetAllowScreenDimming(true);
|
||
}
|
||
}
|
||
|
||
#ifdef PLATFORM_IOS
|
||
|
||
/*
|
||
if (pEntClicked->GetName() == "check_60beat")
|
||
{
|
||
bool bChecked = IsCheckboxChecked(pEntClicked);
|
||
GetApp()->GetVar("check_60beat")->Set(uint32(bChecked));
|
||
|
||
GetGamepadManager()->RemoveProviderByName("60Beat");
|
||
|
||
if (bChecked)
|
||
{
|
||
GetGamepadManager()->AddProvider(new GamepadProvider60Beat);
|
||
GetBaseApp()->SetAllowScreenDimming(false);
|
||
GetApp()->RemoveAndAttachAllAvailableGamepads();
|
||
} else
|
||
{
|
||
//GetBaseApp()->SetAllowScreenDimming(true);
|
||
}
|
||
}
|
||
*/
|
||
#endif
|
||
|
||
if (pEntClicked->GetName() == "Back")
|
||
{
|
||
RemoveFocusIfNeeded(pMenu);
|
||
ZoomToPositionEntity(pMenu, CL_Vec2f(GetScreenSizeXf(),0), 500); //slide up
|
||
KillEntity(pMenu, 500);
|
||
AddFocusIfNeeded(pMenu->GetParent(), true, 500);
|
||
}
|
||
|
||
if (pEntClicked->GetName() == "sound_1")
|
||
{
|
||
GetApp()->GetShared()->GetVar("sound")->Set(uint32(1));
|
||
GetAudioManager()->SetSoundEnabled(true);
|
||
|
||
//restart music if applicable
|
||
bool bMusicDisabled = GetApp()->GetShared()->GetVar("musicDisabled")->GetUINT32() != 0;
|
||
|
||
if (GetDinkGameState() == DINK_GAME_STATE_PLAYING)
|
||
{
|
||
} else
|
||
{
|
||
PlayMenuMusic();
|
||
}
|
||
|
||
UpdateOptionsGUI();
|
||
|
||
return;
|
||
}
|
||
if (pEntClicked->GetName() == "sound_0")
|
||
{
|
||
GetApp()->GetShared()->GetVar("sound")->Set(uint32(0));
|
||
GetAudioManager()->SetSoundEnabled(false);
|
||
GetAudioManager()->StopMusic();
|
||
UpdateOptionsGUI();
|
||
return;
|
||
}
|
||
|
||
if (pEntClicked->GetName() == "FPS")
|
||
{
|
||
GetBaseApp()->SetFPSVisible(!GetBaseApp()->GetFPSVisible());
|
||
return;
|
||
}
|
||
|
||
//GetEntityRoot()->PrintTreeAsText(); //useful for debugging
|
||
}
|
||
|
||
|
||
void OnProgressChangedMusic(Variant *pDataObject)
|
||
{
|
||
float musicVol = pDataObject->GetFloat();
|
||
GetApp()->GetVar("music_vol")->Set(musicVol);
|
||
//LogMsg("Music vol changed to %.2f", musicVol);
|
||
GetAudioManager()->SetMusicVol(musicVol);
|
||
}
|
||
|
||
void OnProgressChangedGUI(Variant *pDataObject)
|
||
{
|
||
float guiTrans = pDataObject->GetFloat();
|
||
GetApp()->GetVar("gui_transparency")->Set(guiTrans);
|
||
UpdateOptionsGUI();
|
||
}
|
||
|
||
|
||
void UpdateOptionsGUI()
|
||
{
|
||
float alpha = GetApp()->GetVar("gui_transparency")->GetFloat();
|
||
|
||
Entity *inventoryIcon = GetEntityRoot()->GetEntityByName("options_inventory");
|
||
|
||
if (inventoryIcon)
|
||
{
|
||
inventoryIcon->GetVar("alpha")->Set( alpha);
|
||
}
|
||
|
||
bool bSound = GetApp()->GetShared()->GetVar("sound")->GetUINT32() != 0;
|
||
|
||
if (bSound)
|
||
{
|
||
//enable the music slider
|
||
}
|
||
|
||
}
|
||
|
||
void OptionsMenuAddScrollContent(Entity *pParent)
|
||
{
|
||
pParent = pParent->GetEntityByName("scroll_child");
|
||
pParent->RemoveAllEntities();
|
||
|
||
Entity *pBG = pParent;
|
||
|
||
Entity *pEnt;
|
||
float y = iPhoneMapY(70);
|
||
float startX = iPhoneMapX(28);
|
||
float offsetX = iPhoneMapX(0);
|
||
float spacerX = iPhoneMapX(46);
|
||
float spacerY = iPhoneMapY(27.5);
|
||
float columnX = 140;
|
||
|
||
eFont fontID = FONT_SMALL;
|
||
|
||
//title at the top
|
||
pEnt = CreateTextLabelEntity(pBG, "title", GetScreenSizeXf()/2, iPhoneMapY(40), "Options");
|
||
SetupTextEntity(pEnt, FONT_LARGE);
|
||
SetAlignmentEntity(pEnt, ALIGNMENT_CENTER);
|
||
|
||
if (IsDesktop())
|
||
{
|
||
pEnt = CreateTextButtonEntity(pBG, "toggle_fullscreen", startX, y, "Toggle fullscreen (or Alt-Enter)");
|
||
pEnt->GetShared()->GetFunction("OnButtonSelected")->sig_function.connect(&OptionsMenuOnSelect);
|
||
y += spacerY;
|
||
|
||
pEnt = CreateTextButtonEntity(pBG, "vid_small", startX, y, "640X480");
|
||
pEnt->GetShared()->GetFunction("OnButtonSelected")->sig_function.connect(&OptionsMenuOnSelect);
|
||
|
||
pEnt = CreateTextButtonEntity(pBG, "vid_med", startX+350, y, "1024X768");
|
||
pEnt->GetShared()->GetFunction("OnButtonSelected")->sig_function.connect(&OptionsMenuOnSelect);
|
||
|
||
pEnt = CreateTextButtonEntity(pBG, "vid_big", startX+700, y, "1280X960");
|
||
pEnt->GetShared()->GetFunction("OnButtonSelected")->sig_function.connect(&OptionsMenuOnSelect);
|
||
y += spacerY;
|
||
pEnt = CreateTextButtonEntity(pBG, "vid_hd", startX, y, "1920X1080");
|
||
pEnt->GetShared()->GetFunction("OnButtonSelected")->sig_function.connect(&OptionsMenuOnSelect);
|
||
y += spacerY;
|
||
|
||
|
||
|
||
}
|
||
|
||
//control method
|
||
|
||
if (GetApp()->GetUsingTouchScreen())
|
||
{
|
||
|
||
pEnt = CreateTextLabelEntity(pBG, "", startX, y, "Controls:");
|
||
SetupTextEntity(pEnt,fontID);
|
||
offsetX = iPhoneMapX(columnX);
|
||
pEnt = CreateTextButtonEntity(pBG, "controls_0", offsetX, y, "Virtual Joypad", false);
|
||
SetupTextEntity(pEnt,fontID);
|
||
pEnt->GetFunction("OnButtonSelected")->sig_function.connect(&OptionsMenuOnSelect);
|
||
|
||
float smallSpacerX = spacerX;
|
||
if (IsIPADSize)
|
||
{
|
||
smallSpacerX = 34;
|
||
}
|
||
offsetX += pEnt->GetVar("size2d")->GetVector2().x + smallSpacerX;
|
||
|
||
pEnt = CreateTextButtonEntity(pBG, "controls_1", offsetX, y, "Drag Anywhere", false);
|
||
SetupTextEntity(pEnt,fontID);
|
||
pEnt->GetFunction("OnButtonSelected")->sig_function.connect(OptionsMenuOnSelect);
|
||
offsetX += pEnt->GetVar("size2d")->GetVector2().x + smallSpacerX;
|
||
|
||
if (IsIPADSize)
|
||
{
|
||
pEnt = CreateTextButtonEntity(pBG, "controls_2", offsetX, y, "Fling Mode", false);
|
||
SetupTextEntity(pEnt,fontID);
|
||
pEnt->GetFunction("OnButtonSelected")->sig_function.connect(OptionsMenuOnSelect);
|
||
offsetX += pEnt->GetVar("size2d")->GetVector2().x + smallSpacerX;
|
||
}
|
||
|
||
uint32 controlsID = GetApp()->GetVar("controlStyle")->GetUINT32();
|
||
SetupLightBarSelect(pBG, "controls_", controlsID, MAKE_RGBA(190, 0, 35, 255));
|
||
|
||
y += spacerY;
|
||
y += spacerY;
|
||
|
||
|
||
/*
|
||
if (GetEmulatedPlatformID() == PLATFORM_ID_IOS)
|
||
{
|
||
bool bUse60Beat = GetApp()->GetVar("check_60beat")->GetUINT32() != 0;
|
||
pEnt = CreateCheckbox(pBG, "check_60beat", "Use 60beat<61> GamePad", startX, y, bUse60Beat, FONT_SMALL, 1.0f);
|
||
pEnt->GetFunction("OnButtonSelected")->sig_function.connect(&OptionsMenuOnSelect);
|
||
|
||
//add the image to the right
|
||
CL_Sizef vCheckBoxSizeWithText = MeasureEntityAndChildren(pEnt).get_size();
|
||
offsetX = startX + vCheckBoxSizeWithText.width+iPhoneMapX(20);
|
||
|
||
Entity *pAd = CreateOverlayButtonEntity(pBG, "sbeat_ad", "interface/sixtybeat_ad.rttex", offsetX, y+vCheckBoxSizeWithText.height/2);
|
||
pAd->GetFunction("OnButtonSelected")->sig_function.connect(&OptionsMenuOnSelect);
|
||
|
||
SetAlignmentEntity(pAd, ALIGNMENT_LEFT_CENTER);
|
||
//We don't want it too big, scale it down if needed
|
||
EntityScaleiPad(pAd, true);
|
||
y += GetSize2DEntity(pAd).y;
|
||
//y += spacerY;
|
||
}
|
||
|
||
*/
|
||
|
||
|
||
//********* icade option
|
||
|
||
string bName = "iCade Controller Mode";
|
||
|
||
if (GetEmulatedPlatformID() == PLATFORM_ID_IOS)
|
||
{
|
||
//bName = "Bluetooth Arcade Stick Mode";
|
||
}
|
||
|
||
bool bUseicade = GetApp()->GetVar("check_icade")->GetUINT32() != 0;
|
||
pEnt = CreateCheckbox(pBG, "check_icade", "Use "+bName, startX, y, bUseicade, FONT_SMALL, 1.0f);
|
||
pEnt->GetFunction("OnButtonSelected")->sig_function.connect(&OptionsMenuOnSelect);
|
||
y += GetSize2DEntity(pEnt).y;
|
||
y += spacerY;
|
||
|
||
|
||
pEnt = CreateTextLabelEntity(pBG, "", startX, y, "GUI Icons:");
|
||
SetupTextEntity(pEnt,fontID);
|
||
offsetX = iPhoneMapX(columnX);
|
||
pEnt = CreateTextButtonEntity(pBG, "buttons_0", offsetX, y, "Right side", false);
|
||
SetupTextEntity(pEnt,fontID);
|
||
pEnt->GetFunction("OnButtonSelected")->sig_function.connect(&OptionsMenuOnSelect);
|
||
offsetX += pEnt->GetVar("size2d")->GetVector2().x + spacerX;
|
||
|
||
pEnt = CreateTextButtonEntity(pBG, "buttons_1", offsetX, y, "Left side", false);
|
||
SetupTextEntity(pEnt,fontID);
|
||
pEnt->GetFunction("OnButtonSelected")->sig_function.connect(OptionsMenuOnSelect);
|
||
offsetX += pEnt->GetVar("size2d")->GetVector2().x + spacerX;
|
||
|
||
uint32 buttons = GetApp()->GetVar("buttons")->GetUINT32();
|
||
SetupLightBarSelect(pBG, "buttons_", buttons, MAKE_RGBA(190, 0, 35, 255));
|
||
y += spacerY;
|
||
}
|
||
|
||
|
||
bool bStretchToFit = GetApp()->GetVar("check_stretch")->GetUINT32() != 0;
|
||
pEnt = CreateCheckbox(pBG, "check_stretch", "Force screen stretching (ignore aspect ratio)", startX, y, bStretchToFit, FONT_SMALL, 1.0f);
|
||
pEnt->GetFunction("OnButtonSelected")->sig_function.connect(&OptionsMenuOnSelect);
|
||
y += GetSize2DEntity(pEnt).y;
|
||
y += spacerY;
|
||
|
||
#ifdef WINAPI
|
||
bool bBorderlessFullscreen = GetApp()->GetVar("borderless_fullscreen")->GetUINT32() != 0;
|
||
pEnt = CreateCheckbox(pBG, "check_borderless", "Use Windowed borderless fullscreen mode", startX, y, bBorderlessFullscreen, FONT_SMALL, 1.0f);
|
||
pEnt->GetFunction("OnButtonSelected")->sig_function.connect(&OptionsMenuOnSelect);
|
||
y += GetSize2DEntity(pEnt).y;
|
||
y += spacerY;
|
||
#endif
|
||
|
||
bool bCheckerboardFix = GetApp()->GetVar("checkerboard_fix")->GetUINT32() != 0;
|
||
pEnt = CreateCheckbox(pBG, "check_checkboard", "Apply improved shadows", startX, y, bCheckerboardFix, FONT_SMALL, 1.0f);
|
||
pEnt->GetFunction("OnButtonSelected")->sig_function.connect(&OptionsMenuOnSelect);
|
||
y += GetSize2DEntity(pEnt).y;
|
||
y += spacerY;
|
||
|
||
bool bDisableRead = GetApp()->GetVar("disable_glread")->GetUINT32() != 0;
|
||
pEnt = CreateCheckbox(pBG, "allow_glread", "Enable screen scroll effect", startX, y, !bDisableRead, FONT_SMALL, 1.0f);
|
||
pEnt->GetFunction("OnButtonSelected")->sig_function.connect(&OptionsMenuOnSelect);
|
||
y += GetSize2DEntity(pEnt).y;
|
||
y += spacerY;
|
||
|
||
|
||
/*
|
||
//fps limit
|
||
pEnt = CreateTextLabelEntity(pBG, "", startX, y, "Lock to 30 FPS:");
|
||
SetupTextEntity(pEnt,fontID);
|
||
offsetX = iPhoneMapX(columnX);
|
||
pEnt = CreateTextButtonEntity(pBG, "fps_limit_0", offsetX, y, "On", false);
|
||
SetupTextEntity(pEnt,fontID);
|
||
pEnt->GetFunction("OnButtonSelected")->sig_function.connect(&OptionsMenuOnSelect);
|
||
offsetX += pEnt->GetVar("size2d")->GetVector2().x + spacerX;
|
||
|
||
pEnt = CreateTextButtonEntity(pBG, "fps_limit_1", offsetX, y, "Off", false);
|
||
SetupTextEntity(pEnt,fontID);
|
||
pEnt->GetFunction("OnButtonSelected")->sig_function.connect(OptionsMenuOnSelect);
|
||
offsetX += pEnt->GetVar("size2d")->GetVector2().x + spacerX;
|
||
|
||
uint32 videoFPS = GetApp()->GetVar("fpsLimit")->GetUINT32();
|
||
SetupLightBarSelect(pBG, "fps_limit_", videoFPS, MAKE_RGBA(190, 0, 35, 255));
|
||
*/
|
||
|
||
if (GetPlatformID() != PLATFORM_ID_IOS)
|
||
{
|
||
//y += spacerY;
|
||
//audio on/off button
|
||
|
||
pEnt = CreateTextLabelEntity(pBG, "", startX, y, "Audio:");
|
||
SetupTextEntity(pEnt,fontID);
|
||
offsetX = iPhoneMapX(columnX);
|
||
pEnt = CreateTextButtonEntity(pBG, "sound_1", offsetX, y, "On", false);
|
||
SetupTextEntity(pEnt,fontID);
|
||
pEnt->GetFunction("OnButtonSelected")->sig_function.connect(&OptionsMenuOnSelect);
|
||
offsetX += pEnt->GetVar("size2d")->GetVector2().x + spacerX;
|
||
|
||
pEnt = CreateTextButtonEntity(pBG, "sound_0", offsetX, y, "Off", false);
|
||
SetupTextEntity(pEnt,fontID);
|
||
pEnt->GetFunction("OnButtonSelected")->sig_function.connect(OptionsMenuOnSelect);
|
||
offsetX += pEnt->GetVar("size2d")->GetVector2().x + spacerX;
|
||
|
||
bool bSound = GetApp()->GetShared()->GetVar("sound")->GetUINT32() != 0;
|
||
SetupLightBarSelect(pBG, "sound_", bSound, MAKE_RGBA(190, 0, 35, 255));
|
||
}
|
||
|
||
//music vol slider
|
||
y += spacerY+iPhoneMapY2X(26);
|
||
EntityComponent *pSliderComp = CreateSlider(pBG, startX, y, iPhoneMapX(360), "interface/slider_button.rttex", "Min", "Music volume", "Max");
|
||
pSliderComp->GetVar("progress")->Set( GetApp()->GetVar("music_vol")->GetFloat());
|
||
pSliderComp->GetVar("progress")->GetSigOnChanged()->connect(&OnProgressChangedMusic);
|
||
|
||
//transparency slider
|
||
if (GetApp()->GetUsingTouchScreen())
|
||
{
|
||
y += spacerY+iPhoneMapY2X(36);
|
||
pSliderComp = CreateSlider(pBG, startX, y, iPhoneMapX(360), "interface/slider_button.rttex", "Min", "Game Interface Visibility", "Max");
|
||
|
||
//a thing to visually show them how much alpha they've set it too
|
||
Entity *pChest = CreateOverlayEntity(pBG, "options_inventory", ReplaceWithLargeInFileName("interface/iphone/button_inventory.rttex"), startX+iPhoneMapX(363), y-iPhoneMapY(34));
|
||
SetAlignmentEntity(pChest, ALIGNMENT_UPPER_LEFT);
|
||
UpdateOptionsGUI();
|
||
|
||
pSliderComp->GetVar("progress")->Set( GetApp()->GetVar("gui_transparency")->GetFloat());
|
||
pSliderComp->GetVar("progress")->GetSigOnChanged()->connect(&OnProgressChangedGUI);
|
||
y += spacerY;
|
||
} else
|
||
{
|
||
y += spacerY;
|
||
|
||
}
|
||
|
||
//if (GetPlatformID() != PLATFORM_ID_IOS)
|
||
{
|
||
//smoothing
|
||
pEnt = CreateTextLabelEntity(pBG, "", startX, y, "Pic smoothing:");
|
||
SetupTextEntity(pEnt,fontID);
|
||
offsetX = iPhoneMapX(columnX);
|
||
pEnt = CreateTextButtonEntity(pBG, "smoothing_0", offsetX, y, "On", false);
|
||
SetupTextEntity(pEnt,fontID);
|
||
pEnt->GetFunction("OnButtonSelected")->sig_function.connect(&OptionsMenuOnSelect);
|
||
offsetX += pEnt->GetVar("size2d")->GetVector2().x + spacerX;
|
||
|
||
pEnt = CreateTextButtonEntity(pBG, "smoothing_1", offsetX, y, "Off", false);
|
||
SetupTextEntity(pEnt,fontID);
|
||
pEnt->GetFunction("OnButtonSelected")->sig_function.connect(OptionsMenuOnSelect);
|
||
offsetX += pEnt->GetVar("size2d")->GetVector2().x + spacerX;
|
||
|
||
uint32 smoothing = !GetApp()->GetVar("smoothing")->GetUINT32();
|
||
SetupLightBarSelect(pBG, "smoothing_", smoothing, MAKE_RGBA(190, 0, 35, 255));
|
||
|
||
//show fps
|
||
y += spacerY;
|
||
pEnt = CreateTextButtonEntity(pBG, "FPS",startX, y, "Toggle FPS Display");
|
||
pEnt->GetShared()->GetFunction("OnButtonSelected")->sig_function.connect(&OptionsMenuOnSelect);
|
||
}
|
||
|
||
VariantList vList(pParent->GetParent());
|
||
ResizeScrollBounds(&vList);
|
||
}
|
||
|
||
Entity * OptionsMenuCreate( Entity *pParentEnt)
|
||
{
|
||
Entity *pBG = CreateOverlayEntity(pParentEnt, "OptionsMenu", ReplaceWithDeviceNameInFileName("interface/iphone/bkgd_stone.rttex"), 0,0);
|
||
AddFocusIfNeeded(pBG, true, 500);
|
||
|
||
//add the header
|
||
|
||
CL_Vec2f vTextAreaPos = iPhoneMap(2,10);
|
||
float offsetFromBottom = iPhoneMapY(42);
|
||
float offsetFromRight = iPhoneMapY(0);
|
||
|
||
CL_Vec2f vTextAreaBounds = (GetScreenSize()- CL_Vec2f(offsetFromRight,offsetFromBottom))-vTextAreaPos;
|
||
Entity *pScroll = pBG->AddEntity(new Entity("scroll"));
|
||
pScroll->GetVar("pos2d")->Set(vTextAreaPos);
|
||
pScroll->GetVar("size2d")->Set(vTextAreaBounds);
|
||
pScroll->AddComponent(new TouchHandlerComponent);
|
||
|
||
EntityComponent *pFilter = pScroll->AddComponent(new FilterInputComponent);
|
||
EntityComponent *pScrollComp = pScroll->AddComponent(new ScrollComponent);
|
||
EntityComponent *pScrollBarComp = pScroll->AddComponent(new ScrollBarRenderComponent); //also let's add a visual way to see the scroller position
|
||
//pScroll->GetVar("color")->Set(MAKE_RGBA(61,155, 193, 255));
|
||
Entity *pScrollChild = pScroll->AddEntity(new Entity("scroll_child"));
|
||
pScrollComp->GetVar("fingerTracking")->Set(uint32(1));
|
||
|
||
|
||
/*
|
||
//too slow/broken on Android, we'll do it another way
|
||
EntityComponent *pClip = pScroll->AddComponent(new RenderClipComponent);
|
||
pClip->GetVar("clipMode")->Set(uint32(RenderClipComponent::CLIP_MODE_BOTTOM));
|
||
*/
|
||
|
||
Entity *pOverlay = CreateOverlayEntity(pBG, "", ReplaceWithDeviceNameInFileName("interface/iphone/bg_stone_overlay.rttex"), 0, GetScreenSizeYf());
|
||
SetAlignmentEntity(pOverlay, ALIGNMENT_DOWN_LEFT);
|
||
|
||
OptionsMenuAddScrollContent(pBG);
|
||
// ZoomFromPositionEntity(pBG, CL_Vec2f(0, -GetScreenSizeYf()), 500);
|
||
//the continue button
|
||
Entity *pEnt;
|
||
|
||
//pEnt = CreateOverlayRectEntity(pBG, CL_Rectf(0, GetScreenSizeYf()-offsetFromBottom, GetScreenSizeXf(), 320), MAKE_RGBA(0,0,0,100));
|
||
|
||
eFont fontID = FONT_SMALL;
|
||
|
||
pEnt = CreateTextButtonEntity(pBG, "Back", iPhoneMapX(5), iPhoneMapY(BACK_BUTTON_Y), "Back", false);
|
||
pEnt->GetFunction("OnButtonSelected")->sig_function.connect(&OptionsMenuOnSelect);
|
||
SetupTextEntity(pEnt, fontID);
|
||
AddHotKeyToButton(pEnt, VIRTUAL_KEY_BACK);
|
||
|
||
ZoomFromPositionEntity(pBG, CL_Vec2f( GetScreenSizeXf(),0), 500);
|
||
|
||
return pBG;
|
||
}
|
||
|