1
0
mirror of https://github.com/zenorogue/hyperrogue.git synced 2026-01-22 02:44:31 +00:00

made radar work in new embedded_planes, with some glitches

This commit is contained in:
Zeno Rogue
2022-12-17 23:59:39 +01:00
parent c252e8f51e
commit c2dc16f8ca
4 changed files with 63 additions and 23 deletions

View File

@@ -5092,18 +5092,33 @@ EX void make_actual_view() {
#endif
#if MAXMDIM >= 4
if(embedded_plane) {
transmatrix T = actual_view_transform * View;
transmatrix U = view_inverse(T);
if(T[0][2] || T[1][2])
T = spin(-atan2(T[0][2], T[1][2])) * T;
if(T[1][2] || T[2][2])
T = cspin(1, 2, -atan2(T[1][2], T[2][2])) * T;
if(nonisotropic) {
transmatrix T = actual_view_transform * View;
ld z = -tC0(view_inverse(T)) [2];
transmatrix R = actual_view_transform;
R = (logical_to_actual()) * R;
if(R[0][2] || R[2][2])
R = cspin(0, 2, -atan2(R[0][2], R[2][2])) * R;
if(R[1][2] || R[2][2])
R = cspin(1, 2, -atan2(R[1][2], R[2][2])) * R;
if(geom3::hyp_in_solnih()) R = Id;
R = inverse(logical_to_actual()) * R;
current_display->radar_transform = inverse(R) * zpush(-z);
}
else {
transmatrix T = actual_view_transform * View;
transmatrix U = view_inverse(T);
ld z = -asin_auto(tC0(view_inverse(T)) [2]);
T = zpush(-z) * T;
if(T[0][2] || T[1][2])
T = spin(-atan2(T[0][2], T[1][2])) * T;
if(T[1][2] || T[2][2])
T = cspin(1, 2, -atan2(T[1][2], T[2][2])) * T;
current_display->radar_transform = T * U;
ld z = -asin_auto(tC0(view_inverse(T)) [2]);
T = zpush(-z) * T;
current_display->radar_transform = T * U;
}
}
#endif
Viewbase = View;