mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2025-02-08 23:20:12 +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
|
#if CAP_RVSLIDES
|
||||||
else if(argis("-rvpres")) {
|
else if(argis("-rvpres")) {
|
||||||
tour::slides = rvtour::rvslides;
|
tour::slides = rvtour::gen_rvtour();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
else if(argis("-nolegend")) {
|
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/"
|
#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,
|
{"RogueViz", 999, LEGAL::ANY,
|
||||||
"This is a presentation of RogueViz, which "
|
"This is a presentation of RogueViz, which "
|
||||||
"is an adaptation of HyperRogue as a visualization tool "
|
"is an adaptation of HyperRogue as a visualization tool "
|
||||||
@ -1562,13 +1581,6 @@ slide rvslides[] = {
|
|||||||
start_game();
|
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 =
|
int rvtour_hooks =
|
||||||
@ -1582,7 +1594,7 @@ int rvtour_hooks =
|
|||||||
"common HyperRogue tutorial first is useful too, "
|
"common HyperRogue tutorial first is useful too, "
|
||||||
"as an introduction to hyperbolic geometry.";
|
"as an introduction to hyperbolic geometry.";
|
||||||
if(mode == 4) {
|
if(mode == 4) {
|
||||||
slides = rogueviz::rvtour::rvslides;
|
slides = gen_rvtour();
|
||||||
while(tour::on) restart_game(rg::tour);
|
while(tour::on) restart_game(rg::tour);
|
||||||
tour::start();
|
tour::start();
|
||||||
}
|
}
|
||||||
@ -1625,9 +1637,6 @@ auto hooks =
|
|||||||
addHook(hooks_frame, 0, drawExtra) +
|
addHook(hooks_frame, 0, drawExtra) +
|
||||||
#if CAP_COMMANDLINE
|
#if CAP_COMMANDLINE
|
||||||
addHook(hooks_args, 100, readArgs) +
|
addHook(hooks_args, 100, readArgs) +
|
||||||
#endif
|
|
||||||
#if CAP_RVSLIDES
|
|
||||||
addHook(hooks_config, 0, [] () { tour::ss::list(rogueviz::rvtour::rvslides); }) +
|
|
||||||
#endif
|
#endif
|
||||||
addHook(clearmemory, 0, close) +
|
addHook(clearmemory, 0, close) +
|
||||||
addHook(hooks_prestats, 100, rogueviz_hud) +
|
addHook(hooks_prestats, 100, rogueviz_hud) +
|
||||||
@ -1635,6 +1644,14 @@ auto hooks =
|
|||||||
addHook(shmup::hooks_describe, 100, describe_monster) +
|
addHook(shmup::hooks_describe, 100, describe_monster) +
|
||||||
addHook(shmup::hooks_kill, 100, activate) +
|
addHook(shmup::hooks_kill, 100, activate) +
|
||||||
addHook(hooks_o_key, 100, o_key) +
|
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, [] () {
|
addHook(dialog::hooks_display_dialog, 100, [] () {
|
||||||
if(current_screen_cfunction() == showMainMenu) {
|
if(current_screen_cfunction() == showMainMenu) {
|
||||||
dialog::addItem(XLAT("rogueviz menu"), 'u');
|
dialog::addItem(XLAT("rogueviz menu"), 'u');
|
||||||
@ -1644,8 +1661,8 @@ auto hooks =
|
|||||||
if(current_screen_cfunction() == showStartMenu) {
|
if(current_screen_cfunction() == showStartMenu) {
|
||||||
dialog::addBreak(100);
|
dialog::addBreak(100);
|
||||||
dialog::addBigItem(XLAT("RogueViz"), 'r');
|
dialog::addBigItem(XLAT("RogueViz"), 'r');
|
||||||
dialog::add_action([] () {
|
dialog::add_action([] () {
|
||||||
tour::slides = rogueviz::rvtour::rvslides;
|
tour::slides = rogueviz::rvtour::gen_rvtour();
|
||||||
popScreenAll();
|
popScreenAll();
|
||||||
tour::start();
|
tour::start();
|
||||||
printf("tour start\n");
|
printf("tour start\n");
|
||||||
|
33
tour.cpp
33
tour.cpp
@ -326,16 +326,21 @@ EX void checkGoodLand(eLand l) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
EX namespace ss {
|
EX namespace ss {
|
||||||
vector<slide*> slideshows;
|
EX slide *wts;
|
||||||
slide *wts;
|
|
||||||
|
|
||||||
EX void list(slide *ss) {
|
|
||||||
for(auto s: slideshows) if (s == ss) return;
|
|
||||||
slideshows.push_back(ss);
|
|
||||||
}
|
|
||||||
|
|
||||||
string slidechars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ23456789!@#$%^&*(";
|
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() {
|
EX void showMenu() {
|
||||||
if(!wts) wts = slides;
|
if(!wts) wts = slides;
|
||||||
|
|
||||||
@ -362,15 +367,10 @@ EX namespace ss {
|
|||||||
if(wts[i].flags & FINALSLIDE) break;
|
if(wts[i].flags & FINALSLIDE) break;
|
||||||
}
|
}
|
||||||
dialog::addBreak(50);
|
dialog::addBreak(50);
|
||||||
if(isize(slideshows) > 1) {
|
bool b = false;
|
||||||
|
if(callhandlers(0, extra_slideshows, b)) {
|
||||||
dialog::addItem(XLAT("change slideshow"), '1');
|
dialog::addItem(XLAT("change slideshow"), '1');
|
||||||
dialog::add_action([] {
|
dialog::add_action_push(slideshow_menu);
|
||||||
list(wts);
|
|
||||||
for(int i=0; i<isize(slideshows)-1; i++) if(slideshows[i] == wts) {
|
|
||||||
wts = slideshows[i+1]; return;
|
|
||||||
}
|
|
||||||
wts = slideshows[0];
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
dialog::addBack();
|
dialog::addBack();
|
||||||
dialog::display();
|
dialog::display();
|
||||||
@ -379,7 +379,6 @@ EX namespace ss {
|
|||||||
EX }
|
EX }
|
||||||
|
|
||||||
EX void start() {
|
EX void start() {
|
||||||
ss::list(default_slides);
|
|
||||||
currentslide = 0;
|
currentslide = 0;
|
||||||
vid.scale = 1;
|
vid.scale = 1;
|
||||||
vid.alpha = 1;
|
vid.alpha = 1;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user