1
0
mirror of https://github.com/zenorogue/hyperrogue.git synced 2025-10-20 00:17:39 +00:00

embeddings:: shmup fixes

This commit is contained in:
Zeno Rogue
2023-02-04 19:40:49 +01:00
parent d67b157904
commit 2fe39a6613
5 changed files with 73 additions and 77 deletions

View File

@@ -2025,14 +2025,9 @@ EX void adjust_eye(transmatrix& T, cell *c, ld sign) {
T = T * lzpush(sign * (cgi.SLEV[sl] - cgi.FLOOR - vid.eye + i));
}
/** achieve top-down perspective */
EX transmatrix default_spin() {
return cspin90(0, 1) * cgi.emb->intermediate_to_logical_scaled;
}
EX bool shmup_inverted() {
if(!embedded_plane) return false;
return (vid.wall_height < 0) ^ (cgi.emb->is_euc_in_nil() || cgi.emb->is_euc_in_sl2());
return vid.wall_height < 0;
}
EX void centerpc(ld aspd) {
@@ -2056,8 +2051,8 @@ EX void centerpc(ld aspd) {
centerover = pc->base;
transmatrix T = pc->at;
if(nonisotropic) {
transmatrix rot = inverse(rgpushxto0(T * C0)) * T;
if(embedded_plane) {
transmatrix rot = inverse(cgi.emb->intermediate_to_actual_translation(cgi.emb->actual_to_intermediate(T * tile_center()))) * T;
T = T * inverse(rot);
adjust_eye(T, pc->base, +1);
T = T * rot;
@@ -2069,11 +2064,13 @@ EX void centerpc(ld aspd) {
View = iview_inverse(T);
if(gproduct) NLP = ortho_inverse(pc->ori);
if(WDIM == 2) {
// already taken into account in gproduct
rotate_view(cgi.emb->intermediate_to_logical_scaled);
// right => upwards
rotate_view(cspin90(0, 1));
// apply playerturny
if(shmup_inverted()) rotate_view(cspin180(2, 1));
if(gproduct)
rotate_view( cspin(2, 1, -90._deg - shmup::playerturny[id]) * cspin90(0, 1));
else
rotate_view( cspin(2, 1, -90._deg - shmup::playerturny[id]) * default_spin());
rotate_view( cspin(2, 1, -90._deg - shmup::playerturny[id]));
}
return;
}