From 8f8fb8a217f1bda3d005a6548774d6723ea86b45 Mon Sep 17 00:00:00 2001 From: Zeno Rogue Date: Sun, 8 Sep 2019 10:08:05 +0200 Subject: [PATCH] replaced hooks_startmenu and hooks_mainmenu with a general hooks_display_dialog --- dialogs.cpp | 3 +++ graph.cpp | 7 +++++++ hyper_function.h | 6 ++++++ menus.cpp | 8 -------- 4 files changed, 16 insertions(+), 8 deletions(-) diff --git a/dialogs.cpp b/dialogs.cpp index 6ed65eee..17c5912a 100644 --- a/dialogs.cpp +++ b/dialogs.cpp @@ -371,7 +371,10 @@ EX namespace dialog { valuex = dcenter - fwidth / 2 + leftwidth + innerwidth + dfsize/2; } + EX purehookset hooks_display_dialog; + EX void display() { + callhooks(hooks_display_dialog); int N = items.size(); dfsize = vid.fsize; #if ISMOBILE || ISPANDORA diff --git a/graph.cpp b/graph.cpp index d0b21abd..9db348e2 100644 --- a/graph.cpp +++ b/graph.cpp @@ -7772,8 +7772,15 @@ EX vector< function > screens = { normalscreen }; template void pushScreen(const T& x) { screens.push_back(x); } inline void popScreen() { if(isize(screens)>1) screens.pop_back(); } inline void popScreenAll() { while(isize(screens)>1) popScreen(); } +typedef void (*cfunction)(); #endif +EX cfunction current_screen_cfunction() { + auto tgt = screens.back().target(); + if(!tgt) return nullptr; + return *tgt; + } + #if HDR namespace sm { static const int NORMAL = 1; diff --git a/hyper_function.h b/hyper_function.h index 3e4c5ddd..5bb8a040 100644 --- a/hyper_function.h +++ b/hyper_function.h @@ -59,6 +59,12 @@ public: explicit operator bool() const noexcept { return ptr_ != nullptr; } + + template T* target() { + auto ptr = dynamic_cast*> (ptr_); + if(!ptr) return nullptr; + return &ptr->t_; + } }; } // namespace hr diff --git a/menus.cpp b/menus.cpp index ac4cdb2b..f3a088db 100644 --- a/menus.cpp +++ b/menus.cpp @@ -206,8 +206,6 @@ EX void showOverview() { // -- main menu -- -EX purehookset hooks_mainmenu; - EX void showMainMenu() { gamescreen(2); @@ -259,8 +257,6 @@ EX void showMainMenu() { dialog::addItem("SHARE", 's'-96); #endif - callhooks(hooks_mainmenu); - if(!canmove) q = "review the scene"; else if(turncount > 0) q = "continue game"; else q = "play the game!"; @@ -643,8 +639,6 @@ EX bool showHalloween() { int daily_mode; -EX purehookset hooks_startmenu; - EX void showStartMenu() { if(!daily_mode) { daily_mode = hrand(10) + 1; @@ -743,8 +737,6 @@ EX void showStartMenu() { break; } - callhooks(hooks_startmenu); - if(have_current_settings()) { dialog::addBreak(100); dialog::addBigItem(XLAT1("use current/saved settings"), SDLK_ESCAPE);