VideoConfig/LocalConfig/HotkeyManager: Added hotkeys for switching stereo-3d presets.

Added 3 depth/convergence presets. They are adjustable via (existing) hotkeys - changes to depth and convergence are applied to current preset.
Added 3 hotkeys for activating presets. Added hotkey for toggle between first and second preset.
Added OSD message for convergence/depth changes.
Presets are saved into per-game configs.
This commit is contained in:
ghost 2015-09-22 05:28:26 +03:00
parent 07e4b4f7c4
commit 7c1565b201
5 changed files with 90 additions and 4 deletions

View File

@ -116,6 +116,12 @@ const std::string hotkey_labels[] =
_trans("Undo Save State"),
_trans("Save State"),
_trans("Load State"),
_trans("Toggle 3D Preset"),
_trans("Use 3D Preset 1"),
_trans("Use 3D Preset 2"),
_trans("Use 3D Preset 3"),
};
static_assert(NUM_HOTKEYS == sizeof(hotkey_labels) / sizeof(hotkey_labels[0]), "Wrong count of hotkey_labels");

View File

@ -117,6 +117,11 @@ enum Hotkey
HK_SAVE_STATE_FILE,
HK_LOAD_STATE_FILE,
HK_SWITCH_STEREOSCOPY_PRESET,
HK_USE_STEREOSCOPY_PRESET_0,
HK_USE_STEREOSCOPY_PRESET_1,
HK_USE_STEREOSCOPY_PRESET_2,
NUM_HOTKEYS,
};

View File

@ -1416,29 +1416,73 @@ void CFrame::ParseHotkeys()
{
State::Load(g_saveSlot);
}
if (IsHotkey(HK_DECREASE_DEPTH, true))
auto savePreset = [](const std::string& param, int value)
{
IniFile localIni = SConfig::GetInstance().LoadLocalGameIni();
localIni.GetOrCreateSection("Enhancements")->Set(
StringFromFormat("Stereo%s_%d", param.c_str(), g_Config.iStereoActivePreset),
value);
std::string iniFileName = File::GetUserPath(D_GAMESETTINGS_IDX) + SConfig::GetInstance().GetUniqueID() + ".ini";
OSD::AddMessage(StringFromFormat("%s: %d", param.c_str(), value) , 1000);
localIni.Save(iniFileName);
};
if (IsHotkey(HK_DECREASE_DEPTH))
{
if (--g_Config.iStereoDepth < 0)
g_Config.iStereoDepth = 0;
g_Config.oStereoPresets[g_Config.iStereoActivePreset].depth = g_Config.iStereoDepth;
savePreset("Depth", g_Config.iStereoDepth);
}
if (IsHotkey(HK_INCREASE_DEPTH, true))
if (IsHotkey(HK_INCREASE_DEPTH))
{
if (++g_Config.iStereoDepth > 100)
g_Config.iStereoDepth = 100;
g_Config.oStereoPresets[g_Config.iStereoActivePreset].depth = g_Config.iStereoDepth;
savePreset("Depth", g_Config.iStereoDepth);
}
if (IsHotkey(HK_DECREASE_CONVERGENCE, true))
if (IsHotkey(HK_DECREASE_CONVERGENCE))
{
g_Config.iStereoConvergence -= 5;
if (g_Config.iStereoConvergence < 0)
g_Config.iStereoConvergence = 0;
g_Config.oStereoPresets[g_Config.iStereoActivePreset].convergence = g_Config.iStereoConvergence;
savePreset("Convergence", g_Config.iStereoConvergence);
}
if (IsHotkey(HK_INCREASE_CONVERGENCE, true))
if (IsHotkey(HK_INCREASE_CONVERGENCE))
{
g_Config.iStereoConvergence += 5;
if (g_Config.iStereoConvergence > 500)
g_Config.iStereoConvergence = 500;
g_Config.oStereoPresets[g_Config.iStereoActivePreset].convergence = g_Config.iStereoConvergence;
savePreset("Convergence", g_Config.iStereoConvergence);
}
if (IsHotkey(HK_SWITCH_STEREOSCOPY_PRESET))
{
g_Config.iStereoActivePreset = !g_Config.iStereoActivePreset;
g_Config.iStereoConvergence = g_Config.oStereoPresets[g_Config.iStereoActivePreset].convergence;
g_Config.iStereoDepth = g_Config.oStereoPresets[g_Config.iStereoActivePreset].depth;
}
if (IsHotkey(HK_USE_STEREOSCOPY_PRESET_0))
{
g_Config.iStereoActivePreset = 0;
g_Config.iStereoConvergence = g_Config.oStereoPresets[g_Config.iStereoActivePreset].convergence;
g_Config.iStereoDepth = g_Config.oStereoPresets[g_Config.iStereoActivePreset].depth;
}
if (IsHotkey(HK_USE_STEREOSCOPY_PRESET_1))
{
g_Config.iStereoActivePreset = 1;
g_Config.iStereoConvergence = g_Config.oStereoPresets[g_Config.iStereoActivePreset].convergence;
g_Config.iStereoDepth = g_Config.oStereoPresets[g_Config.iStereoActivePreset].depth;
}
if (IsHotkey(HK_USE_STEREOSCOPY_PRESET_2))
{
g_Config.iStereoActivePreset = 2;
g_Config.iStereoConvergence = g_Config.oStereoPresets[g_Config.iStereoActivePreset].convergence;
g_Config.iStereoDepth = g_Config.oStereoPresets[g_Config.iStereoActivePreset].depth;
}
static float debugSpeed = 1.0f;
if (IsHotkey(HK_FREELOOK_DECREASE_SPEED, true))
debugSpeed /= 1.1f;

