mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2025-03-22 11:27:03 +00:00
2d3d:: fixed the placement of monsters (including PC view) on rock levels etc.
This commit is contained in:
parent
563303acca
commit
13f3f49db9
16
graph.cpp
16
graph.cpp
@ -4470,11 +4470,12 @@ void drawcell(cell *c, transmatrix V, int spinv, bool mirrored) {
|
||||
|
||||
transmatrix Vd0, Vboat0;
|
||||
const transmatrix *Vdp =
|
||||
(!wmspatial) ? &V :
|
||||
sl ? &(Vd0= mscale(V, geom3::SLEV[sl])) :
|
||||
highwall(c) ? &(Vd0= mscale(V, (1+geom3::WALL)/2)) :
|
||||
WDIM == 3 ? &V:
|
||||
!wmspatial ? &V :
|
||||
sl ? &(Vd0= mscale(V, geom3::SLEV[sl] - geom3::FLOOR)) :
|
||||
(highwall(c) && GDIM == 2) ? &(Vd0= mscale(V, (1+geom3::WALL)/2)) :
|
||||
#if CAP_SHAPES
|
||||
(chasmg==1) ? &(Vd0 = mscale(V, geom3::LAKE)) :
|
||||
(chasmg==1) ? &(Vd0 = mscale(V, geom3::LAKE - geom3::FLOOR)) :
|
||||
#endif
|
||||
&V;
|
||||
|
||||
@ -5502,9 +5503,12 @@ void drawcell(cell *c, transmatrix V, int spinv, bool mirrored) {
|
||||
#endif
|
||||
error |= drawMonster(V, ctype, c, moncol);
|
||||
#if CAP_SHAPES
|
||||
if(Vboat != &V && Vboat != &Vboat0 && q != isize(ptds))
|
||||
pushdown(c, q, V, -geom3::factor_to_lev(zlevel(tC0((*Vboat)))),
|
||||
if(Vboat != &V && Vboat != &Vboat0 && q != isize(ptds)) {
|
||||
if(WDIM == 2)
|
||||
pushdown(c, q, V, geom3::SLEV[sl] - geom3::FLOOR, false, false);
|
||||
else pushdown(c, q, V, -geom3::factor_to_lev(zlevel(tC0((*Vboat)))),
|
||||
!isMultitile(c->monst), false);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
15
hypgraph.cpp
15
hypgraph.cpp
@ -1094,11 +1094,11 @@ void centerpc(ld aspd) {
|
||||
if(shmup::on && vid.sspeed > -5 && DIM == 3) {
|
||||
int id = subscreens::in ? subscreens::current_player : 0;
|
||||
viewctr = shmup::pc[id]->base->master;
|
||||
transmatrix& T = shmup::pc[id]->at;
|
||||
if(WDIM == 2)
|
||||
View = inverse(master_relative(shmup::pc[id]->base) * T);
|
||||
else
|
||||
View = inverse(T);
|
||||
transmatrix T = shmup::pc[id]->at;
|
||||
if(WDIM == 2) T = master_relative(shmup::pc[id]->base) * T;
|
||||
int sl = snakelevel(cwt.at);
|
||||
if(sl) T = T * zpush(geom3::SLEV[sl] - geom3::FLOOR);
|
||||
View = inverse(T);
|
||||
if(vid.yshift) View = cpush(2, wall_radar(viewctr.at->c7, T)) * View;
|
||||
if(WDIM == 2) View = cspin(0, 1, M_PI) * cspin(2, 1, M_PI/2 + shmup::playerturny[id]) * spin(-M_PI/2) * View;
|
||||
|
||||
@ -1121,7 +1121,10 @@ void centerpc(ld aspd) {
|
||||
|
||||
ors::unrotate(cwtV); ors::unrotate(View);
|
||||
|
||||
hyperpoint H = inverse(actual_view_transform) * tC0(cwtV);
|
||||
transmatrix T = cwtV;
|
||||
int sl = snakelevel(cwt.at);
|
||||
if(sl) T = T * zpush(geom3::SLEV[sl] - geom3::FLOOR);
|
||||
hyperpoint H = inverse(actual_view_transform) * tC0(T);
|
||||
ld R = zero_d(DIM, H) ? 0 : hdist0(H);
|
||||
if(R < 1e-9) {
|
||||
// either already centered or direction unknown
|
||||
|
Loading…
x
Reference in New Issue
Block a user