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

atscreenpos(x,y) now returns the pixel-based matrix

This commit is contained in:
Zeno Rogue 2025-03-02 21:27:32 +01:00
parent 5575608b76
commit cd21ec8900

View File

@ -2563,27 +2563,27 @@ struct flat_model_enabler {
};
#endif
EX transmatrix atscreenpos(ld x, ld y, ld size) {
EX transmatrix atscreenpos(ld x, ld y) {
transmatrix V = Id;
if(pmodel == mdPixel) {
V[0][3] += (x - current_display->xcenter);
V[1][3] += (y - current_display->ycenter);
V[0][0] = size * 2 * cgi.hcrossf / cgi.crossf;
V[1][1] = size * 2 * cgi.hcrossf / cgi.crossf;
V[0][0] = 1;
V[1][1] = 1;
if(WDIM == 3) V[2][2] = -1;
}
else if(pmodel == mdHorocyclic) {
V[0][3] += (x - current_display->xcenter) * 2 / current_display->radius;
V[1][3] += (y - current_display->ycenter) * 2/ current_display->radius;
V[0][0] = size * 2 / current_display->radius;
V[1][1] = size * 2 / current_display->radius;
V[0][0] = 1;
V[1][1] = 1;
}
else {
V[0][2] += (x - current_display->xcenter);
V[1][2] += (y - current_display->ycenter);
V[0][0] = size * 2 * cgi.hcrossf / cgi.crossf;
V[1][1] = size * 2 * cgi.hcrossf / cgi.crossf;
V[0][0] = 1;
V[1][1] = 1;
V[2][2] = current_display->radius;
if(S3 >= OINF) V[0][0] /= 5, V[1][1] /= 5;
}
@ -2591,6 +2591,14 @@ EX transmatrix atscreenpos(ld x, ld y, ld size) {
return V;
}
EX transmatrix atscreenpos(ld x, ld y, ld size) {
transmatrix V = atscreenpos(x, y);
ld s = size * 2 * cgi.hcrossf / cgi.crossf;
V[0][0] *= s;
V[1][1] *= s;
return V;
}
void circle_around_center(ld radius, color_t linecol, color_t fillcol, PPR prio) {
#if CAP_QUEUE
if(among(pmodel, mdDisk, mdEquiarea, mdEquidistant, mdFisheye, mdFisheye2) && !(pmodel == mdDisk && hyperbolic && pconf.alpha <= -1) && models::camera_straight) {