whirl:: warp works

This commit is contained in:
Zeno Rogue 2018-04-04 15:05:12 +02:00
parent fdb8fce6c9
commit 4ca146549c
4 changed files with 25 additions and 13 deletions

View File

@ -3062,7 +3062,7 @@ bool use_swapped_duals() {
void floorShadow(cell *c, const transmatrix& V, int col, bool warp) {
if(pmodel == mdHyperboloid || pmodel == mdBall || pmodel == mdHemisphere)
return; // shadows break the depth testing
if(shmup::on || nonbitrunc) warp = false;
if(shmup::on || nbtnice) warp = false;
dynamicval<int> p(poly_outline, OUTLINE_TRANS);
if(wmescher && qfi.special) {
queuepolyat(V * qfi.spin * shadowmulmatrix, *qfi.shape, col, PPR_WALLSHADOW);
@ -3076,7 +3076,7 @@ void floorShadow(cell *c, const transmatrix& V, int col, bool warp) {
}
else {
auto si = patterns::getpatterninfo(c, 0, 0);
queuepolyat(V * applyPatterndir(c, si), shTriheptaFloorShadow[ctof(c)], col, PPR_WALLSHADOW);
queuepolyat(V * applyPatterndir(c, si), shTriheptaFloorShadow[si.id == 13 ? 2 : ctof(c)], col, PPR_WALLSHADOW);
}
}
else if(is_nice_dual(c)) {
@ -3131,7 +3131,7 @@ void qplainfloor(cell *c, bool warp, const transmatrix &V, int col) {
int wavephase;
void warpfloor(cell *c, const transmatrix& V, int col, int prio, bool warp) {
if(shmup::on || nonbitrunc) warp = false;
if(shmup::on || nbtnice) warp = false;
#if CAP_TEXTURE
if(qfi.tinf) {
queuetable(V*qfi.spin, qfi.tinf->vertices, size(qfi.tinf->vertices), 0, texture::config.recolor(col), prio);
@ -3183,7 +3183,7 @@ void escherSidewall(cell *c, int sidepar, const transmatrix& V, int col) {
}
void placeSidewall(cell *c, int i, int sidepar, const transmatrix& V, bool warp, bool mirr, int col) {
if(shmup::on || nonbitrunc) warp = false;
if(shmup::on || nbtnice) warp = false;
if(warp && !ishept(c) && (!c->mov[i] || !ishept(c->mov[i]))) return;
if(is_nice_dual(c)) {
if(pseudohept(c)) return;
@ -3998,9 +3998,9 @@ void drawcell(cell *c, transmatrix V, int spinv, bool mirrored) {
qfloor_eswap(c, Vf, shBigTriangle, darkena(fcol, fd, 0xFF));
}
else if(isWarped(c) && !nonbitrunc && !shmup::on) {
else if(isWarped(c) && !nbtnice && !shmup::on) {
auto si = patterns::getpatterninfo(c, 0, 0);
if(si.id < 13)
if(si.id < 14)
qfloor(c, Vf, applyPatterndir(c, si), shTriheptaFloor[si.id], darkena(fcol, fd, 0xFF));
else
qfloor(c, Vf, shFloor[ctof(c)], darkena(fcol, fd, 0xFF));

View File

@ -387,6 +387,7 @@ void addMessage(string s, char spamtype = 0);
#define ALPHA (M_PI*2/S7)
#define S7 ginf[geometry].sides
#define S3 ginf[geometry].vertex
#define hyperbolic_not37 ((S7 > 7 || S3 > 3) && hyperbolic)
#define weirdhyperbolic ((S7 > 7 || S3 > 3 || whirl::whirl) && hyperbolic)
#define stdhyperbolic (S7 == 7 && S3 == 3 && !whirl::whirl)

View File

@ -618,9 +618,11 @@ namespace patterns {
u += 2;
if(!ishept(c->mov[v])) qhex++;
}
if(u == 8 && qhex == 2) si.id = 12;
else if(u == 2 && qhex == 1) si.id = 8;
else if(u == 6 && qhex == 2) si.id = 10;
if(u == 8 && qhex == 2) u = 12;
else if(u == 2 && qhex == 1) u = 8;
else if(u == 6 && qhex == 2) u = 10;
if(whirl::whirl && pseudohept(c) && !ishept(c))
u = 13;
si.id = u;
if(u == 6) {
@ -678,7 +680,7 @@ namespace patterns {
val_all(c, si, 0, 0);
// get id:
if(stdhyperbolic && isWarped(c))
if((whirl::whirl? (S3==3) : !weirdhyperbolic) && isWarped(c))
val_warped(c, si);
else {
si.id = ishept(c) ? 1 : 0;
@ -975,7 +977,10 @@ bool warptype(cell *c) {
else
return c->master->distance & 1;
}
else return pattern_threecolor(c) == 0;
else if(whirl::whirl)
return pseudohept(c);
else
return pattern_threecolor(c) == 0;
}
namespace patterns {

View File

@ -976,7 +976,7 @@ hpcshape
shWave[8][2],
shFloor[2], shBFloor[2], shMFloor2[2], shMFloor3[2], shMFloor4[2],
shCircleFloor,
shFloorShadow[2], shTriheptaFloorShadow[2], shTriheptaEucShadow[3],
shFloorShadow[2], shTriheptaFloorShadow[3], shTriheptaEucShadow[3],
shWall[2], shMineMark[2], shFan,
shStarFloor[3], shCloudFloor[3], shTriFloor[3], shZebra[5],
shSwitchFloor[3], shSwitchDisk,
@ -993,7 +993,7 @@ hpcshape
shMercuryBridge[2],
shLeafFloor[2],
shBarrowFloor[3],
shTriheptaFloor[13], shTriheptaFloor2[2], shTriheptaEuc[3],
shTriheptaFloor[14], shTriheptaFloor2[2], shTriheptaEuc[3],
shCross, shGiantStar[2], shLake, shMirror,
shHalfFloor[3], shHalfMirror[3],
shGem[2], shStar, shDisk, shDiskT, shDiskS, shDiskM, shDiskSq, shRing,
@ -1349,6 +1349,12 @@ void buildpolys() {
bshape(shTriheptaFloorShadow[1], PPR_FLOOR);
for(int t=0; t<=S7; t++) hpcpush(ddi(t*S12 + tshift1, trihepta1*SHADMUL) * C0);
bshape(shTriheptaFloor[13], PPR_FLOOR);
for(int t=0; t<=S6; t++) hpcpush(ddi(t*S14 + S7, trihepta0*1.6) * C0);
bshape(shTriheptaFloorShadow[2], PPR_FLOOR);
for(int t=0; t<=S6; t++) hpcpush(ddi(t*S14 + S7, trihepta0*SHADMUL*1.6) * C0);
{double x = hexvdist;
bshape(shFullFloor[0], PPR_FLOOR);