1
0
mirror of https://github.com/zenorogue/hyperrogue.git synced 2024-12-29 19:40:35 +00:00

fixed calc_relative_matrix for syntetic sphere

This commit is contained in:
Zeno Rogue 2018-08-19 13:44:25 +02:00
parent d5175882f6
commit 7ea60c60d8
2 changed files with 36 additions and 23 deletions

View File

@ -55,7 +55,7 @@ namespace gp { extern gp::local_info draw_li; }
transmatrix calc_relative_matrix(cell *c2, cell *c1, const hyperpoint& point_hint) { transmatrix calc_relative_matrix(cell *c2, cell *c1, const hyperpoint& point_hint) {
if(sphere) { if(stdsphere) {
if(!gmatrix0.count(c2) || !gmatrix0.count(c1)) { if(!gmatrix0.count(c2) || !gmatrix0.count(c1)) {
printf("building gmatrix0 (size=%d)\n", isize(gmatrix0)); printf("building gmatrix0 (size=%d)\n", isize(gmatrix0));
auto bak = gp::draw_li; auto bak = gp::draw_li;

View File

@ -1429,7 +1429,7 @@ void bshape(hpcshape& sh, int p, double shzoom, int shapeid, double bonus = 0, f
while(polydata[whereis + 2*qty] != NEWSHAPE) qty++; while(polydata[whereis + 2*qty] != NEWSHAPE) qty++;
double shzoomx = shzoom; double shzoomx = shzoom;
double shzoomy = shzoom; double shzoomy = shzoom;
if(shzoom == WOLF) shzoomx = 1.5 * (nonbitrunc ? crossf / hcrossf : 1), shzoomy = 1.6 * (nonbitrunc ? crossf / hcrossf : 1); if(shzoom == WOLF) shzoomx = 1.5 * (nonbitrunc && !syntetic ? crossf / hcrossf : 1), shzoomy = 1.6 * (nonbitrunc && !syntetic ? crossf / hcrossf : 1);
int rots2 = rots; int rots2 = rots;
// shapes 368..370 are specially designed // shapes 368..370 are specially designed
if(!(shapeid >= 368 && shapeid <= 370)) { if(!(shapeid >= 368 && shapeid <= 370)) {
@ -1561,6 +1561,8 @@ void buildpolys() {
// scales // scales
scalef = nonbitrunc ? crossf / hcrossf7 : hcrossf / hcrossf7; scalef = nonbitrunc ? crossf / hcrossf7 : hcrossf / hcrossf7;
ld xcrossf = crossf;
if(euclid) scalef *= .52/crossf; if(euclid) scalef *= .52/crossf;
double spzoom6 = sphere ? 1.2375 : 1; double spzoom6 = sphere ? 1.2375 : 1;
@ -1626,6 +1628,14 @@ void buildpolys() {
floorrad1 = rhexf * .8; floorrad1 = rhexf * .8;
} }
if(syntetic) {
triangleside = synt::edgelength;
goldbf = 1;
scalef = synt::edgelength / hcrossf7;
floorrad0 = floorrad1 = triangleside * .45;
xcrossf = synt::edgelength * .4;
}
// sidewall parameters for the 3D mode // sidewall parameters for the 3D mode
for(int k=0; k<SIDEPARS; k++) { for(int k=0; k<SIDEPARS; k++) {
double dlow=1, dhi=1; double dlow=1, dhi=1;
@ -1773,7 +1783,7 @@ void buildpolys() {
hpcpush(ddi(t*S28, zhexf*.5) * C0); hpcpush(ddi(t*S28, zhexf*.5) * C0);
} }
double disksize = crossf; double disksize = xcrossf;
if(nonbitrunc && a38) disksize *= 2; if(nonbitrunc && a38) disksize *= 2;
else if(a38) disksize *= 1.5; else if(a38) disksize *= 1.5;
else if(nonbitrunc && S6 == 8) disksize *= 1.5; else if(nonbitrunc && S6 == 8) disksize *= 1.5;
@ -1907,23 +1917,23 @@ void buildpolys() {
bshape(shCompass1, PPR_ITEM); bshape(shCompass1, PPR_ITEM);
RING(i) RING(i)
hpcpush(ddi(i, crossf * .35) * C0); hpcpush(ddi(i, xcrossf * .35) * C0);
bshape(shCompass2, PPR_ITEMa); bshape(shCompass2, PPR_ITEMa);
RING(i) RING(i)
hpcpush(ddi(i, crossf * .3) * C0); hpcpush(ddi(i, xcrossf * .3) * C0);
bshape(shCompass3, PPR_ITEMb); bshape(shCompass3, PPR_ITEMb);
hpcpush(ddi(0, crossf * .29) * C0); hpcpush(ddi(0, xcrossf * .29) * C0);
hpcpush(ddi(S21, crossf * .04) * C0); hpcpush(ddi(S21, xcrossf * .04) * C0);
hpcpush(ddi(-S21, crossf * .04) * C0); hpcpush(ddi(-S21, xcrossf * .04) * C0);
hpcpush(ddi(0, crossf * .29) * C0); hpcpush(ddi(0, xcrossf * .29) * C0);
/* bshape(shBranch, 32); /* bshape(shBranch, 32);
hpcpush(ddi(21, crossf/5) * C0); hpcpush(ddi(21, xcrossf/5) * C0);
hpcpush(ddi(21, -crossf/5) * C0); hpcpush(ddi(21, -xcrossf/5) * C0);
hpcpush(ddi(21, -crossf/5) * ddi(0, crossf) * C0); hpcpush(ddi(21, -xcrossf/5) * ddi(0, xcrossf) * C0);
hpcpush(ddi(21, crossf/5) * ddi(0, crossf) * C0); */ hpcpush(ddi(21, xcrossf/5) * ddi(0, xcrossf) * C0); */
bshape(shILeaf[0], PPR_ONTENTACLE); bshape(shILeaf[0], PPR_ONTENTACLE);
for(int t=0; t<=S6; t++) { for(int t=0; t<=S6; t++) {
@ -1945,11 +1955,11 @@ void buildpolys() {
bshape(shSlime, 33); bshape(shSlime, 33);
PRING(i) PRING(i)
hpcpush(ddi(i, crossf * (0.7 + .2 * sin(i * M_PI * 2 / S84 * 9))) * C0); hpcpush(ddi(i, xcrossf * (0.7 + .2 * sin(i * M_PI * 2 / S84 * 9))) * C0);
bshape(shJelly, 33); bshape(shJelly, 33);
PRING(i) PRING(i)
hpcpush(ddi(i, crossf * (0.4 + .03 * sin(i * M_PI * 2 / S84 * 7))) * C0); hpcpush(ddi(i, xcrossf * (0.4 + .03 * sin(i * M_PI * 2 / S84 * 7))) * C0);
bshape(shHeptaMarker, PPR_HEPTAMARK); bshape(shHeptaMarker, PPR_HEPTAMARK);
for(int t=0; t<=S7; t++) hpcpush(ddi(t*S12, zhexf*.2) * C0); for(int t=0; t<=S7; t++) hpcpush(ddi(t*S12, zhexf*.2) * C0);
@ -1959,11 +1969,11 @@ void buildpolys() {
bshape(shRose, PPR_ITEM); bshape(shRose, PPR_ITEM);
PRING(t) PRING(t)
hpcpush(spin(M_PI * t / (S42+.0)) * xpush(crossf * (0.2 + .15 * sin(M_PI * t / (S42+.0) * 3))) * C0); hpcpush(spin(M_PI * t / (S42+.0)) * xpush(xcrossf * (0.2 + .15 * sin(M_PI * t / (S42+.0) * 3))) * C0);
bshape(shThorns, PPR_THORNS); bshape(shThorns, PPR_THORNS);
for(int t=0; t<=60; t++) for(int t=0; t<=60; t++)
hpcpush(spin(M_PI * t / 30.0) * xpush(crossf * ((t&1) ? 0.3 : 0.6)) * C0); hpcpush(spin(M_PI * t / 30.0) * xpush(xcrossf * ((t&1) ? 0.3 : 0.6)) * C0);
for(int i=0; i<16; i++) { for(int i=0; i<16; i++) {
bshape(shParticle[i], PPR_PARTICLE); bshape(shParticle[i], PPR_PARTICLE);
@ -1980,14 +1990,17 @@ void buildpolys() {
if(a46 && !nonbitrunc) spzoom6 *= .9; if(a46 && !nonbitrunc) spzoom6 *= .9;
if(a47 && !nonbitrunc) spzoom6 *= .85; if(a47 && !nonbitrunc) spzoom6 *= .85;
shFullFloor.configure(hexvdist, rhexf); if(syntetic)
shFullFloor.configure(synt::edgelength/2, synt::edgelength/2);
else
shFullFloor.configure(hexvdist, rhexf);
shFloor.configure(floorrad0, floorrad1); shFloor.configure(floorrad0, floorrad1);
shMFloor.configure(floorrad0*7/8, floorrad1*7/8); shMFloor.configure(floorrad0*7/8, floorrad1*7/8);
shMFloor2.configure(floorrad0*6/8, floorrad1*6/8); shMFloor2.configure(floorrad0*6/8, floorrad1*6/8);
shMFloor3.configure(floorrad0*5/8, floorrad1*5/8); shMFloor3.configure(floorrad0*5/8, floorrad1*5/8);
shMFloor4.configure(floorrad0*4/8, floorrad1*4/8); shMFloor4.configure(floorrad0*4/8, floorrad1*4/8);
shBigTriangle.configure(triangleside, 0); shBigTriangle.prio = PPR_FLOOR_TOWER; shBigTriangle.configure(triangleside, 0); shBigTriangle.prio = PPR_FLOOR_TOWER;
shBigHepta.configure(0, (nonbitrunc ? tessf : crossf) * .97); shBigHepta.configure(0, (nonbitrunc ? tessf : xcrossf) * .97);
shTriheptaFloor.configure(trihepta0, trihepta1); shTriheptaFloor.configure(trihepta0, trihepta1);
shDragonFloor.prio = PPR_FLOOR_DRAGON; shDragonFloor.prio = PPR_FLOOR_DRAGON;
shPowerFloor.prio = PPR_FLOOR_DRAGON; shPowerFloor.prio = PPR_FLOOR_DRAGON;
@ -2070,11 +2083,11 @@ void buildpolys() {
// first layer monsters // first layer monsters
bshape(shTentacleX, PPR_TENTACLE0); bshape(shTentacleX, PPR_TENTACLE0);
drawTentacle(shTentacleX, crossf * .25, crossf * .1, 10); drawTentacle(shTentacleX, xcrossf * .25, xcrossf * .1, 10);
bshape(shIBranch, PPR_TENTACLE1); bshape(shIBranch, PPR_TENTACLE1);
drawTentacle(shIBranch, crossf * .1, crossf * .2, 5); drawTentacle(shIBranch, xcrossf * .1, xcrossf * .2, 5);
bshape(shTentacle, PPR_TENTACLE1); bshape(shTentacle, PPR_TENTACLE1);
drawTentacle(shTentacle, crossf * .2, crossf * .1, 10); drawTentacle(shTentacle, xcrossf * .2, xcrossf * .1, 10);
copyshape(shJoint, shDisk, PPR_ONTENTACLE); copyshape(shJoint, shDisk, PPR_ONTENTACLE);
bshape(shTentHead, PPR_ONTENTACLE, scalef, 79); bshape(shTentHead, PPR_ONTENTACLE, scalef, 79);
bshape(shWormHead, PPR_ONTENTACLE, scalef, 80); bshape(shWormHead, PPR_ONTENTACLE, scalef, 80);