mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2025-01-12 02:10:34 +00:00
rogueviz:: qtm:: slides added
This commit is contained in:
parent
5cc5af932a
commit
901379d284
@ -1,4 +1,4 @@
|
|||||||
#include "../hyper.h"
|
#include "rogueviz.h"
|
||||||
|
|
||||||
// Copyright (C) 2011-2019 Zeno Rogue, see 'hyper.cpp' for details
|
// Copyright (C) 2011-2019 Zeno Rogue, see 'hyper.cpp' for details
|
||||||
|
|
||||||
@ -21,7 +21,7 @@ namespace hybrid { extern hrmap *pmap; }
|
|||||||
|
|
||||||
namespace qtm {
|
namespace qtm {
|
||||||
|
|
||||||
int mode;
|
int qmode;
|
||||||
|
|
||||||
color_t rainbow_color_at(hyperpoint h) {
|
color_t rainbow_color_at(hyperpoint h) {
|
||||||
ld sat = 1 - 1 / h[2];
|
ld sat = 1 - 1 / h[2];
|
||||||
@ -38,11 +38,11 @@ void set_cell(cell *c) {
|
|||||||
c->landparam = c1->landparam;
|
c->landparam = c1->landparam;
|
||||||
c->item = itNone;
|
c->item = itNone;
|
||||||
c->monst = moNone;
|
c->monst = moNone;
|
||||||
if(mode == 1) {
|
if(qmode == 1) {
|
||||||
if(hybrid::get_where(c).second == 0)
|
if(hybrid::get_where(c).second == 0)
|
||||||
c->landparam = 0xFFFFFF;
|
c->landparam = 0xFFFFFF;
|
||||||
}
|
}
|
||||||
if(mode == 2) {
|
if(qmode == 2) {
|
||||||
if(hybrid::get_where(c).second != 0)
|
if(hybrid::get_where(c).second != 0)
|
||||||
c->wall = waNone;
|
c->wall = waNone;
|
||||||
}
|
}
|
||||||
@ -73,29 +73,31 @@ void set_cell(cell *c) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool qtm_on;
|
|
||||||
|
|
||||||
bool may_set_cell(cell *c, int d, cell *from) {
|
bool may_set_cell(cell *c, int d, cell *from) {
|
||||||
if(qtm_on) set_cell(c);
|
set_cell(c);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void enable() {
|
||||||
|
addHook(hooks_cellgen, 100, may_set_cell);
|
||||||
|
}
|
||||||
|
|
||||||
int args() {
|
int args() {
|
||||||
using namespace arg;
|
using namespace arg;
|
||||||
|
|
||||||
if(0) ;
|
if(0) ;
|
||||||
else if(argis("-qtm-stripe")) {
|
else if(argis("-qtm-stripe")) {
|
||||||
mode = 1;
|
qmode = 1;
|
||||||
}
|
}
|
||||||
else if(argis("-qtm-no-stripe")) {
|
else if(argis("-qtm-no-stripe")) {
|
||||||
mode = 0;
|
qmode = 0;
|
||||||
}
|
}
|
||||||
else if(argis("-qtm-stripe-only")) {
|
else if(argis("-qtm-stripe-only")) {
|
||||||
mode = 2;
|
qmode = 2;
|
||||||
}
|
}
|
||||||
else if(argis("-qtm")) {
|
else if(argis("-qtm")) {
|
||||||
PHASEFROM(2);
|
PHASEFROM(2);
|
||||||
qtm_on = true;
|
enable();
|
||||||
}
|
}
|
||||||
|
|
||||||
else if(argis("-spheredemo")) {
|
else if(argis("-spheredemo")) {
|
||||||
@ -188,10 +190,67 @@ int args() {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
auto hooks =
|
||||||
|
addHook(hooks_args, 100, args)
|
||||||
auto hooks = addHook(hooks_cellgen, 100, may_set_cell)
|
+ addHook(rogueviz::pres::hooks_build_rvtour, 180, [] (string s, vector<tour::slide>& v) {
|
||||||
+ addHook(hooks_args, 100, args);
|
if(s != "mixed") return;
|
||||||
|
using namespace tour;
|
||||||
|
for(int m: {1,2}) {
|
||||||
|
string ex = m == 1 ? " (A)" : " (B)";
|
||||||
|
string bonus = m == 2 ? "\n\nTo make stretching more interesting, only the 'stripes' are filled now." : "";
|
||||||
|
v.push_back(slide{
|
||||||
|
"rotations/isometries of 2-sphere"+ex, 10, LEGAL::NONE | QUICKGEO,
|
||||||
|
"3D engines often represent rotations as unit quaternions. These form a 3D elliptic space. What if we could fly through this space of rotations?\n\n"
|
||||||
|
"Rotation matching the current camera position shown in the corner. Beams in the rotation space correspond to bumps on the sphere.\n\n"
|
||||||
|
"You can also obtain a different geometry (Berger sphere) by stretching along the fibers. Press 5 to stretch."+bonus
|
||||||
|
,
|
||||||
|
[m] (presmode mode) {
|
||||||
|
setCanvas(mode, '0');
|
||||||
|
slide_url(mode, 't', "Twitter link", "https://twitter.com/ZenoRogue/status/1166723332840001536");
|
||||||
|
slide_url(mode, 's', "stretched Twitter link", "https://twitter.com/ZenoRogue/status/1258035231996682244");
|
||||||
|
if(mode == pmStart) {
|
||||||
|
set_geometry(gSphere);
|
||||||
|
set_variation(eVariation::bitruncated);
|
||||||
|
set_geometry(gRotSpace);
|
||||||
|
slide_backup(rots::underlying_scale, .25);
|
||||||
|
slide_backup(qmode, m);
|
||||||
|
slide_backup(ray::max_cells, 32768);
|
||||||
|
slide_backup(ray::fixed_map, true);
|
||||||
|
slide_backup(smooth_scrolling, true);
|
||||||
|
slide_backup(camera_speed, .1);
|
||||||
|
enable();
|
||||||
|
start_game();
|
||||||
|
}
|
||||||
|
if(mode == pmKey)
|
||||||
|
edit_stretch();
|
||||||
|
}});
|
||||||
|
v.push_back(slide{
|
||||||
|
"rotations/isometries of the hyperbolic plane"+ex, 10, LEGAL::NONE | QUICKGEO,
|
||||||
|
"The hyperbolic analog of the previous slide. The space is PSL(2,R) now, which has a non-isotropic geometry. It can be represented using split quaternions.\n\n"
|
||||||
|
"Again, press 5 to stretch."+bonus
|
||||||
|
,
|
||||||
|
[m] (presmode mode) {
|
||||||
|
setCanvas(mode, '0');
|
||||||
|
slide_url(mode, 's', "stretched Twitter link", "https://twitter.com/ZenoRogue/status/1259143275115687936");
|
||||||
|
if(mode == pmStart) {
|
||||||
|
set_geometry(gKleinQuartic);
|
||||||
|
set_variation(eVariation::bitruncated);
|
||||||
|
set_geometry(gRotSpace);
|
||||||
|
slide_backup(rots::underlying_scale, .25);
|
||||||
|
slide_backup(qmode, m);
|
||||||
|
slide_backup(ray::max_cells, 32768);
|
||||||
|
slide_backup(ray::fixed_map, true);
|
||||||
|
slide_backup(ray::want_use, 2);
|
||||||
|
slide_backup(smooth_scrolling, true);
|
||||||
|
slide_backup(camera_speed, .1);
|
||||||
|
enable();
|
||||||
|
start_game();
|
||||||
|
}
|
||||||
|
if(mode == pmKey)
|
||||||
|
edit_stretch();
|
||||||
|
}});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user