diff --git a/graph.cpp b/graph.cpp index dadba1c7..78164f77 100644 --- a/graph.cpp +++ b/graph.cpp @@ -2983,6 +2983,7 @@ void setcolors(cell *c, color_t& wcol, color_t& fcol) { break; case laCanvas: fcol = c->landparam; + if(c->wall == waWaxWall) wcol = c->landparam; break; case laPalace: fcol = floorcolors[c->land]; @@ -5244,9 +5245,9 @@ void drawcell(cell *c, transmatrix V, int spinv, bool mirrored) { #if CAP_EDIT if((cmode & sm::MAP) && lmouseover && darken == 0 && - !mouseout() && + (DIM == 3 || !mouseout()) && (patterns::whichPattern ? patterns::getpatterninfo0(c).id == patterns::getpatterninfo0(lmouseover).id : c == lmouseover)) { - queuecircle(V, .78, 0x00FFFFFF); + queuecircleat(c, .78, 0x00FFFFFF); } mapeditor::drawGhosts(c, V, ctype); @@ -5357,7 +5358,7 @@ void queuecircleat(cell *c, double rad, color_t col) { #define MOBON true #endif -cell *mouseover3() { +cell *forwardcell() { movedir md = vectodir(move_destination_vec(6)); cellwalker xc = cwt + md.d + wstep; return xc.at; @@ -5476,7 +5477,7 @@ void drawMarkers() { } if(DIM == 3 && !inHighQual && !shmup::on && vid.axes) { - cell *c = mouseover3(); + cell *c = forwardcell(); IG(c) queuecircleat(c, .8, getcs().uicolor); } #endif @@ -5624,7 +5625,16 @@ transmatrix cview() { } void precise_mouseover() { - if(DIM == 3) { mouseover2 = viewctr.at->c7; mouseover = mouseover3(); return; } + if(DIM == 3) { + mouseover2 = mouseover = viewctr.at->c7; + ld best = HUGE_VAL; + hyperpoint h = cpush(2, 1) * C0; + forCellEx(c1, mouseover2) { + ld dist = hdist(tC0(ggmatrix(c1)), h); + if(dist < best) mouseover = c1, best = dist; + } + return; + } if(!mouseover) return; cell *omouseover = mouseover; for(int loop = 0; loop < 10; loop++) { diff --git a/hyper.h b/hyper.h index 9643bbda..20ff6a18 100644 --- a/hyper.h +++ b/hyper.h @@ -994,6 +994,7 @@ bool displayfrSP(int x, int y, int sh, int b, int size, const string &s, color_t bool outofmap(hyperpoint h); void applymodel(hyperpoint H, hyperpoint& Hscr); void drawCircle(int x, int y, int size, color_t color, color_t fillcolor = 0); +void queuecircleat(cell *c, double rad, color_t col); void fixcolor(int& col); ld displayspin(cell *c, int d); bool non_spatial_model(); diff --git a/mapeditor.cpp b/mapeditor.cpp index 7a02c65f..b4f866a7 100644 --- a/mapeditor.cpp +++ b/mapeditor.cpp @@ -734,7 +734,7 @@ namespace mapeditor { break; case 6: c->land = laCanvas; - c->wall = waNone; + c->wall = DIM == 3 ? waWaxWall : waNone; c->landparam = paintwhat >> 8; break; case 4: