mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2024-12-24 17:10:36 +00:00
rv:: portal demos now organized into a separate presentation
This commit is contained in:
parent
e827d2a69f
commit
50e1497405
@ -627,7 +627,7 @@ void erase_unconnected(cellwalker cw) {
|
|||||||
|
|
||||||
int edit_spin;
|
int edit_spin;
|
||||||
|
|
||||||
void show_portals() {
|
EX void show_portals() {
|
||||||
gamescreen(1);
|
gamescreen(1);
|
||||||
|
|
||||||
dialog::init(XLAT("manage portals"));
|
dialog::init(XLAT("manage portals"));
|
||||||
|
@ -481,34 +481,49 @@ auto hooks =
|
|||||||
0xFFFDD0, 0xFFD080
|
0xFFFDD0, 0xFFD080
|
||||||
};
|
};
|
||||||
})
|
})
|
||||||
+ addHook_rvslides(191, [] (string s, vector<tour::slide>& v) {
|
+ addHook_rvslides(10, ([] (string s, vector<tour::slide>& v) {
|
||||||
if(s != "mixed") return;
|
println(hlog, "called with s='", s, "'");
|
||||||
v.push_back(tour::slide{
|
if(s != "portal") return;
|
||||||
"inter-geometric portals", 10, tour::LEGAL::NONE | tour::QUICKSKIP | tour::QUICKGEO,
|
|
||||||
"Portals between different geometries.\n"
|
using namespace tour;
|
||||||
"These levels take some time to load, so you need to load them using the buttons below."
|
auto load = [] (string s, ld x, int y) {
|
||||||
,
|
return [s, x, y] {
|
||||||
[] (tour::presmode mode) {
|
slide_backup(vid.cells_drawn_limit, 100);
|
||||||
setCanvas(mode, '0');
|
slide_backup(smooth_scrolling, true);
|
||||||
slide_url(mode, 'y', "portals (YouTube)", "https://youtu.be/yqUv2JO2BCs");
|
slide_backup(ray::max_cells, 999999);
|
||||||
slide_url(mode, 't', "portals (Twitter)", "https://twitter.com/ZenoRogue/status/1496867204419452935");
|
slide_backup(walking::on, true);
|
||||||
using namespace tour;
|
slide_backup(walking::eye_level, x);
|
||||||
auto load = [&] (string s, ld x) {
|
mapstream::loadMap(s);
|
||||||
return [s, x] {
|
slide_backup(ray::fixed_map, true);
|
||||||
slide_backup(vid.cells_drawn_limit, 100);
|
slide_backup(ray::max_iter_intra, y);
|
||||||
slide_backup(smooth_scrolling, true);
|
};
|
||||||
slide_backup(ray::max_cells, 999999);
|
};
|
||||||
slide_backup(walking::on, true);
|
|
||||||
slide_backup(walking::eye_level, x);
|
auto add = [&] (string s, string desc, string youtube, string twitter, reaction_t loader) {
|
||||||
mapstream::loadMap(s);
|
v.push_back(tour::slide{
|
||||||
};
|
s, 10, tour::LEGAL::NONE | tour::QUICKSKIP | tour::QUICKGEO, desc,
|
||||||
};
|
[=] (tour::presmode mode) {
|
||||||
slide_action(mode, 'p', "load portals", load("portalscene3.lev", 0.2174492));
|
setCanvas(mode, '0');
|
||||||
slide_url(mode, 'C', "curved landscape (Twitter)", "https://twitter.com/ZenoRogue/status/1446127100516130826");
|
if(youtube != "")
|
||||||
slide_action(mode, 'c', "load curved landscape", load("solv-h3-scene.lev", 0.05));
|
slide_url(mode, 'y', "YouTube link", youtube);
|
||||||
}
|
if(twitter != "")
|
||||||
});
|
slide_url(mode, 't', "Twitter link", twitter);
|
||||||
});
|
slide_action(mode, 'r', "run this visualization", loader);
|
||||||
|
if(mode == tour::pmKey) pushScreen(intra::show_portals);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
add("inter-geometric portals",
|
||||||
|
"In this world we can find portals between six different geometries. The camera is in 'walking mode' i.e. restricted to keep close to the floor (this can be disabled with '5').",
|
||||||
|
"https://youtu.be/yqUv2JO2BCs", "https://twitter.com/ZenoRogue/status/1496867204419452935",
|
||||||
|
load("portalscene3.lev", 0.2174492, 600)
|
||||||
|
);
|
||||||
|
add("curved landscape",
|
||||||
|
"Here we create portals between Solv and H3 geometries, resulting in a scene looking a bit like a curved landscape.",
|
||||||
|
"", "https://twitter.com/ZenoRogue/status/1446127100516130826",
|
||||||
|
load("solv-h3-scene.lev", 0.05, 3000));
|
||||||
|
}));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1417,6 +1417,85 @@ void nk_launch() {
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void portal_slideshow(tour::ss::slideshow_callback cb) {
|
||||||
|
|
||||||
|
using namespace rogueviz::pres;
|
||||||
|
using namespace tour;
|
||||||
|
static vector<slide> portal_slides;
|
||||||
|
|
||||||
|
if(portal_slides.empty()) {
|
||||||
|
|
||||||
|
portal_slides.emplace_back(slide{"portal collection", 100, LEGAL::NONE | QUICKSKIP,
|
||||||
|
"This is a collection of portals. We start with knotted portals in Euclidean geometry, "
|
||||||
|
"then we visit portals in other geometries, and finally, we explore portals between different "
|
||||||
|
"geometries.\n\nLoading these may take some time, so you need to press 'r' to run them. In most slides you can also press '5' to change various parameters.",
|
||||||
|
[] (presmode mode) {}
|
||||||
|
});
|
||||||
|
|
||||||
|
auto add = [&] (string s, string text, string youtube, reaction_t act) {
|
||||||
|
|
||||||
|
portal_slides.emplace_back(
|
||||||
|
tour::slide{s, 100, LEGAL::NONE | QUICKGEO | QUICKSKIP, text,
|
||||||
|
[=] (presmode mode) {
|
||||||
|
setCanvas(mode, '0');
|
||||||
|
if(youtube != "")
|
||||||
|
slide_url(mode, 'y', "YouTube link", youtube);
|
||||||
|
slide_action(mode, 'r', "run", [=] {
|
||||||
|
slide_backup(margin);
|
||||||
|
slide_backup(mapeditor::drawplayer);
|
||||||
|
slide_backup(firstland);
|
||||||
|
slide_backup(specialland);
|
||||||
|
slide_backup(ray::max_cells, 600000);
|
||||||
|
slide_backup(smooth_scrolling, 1);
|
||||||
|
slide_backup(camera_speed, 10);
|
||||||
|
slide_backup(ray::exp_decay_poly, 30);
|
||||||
|
slide_backup(ray::fixed_map, true);
|
||||||
|
slide_backup(ray::max_iter_iso, 80);
|
||||||
|
#if CAP_VR
|
||||||
|
slide_backup(vrhr::hsm);
|
||||||
|
slide_backup(vrhr::eyes);
|
||||||
|
slide_backup(vrhr::cscr);
|
||||||
|
slide_backup(vrhr::absolute_unit_in_meters);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
on_restore([] { nilv::set_flags(); asonov::set_flags(); });
|
||||||
|
|
||||||
|
slide_backup(nilv::nilwidth);
|
||||||
|
slide_backup(nilv::nilperiod);
|
||||||
|
|
||||||
|
slide_backup(vid.binary_width);
|
||||||
|
slide_backup(asonov::period_xy);
|
||||||
|
slide_backup(asonov::period_z);
|
||||||
|
|
||||||
|
act();
|
||||||
|
start_game();
|
||||||
|
loop = 2;
|
||||||
|
});
|
||||||
|
|
||||||
|
if(mode == tour::pmKey) pushScreen(show);
|
||||||
|
}});
|
||||||
|
};
|
||||||
|
|
||||||
|
auto launch_euc_with = [] (bool b) {
|
||||||
|
return [b] {
|
||||||
|
self_hiding = b;
|
||||||
|
launch_euc();
|
||||||
|
};
|
||||||
|
};
|
||||||
|
add("knotted portal", "This is a knotted portal in Euclidean space.", "https://www.youtube.com/watch?v=eb2DhCcGH7U", launch_euc_with(false));
|
||||||
|
add("self-hiding portal", "This knotted portal is 'self-hiding'. It appears that the portal enters itself and disappears!", "https://www.youtube.com/watch?v=vFLZ2NGtuGw", launch_euc_with(true));
|
||||||
|
add("non-Euclidean portal in Nil", "A portal in Nil geometry.", "https://www.youtube.com/watch?v=2K-v8tK68AE", launch_nil);
|
||||||
|
add("spherical portal", "A portal in spherical geometry. Such a portal lets us create a space with spherical geometry that has more volume than the sphere.", "https://www.youtube.com/watch?v=PerPeQFu5gw", launch_sphereknot);
|
||||||
|
add("Cat Portal in Solv", "A portal in Solv geometry. The honeycomb is based on the mapping torus of Arnold's cat mapping.", "https://www.youtube.com/watch?v=CGiSxC9B6i0", launch_solv);
|
||||||
|
|
||||||
|
callhooks(rogueviz::pres::hooks_build_rvtour, "portal", portal_slides);
|
||||||
|
|
||||||
|
add_end(portal_slides);
|
||||||
|
}
|
||||||
|
|
||||||
|
cb(XLAT("portal collection"), &portal_slides[0], 'p');
|
||||||
|
}
|
||||||
|
|
||||||
auto shot_hooks = addHook(hooks_initialize, 100, create_notknot)
|
auto shot_hooks = addHook(hooks_initialize, 100, create_notknot)
|
||||||
+ addHook(hooks_welcome_message, 100, [] {
|
+ addHook(hooks_welcome_message, 100, [] {
|
||||||
if(geometry == gNotKnot) {
|
if(geometry == gNotKnot) {
|
||||||
@ -1496,59 +1575,9 @@ auto shot_hooks = addHook(hooks_initialize, 100, create_notknot)
|
|||||||
param_i(loop_any, "nk_loopany");
|
param_i(loop_any, "nk_loopany");
|
||||||
})
|
})
|
||||||
#ifndef NOTKNOT
|
#ifndef NOTKNOT
|
||||||
+ addHook_rvslides(180, [] (string s, vector<tour::slide>& v) {
|
+ addHook_slideshows(120, portal_slideshow)
|
||||||
if(s != "mixed") return;
|
|
||||||
v.push_back(tour::slide{
|
|
||||||
"weird portals", 10, tour::LEGAL::NONE | tour::QUICKSKIP,
|
|
||||||
"Some experiments with weird portals. Press '5' to change between available experiments.\n"
|
|
||||||
,
|
|
||||||
[] (tour::presmode mode) {
|
|
||||||
slide_url(mode, 'k', "knotted portal (YouTube)", "https://www.youtube.com/watch?v=eb2DhCcGH7U");
|
|
||||||
slide_url(mode, 'h', "self-hiding knot portal (YouTube)", "https://www.youtube.com/watch?v=vFLZ2NGtuGw");
|
|
||||||
slide_url(mode, 'n', "non-Euclidean portal in Nil (YouTube)", "https://www.youtube.com/watch?v=2K-v8tK68AE");
|
|
||||||
slide_url(mode, 's', "spherical portal (YouTube)", "https://www.youtube.com/watch?v=PerPeQFu5gw");
|
|
||||||
slide_url(mode, 'c', "Cat Portal in Solv (YouTube)", "https://www.youtube.com/watch?v=CGiSxC9B6i0");
|
|
||||||
setCanvas(mode, '0');
|
|
||||||
using namespace tour;
|
|
||||||
if(mode == pmStart) {
|
|
||||||
slide_backup(margin);
|
|
||||||
slide_backup(mapeditor::drawplayer);
|
|
||||||
slide_backup(firstland);
|
|
||||||
slide_backup(specialland);
|
|
||||||
slide_backup(ray::max_cells);
|
|
||||||
slide_backup(smooth_scrolling);
|
|
||||||
slide_backup(camera_speed);
|
|
||||||
slide_backup(ray::exp_decay_poly);
|
|
||||||
slide_backup(ray::fixed_map);
|
|
||||||
slide_backup(ray::max_iter_iso);
|
|
||||||
#if CAP_VR
|
|
||||||
slide_backup(vrhr::hsm);
|
|
||||||
slide_backup(vrhr::eyes);
|
|
||||||
slide_backup(vrhr::cscr);
|
|
||||||
slide_backup(vrhr::absolute_unit_in_meters);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
on_restore([] { nilv::set_flags(); asonov::set_flags(); });
|
|
||||||
|
|
||||||
slide_backup(nilv::nilwidth);
|
|
||||||
slide_backup(nilv::nilperiod);
|
|
||||||
|
|
||||||
slide_backup(vid.binary_width);
|
|
||||||
slide_backup(asonov::period_xy);
|
|
||||||
slide_backup(asonov::period_z);
|
|
||||||
|
|
||||||
nk_launch();
|
|
||||||
start_game();
|
|
||||||
loop = 2;
|
|
||||||
}
|
|
||||||
if(mode == tour::pmKey) {
|
|
||||||
pushScreen(show);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
})
|
|
||||||
#endif
|
#endif
|
||||||
;
|
;
|
||||||
|
|
||||||
#ifdef NOTKNOT
|
#ifdef NOTKNOT
|
||||||
auto hook1=
|
auto hook1=
|
||||||
|
Loading…
Reference in New Issue
Block a user