scen.graphics.cpp: correct the coordinate display in zoom's mode...

This commit is contained in:
ALONSO Laurent
2021-10-29 12:26:23 +02:00
committed by Celtic Minstrel
parent 89d94b2873
commit 9c14a7fd80

View File

@@ -933,12 +933,12 @@ void draw_terrain(){
else { else {
// fixme: the bounds are now correct and the scrolling must be fluid, // fixme: the bounds are now correct and the scrolling must be fluid,
// however, the procedure which displays is still bad // however, the select procedure is bad
tileImage(mainPtr, terrain_rect,bg[17]); tileImage(mainPtr, terrain_rect,bg[17]);
frame_rect(mainPtr, terrain_rect, sf::Color::Black); frame_rect(mainPtr, terrain_rect, sf::Color::Black);
// Width available: 64 4x4 tiles, 42 6x6 tiles, or 21 12x12 tiles -- 256 pixels // Width available: 64 4x4 tiles, 42 6x6 tiles, or 21 12x12 tiles -- 256 pixels
// Height available: 81 4x4 tiles, 54 6x6 tiles, or 27 12x12 tiles -- 324 pixels // Height available: 81 4x4 tiles, 54 6x6 tiles, or 27 12x12 tiles -- 324 pixels
short const size = cur_viewing_mode<3 ? mini_map_scales[cur_viewing_mode - 1] : 12; short const size = cur_viewing_mode<=3 ? mini_map_scales[cur_viewing_mode - 1] : 12;
int const max_dim = (editing_town ? town->max_dim : 48); int const max_dim = (editing_town ? town->max_dim : 48);
int const xNumTiles=(256 / size); int const xNumTiles=(256 / size);
int xMin = cen_x-(xNumTiles/2), xMax = xMin+xNumTiles; int xMin = cen_x-(xNumTiles/2), xMax = xMin+xNumTiles;
@@ -952,6 +952,8 @@ void draw_terrain(){
xMin=std::max(0, xMax-xNumTiles); xMin=std::max(0, xMax-xNumTiles);
cen_x=xMin+(xNumTiles/2); cen_x=xMin+(xNumTiles/2);
} }
if (xMax-xMin!=xNumTiles)
cen_x=(xNumTiles/2)-xMin;
int const yNumTiles=(324 / size); int const yNumTiles=(324 / size);
int yMin = cen_y-(yNumTiles/2), yMax = yMin+yNumTiles; int yMin = cen_y-(yNumTiles/2), yMax = yMin+yNumTiles;
if (yMin<0) { if (yMin<0) {
@@ -964,6 +966,8 @@ void draw_terrain(){
yMin=std::max(0, yMax-yNumTiles); yMin=std::max(0, yMax-yNumTiles);
cen_y=yMin+(yNumTiles/2); cen_y=yMin+(yNumTiles/2);
} }
if (yMax-yMin!=yNumTiles)
cen_y=(yNumTiles/2);
for(short q = xMin; q < xMax; q++) for(short q = xMin; q < xMax; q++)
for(short r = yMin; r < yMax; r++) { for(short r = yMin; r < yMax; r++) {
if(q < 0 || q >= max_dim || r < 0 || r >= max_dim) if(q < 0 || q >= max_dim || r < 0 || r >= max_dim)
@@ -1230,9 +1234,16 @@ void place_location() {
break; break;
} }
} }
} else if(mouse.in(terrain_rect) && mouse_spot.x >= 0) } else if(mouse.in(terrain_rect) && mouse_spot.x >= 0) {
sout << "Under mouse: x = " << (cen_x - 4 + mouse_spot.x) if(cur_viewing_mode <= 0 || cur_viewing_mode>=4)
<< ", y = " << (cen_y - 4 + mouse_spot.y); sout << "Under mouse: x = " << (cen_x - 4 + mouse_spot.x)
<< ", y = " << (cen_y - 4 + mouse_spot.y);
else {
short const &scale = mini_map_scales[cur_viewing_mode - 1];
sout << "Under mouse: x = " << (cen_x-256/scale/2 + mouse_spot.x)
<< ", y = " << (cen_y-324/scale/2 + mouse_spot.y);
}
}
if(sout.str().empty()) if(sout.str().empty())
sout << "Center: x = " << cen_x << ", y = " << cen_y; sout << "Center: x = " << cen_x << ", y = " << cen_y;
} else { } else {