mirror of
				https://github.com/zenorogue/hyperrogue.git
				synced 2025-10-31 22:12:59 +00:00 
			
		
		
		
	redesigned multiple slideshows in HyperRogue, and how rvslides is generated in RogueViz
This commit is contained in:
		| @@ -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; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Zeno Rogue
					Zeno Rogue