From 6303b8033b3e24e0f17c5720fa41b9a13c0ec89e Mon Sep 17 00:00:00 2001 From: Zeno Rogue Date: Mon, 9 Jul 2018 20:09:56 +0200 Subject: [PATCH] rogueviz:: help done via hooks --- help.cpp | 33 +++++++++++++---------------- hyper.h | 3 ++- rogueviz-kohonen.cpp | 6 ++++-- rogueviz.cpp | 49 ++++++++++++++++++++++---------------------- rogueviz.h | 2 -- 5 files changed, 45 insertions(+), 48 deletions(-) diff --git a/help.cpp b/help.cpp index 32812e25..cce90fb7 100644 --- a/help.cpp +++ b/help.cpp @@ -759,6 +759,8 @@ void appendHelp(string s) { unsigned char lastval; int windtotal; +hookset *hooks_mouseover; + void describeMouseover() { DEBB(DF_GRAPH, (debugfile,"describeMouseover\n")); @@ -900,9 +902,7 @@ void describeMouseover() { } } -#if CAP_ROGUEVIZ - rogueviz::describe(c); -#endif + callhooks(hooks_mouseover, c); if(mousey < vid.fsize * 3/2) getcstat = SDLK_F1; } @@ -955,29 +955,24 @@ void showHelp() { }; } + +hookset *hooks_default_help; + void gotoHelp(const string& h) { help = h; help_extensions.clear(); pushScreen(showHelp); if(help == "@") { -/* -#if CAP_ROGUEVIZ - if(rogueviz::on) { - help = rogueviz::makehelp(); - help_extensions.push_back(help_extension{'u', XLAT("RogueViz menu"), [] () { popScreen(); pushScreen(rogueviz::showMenu); }}); - return; - } -#endif -*/ - + if(callhandlers(false, hooks_default_help)) return; + #if CAP_RUG - if(rug::rugged) { - help = rug::makehelp(); - help_extensions.push_back(help_extension{'m', XLAT("Hypersian Rug menu"), [] () { popScreen(); rug::select(); }}); - help_extensions.push_back(help_extension{'h', XLAT("HyperRogue help"), [] () { buildHelpText(); }}); - return; - } + if(rug::rugged) { + help = rug::makehelp(); + help_extensions.push_back(help_extension{'m', XLAT("Hypersian Rug menu"), [] () { popScreen(); rug::select(); }}); + help_extensions.push_back(help_extension{'h', XLAT("HyperRogue help"), [] () { buildHelpText(); }}); + return; + } #endif buildHelpText(); diff --git a/hyper.h b/hyper.h index 58839874..3794ef4c 100644 --- a/hyper.h +++ b/hyper.h @@ -2040,7 +2040,8 @@ extern hookset *hooks_main; extern hookset *hooks_args; extern hookset *hooks_mark; extern hookset *hooks_nextland; -extern hookset *hooks_welcome_message; +extern hookset *hooks_welcome_message, *hooks_default_help; +extern hookset *hooks_mouseover; // hooks to extend HyperRogue with an external program // start compilation from another file which defines EXTRA_..., includes diff --git a/rogueviz-kohonen.cpp b/rogueviz-kohonen.cpp index a4d3c569..01b24238 100644 --- a/rogueviz-kohonen.cpp +++ b/rogueviz-kohonen.cpp @@ -714,8 +714,9 @@ void sominit(int initto) { } } -void describe(cell *c) { +void describe_cell(cell *c) { if(cmode & sm::HELP) return; + if(kind != kKohonen) return; neuron *n = getNeuronSlow(c); if(!n) return; help += "cell number: " + its(neuronId(*n)) + " (" + its(n->allsamples) + ")\n"; @@ -1373,7 +1374,8 @@ int readArgs() { auto hooks = addHook(hooks_args, 100, readArgs); #endif -auto hooks2 = addHook(hooks_frame, 50, levelline::draw); +auto hooks2 = addHook(hooks_frame, 50, levelline::draw) + + addHook(hooks_mouseover, 100, describe_cell); void clear() { printf("clearing Kohonen...\n"); diff --git a/rogueviz.cpp b/rogueviz.cpp index a3040598..77435748 100644 --- a/rogueviz.cpp +++ b/rogueviz.cpp @@ -954,10 +954,6 @@ bool edgecmp(edgeinfo *e1, edgeinfo *e2) { return e1->weight > e2->weight; } -void describe(cell *c) { - if(kind == kKohonen) return kohonen::describe(c); - } - bool describe_monster(shmup::monster *m, string& out) { if(m->type != moRogueviz) return false; @@ -1783,25 +1779,6 @@ void showMenu() { }; } -string makehelp() { - string ret = - "This is RogueViz, a visualization engine based on HyperRogue.\n\nUse WASD to move, v for menu.\n\n" - "Read more about RogueViz on : http://roguetemple.com/z/hyper/rogueviz.php\n\n"; - if(kind == kAnyGraph) - ret += "Current visualization: any graph\n\n" + fname; - if(kind == kTree) - ret += "Current visualization: tree\n\n" + fname; - if(kind == kSpiral) - ret += "Current visualization: spiral\n\n"; - if(kind == kSAG) - ret += "Current visualization: SAG\n\n" + fname; - if(kind == kCollatz) - ret += "Current visualization: Collatz conjecture\n\n"; - if(kind == kFullNet) - ret += "Current visualization: full net\n\n"; - return ret; - } - namespace rvtour { using namespace tour; @@ -2072,6 +2049,29 @@ int rvtour_hooks = } +bool default_help() { + if(!rogueviz::on) return false; + + help = + "This is RogueViz, a visualization engine based on HyperRogue.\n\nUse WASD to move, v for menu.\n\n" + "Read more about RogueViz on : http://roguetemple.com/z/hyper/rogueviz.php\n\n"; + if(kind == kAnyGraph) + help += "Current visualization: any graph\n\n" + fname; + if(kind == kTree) + help += "Current visualization: tree\n\n" + fname; + if(kind == kSpiral) + help += "Current visualization: spiral\n\n"; + if(kind == kSAG) + help += "Current visualization: SAG\n\n" + fname; + if(kind == kCollatz) + help += "Current visualization: Collatz conjecture\n\n"; + if(kind == kFullNet) + help += "Current visualization: full net\n\n"; + + help_extensions.push_back(help_extension{'u', XLAT("RogueViz menu"), [] () { popScreen(); pushScreen(showMenu); }}); + return true; + } + auto hooks = addHook(hooks_frame, 0, drawExtra) + #if CAP_COMMANDLINE @@ -2093,7 +2093,8 @@ auto hooks = if(rogueviz::on) addMessage(XLAT("Welcome to RogueViz!")); return rogueviz::on; }) + - 0; + addHook(hooks_default_help, 100, default_help) + + 0; }; diff --git a/rogueviz.h b/rogueviz.h index cd32e81b..c3ed9c05 100644 --- a/rogueviz.h +++ b/rogueviz.h @@ -4,10 +4,8 @@ namespace rogueviz { using namespace hr; extern bool on; - void describe(cell *c); void drawExtra(); void close(); - string makehelp(); void init();