mirror of
https://github.com/k4zmu2a/SpaceCadetPinball.git
synced 2024-12-12 16:40:40 +01:00
Adjusted exit key: added shortcut binding, confirmation dialog.
This commit is contained in:
parent
215599684c
commit
9454e11fd9
8 changed files with 81 additions and 122 deletions
|
@ -35,7 +35,7 @@ void font_selection::RenderDialog()
|
|||
ImGui::SameLine();
|
||||
ImGui::InputText("##Font", DialogInputBuffer, IM_ARRAYSIZE(DialogInputBuffer));
|
||||
|
||||
if (ImGui::Button(pb::get_rc_string(Msg::HIGHSCORES_Ok)))
|
||||
if (ImGui::Button(pb::get_rc_string(Msg::GenericOk)))
|
||||
{
|
||||
options::Options.FontFileName.V = DialogInputBuffer;
|
||||
ImGui::CloseCurrentPopup();
|
||||
|
@ -43,7 +43,7 @@ void font_selection::RenderDialog()
|
|||
}
|
||||
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Button(pb::get_rc_string(Msg::HIGHSCORES_Cancel)))
|
||||
if (ImGui::Button(pb::get_rc_string(Msg::GenericCancel)))
|
||||
ImGui::CloseCurrentPopup();
|
||||
|
||||
ImGui::EndPopup();
|
||||
|
|
|
@ -172,12 +172,9 @@ void high_score::RenderHighScoreDialog()
|
|||
score = DlgData.Entry.Score;
|
||||
ImGui::PushItemWidth(200);
|
||||
|
||||
static bool doubleFocus = false;
|
||||
if (ImGui::IsWindowAppearing() || doubleFocus)
|
||||
if (ImGui::IsWindowAppearing())
|
||||
{
|
||||
// Hack - set focus only works on the second time.
|
||||
ImGui::SetKeyboardFocusHere(0);
|
||||
doubleFocus ^= true;
|
||||
}
|
||||
if (ImGui::InputText("", DlgData.Entry.Name, IM_ARRAYSIZE(DlgData.Entry.Name),
|
||||
ImGuiInputTextFlags_EnterReturnsTrue | ImGuiInputTextFlags_AutoSelectAll))
|
||||
|
@ -197,7 +194,7 @@ void high_score::RenderHighScoreDialog()
|
|||
ImGui::EndTable();
|
||||
}
|
||||
|
||||
if (ImGui::Button(pb::get_rc_string(Msg::HIGHSCORES_Ok)) || textBoxSubmit)
|
||||
if (ImGui::Button(pb::get_rc_string(Msg::GenericOk)) || textBoxSubmit)
|
||||
{
|
||||
if (dlg_enter_name)
|
||||
{
|
||||
|
@ -207,7 +204,7 @@ void high_score::RenderHighScoreDialog()
|
|||
}
|
||||
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Button(pb::get_rc_string(Msg::HIGHSCORES_Cancel)))
|
||||
if (ImGui::Button(pb::get_rc_string(Msg::GenericCancel)))
|
||||
ImGui::CloseCurrentPopup();
|
||||
|
||||
ImGui::SameLine();
|
||||
|
@ -216,14 +213,14 @@ void high_score::RenderHighScoreDialog()
|
|||
if (ImGui::BeginPopupModal("Confirm", nullptr, ImGuiWindowFlags_MenuBar))
|
||||
{
|
||||
ImGui::TextUnformatted(pb::get_rc_string(Msg::STRING141));
|
||||
if (ImGui::Button(pb::get_rc_string(Msg::HIGHSCORES_Ok), ImVec2(120, 0)))
|
||||
if (ImGui::Button(pb::get_rc_string(Msg::GenericOk), ImVec2(120, 0)))
|
||||
{
|
||||
clear_table();
|
||||
ImGui::CloseCurrentPopup();
|
||||
}
|
||||
ImGui::SetItemDefaultFocus();
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Button(pb::get_rc_string(Msg::HIGHSCORES_Cancel), ImVec2(120, 0)))
|
||||
if (ImGui::Button(pb::get_rc_string(Msg::GenericCancel), ImVec2(120, 0)))
|
||||
{
|
||||
ImGui::CloseCurrentPopup();
|
||||
}
|
||||
|
|
|
@ -67,51 +67,58 @@ optionsStruct options::Options
|
|||
"New Game",
|
||||
Msg::Menu1_New_Game,
|
||||
{InputTypes::Keyboard, SDLK_F2},
|
||||
{InputTypes::None,-1},
|
||||
{InputTypes::None, -1},
|
||||
{InputTypes::None, -1}
|
||||
},
|
||||
{
|
||||
"Toggle Pause",
|
||||
Msg::Menu1_Pause_Resume_Game,
|
||||
{InputTypes::Keyboard, SDLK_F3},
|
||||
{InputTypes::None,-1},
|
||||
{InputTypes::None, -1},
|
||||
{InputTypes::GameController, SDL_CONTROLLER_BUTTON_START}
|
||||
},
|
||||
{
|
||||
"Toggle FullScreen",
|
||||
Msg::Menu1_Full_Screen,
|
||||
{InputTypes::Keyboard, SDLK_F4},
|
||||
{InputTypes::None,-1},
|
||||
{InputTypes::None, -1},
|
||||
{InputTypes::None, -1}
|
||||
},
|
||||
{
|
||||
"Toggle Sounds",
|
||||
Msg::Menu1_Sounds,
|
||||
{InputTypes::Keyboard, SDLK_F5},
|
||||
{InputTypes::None,-1},
|
||||
{InputTypes::None, -1},
|
||||
{InputTypes::None, -1}
|
||||
},
|
||||
{
|
||||
"Toggle Music",
|
||||
Msg::Menu1_Music,
|
||||
{InputTypes::Keyboard, SDLK_F6},
|
||||
{InputTypes::None,-1},
|
||||
{InputTypes::None, -1},
|
||||
{InputTypes::None, -1}
|
||||
},
|
||||
{
|
||||
"Show Control Dialog",
|
||||
Msg::Menu1_Player_Controls,
|
||||
{InputTypes::Keyboard, SDLK_F8},
|
||||
{InputTypes::None,-1},
|
||||
{InputTypes::None, -1},
|
||||
{InputTypes::None, -1}
|
||||
},
|
||||
{
|
||||
"Toggle Menu Display",
|
||||
Msg::Menu1_ToggleShowMenu,
|
||||
{InputTypes::Keyboard, SDLK_F9},
|
||||
{InputTypes::None,-1},
|
||||
{InputTypes::None, -1},
|
||||
{InputTypes::None, -1}
|
||||
},
|
||||
{
|
||||
"Exit",
|
||||
Msg::Menu1_Exit,
|
||||
{InputTypes::Keyboard, SDLK_ESCAPE},
|
||||
{InputTypes::None, -1},
|
||||
{InputTypes::GameController, SDL_CONTROLLER_BUTTON_BACK}
|
||||
},
|
||||
},
|
||||
{"Sounds", true},
|
||||
{"Music", false},
|
||||
|
@ -411,13 +418,13 @@ void options::RenderControlDialog()
|
|||
ImGui::PopStyleVar();
|
||||
ImGui::Spacing();
|
||||
|
||||
if (ImGui::Button(pb::get_rc_string(Msg::KEYMAPPER_Ok)))
|
||||
if (ImGui::Button(pb::get_rc_string(Msg::GenericOk)))
|
||||
{
|
||||
ShowDialog = false;
|
||||
}
|
||||
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Button(pb::get_rc_string(Msg::KEYMAPPER_Cancel)))
|
||||
if (ImGui::Button(pb::get_rc_string(Msg::GenericCancel)))
|
||||
{
|
||||
for (auto& control : Options.Key)
|
||||
{
|
||||
|
|
|
@ -72,6 +72,7 @@ enum class GameBindings
|
|||
ToggleMusic,
|
||||
ShowControlDialog,
|
||||
ToggleMenuDisplay,
|
||||
Exit,
|
||||
Max
|
||||
};
|
||||
|
||||
|
|
|
@ -5056,7 +5056,7 @@ const TextArray translations::Translations =
|
|||
},
|
||||
},
|
||||
{
|
||||
Msg::HIGHSCORES_Ok,
|
||||
Msg::GenericOk,
|
||||
{
|
||||
{ Lang::Arabic, "موافق" },
|
||||
{ Lang::Czech, "OK" },
|
||||
|
@ -5085,7 +5085,7 @@ const TextArray translations::Translations =
|
|||
},
|
||||
},
|
||||
{
|
||||
Msg::HIGHSCORES_Cancel,
|
||||
Msg::GenericCancel,
|
||||
{
|
||||
{ Lang::Arabic, "إلغاء الأمر" },
|
||||
{ Lang::Czech, "Storno" },
|
||||
|
@ -5258,64 +5258,6 @@ const TextArray translations::Translations =
|
|||
{ Lang::TraditionalChinese, "立體彈珠台:玩家控制" },
|
||||
},
|
||||
},
|
||||
{
|
||||
Msg::KEYMAPPER_Ok,
|
||||
{
|
||||
{ Lang::Arabic, "موافق" },
|
||||
{ Lang::Czech, "OK" },
|
||||
{ Lang::Danish, "OK" },
|
||||
{ Lang::German, "OK" },
|
||||
{ Lang::Greek, "OK" },
|
||||
{ Lang::English, "OK" },
|
||||
{ Lang::Spanish, "Aceptar" },
|
||||
{ Lang::Finnish, "OK" },
|
||||
{ Lang::French, "OK" },
|
||||
{ Lang::Hebrew, "אישור" },
|
||||
{ Lang::Hungarian, "OK" },
|
||||
{ Lang::Italian, "OK" },
|
||||
{ Lang::Japanese, "OK" },
|
||||
{ Lang::Korean, "확인" },
|
||||
{ Lang::Norwegian, "OK" },
|
||||
{ Lang::Dutch, "OK" },
|
||||
{ Lang::Polish, "OK" },
|
||||
{ Lang::BrazilianPortuguese, "OK" },
|
||||
{ Lang::Portuguese, "OK" },
|
||||
{ Lang::Russian, "ОК" },
|
||||
{ Lang::Swedish, "OK" },
|
||||
{ Lang::Turkish, "Tamam" },
|
||||
{ Lang::SimplifiedChinese, "确定" },
|
||||
{ Lang::TraditionalChinese, "確定" },
|
||||
},
|
||||
},
|
||||
{
|
||||
Msg::KEYMAPPER_Cancel,
|
||||
{
|
||||
{ Lang::Arabic, "إلغاء الأمر" },
|
||||
{ Lang::Czech, "Storno" },
|
||||
{ Lang::Danish, "Annuller" },
|
||||
{ Lang::German, "Abbrechen" },
|
||||
{ Lang::Greek, "Άκυρο" },
|
||||
{ Lang::English, "Cancel" },
|
||||
{ Lang::Spanish, "Cancelar" },
|
||||
{ Lang::Finnish, "Peruuta" },
|
||||
{ Lang::French, "Annuler" },
|
||||
{ Lang::Hebrew, "ביטול" },
|
||||
{ Lang::Hungarian, "Mégse" },
|
||||
{ Lang::Italian, "Annulla" },
|
||||
{ Lang::Japanese, "キャンセル" },
|
||||
{ Lang::Korean, "취소" },
|
||||
{ Lang::Norwegian, "Avbryt" },
|
||||
{ Lang::Dutch, "Annuleren" },
|
||||
{ Lang::Polish, "Anuluj" },
|
||||
{ Lang::BrazilianPortuguese, "Cancelar" },
|
||||
{ Lang::Portuguese, "Cancelar" },
|
||||
{ Lang::Russian, "Отмена" },
|
||||
{ Lang::Swedish, "Avbryt" },
|
||||
{ Lang::Turkish, "İptal" },
|
||||
{ Lang::SimplifiedChinese, "取消" },
|
||||
{ Lang::TraditionalChinese, "取消" },
|
||||
},
|
||||
},
|
||||
{
|
||||
Msg::KEYMAPPER_FlipperL,
|
||||
{
|
||||
|
|
|
@ -175,15 +175,13 @@ enum class Msg : int
|
|||
TextBoxColor,
|
||||
|
||||
HIGHSCORES_Caption,
|
||||
HIGHSCORES_Ok,
|
||||
HIGHSCORES_Cancel,
|
||||
GenericOk,
|
||||
GenericCancel,
|
||||
HIGHSCORES_Clear,
|
||||
HIGHSCORES_Name,
|
||||
HIGHSCORES_Score,
|
||||
HIGHSCORES_Rank,
|
||||
KEYMAPPER_Caption,
|
||||
KEYMAPPER_Ok,
|
||||
KEYMAPPER_Cancel,
|
||||
KEYMAPPER_FlipperL,
|
||||
KEYMAPPER_FlipperR,
|
||||
KEYMAPPER_Plunger,
|
||||
|
|
|
@ -20,7 +20,7 @@ ImGuiIO* winmain::ImIO = nullptr;
|
|||
int winmain::return_value = 0;
|
||||
bool winmain::bQuit = false;
|
||||
bool winmain::activated = false;
|
||||
int winmain::DispFrameRate = 0;
|
||||
bool winmain::DispFrameRate = false;
|
||||
bool winmain::DispGRhistory = false;
|
||||
bool winmain::single_step = false;
|
||||
bool winmain::has_focus = true;
|
||||
|
@ -31,12 +31,13 @@ bool winmain::no_time_loss = false;
|
|||
|
||||
bool winmain::restart = false;
|
||||
|
||||
std::vector<float> winmain::gfrDisplay {};
|
||||
std::vector<float> winmain::gfrDisplay{};
|
||||
unsigned winmain::gfrOffset = 0;
|
||||
float winmain::gfrWindow = 5.0f;
|
||||
bool winmain::ShowAboutDialog = false;
|
||||
bool winmain::ShowImGuiDemo = false;
|
||||
bool winmain::ShowSpriteViewer = false;
|
||||
bool winmain::ShowExitPopup = false;
|
||||
bool winmain::LaunchBallEnabled = true;
|
||||
bool winmain::HighScoresEnabled = true;
|
||||
bool winmain::DemoActive = false;
|
||||
|
@ -173,7 +174,7 @@ int winmain::WinMain(LPCSTR lpCmdLine)
|
|||
}
|
||||
ImGui_Render_Init(renderer);
|
||||
ImGui::StyleColorsDark();
|
||||
|
||||
|
||||
ImGui_ImplSDL2_InitForSDLRenderer(window, Renderer);
|
||||
io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard | ImGuiConfigFlags_NavEnableGamepad;
|
||||
|
||||
|
@ -488,11 +489,7 @@ void winmain::RenderUi()
|
|||
end_pause();
|
||||
pb::toggle_demo();
|
||||
}
|
||||
if (ImGui::MenuItem(pb::get_rc_string(Msg::Menu1_Exit)))
|
||||
{
|
||||
SDL_Event event{SDL_QUIT};
|
||||
SDL_PushEvent(&event);
|
||||
}
|
||||
ImGuiMenuItemWShortcut(GameBindings::Exit);
|
||||
ImGui::EndMenu();
|
||||
}
|
||||
|
||||
|
@ -594,8 +591,8 @@ void winmain::RenderUi()
|
|||
{
|
||||
options::toggle(Menu1::WindowIntegerScale);
|
||||
}
|
||||
if(ImGui::DragFloat("UI Scale", &Options.UIScale.V, 0.005f, 0.8f, 5,
|
||||
"%.2f", ImGuiSliderFlags_AlwaysClamp))
|
||||
if (ImGui::DragFloat("UI Scale", &Options.UIScale.V, 0.005f, 0.8f, 5,
|
||||
"%.2f", ImGuiSliderFlags_AlwaysClamp))
|
||||
{
|
||||
ImIO->FontGlobalScale = Options.UIScale;
|
||||
}
|
||||
|
@ -771,6 +768,38 @@ void winmain::RenderUi()
|
|||
if (DispGRhistory)
|
||||
RenderFrameTimeDialog();
|
||||
|
||||
const auto exitText = translations::GetTranslation(Msg::Menu1_Exit);
|
||||
if (ShowExitPopup)
|
||||
{
|
||||
ShowExitPopup = false;
|
||||
pause(false);
|
||||
ImGui::OpenPopup(exitText);
|
||||
}
|
||||
if (ImGui::BeginPopupModal(exitText, nullptr, ImGuiWindowFlags_AlwaysAutoResize))
|
||||
{
|
||||
ImGui::Text("Exit the game?");
|
||||
ImGui::Separator();
|
||||
|
||||
if (ImGui::Button(pb::get_rc_string(Msg::GenericOk), ImVec2(120, 0)))
|
||||
{
|
||||
SDL_Event event{SDL_QUIT};
|
||||
SDL_PushEvent(&event);
|
||||
ImGui::CloseCurrentPopup();
|
||||
}
|
||||
ImGui::SameLine();
|
||||
if (ImGui::IsWindowAppearing())
|
||||
{
|
||||
ImGui::SetKeyboardFocusHere(0);
|
||||
}
|
||||
if (ImGui::Button(pb::get_rc_string(Msg::GenericCancel), ImVec2(120, 0)))
|
||||
{
|
||||
end_pause();
|
||||
ImGui::CloseCurrentPopup();
|
||||
}
|
||||
ImGui::SetItemDefaultFocus();
|
||||
ImGui::EndPopup();
|
||||
}
|
||||
|
||||
// Print game texts on the sidebar
|
||||
gdrv::grtext_draw_ttext_in_box();
|
||||
}
|
||||
|
@ -821,19 +850,10 @@ int winmain::event_handler(const SDL_Event* event)
|
|||
pb::InputUp({InputTypes::Keyboard, event->key.keysym.sym});
|
||||
break;
|
||||
case SDL_KEYDOWN:
|
||||
if (!event->key.repeat)
|
||||
pb::InputDown({InputTypes::Keyboard, event->key.keysym.sym});
|
||||
switch (event->key.keysym.sym)
|
||||
{
|
||||
case SDLK_ESCAPE:
|
||||
if (Options.FullScreen)
|
||||
options::toggle(Menu1::Full_Screen);
|
||||
SDL_MinimizeWindow(MainWindow);
|
||||
if (event->key.repeat)
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
pb::InputDown({InputTypes::Keyboard, event->key.keysym.sym});
|
||||
if (!pb::cheat_mode)
|
||||
break;
|
||||
|
||||
|
@ -863,7 +883,7 @@ int winmain::event_handler(const SDL_Event* event)
|
|||
break;
|
||||
case SDLK_y:
|
||||
SDL_SetWindowTitle(MainWindow, "Pinball");
|
||||
DispFrameRate = DispFrameRate == 0;
|
||||
DispFrameRate ^= true;
|
||||
break;
|
||||
case SDLK_F1:
|
||||
pb::frame(10);
|
||||
|
@ -968,17 +988,6 @@ int winmain::event_handler(const SDL_Event* event)
|
|||
break;
|
||||
case SDL_CONTROLLERBUTTONDOWN:
|
||||
pb::InputDown({InputTypes::GameController, event->cbutton.button});
|
||||
switch (event->cbutton.button)
|
||||
{
|
||||
case SDL_CONTROLLER_BUTTON_BACK:
|
||||
if (single_step)
|
||||
{
|
||||
SDL_Event event{SDL_QUIT};
|
||||
SDL_PushEvent(&event);
|
||||
}
|
||||
break;
|
||||
default: ;
|
||||
}
|
||||
break;
|
||||
case SDL_CONTROLLERBUTTONUP:
|
||||
pb::InputUp({InputTypes::GameController, event->cbutton.button});
|
||||
|
@ -1124,6 +1133,11 @@ void winmain::HandleGameBinding(GameBindings binding)
|
|||
case GameBindings::ToggleMenuDisplay:
|
||||
options::toggle(Menu1::Show_Menu);
|
||||
break;
|
||||
case GameBindings::Exit:
|
||||
{
|
||||
ShowExitPopup = true;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -1143,13 +1157,13 @@ void winmain::RenderFrameTimeDialog()
|
|||
|
||||
static bool scrollPlot = true;
|
||||
ImGui::Checkbox("Scroll Plot", &scrollPlot);
|
||||
|
||||
|
||||
ImGui::SameLine();
|
||||
ImGui::SliderFloat("Window Size", &gfrWindow, 0.1f, 15, "%.3fsec", ImGuiSliderFlags_AlwaysClamp);
|
||||
|
||||
{
|
||||
float average = 0.0f, dev = 0.0f;
|
||||
for (auto n : gfrDisplay)
|
||||
for (auto n : gfrDisplay)
|
||||
{
|
||||
average += n;
|
||||
dev += std::abs(target - n);
|
||||
|
@ -1161,7 +1175,7 @@ void winmain::RenderFrameTimeDialog()
|
|||
|
||||
auto region = ImGui::GetContentRegionAvail();
|
||||
ImGui::PlotLines("Lines", gfrDisplay.data(), gfrDisplay.size(),
|
||||
scrollPlot ? gfrOffset : 0, overlay, 0, yMax, region);
|
||||
scrollPlot ? gfrOffset : 0, overlay, 0, yMax, region);
|
||||
}
|
||||
}
|
||||
ImGui::End();
|
||||
|
|
|
@ -43,7 +43,6 @@ struct WelfordState
|
|||
|
||||
WelfordState() : mean(0.005), M2(0), count(1)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void Advance(double newValue)
|
||||
|
@ -89,15 +88,16 @@ public:
|
|||
static void UpdateFrameRate();
|
||||
static void HandleGameBinding(GameBindings binding);
|
||||
private:
|
||||
static int return_value, DispFrameRate;
|
||||
static int return_value;
|
||||
static int mouse_down, last_mouse_x, last_mouse_y;
|
||||
static bool no_time_loss, activated, bQuit, has_focus, DispGRhistory;
|
||||
static bool no_time_loss, activated, bQuit, has_focus, DispGRhistory, DispFrameRate;
|
||||
static std::vector<float> gfrDisplay;
|
||||
static std::string FpsDetails, PrevSdlError;
|
||||
static bool restart;
|
||||
static bool ShowAboutDialog;
|
||||
static bool ShowImGuiDemo;
|
||||
static bool ShowSpriteViewer;
|
||||
static bool ShowExitPopup;
|
||||
static double UpdateToFrameRatio;
|
||||
static DurationMs TargetFrameTime;
|
||||
static struct optionsStruct& Options;
|
||||
|
|
Loading…
Reference in a new issue