mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2024-11-24 05:17:17 +00:00
rogueviz:: used rv_hook in some viz
This commit is contained in:
parent
19a1358607
commit
73c5b5e881
@ -13,6 +13,10 @@ namespace collatz {
|
|||||||
|
|
||||||
int collatz_id;
|
int collatz_id;
|
||||||
|
|
||||||
|
void act(vertexdata& vd, cell *c, shmup::monster *m, int i);
|
||||||
|
void lookup(long long reached, int bits);
|
||||||
|
void collatz_video(const string &fname);
|
||||||
|
|
||||||
void start() {
|
void start() {
|
||||||
init(&collatz_id, RV_GRAPH);
|
init(&collatz_id, RV_GRAPH);
|
||||||
collatz1 = add_edgetype("1");
|
collatz1 = add_edgetype("1");
|
||||||
@ -29,6 +33,30 @@ namespace collatz {
|
|||||||
|
|
||||||
T2 = spin(collatz::s2) * xpush(collatz::p2);
|
T2 = spin(collatz::s2) * xpush(collatz::p2);
|
||||||
T3 = spin(collatz::s3) * xpush(collatz::p3);
|
T3 = spin(collatz::s3) * xpush(collatz::p3);
|
||||||
|
|
||||||
|
rv_hook(hooks_drawvertex, 100, act);
|
||||||
|
rv_hook(hooks_args, 100, [] {
|
||||||
|
using namespace arg;
|
||||||
|
|
||||||
|
if(0) ;
|
||||||
|
|
||||||
|
#if CAP_SHOT
|
||||||
|
else if(argis("-rvvideo")) {
|
||||||
|
shift(); collatz_video(arg::args());
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
else if(argis("-collatz-go")) {
|
||||||
|
shift(); int i = argi(); shift(); int j = argi();
|
||||||
|
if(i <= 0) i = 763;
|
||||||
|
if(j < 0 || j > 61) j = 61;
|
||||||
|
collatz::lookup(i, j);
|
||||||
|
}
|
||||||
|
|
||||||
|
else return 1;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void lookup(long long reached, int bits) {
|
void lookup(long long reached, int bits) {
|
||||||
@ -76,7 +104,6 @@ namespace collatz {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void act(vertexdata& vd, cell *c, shmup::monster *m, int i) {
|
void act(vertexdata& vd, cell *c, shmup::monster *m, int i) {
|
||||||
if(vizid != &collatz_id) return;
|
|
||||||
if(c->cpdist > 7 && euclid) ;
|
if(c->cpdist > 7 && euclid) ;
|
||||||
else if(vd.data == 2) {
|
else if(vd.data == 2) {
|
||||||
// doubler vertex
|
// doubler vertex
|
||||||
@ -141,7 +168,7 @@ namespace collatz {
|
|||||||
|
|
||||||
// see: https://www.youtube.com/watch?v=4Vu3F95jpQ4&t=6s (Collatz)
|
// see: https://www.youtube.com/watch?v=4Vu3F95jpQ4&t=6s (Collatz)
|
||||||
void collatz_video(const string &fname) {
|
void collatz_video(const string &fname) {
|
||||||
if(vizid == &collatz_id) {
|
if(true) {
|
||||||
sightrange_bonus = 3;
|
sightrange_bonus = 3;
|
||||||
genrange_bonus = 3;
|
genrange_bonus = 3;
|
||||||
dronemode = true; pconf.camera_angle = -45; rog3 = true; patterns::whichShape = '8';
|
dronemode = true; pconf.camera_angle = -45; rog3 = true; patterns::whichShape = '8';
|
||||||
@ -273,14 +300,6 @@ int readArgs() {
|
|||||||
start();
|
start();
|
||||||
}
|
}
|
||||||
|
|
||||||
else if(argis("-collatz-go")) {
|
|
||||||
if(vizid != &collatz_id) { printf("not in Collatz\n"); throw hr_exception(); }
|
|
||||||
shift(); int i = argi(); shift(); int j = argi();
|
|
||||||
if(i <= 0) i = 763;
|
|
||||||
if(j < 0 || j > 61) j = 61;
|
|
||||||
collatz::lookup(i, j);
|
|
||||||
}
|
|
||||||
|
|
||||||
else if(argis("-collatz3")) {
|
else if(argis("-collatz3")) {
|
||||||
PHASE(3);
|
PHASE(3);
|
||||||
using namespace collatz;
|
using namespace collatz;
|
||||||
@ -298,12 +317,6 @@ int readArgs() {
|
|||||||
unshift();
|
unshift();
|
||||||
}
|
}
|
||||||
|
|
||||||
#if CAP_SHOT
|
|
||||||
else if(argis("-rvvideo") && vizid == &collatz_id) {
|
|
||||||
shift(); collatz_video(arg::args());
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
else if(argis("-cshift")) {
|
else if(argis("-cshift")) {
|
||||||
shift_arg_formula(collatz::cshift);
|
shift_arg_formula(collatz::cshift);
|
||||||
}
|
}
|
||||||
@ -341,8 +354,7 @@ int ah = addHook(hooks_args, 100, readArgs) +
|
|||||||
rogueviz::collatz::start();
|
rogueviz::collatz::start();
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
})
|
});
|
||||||
+ addHook(hooks_drawvertex, 100, act);
|
|
||||||
|
|
||||||
|
|
||||||
EX }
|
EX }
|
||||||
|
@ -46,6 +46,8 @@ namespace rogueviz {
|
|||||||
|
|
||||||
namespace flocking {
|
namespace flocking {
|
||||||
|
|
||||||
|
void init();
|
||||||
|
|
||||||
int flock_id;
|
int flock_id;
|
||||||
|
|
||||||
int N;
|
int N;
|
||||||
@ -83,52 +85,6 @@ namespace flocking {
|
|||||||
// m->at * (m->vel, 0, 0) is the current velocity vector (tangent to the Minkowski hyperboloid)
|
// m->at * (m->vel, 0, 0) is the current velocity vector (tangent to the Minkowski hyperboloid)
|
||||||
// m->pat: like m->at but relative to the screen
|
// m->pat: like m->at but relative to the screen
|
||||||
|
|
||||||
void init() {
|
|
||||||
if(!bounded) {
|
|
||||||
addMessage("Flocking simulation needs a bounded space.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
stop_game();
|
|
||||||
rogueviz::init(&flock_id, RV_GRAPH);
|
|
||||||
vdata.resize(N);
|
|
||||||
|
|
||||||
const auto v = currentmap->allcells();
|
|
||||||
|
|
||||||
printf("computing relmatrices...\n");
|
|
||||||
// relmatrices[c1][c2] is the matrix we have to multiply by to
|
|
||||||
// change from c1-relative coordinates to c2-relative coordinates
|
|
||||||
for(cell* c1: v) {
|
|
||||||
manual_celllister cl;
|
|
||||||
cl.add(c1);
|
|
||||||
for(int i=0; i<isize(cl.lst); i++) {
|
|
||||||
cell *c2 = cl.lst[i];
|
|
||||||
transmatrix T = calc_relative_matrix(c2, c1, C0);
|
|
||||||
if(hypot_d(WDIM, inverse_exp(shiftless(tC0(T)))) <= check_range) {
|
|
||||||
relmatrices[c1][c2] = T;
|
|
||||||
forCellEx(c3, c2) cl.add(c3);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("setting up...\n");
|
|
||||||
for(int i=0; i<N; i++) {
|
|
||||||
vertexdata& vd = vdata[i];
|
|
||||||
// set initial base and at to random cell and random position there
|
|
||||||
createViz(i, v[hrand(isize(v))], Id);
|
|
||||||
rotate_object(vd.m->pat.T, vd.m->ori, random_spin());
|
|
||||||
apply_parallel_transport(vd.m->pat.T, vd.m->ori, xtangent(hrand(100) / 200.));
|
|
||||||
|
|
||||||
vd.name = its(i+1);
|
|
||||||
vd.cp = dftcolor;
|
|
||||||
vd.cp.color2 = ((hrand(0x1000000) << 8) + 0xFF) | 0x808080FF;
|
|
||||||
vd.cp.shade = shape;
|
|
||||||
vd.m->vel = ini_speed;
|
|
||||||
}
|
|
||||||
|
|
||||||
storeall();
|
|
||||||
printf("done\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
int precision = 10;
|
int precision = 10;
|
||||||
|
|
||||||
void simulate(int delta) {
|
void simulate(int delta) {
|
||||||
@ -281,7 +237,6 @@ namespace flocking {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool turn(int delta) {
|
bool turn(int delta) {
|
||||||
if(vizid != &flock_id) return false;
|
|
||||||
simulate(delta), timetowait = 0;
|
simulate(delta), timetowait = 0;
|
||||||
|
|
||||||
if(follow) {
|
if(follow) {
|
||||||
@ -500,15 +455,60 @@ namespace flocking {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void o_key(o_funcs& v) {
|
void o_key(o_funcs& v) {
|
||||||
if(vizid == &flock_id) v.push_back(named_dialog("flocking", show));
|
v.push_back(named_dialog("flocking", show));
|
||||||
}
|
}
|
||||||
|
|
||||||
auto hooks =
|
void init() {
|
||||||
addHook(hooks_args, 100, readArgs) +
|
if(!bounded) {
|
||||||
addHook(shmup::hooks_turn, 100, turn) +
|
addMessage("Flocking simulation needs a bounded space.");
|
||||||
addHook(hooks_frame, 100, flock_marker) +
|
return;
|
||||||
addHook(hooks_o_key, 80, o_key) +
|
}
|
||||||
0;
|
stop_game();
|
||||||
|
rogueviz::init(&flock_id, RV_GRAPH);
|
||||||
|
rv_hook(shmup::hooks_turn, 100, turn);
|
||||||
|
rv_hook(hooks_frame, 100, flock_marker);
|
||||||
|
rv_hook(hooks_o_key, 80, o_key);
|
||||||
|
|
||||||
|
vdata.resize(N);
|
||||||
|
|
||||||
|
const auto v = currentmap->allcells();
|
||||||
|
|
||||||
|
printf("computing relmatrices...\n");
|
||||||
|
// relmatrices[c1][c2] is the matrix we have to multiply by to
|
||||||
|
// change from c1-relative coordinates to c2-relative coordinates
|
||||||
|
for(cell* c1: v) {
|
||||||
|
manual_celllister cl;
|
||||||
|
cl.add(c1);
|
||||||
|
for(int i=0; i<isize(cl.lst); i++) {
|
||||||
|
cell *c2 = cl.lst[i];
|
||||||
|
transmatrix T = calc_relative_matrix(c2, c1, C0);
|
||||||
|
if(hypot_d(WDIM, inverse_exp(shiftless(tC0(T)))) <= check_range) {
|
||||||
|
relmatrices[c1][c2] = T;
|
||||||
|
forCellEx(c3, c2) cl.add(c3);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("setting up...\n");
|
||||||
|
for(int i=0; i<N; i++) {
|
||||||
|
vertexdata& vd = vdata[i];
|
||||||
|
// set initial base and at to random cell and random position there
|
||||||
|
createViz(i, v[hrand(isize(v))], Id);
|
||||||
|
rotate_object(vd.m->pat.T, vd.m->ori, random_spin());
|
||||||
|
apply_parallel_transport(vd.m->pat.T, vd.m->ori, xtangent(hrand(100) / 200.));
|
||||||
|
|
||||||
|
vd.name = its(i+1);
|
||||||
|
vd.cp = dftcolor;
|
||||||
|
vd.cp.color2 = ((hrand(0x1000000) << 8) + 0xFF) | 0x808080FF;
|
||||||
|
vd.cp.shade = shape;
|
||||||
|
vd.m->vel = ini_speed;
|
||||||
|
}
|
||||||
|
|
||||||
|
storeall();
|
||||||
|
printf("done\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
auto hooks = addHook(hooks_args, 100, readArgs);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -12,8 +12,6 @@ namespace fullnet {
|
|||||||
int fullnet_id;
|
int fullnet_id;
|
||||||
|
|
||||||
void drawExtra() {
|
void drawExtra() {
|
||||||
|
|
||||||
if(vizid == &fullnet_id) {
|
|
||||||
for(map<cell*, shiftmatrix>::iterator it = gmatrix.begin(); it != gmatrix.end(); it++) {
|
for(map<cell*, shiftmatrix>::iterator it = gmatrix.begin(); it != gmatrix.end(); it++) {
|
||||||
cell *c = it->first;
|
cell *c = it->first;
|
||||||
c->wall = waChasm;
|
c->wall = waChasm;
|
||||||
@ -36,15 +34,14 @@ void drawExtra() {
|
|||||||
|
|
||||||
canmove = true; items[itOrbAether] = true;
|
canmove = true; items[itOrbAether] = true;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
auto hooks =
|
auto hooks =
|
||||||
addHook(hooks_frame, 0, drawExtra) +
|
|
||||||
addHook(hooks_args, 100, [] {
|
addHook(hooks_args, 100, [] {
|
||||||
using namespace arg;
|
using namespace arg;
|
||||||
if(argis("-net")) {
|
if(argis("-net")) {
|
||||||
PHASE(3);
|
PHASE(3);
|
||||||
init(&fullnet_id, 0);
|
init(&fullnet_id, 0);
|
||||||
|
rv_hook(hooks_frame, 0, drawExtra);
|
||||||
linepatterns::patTriTree.color = 0x30;
|
linepatterns::patTriTree.color = 0x30;
|
||||||
linepatterns::patTriOther.color = 0x10;
|
linepatterns::patTriOther.color = 0x10;
|
||||||
linepatterns::patTriRings.color = 0xFF;
|
linepatterns::patTriRings.color = 0xFF;
|
||||||
|
@ -11,6 +11,8 @@ namespace rogueviz {
|
|||||||
|
|
||||||
namespace sag {
|
namespace sag {
|
||||||
|
|
||||||
|
bool turn(int delta);
|
||||||
|
|
||||||
int sag_id;
|
int sag_id;
|
||||||
|
|
||||||
int sagpar = 0;
|
int sagpar = 0;
|
||||||
@ -421,6 +423,18 @@ namespace sag {
|
|||||||
void read(string fn) {
|
void read(string fn) {
|
||||||
fname = fn;
|
fname = fn;
|
||||||
init(&sag_id, RV_GRAPH | RV_WHICHWEIGHT | RV_AUTO_MAXWEIGHT | RV_HAVE_WEIGHT);
|
init(&sag_id, RV_GRAPH | RV_WHICHWEIGHT | RV_AUTO_MAXWEIGHT | RV_HAVE_WEIGHT);
|
||||||
|
|
||||||
|
rv_hook(rogueviz::hooks_close, 100, [] { sag::sagedges.clear(); });
|
||||||
|
rv_hook(shmup::hooks_turn, 100, turn);
|
||||||
|
rv_hook(rogueviz::hooks_rvmenu, 100, [] {
|
||||||
|
dialog::addSelItem(XLAT("temperature"), fts(sag::temperature), 't');
|
||||||
|
dialog::add_action([] {
|
||||||
|
dialog::editNumber(sag::temperature, sag::lowtemp, sag::hightemp, 1, 0, XLAT("temperature"), "");
|
||||||
|
});
|
||||||
|
dialog::addSelItem(XLAT("SAG mode"), sag::sagmodes[sag::sagmode], 'm');
|
||||||
|
dialog::add_action([] { sag::sagmode = sag::eSagmode( (1+sag::sagmode) % 3 ); });
|
||||||
|
});
|
||||||
|
|
||||||
weight_label = "min weight";
|
weight_label = "min weight";
|
||||||
temperature = 0; sagmode = sagOff;
|
temperature = 0; sagmode = sagOff;
|
||||||
readsag(fname.c_str());
|
readsag(fname.c_str());
|
||||||
@ -537,7 +551,6 @@ int readArgs() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool turn(int delta) {
|
bool turn(int delta) {
|
||||||
if(vizid == &sag_id) sag::iterate(), timetowait = 0;
|
|
||||||
return false;
|
return false;
|
||||||
// shmup::pc[0]->rebase();
|
// shmup::pc[0]->rebase();
|
||||||
}
|
}
|
||||||
@ -549,17 +562,6 @@ string cname() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int ah = addHook(hooks_args, 100, readArgs)
|
int ah = addHook(hooks_args, 100, readArgs)
|
||||||
+ addHook(shmup::hooks_turn, 100, turn)
|
|
||||||
+ addHook(rogueviz::hooks_close, 100, [] { sag::sagedges.clear(); })
|
|
||||||
+ addHook(rogueviz::hooks_rvmenu, 100, [] {
|
|
||||||
if(vizid != &sag_id) return;
|
|
||||||
dialog::addSelItem(XLAT("temperature"), fts(sag::temperature), 't');
|
|
||||||
dialog::add_action([] {
|
|
||||||
dialog::editNumber(sag::temperature, sag::lowtemp, sag::hightemp, 1, 0, XLAT("temperature"), "");
|
|
||||||
});
|
|
||||||
dialog::addSelItem(XLAT("SAG mode"), sag::sagmodes[sag::sagmode], 'm');
|
|
||||||
dialog::add_action([] { sag::sagmode = sag::eSagmode( (1+sag::sagmode) % 3 ); });
|
|
||||||
})
|
|
||||||
+ addHook(pres::hooks_build_rvtour, 120, [] (string s, vector<tour::slide>& v) {
|
+ addHook(pres::hooks_build_rvtour, 120, [] (string s, vector<tour::slide>& v) {
|
||||||
if(s != "data") return;
|
if(s != "data") return;
|
||||||
using namespace pres;
|
using namespace pres;
|
||||||
|
@ -21,6 +21,8 @@ namespace spiral {
|
|||||||
void place(int N, ld _mul) {
|
void place(int N, ld _mul) {
|
||||||
mul = _mul;
|
mul = _mul;
|
||||||
init(&spiral_id, RV_GRAPH | RV_HAVE_WEIGHT | RV_INVERSE_WEIGHT);
|
init(&spiral_id, RV_GRAPH | RV_HAVE_WEIGHT | RV_INVERSE_WEIGHT);
|
||||||
|
rv_hook(hooks_alt_edges, 100, spiral_altedge);
|
||||||
|
rv_hook(hooks_frame, 0, drawExtra);
|
||||||
weight_label = "extent";
|
weight_label = "extent";
|
||||||
vdata.resize(N);
|
vdata.resize(N);
|
||||||
|
|
||||||
@ -65,7 +67,7 @@ namespace spiral {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool spiral_altedge(edgeinfo* ei, bool store) {
|
bool spiral_altedge(edgeinfo* ei, bool store) {
|
||||||
bool onspiral = (vizid == &spiral::spiral_id) && abs(ei->i - ei->j) == 1;
|
bool onspiral = abs(ei->i - ei->j) == 1;
|
||||||
|
|
||||||
if(onspiral) {
|
if(onspiral) {
|
||||||
const int prec = 20;
|
const int prec = 20;
|
||||||
@ -88,8 +90,6 @@ bool spiral_altedge(edgeinfo* ei, bool store) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
auto hooks =
|
auto hooks =
|
||||||
addHook(hooks_frame, 0, drawExtra) +
|
|
||||||
addHook(hooks_alt_edges, 100, spiral_altedge) +
|
|
||||||
addHook(hooks_args, 100, [] {
|
addHook(hooks_args, 100, [] {
|
||||||
using namespace arg;
|
using namespace arg;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user