View File

@ -96,6 +96,16 @@ void VideoConfig::Load(const std::string& ini_file)
enhancements->Get("StereoConvergence", &iStereoConvergence, 20);
enhancements->Get("StereoSwapEyes", &bStereoSwapEyes, false);
//currently these settings are not saved in global config, so we could've initialized them directly
for (int i = 0; i < oStereoPresets.size(); ++i)
{
enhancements->Get(StringFromFormat("StereoConvergence_%d", i), &oStereoPresets[i].depth, iStereoConvergence);
enhancements->Get(StringFromFormat("StereoDepth_%d", i), &oStereoPresets[i].convergence, iStereoDepth);
}
enhancements->Get("StereoActivePreset", &iStereoActivePreset, 0);
iStereoConvergence = oStereoPresets[iStereoActivePreset].convergence;
iStereoDepth = oStereoPresets[iStereoActivePreset].depth;
IniFile::Section* hacks = iniFile.GetOrCreateSection("Hacks");
hacks->Get("EFBAccessEnable", &bEFBAccessEnable, true);
hacks->Get("BBoxEnable", &bBBoxEnable, false);
@ -200,6 +210,17 @@ void VideoConfig::GameIniLoad()
CHECK_SETTING("Video_Enhancements", "StereoConvergence", iStereoConvergence);
CHECK_SETTING("Video_Enhancements", "StereoSwapEyes", bStereoSwapEyes);
//these are not overrides, they are per-game settings, hence no warning
IniFile::Section* enhancements = iniFile.GetOrCreateSection("Enhancements");
for (int i = 0; i < oStereoPresets.size(); ++i)
{
enhancements->Get(StringFromFormat("StereoConvergence_%d", i), &oStereoPresets[i].depth, iStereoConvergence);
enhancements->Get(StringFromFormat("StereoDepth_%d", i), &oStereoPresets[i].convergence, iStereoDepth);
}
enhancements->Get("StereoActivePreset", &iStereoActivePreset, 0);
iStereoConvergence = oStereoPresets[iStereoActivePreset].convergence;
iStereoDepth = oStereoPresets[iStereoActivePreset].depth;
CHECK_SETTING("Video_Stereoscopy", "StereoEFBMonoDepth", bStereoEFBMonoDepth);
CHECK_SETTING("Video_Stereoscopy", "StereoDepthPercentage", iStereoDepthPercentage);
CHECK_SETTING("Video_Stereoscopy", "StereoConvergenceMinimum", iStereoConvergenceMinimum);

View File

@ -51,6 +51,14 @@ enum StereoMode
STEREO_3DVISION
};
constexpr int STEREOSCOPY_PRESETS_NUM = 3;
struct StereoscopyPreset final
{
int depth;
int convergence;
};
// NEVER inherit from this class.
struct VideoConfig final
{
@ -84,6 +92,8 @@ struct VideoConfig final
int iStereoDepth;
int iStereoConvergence;
bool bStereoSwapEyes;
std::array<StereoscopyPreset, STEREOSCOPY_PRESETS_NUM> oStereoPresets;
int iStereoActivePreset;
// Information
bool bShowFPS;