mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2024-11-27 14:37:16 +00:00
fixed the lines in the svg screenshots
This commit is contained in:
parent
8a231d8269
commit
a50169e3d3
@ -1143,7 +1143,6 @@ bool drawMonsterType(eMonster m, cell *where, const transmatrix& V, int col, dou
|
|||||||
|
|
||||||
{
|
{
|
||||||
dynamicval<int> dp(poly_outline);
|
dynamicval<int> dp(poly_outline);
|
||||||
dynamicval<double> dw(minwidth_global);
|
|
||||||
int eyecolor = 0x202020;
|
int eyecolor = 0x202020;
|
||||||
bool redeyes = false;
|
bool redeyes = false;
|
||||||
if(m == moHunterDog) eyecolor = 0xFF0000, redeyes = true;
|
if(m == moHunterDog) eyecolor = 0xFF0000, redeyes = true;
|
||||||
@ -1151,9 +1150,11 @@ bool drawMonsterType(eMonster m, cell *where, const transmatrix& V, int col, dou
|
|||||||
if(m == moHunterChanging) eyecolor = 0xFFFF00, redeyes = true;
|
if(m == moHunterChanging) eyecolor = 0xFFFF00, redeyes = true;
|
||||||
int eyes = darkena(eyecolor, 0, 0xFF);
|
int eyes = darkena(eyecolor, 0, 0xFF);
|
||||||
|
|
||||||
if(redeyes) poly_outline = eyes, minwidth_global = 1;
|
if(redeyes) poly_outline = eyes;
|
||||||
queuepoly(VAHEAD, shWolf1, eyes);
|
queuepoly(VAHEAD, shWolf1, eyes);
|
||||||
|
if(redeyes) lastptd().u.poly.flags |= POLY_FORCEWIDE;
|
||||||
queuepoly(VAHEAD, shWolf2, eyes);
|
queuepoly(VAHEAD, shWolf2, eyes);
|
||||||
|
if(redeyes) lastptd().u.poly.flags |= POLY_FORCEWIDE;
|
||||||
}
|
}
|
||||||
queuepoly(VAHEAD, shWolf3, darkena(m == moRunDog ? 0x202020 : 0x000000, 0, 0xFF));
|
queuepoly(VAHEAD, shWolf3, darkena(m == moRunDog ? 0x202020 : 0x000000, 0, 0xFF));
|
||||||
}
|
}
|
||||||
|
4
hyper.h
4
hyper.h
@ -1583,7 +1583,7 @@ extern bool nonbitrunc;
|
|||||||
|
|
||||||
namespace svg {
|
namespace svg {
|
||||||
void circle(int x, int y, int size, int col);
|
void circle(int x, int y, int size, int col);
|
||||||
void polygon(int *polyx, int *polyy, int polyi, int col, int outline, double minwidth);
|
void polygon(int *polyx, int *polyy, int polyi, int col, int outline, double linewidth);
|
||||||
void text(int x, int y, int size, const string& str, bool frame, int col, int align);
|
void text(int x, int y, int size, const string& str, bool frame, int col, int align);
|
||||||
extern bool in;
|
extern bool in;
|
||||||
extern const string *link;
|
extern const string *link;
|
||||||
@ -2359,7 +2359,7 @@ struct qpoly {
|
|||||||
const vector<glvertex> *tab;
|
const vector<glvertex> *tab;
|
||||||
int offset, cnt;
|
int offset, cnt;
|
||||||
int outline;
|
int outline;
|
||||||
double minwidth;
|
double linewidth;
|
||||||
int flags;
|
int flags;
|
||||||
textureinfo *tinf;
|
textureinfo *tinf;
|
||||||
};
|
};
|
||||||
|
27
polygons.cpp
27
polygons.cpp
@ -53,6 +53,9 @@ static const int POLY_CCONVEX = 8192;
|
|||||||
// new system of side checking
|
// new system of side checking
|
||||||
static const int POLY_CENTERIN = 16384;
|
static const int POLY_CENTERIN = 16384;
|
||||||
|
|
||||||
|
// force wide lines
|
||||||
|
static const int POLY_FORCEWIDE = (1<<15);
|
||||||
|
|
||||||
vector<hyperpoint> hpc;
|
vector<hyperpoint> hpc;
|
||||||
|
|
||||||
int prehpc;
|
int prehpc;
|
||||||
@ -62,7 +65,6 @@ bool first;
|
|||||||
bool fatborder;
|
bool fatborder;
|
||||||
|
|
||||||
int poly_outline;
|
int poly_outline;
|
||||||
double minwidth_global;
|
|
||||||
|
|
||||||
#define PSHIFT 0
|
#define PSHIFT 0
|
||||||
// #define STLSORT
|
// #define STLSORT
|
||||||
@ -425,21 +427,20 @@ void gldraw(const transmatrix& V, const vector<glvertex>& v, int ps, int pq, int
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
double linewidthat(const hyperpoint& h, double minwidth) {
|
double linewidthat(const hyperpoint& h, double linewidth, int flags) {
|
||||||
if((vid.antialias & AA_LINEWIDTH) && hyperbolic) {
|
if((vid.antialias & AA_LINEWIDTH) && hyperbolic && !(flags & POLY_FORCEWIDE)) {
|
||||||
double dz = h[2];
|
double dz = h[2];
|
||||||
if(dz < 1 || abs(dz-stereo::scrdist) < 1e-6) return vid.linewidth;
|
if(dz < 1 || abs(dz-stereo::scrdist) < 1e-6) return vid.linewidth;
|
||||||
else {
|
else {
|
||||||
double dx = sqrt(dz * dz - 1);
|
double dx = sqrt(dz * dz - 1);
|
||||||
double dfc = dx/(dz+1);
|
double dfc = dx/(dz+1);
|
||||||
dfc = 1 - dfc*dfc;
|
dfc = 1 - dfc*dfc;
|
||||||
return max(dfc, minwidth) * vid.linewidth;
|
return max(dfc, linewidth) * vid.linewidth;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return vid.linewidth;
|
return vid.linewidth;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// -radius to +3radius
|
// -radius to +3radius
|
||||||
|
|
||||||
int mercator_coord;
|
int mercator_coord;
|
||||||
@ -673,7 +674,7 @@ void drawpolyline(polytodraw& p) {
|
|||||||
|
|
||||||
#if CAP_GL
|
#if CAP_GL
|
||||||
if(vid.usingGL && using_perspective) {
|
if(vid.usingGL && using_perspective) {
|
||||||
glLineWidth(linewidthat(tC0(pp.V), pp.minwidth));
|
glLineWidth(linewidthat(tC0(pp.V), pp.linewidth, pp.flags));
|
||||||
gldraw(pp.V, *pp.tab, pp.offset, pp.cnt, p.col, pp.outline, pp.flags &~ POLY_INVERSE, pp.tinf);
|
gldraw(pp.V, *pp.tab, pp.offset, pp.cnt, p.col, pp.outline, pp.flags &~ POLY_INVERSE, pp.tinf);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -804,7 +805,7 @@ void drawpolyline(polytodraw& p) {
|
|||||||
if(pp.tinf && (poly_flags & POLY_INVERSE)) {
|
if(pp.tinf && (poly_flags & POLY_INVERSE)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
glLineWidth(linewidthat(tC0(pp.V), pp.minwidth));
|
glLineWidth(linewidthat(tC0(pp.V), pp.linewidth, pp.flags));
|
||||||
if(pp.tinf && pp.offset && !nofill) {
|
if(pp.tinf && pp.offset && !nofill) {
|
||||||
vector<glvertex> tv;
|
vector<glvertex> tv;
|
||||||
for(int i=0; i<pp.cnt; i++)
|
for(int i=0; i<pp.cnt; i++)
|
||||||
@ -824,7 +825,7 @@ void drawpolyline(polytodraw& p) {
|
|||||||
coords_to_poly();
|
coords_to_poly();
|
||||||
int col = p.col;
|
int col = p.col;
|
||||||
if(poly_flags & POLY_INVERSE) col = 0;
|
if(poly_flags & POLY_INVERSE) col = 0;
|
||||||
svg::polygon(polyx, polyy, polyi, col, pp.outline, pp.minwidth);
|
svg::polygon(polyx, polyy, polyi, col, pp.outline, pp.linewidth);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -903,7 +904,7 @@ void prettyline(hyperpoint h1, hyperpoint h2, int col, int lev) {
|
|||||||
pp.tab = &prettylinepoints;
|
pp.tab = &prettylinepoints;
|
||||||
pp.offset = 0;
|
pp.offset = 0;
|
||||||
pp.cnt = isize(prettylinepoints);
|
pp.cnt = isize(prettylinepoints);
|
||||||
pp.minwidth = vid.linewidth;
|
pp.linewidth = vid.linewidth;
|
||||||
p.col = 0;
|
p.col = 0;
|
||||||
pp.outline = col;
|
pp.outline = col;
|
||||||
pp.flags = POLY_ISSIDE;
|
pp.flags = POLY_ISSIDE;
|
||||||
@ -922,7 +923,7 @@ void prettypoly(const vector<hyperpoint>& t, int fillcol, int linecol, int lev)
|
|||||||
pp.tab = &prettylinepoints;
|
pp.tab = &prettylinepoints;
|
||||||
pp.offset = 0;
|
pp.offset = 0;
|
||||||
pp.cnt = isize(prettylinepoints);
|
pp.cnt = isize(prettylinepoints);
|
||||||
pp.minwidth = minwidth_global;
|
pp.linewidth = vid.linewidth;
|
||||||
p.col = fillcol;
|
p.col = fillcol;
|
||||||
pp.outline = linecol;
|
pp.outline = linecol;
|
||||||
pp.flags = POLY_ISSIDE;
|
pp.flags = POLY_ISSIDE;
|
||||||
@ -2409,7 +2410,7 @@ void queuepolyat(const transmatrix& V, const hpcshape& h, int col, int prio) {
|
|||||||
ptd.col = (darkened(col >> 8) << 8) + (col & 0xFF);
|
ptd.col = (darkened(col >> 8) << 8) + (col & 0xFF);
|
||||||
ptd.prio = prio << PSHIFT;
|
ptd.prio = prio << PSHIFT;
|
||||||
ptd.u.poly.outline = poly_outline;
|
ptd.u.poly.outline = poly_outline;
|
||||||
ptd.u.poly.minwidth = minwidth_global;
|
ptd.u.poly.linewidth = vid.linewidth;
|
||||||
ptd.u.poly.flags = h.flags;
|
ptd.u.poly.flags = h.flags;
|
||||||
ptd.u.poly.tinf = NULL;
|
ptd.u.poly.tinf = NULL;
|
||||||
}
|
}
|
||||||
@ -2435,7 +2436,7 @@ void queuetable(const transmatrix& V, const vector<glvertex>& f, int cnt, int li
|
|||||||
ptd.col = fillcol;
|
ptd.col = fillcol;
|
||||||
ptd.prio = prio << PSHIFT;
|
ptd.prio = prio << PSHIFT;
|
||||||
ptd.u.poly.outline = linecol;
|
ptd.u.poly.outline = linecol;
|
||||||
ptd.u.poly.minwidth = minwidth_global;
|
ptd.u.poly.linewidth = vid.linewidth;
|
||||||
ptd.u.poly.flags = 0;
|
ptd.u.poly.flags = 0;
|
||||||
ptd.u.poly.tinf = NULL;
|
ptd.u.poly.tinf = NULL;
|
||||||
}
|
}
|
||||||
@ -2471,7 +2472,7 @@ void queueline(const hyperpoint& H1, const hyperpoint& H2, int col, int prf, int
|
|||||||
ptd.u.line.H1 = H1;
|
ptd.u.line.H1 = H1;
|
||||||
ptd.u.line.H2 = H2;
|
ptd.u.line.H2 = H2;
|
||||||
ptd.u.line.prf = prf;
|
ptd.u.line.prf = prf;
|
||||||
ptd.u.line.width = (linewidthat(H1, minwidth_global) + linewidthat(H2, minwidth_global)) / 2;
|
ptd.u.line.width = (linewidthat(H1, vid.linewidth, 0) + linewidthat(H2, vid.linewidth, 0)) / 2;
|
||||||
ptd.col = (darkened(col >> 8) << 8) + (col & 0xFF);
|
ptd.col = (darkened(col >> 8) << 8) + (col & 0xFF);
|
||||||
ptd.prio = prio << PSHIFT;
|
ptd.prio = prio << PSHIFT;
|
||||||
}
|
}
|
||||||
|
@ -136,7 +136,7 @@ namespace svg {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void polygon(int *polyx, int *polyy, int polyi, int col, int outline, double minwidth) {
|
void polygon(int *polyx, int *polyy, int polyi, int col, int outline, double linewidth) {
|
||||||
|
|
||||||
if(invisible(col) && invisible(outline)) return;
|
if(invisible(col) && invisible(outline)) return;
|
||||||
if(polyi < 2) return;
|
if(polyi < 2) return;
|
||||||
@ -148,17 +148,17 @@ namespace svg {
|
|||||||
avgy += polyy[i];
|
avgy += polyy[i];
|
||||||
avgx /= polyi;
|
avgx /= polyi;
|
||||||
avgy /= polyi;
|
avgy /= polyi;
|
||||||
dfc = (avgx - vid.xcenter) * (avgx - vid.xcenter) +
|
dfc = pow(avgx - vid.xcenter, 2) +
|
||||||
(avgy - vid.ycenter) * (avgy - vid.ycenter);
|
pow((avgy - vid.ycenter) / vid.stretch, 2);
|
||||||
dfc /= vid.radius;
|
dfc /= vid.radius;
|
||||||
dfc /= vid.radius;
|
dfc /= vid.radius;
|
||||||
// 0 = center, 1 = edge
|
// 0 = center, 1 = edge
|
||||||
dfc = 1 - dfc;
|
dfc = 1 - dfc;
|
||||||
|
|
||||||
if(dfc < 0) dfc = 1;
|
if(dfc < 0) dfc = 1;
|
||||||
dfc = max<double>(dfc, 1) * minwidth;
|
dfc = max<double>(dfc, 1) * linewidth;
|
||||||
}
|
}
|
||||||
else dfc = .8 * minwidth;
|
else dfc = .8 * linewidth;
|
||||||
|
|
||||||
startstring();
|
startstring();
|
||||||
for(int i=0; i<polyi; i++) {
|
for(int i=0; i<polyi; i++) {
|
||||||
|
Loading…
Reference in New Issue
Block a user