1
0
mirror of https://github.com/zenorogue/hyperrogue.git synced 2024-11-27 14:37:16 +00:00

rogueviz:: use bitmaps on vertices

This commit is contained in:
Zeno Rogue 2019-06-01 17:06:15 +02:00
parent 212c0f54c4
commit 0cf61a901d
2 changed files with 58 additions and 3 deletions

View File

@ -119,8 +119,47 @@ colorpair perturb(colorpair cp) {
return cp; return cp;
} }
colorpair parse(const string& s) { colorpair parse(string s) {
colorpair cp; colorpair cp;
auto pospng = s.find(":PNG:");
if(pospng != string::npos) {
string fname = s.substr(pospng+5);
s = s.substr(0, pospng);
#if CAP_TEXTURE
cp.img = make_shared<rvimage>();
auto& i = *cp.img;
i.tdata.twidth = 1024;
if(!(i.tdata.readtexture(fname) && i.tdata.loadTextureGL())) {
println(hlog, "failed to load: ", fname);
cp.img = NULL;
return cp;
}
println(hlog, "loaded texture: ", fname);
for(int x=0; x<16; x++)
for(int y=0; y<16; y++) {
auto addv = [&] (ld x, ld y) {
x -= 8;
y -= 8;
x /= 16.;
y /= 16.;
ld r = max(abs(x), abs(y)) / hypot(x, y);
if(x || y) {
x *= r;
y *= r;
}
i.tinf.tvertices.push_back(glhr::makevertex(x + .5, y + .5, 0));
i.vertices.push_back(hpxy(x * .4, y * .4));
};
addv(x, y);
addv(x, y+1);
addv(x+1, y);
addv(x, y+1);
addv(x+1, y);
addv(x+1, y+1);
}
i.tinf.texture_id = i.tdata.textureid;
#endif
}
auto pos = s.find(":"); auto pos = s.find(":");
if(pos != string::npos) { if(pos != string::npos) {
cp.color1 = parse1(s.substr(0, pos)); cp.color1 = parse1(s.substr(0, pos));
@ -1163,6 +1202,15 @@ void queuedisk(const transmatrix& V, const colorpair& cp, bool legend, const str
else else
poly_outline = (bordcolor << 8) | 0xFF; poly_outline = (bordcolor << 8) | 0xFF;
if(cp.img) {
for(hyperpoint h: cp.img->vertices)
curvepoint(V * h);
auto& qc = queuecurve(0, 0xFFFFFFFF, PPR::MONSTER_HEAD);
qc.tinf = &cp.img->tinf;
qc.flags |= POLY_TRIANGLES;
return;
}
transmatrix V1; transmatrix V1;
auto& sh = auto& sh =
@ -1619,8 +1667,8 @@ void readcolor(const string& cfname) {
} }
else { else {
ungetc(c2, f); ungetc(c2, f);
char buf[60]; char buf[600];
int err = fscanf(f, "%30s", buf); int err = fscanf(f, "%500s", buf);
if(err > 0) x = parse(buf); if(err > 0) x = parse(buf);
} }

View File

@ -35,9 +35,16 @@ namespace rogueviz {
edgeinfo(edgetype *t) { orig = NULL; lastdraw = -1; type = t; } edgeinfo(edgetype *t) { orig = NULL; lastdraw = -1; type = t; }
}; };
struct rvimage {
basic_textureinfo tinf;
texture::texture_data tdata;
vector<hyperpoint> vertices;
};
struct colorpair { struct colorpair {
color_t color1, color2; color_t color1, color2;
char shade; char shade;
shared_ptr<rvimage> img;
colorpair(color_t col = 0xC0C0C0FF) { shade = 0; color1 = col; } colorpair(color_t col = 0xC0C0C0FF) { shade = 0; color1 = col; }
}; };