mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2024-11-23 21:07:17 +00:00
product:: wallradar and TPP
This commit is contained in:
parent
47823ef0fb
commit
597140e28d
15
graph.cpp
15
graph.cpp
@ -7161,16 +7161,16 @@ EX purehookset hooks_drawmap;
|
|||||||
|
|
||||||
EX transmatrix actual_view_transform;
|
EX transmatrix actual_view_transform;
|
||||||
|
|
||||||
EX ld wall_radar(cell *c, transmatrix T, ld max) {
|
EX ld wall_radar(cell *c, transmatrix T, transmatrix LPe, ld max) {
|
||||||
if(pmodel != mdPerspective || !vid.use_wall_radar) return max;
|
if(pmodel != mdPerspective || !vid.use_wall_radar) return max;
|
||||||
ld step = max / 20;
|
ld step = max / 20;
|
||||||
ld fixed_yshift = 0;
|
ld fixed_yshift = 0;
|
||||||
for(int i=0; i<20; i++) {
|
for(int i=0; i<20; i++) {
|
||||||
T = solmul_pt(T, cpush(2, -step));
|
T = solmul_pt(T, LPe, zpush(-step));
|
||||||
virtualRebase(c, T, false);
|
virtualRebase(c, T, true);
|
||||||
color_t col;
|
color_t col;
|
||||||
if(isWall3(c, col) || (WDIM == 2 && GDIM == 3 && tC0(T)[2] > cgi.FLOOR)) {
|
if(isWall3(c, col) || (WDIM == 2 && GDIM == 3 && tC0(T)[2] > cgi.FLOOR)) {
|
||||||
T = solmul_pt(T, cpush(2, step));
|
T = solmul_pt(T, LPe, zpush(step));
|
||||||
step /= 2; i = 17;
|
step /= 2; i = 17;
|
||||||
if(step < 1e-3) break;
|
if(step < 1e-3) break;
|
||||||
}
|
}
|
||||||
@ -7187,8 +7187,11 @@ EX void make_actual_view() {
|
|||||||
#if MAXMDIM >= 4
|
#if MAXMDIM >= 4
|
||||||
if(GDIM == 3) {
|
if(GDIM == 3) {
|
||||||
ld max = WDIM == 2 ? vid.camera : vid.yshift;
|
ld max = WDIM == 2 ? vid.camera : vid.yshift;
|
||||||
if(max)
|
if(max) {
|
||||||
actual_view_transform = solmul(zpush(wall_radar((masterless ? centerover.at : viewcenter()), inverse(View), max)), nisot::local_perspective, actual_view_transform * View) * inverse(View);
|
transmatrix Start = inverse(actualV(viewctr, actual_view_transform * View));
|
||||||
|
ld d = wall_radar(viewcenter(), Start, nisot::local_perspective, max);
|
||||||
|
actual_view_transform = solmul(zpush(d), nisot::local_perspective, actual_view_transform * View) * inverse(View);
|
||||||
|
}
|
||||||
camera_level = asin_auto(tC0(inverse(actual_view_transform * View))[2]);
|
camera_level = asin_auto(tC0(inverse(actual_view_transform * View))[2]);
|
||||||
}
|
}
|
||||||
if(nonisotropic) {
|
if(nonisotropic) {
|
||||||
|
@ -951,7 +951,12 @@ EX transmatrix solmul(const transmatrix T, const transmatrix LPe, const transmat
|
|||||||
}
|
}
|
||||||
|
|
||||||
EX transmatrix solmul_pt(const transmatrix Position, const transmatrix T) {
|
EX transmatrix solmul_pt(const transmatrix Position, const transmatrix T) {
|
||||||
if(nonisotropic) return nisot::parallel_transport(Position, T);
|
if(nonisotropic) return nisot::parallel_transport(Position, Id, T);
|
||||||
|
else return Position * T;
|
||||||
|
}
|
||||||
|
|
||||||
|
EX transmatrix solmul_pt(const transmatrix Position, const transmatrix LPe, const transmatrix T) {
|
||||||
|
if(nonisotropic || prod) return nisot::parallel_transport(Position, LPe, T);
|
||||||
else return Position * T;
|
else return Position * T;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -911,6 +911,7 @@ EX bool confusingGeometry() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
EX ld master_to_c7_angle() {
|
EX ld master_to_c7_angle() {
|
||||||
|
if(prod) return product::in_underlying_geometry(master_to_c7_angle);
|
||||||
ld alpha = 0;
|
ld alpha = 0;
|
||||||
#if CAP_GP
|
#if CAP_GP
|
||||||
if(cgi.gpdata) alpha = cgi.gpdata->alpha;
|
if(cgi.gpdata) alpha = cgi.gpdata->alpha;
|
||||||
@ -919,6 +920,7 @@ EX ld master_to_c7_angle() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
EX transmatrix actualV(const heptspin& hs, const transmatrix& V) {
|
EX transmatrix actualV(const heptspin& hs, const transmatrix& V) {
|
||||||
|
if(prod) return PIU(actualV(hs, V));
|
||||||
if(WDIM == 3) return V;
|
if(WDIM == 3) return V;
|
||||||
#if CAP_IRR
|
#if CAP_IRR
|
||||||
if(IRREGULAR)
|
if(IRREGULAR)
|
||||||
|
@ -821,8 +821,12 @@ EX namespace nisot {
|
|||||||
{ dynamicval<eGeometry> g(geometry, gSphere); hr::fixmatrix(gtl); }
|
{ dynamicval<eGeometry> g(geometry, gSphere); hr::fixmatrix(gtl); }
|
||||||
T = push * gtl;
|
T = push * gtl;
|
||||||
}
|
}
|
||||||
|
|
||||||
EX transmatrix parallel_transport(const transmatrix Position, const transmatrix T) {
|
EX transmatrix parallel_transport(const transmatrix Position, const transmatrix LPe, const transmatrix T) {
|
||||||
|
if(prod) {
|
||||||
|
hyperpoint h = product::direct_exp(inverse(LPe) * product::inverse_exp(tC0(T)));
|
||||||
|
return Position * rgpushxto0(h);
|
||||||
|
}
|
||||||
auto P = Position;
|
auto P = Position;
|
||||||
nisot::fixmatrix(P);
|
nisot::fixmatrix(P);
|
||||||
if(!geodesic_movement) return inverse(eupush(Position * inverse(T) * inverse(Position) * C0)) * Position;
|
if(!geodesic_movement) return inverse(eupush(Position * inverse(T) * inverse(Position) * C0)) * Position;
|
||||||
@ -840,7 +844,7 @@ EX namespace nisot {
|
|||||||
const transmatrix V1 = inverse(IV);
|
const transmatrix V1 = inverse(IV);
|
||||||
return V1 * eupush(IV * T * V1 * C0);
|
return V1 * eupush(IV * T * V1 * C0);
|
||||||
}
|
}
|
||||||
return inverse(parallel_transport(inverse(V), inverse(T)));
|
return inverse(parallel_transport(inverse(V), Id, inverse(T)));
|
||||||
}
|
}
|
||||||
|
|
||||||
EX transmatrix spin_towards(const transmatrix Position, const hyperpoint goal) {
|
EX transmatrix spin_towards(const transmatrix Position, const hyperpoint goal) {
|
||||||
|
Loading…
Reference in New Issue
Block a user