1
0
mirror of https://github.com/zenorogue/hyperrogue.git synced 2024-12-24 17:10:36 +00:00

rogueviz:: random-walk:: fixed with rv_hook

This commit is contained in:
Zeno Rogue 2021-04-07 18:01:35 +02:00
parent 02da8e78ec
commit 5403859b41

View File

@ -37,8 +37,6 @@ bool draw_rwalk(cell *c, const shiftmatrix& V) {
return false; return false;
} }
bool do_walkers;
bool in_video; bool in_video;
ld sim_speed = 5; ld sim_speed = 5;
@ -48,8 +46,6 @@ int branch_each = 50000;
ld step_size = 0.02; ld step_size = 0.02;
bool advance_walkers(int delta) { bool advance_walkers(int delta) {
if(!do_walkers) return false;
if(walkers.empty()) { if(walkers.empty()) {
walkers.emplace_back(rwalker{currentmap->gamestart(), Id, Id, 0xFFFFFFFF, 0}); walkers.emplace_back(rwalker{currentmap->gamestart(), Id, Id, 0xFFFFFFFF, 0});
} }
@ -94,34 +90,25 @@ bool advance_walkers(int delta) {
return false; return false;
} }
void enable();
int args() { int args() {
using namespace arg; using namespace arg;
if(0) ; if(0) ;
else if(argis("-rwalk")) { else if(argis("-rwalk")) {
do_walkers = true; enable();
} }
else if(argis("-rwparam")) { else if(argis("-rwparam")) {
shift_arg_formula(sim_speed); shift_arg_formula(sim_speed);
shift_arg_formula(step_size); shift_arg_formula(step_size);
shift(); branch_each = argi(); shift(); branch_each = argi();
} }
else if(argis("-rwalk-off")) {
do_walkers = false;
}
else return 1; else return 1;
return 0; return 0;
} }
bool pres_handleKey(int sym, int uni) {
if((cmode & sm::NORMAL))
if(sym == 'x') {
return true;
}
return false;
}
void show() { void show() {
cmode = sm::SIDE | sm::MAYDARK; cmode = sm::SIDE | sm::MAYDARK;
gamescreen(0); gamescreen(0);
@ -162,7 +149,7 @@ void show() {
} }
void o_key(o_funcs& v) { void o_key(o_funcs& v) {
if(do_walkers) v.push_back(named_dialog("random walk", show)); v.push_back(named_dialog("random walk", show));
} }
string cap = "non-Euclidean random walk/"; string cap = "non-Euclidean random walk/";
@ -180,11 +167,6 @@ void rw_slide(vector<tour::slide>& v, string title, string desc, reaction_t t) {
stop_game(); stop_game();
t(); t();
start_game(); start_game();
do_walkers = true;
}
if(mode == pmStop) {
do_walkers = false;
} }
if(mode == pmKey) { if(mode == pmKey) {
@ -196,18 +178,19 @@ void rw_slide(vector<tour::slide>& v, string title, string desc, reaction_t t) {
); );
} }
void enable() {
auto msc = rv_hook(hooks_drawcell, 100, draw_rwalk);
addHook(hooks_args, 100, args) rv_hook(shmup::hooks_turn, 100, advance_walkers);
+ addHook(hooks_drawcell, 100, draw_rwalk) rv_hook(hooks_o_key, 80, o_key);
+ addHook(shmup::hooks_turn, 100, advance_walkers) rv_hook(hooks_clearmemory, 40, [] () {
+ addHook(hooks_handleKey, 0, pres_handleKey)
+ addHook(hooks_o_key, 80, o_key)
+ addHook(hooks_clearmemory, 40, [] () {
drawn.clear(); drawn.clear();
walkers.clear(); walkers.clear();
total_time = 0; total_time = 0;
}) });
}
auto msc =
addHook(hooks_args, 100, args)
+ addHook(pres::hooks_build_rvtour, 180, [] (string s, vector<tour::slide>& v) { + addHook(pres::hooks_build_rvtour, 180, [] (string s, vector<tour::slide>& v) {
if(s != "mixed") return; if(s != "mixed") return;
v.push_back(tour::slide{ v.push_back(tour::slide{