mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2025-02-02 12:19:18 +00:00
redesigned multiple slideshows in HyperRogue, and how rvslides is generated in RogueViz
This commit is contained in:
parent
336d04fed8
commit
b3329208c4
@ -1155,7 +1155,7 @@ int readArgs() {
|
||||
}
|
||||
#if CAP_RVSLIDES
|
||||
else if(argis("-rvpres")) {
|
||||
tour::slides = rvtour::rvslides;
|
||||
tour::slides = rvtour::gen_rvtour();
|
||||
}
|
||||
#endif
|
||||
else if(argis("-nolegend")) {
|
||||
@ -1367,7 +1367,26 @@ function<void(presmode)> roguevizslide_action(char c, const T& t, const U& act)
|
||||
|
||||
#define RVPATH HYPERPATH "rogueviz/"
|
||||
|
||||
slide rvslides[] = {
|
||||
vector<slide> rvslides;
|
||||
extern vector<slide> rvslides_default;
|
||||
|
||||
purehookset hooks_build_rvtour;
|
||||
|
||||
slide *gen_rvtour() {
|
||||
rvslides = rvslides_default;
|
||||
callhooks(hooks_build_rvtour);
|
||||
rvslides.push_back(
|
||||
{"THE END", 99, LEGAL::ANY | FINALSLIDE,
|
||||
"Press '5' to leave the presentation.",
|
||||
[] (presmode mode) {
|
||||
firstland = specialland = laIce;
|
||||
if(mode == 4) restart_game(rg::tour);
|
||||
}
|
||||
});
|
||||
return &rvslides[0];
|
||||
}
|
||||
|
||||
vector<slide> rvslides_default = {
|
||||
{"RogueViz", 999, LEGAL::ANY,
|
||||
"This is a presentation of RogueViz, which "
|
||||
"is an adaptation of HyperRogue as a visualization tool "
|
||||
@ -1562,13 +1581,6 @@ slide rvslides[] = {
|
||||
start_game();
|
||||
}
|
||||
}},
|
||||
{"THE END", 99, LEGAL::ANY | FINALSLIDE,
|
||||
"Press '5' to leave the presentation.",
|
||||
[] (presmode mode) {
|
||||
firstland = specialland = laIce;
|
||||
if(mode == 4) restart_game(rg::tour);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
int rvtour_hooks =
|
||||
@ -1582,7 +1594,7 @@ int rvtour_hooks =
|
||||
"common HyperRogue tutorial first is useful too, "
|
||||
"as an introduction to hyperbolic geometry.";
|
||||
if(mode == 4) {
|
||||
slides = rogueviz::rvtour::rvslides;
|
||||
slides = gen_rvtour();
|
||||
while(tour::on) restart_game(rg::tour);
|
||||
tour::start();
|
||||
}
|
||||
@ -1625,9 +1637,6 @@ auto hooks =
|
||||
addHook(hooks_frame, 0, drawExtra) +
|
||||
#if CAP_COMMANDLINE
|
||||
addHook(hooks_args, 100, readArgs) +
|
||||
#endif
|
||||
#if CAP_RVSLIDES
|
||||
addHook(hooks_config, 0, [] () { tour::ss::list(rogueviz::rvtour::rvslides); }) +
|
||||
#endif
|
||||
addHook(clearmemory, 0, close) +
|
||||
addHook(hooks_prestats, 100, rogueviz_hud) +
|
||||
@ -1635,6 +1644,14 @@ auto hooks =
|
||||
addHook(shmup::hooks_describe, 100, describe_monster) +
|
||||
addHook(shmup::hooks_kill, 100, activate) +
|
||||
addHook(hooks_o_key, 100, o_key) +
|
||||
|
||||
addHook(tour::ss::extra_slideshows, 100, [] (bool view) {
|
||||
if(!view) return 1;
|
||||
dialog::addBoolItem(XLAT("RogueViz Tour"), tour::ss::wts == &rvtour::rvslides[0], 'r');
|
||||
dialog::add_action([] { tour::ss::wts = rvtour::gen_rvtour(); popScreen(); });
|
||||
return 0;
|
||||
}) +
|
||||
|
||||
addHook(dialog::hooks_display_dialog, 100, [] () {
|
||||
if(current_screen_cfunction() == showMainMenu) {
|
||||
dialog::addItem(XLAT("rogueviz menu"), 'u');
|
||||
@ -1644,8 +1661,8 @@ auto hooks =
|
||||
if(current_screen_cfunction() == showStartMenu) {
|
||||
dialog::addBreak(100);
|
||||
dialog::addBigItem(XLAT("RogueViz"), 'r');
|
||||
dialog::add_action([] () {
|
||||
tour::slides = rogueviz::rvtour::rvslides;
|
||||
dialog::add_action([] () {
|
||||
tour::slides = rogueviz::rvtour::gen_rvtour();
|
||||
popScreenAll();
|
||||
tour::start();
|
||||
printf("tour start\n");
|
||||
|
33
tour.cpp
33
tour.cpp
@ -326,16 +326,21 @@ EX void checkGoodLand(eLand l) {
|
||||
}
|
||||
|
||||
EX namespace ss {
|
||||
vector<slide*> slideshows;
|
||||
slide *wts;
|
||||
|
||||
EX void list(slide *ss) {
|
||||
for(auto s: slideshows) if (s == ss) return;
|
||||
slideshows.push_back(ss);
|
||||
}
|
||||
EX slide *wts;
|
||||
|
||||
string slidechars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ23456789!@#$%^&*(";
|
||||
|
||||
|
||||
EX hookset<int(bool)> *extra_slideshows;
|
||||
|
||||
EX void slideshow_menu() {
|
||||
dialog::init(XLAT("slideshows"), forecolor, 150, 100);
|
||||
dialog::addBoolItem(XLAT("Guided Tour"), wts == default_slides, 't');
|
||||
dialog::add_action([] { wts = default_slides; popScreen(); });
|
||||
callhooks(extra_slideshows, true);
|
||||
dialog::addBack();
|
||||
dialog::display();
|
||||
}
|
||||
|
||||
EX void showMenu() {
|
||||
if(!wts) wts = slides;
|
||||
|
||||
@ -362,15 +367,10 @@ EX namespace ss {
|
||||
if(wts[i].flags & FINALSLIDE) break;
|
||||
}
|
||||
dialog::addBreak(50);
|
||||
if(isize(slideshows) > 1) {
|
||||
bool b = false;
|
||||
if(callhandlers(0, extra_slideshows, b)) {
|
||||
dialog::addItem(XLAT("change slideshow"), '1');
|
||||
dialog::add_action([] {
|
||||
list(wts);
|
||||
for(int i=0; i<isize(slideshows)-1; i++) if(slideshows[i] == wts) {
|
||||
wts = slideshows[i+1]; return;
|
||||
}
|
||||
wts = slideshows[0];
|
||||
});
|
||||
dialog::add_action_push(slideshow_menu);
|
||||
}
|
||||
dialog::addBack();
|
||||
dialog::display();
|
||||
@ -379,7 +379,6 @@ EX namespace ss {
|
||||
EX }
|
||||
|
||||
EX void start() {
|
||||
ss::list(default_slides);
|
||||
currentslide = 0;
|
||||
vid.scale = 1;
|
||||
vid.alpha = 1;
|
||||
|
Loading…
Reference in New Issue
Block a user