3D:: fixed item graphics

This commit is contained in:
? 2019-02-26 14:36:37 +01:00 committed by Zeno Rogue
parent 723f029b1d
commit 3de228fce1
2 changed files with 47 additions and 36 deletions

12
hyper.h
View File

@ -129,13 +129,6 @@ void addMessage(string s, char spamtype = 0);
#define euclid6 (masterless && !a4)
#define S6 (S3*2)
#define S42 (S7*S6)
#define S12 (S6*2)
#define S14 (S7*2)
#define S21 (S7*S3)
#define S28 (S7*4)
#define S36 (S6*6)
#define S84 (S7*S6*2)
#define MAX_S3 4
#define eurad crossf
@ -4227,11 +4220,10 @@ namespace ors {
bool saved_tortoise_on(cell *c);
#define RING(i) for(double i=0; i<=S84+1e-6; i+=S3 * pow(.5, vid.linequality))
#define REVRING(i) for(double i=S84; i>=-1e-6; i-=S3 * pow(.5, vid.linequality))
#define RING(i) for(double i=0; i<=S84+1e-6; i+=SD3 * pow(.5, vid.linequality))
#define REVRING(i) for(double i=S84; i>=-1e-6; i-=SD3 * pow(.5, vid.linequality))
#define PRING(i) for(double i=0; i<=S84+1e-6; i+= pow(.5, vid.linequality))
#define REVPRING(i) for(double i=S84; i>=-1e-6; i-=pow(.5, vid.linequality))
#if CAP_BT
void horopoint(ld y, ld x);
hyperpoint get_horopoint(ld y, ld x);

View File

@ -1684,6 +1684,8 @@ struct usershape {
array<map<int, usershape*>, mapeditor::USERSHAPEGROUPS> usershapes;
int SD3, SD6, SD7, S12, S14, S21, S28, S42, S36, S84;
transmatrix ddi(int a, ld x) { return xspinpush(a * M_PI / S42, x); }
void drawTentacle(hpcshape &h, ld rad, ld var, ld divby) {
@ -1969,6 +1971,23 @@ void buildpolys() {
gp::clear_plainshapes();
#endif
DEBB(DF_INIT, (debugfile,"buildpolys\n"));
if(DIM == 3) {
if(sphere) SD3 = 3, SD7 = 5;
else SD3 = SD7 = 4;
}
else {
SD3 = S3;
SD7 = S7;
}
SD6 = SD3 * 2;
S42 = SD7 * SD6;
S12 = SD6 * 2;
S14 = SD7 * 2;
S21 = SD7 * SD3;
S28 = SD7 * 4;
S36 = SD6 * 6;
S84 = S42 * 2;
// printf("crossf = %f euclid = %d sphere = %d\n", float(crossf), euclid, sphere);
hpc.clear();
@ -2104,41 +2123,41 @@ void buildpolys() {
// items
bshape(shGem[0], PPR::ITEM);
for(int t=0; t<=S6; t++) {
hpcpush(ddi(S7 + t*S14, zhexf*.4) * C0);
if(t != S6) hpcpush(ddi(S14 + t*S14, zhexf*.1) * C0);
for(int t=0; t<=SD6; t++) {
hpcpush(ddi(SD7 + t*S14, zhexf*.4) * C0);
if(t != SD6) hpcpush(ddi(S14 + t*S14, zhexf*.1) * C0);
}
bshape(shGem[1], PPR::ITEM);
if(S7 == 6) {
for(int t=0; t<=S6; t++) {
hpcpush(ddi(S7 + t*S14, zhexf*.4) * C0);
if(t != S6) hpcpush(ddi(S14 + t*S14, zhexf*.1) * C0);
if(SD7 == 6) {
for(int t=0; t<=SD6; t++) {
hpcpush(ddi(SD7 + t*S14, zhexf*.4) * C0);
if(t != SD6) hpcpush(ddi(S14 + t*S14, zhexf*.1) * C0);
}
}
else
for(int t=0; t<=S7; t++) hpcpush(ddi(t*S36, zhexf*.5) * C0);
for(int t=0; t<=SD7; t++) hpcpush(ddi(t*S36, zhexf*.5) * C0);
bshape(shStar, PPR::ITEM);
for(int t=0; t<=S84; t+=S6) {
for(int t=0; t<=S84; t+=SD6) {
hpcpush(ddi(t, zhexf*.2) * C0);
if(t != S84) hpcpush(ddi(t+3, zhexf*.6) * C0);
}
bshape(shDaisy, PPR::ITEM);
for(int t=0; t<=S6; t++) {
for(int t=0; t<=SD6; t++) {
hpcpush(ddi(t*S14, zhexf*.8*3/4) * C0);
if(t != S6) hpcpush(ddi(t*S14+S7, zhexf*-.5*3/4) * C0);
if(t != SD6) hpcpush(ddi(t*S14+SD7, zhexf*-.5*3/4) * C0);
}
hpcpush(ddi(0, zhexf*.6) * C0);
bshape(shTriangle, PPR::ITEM);
for(int t=0; t<=S3; t++) {
for(int t=0; t<=SD3; t++) {
hpcpush(ddi(t*S28, zhexf*.5) * C0);
}
bshape(shDisk, PPR::ITEM);
for(int i=0; i<=S84; i+=S3)
for(int i=0; i<=S84; i+=SD3)
hpcpush(ddi(i, orbsize * .2) * C0);
bshape(shDiskT, PPR::ITEM);
@ -2155,7 +2174,7 @@ void buildpolys() {
}
bshape(shDiskM, PPR::ITEM);
for(int i=0; i<=S84; i+=S3) {
for(int i=0; i<=S84; i+=SD3) {
hpcpush(ddi(i, orbsize * .1) * C0);
}
@ -2252,14 +2271,14 @@ void buildpolys() {
RING(i)
hpcpush(ddi(i, orbsize * .25) * C0);
REVPRING(i)
hpcpush(ddi(i, orbsize * (dmod(i, S28) < S7?.36 : .3)) * C0);
hpcpush(ddi(i, orbsize * (dmod(i, S28) < SD7?.36 : .3)) * C0);
hpcpush(ddi(0, orbsize * .25) * C0);
bshape(shHeptaRing, PPR::ITEM);
RING(i)
hpcpush(ddi(i, orbsize * .25) * C0);
REVPRING(i)
hpcpush(ddi(i, orbsize * (dmod(i, S12) < S3?.4 : .27)) * C0);
hpcpush(ddi(i, orbsize * (dmod(i, S12) < SD3?.4 : .27)) * C0);
hpcpush(ddi(0, orbsize * .25) * C0);
bshape(shCompass1, PPR::ITEM);
@ -2277,20 +2296,20 @@ void buildpolys() {
hpcpush(ddi(0, orbsize * .29) * C0);
bshape(shILeaf[0], PPR::ONTENTACLE);
for(int t=0; t<=S6; t++) {
hpcpush(ddi(S7 + t*S14, zhexf*.7) * C0);
if(t != S6)
for(int t=0; t<=SD6; t++) {
hpcpush(ddi(SD7 + t*S14, zhexf*.7) * C0);
if(t != SD6)
hpcpush(ddi(S14 + t*S14, zhexf*.15) * C0);
}
bshape(shILeaf[1], PPR::ONTENTACLE);
if(S3 == 3 && S7 % 3)
for(int t=0; t<=S7; t++) hpcpush(ddi(t*S36, zhexf*.8) * C0);
if(SD3 == 3 && SD7 % 3)
for(int t=0; t<=SD7; t++) hpcpush(ddi(t*S36, zhexf*.8) * C0);
else {
for(int t=0; t<=S7; t++) {
for(int t=0; t<=SD7; t++) {
hpcpush(ddi(t*S12, zhexf*.8) * C0);
if(t != S6)
hpcpush(ddi(t*S12 + S6, zhexf*.2) * C0);
if(t != SD6)
hpcpush(ddi(t*S12 + SD6, zhexf*.2) * C0);
}
}
@ -2303,10 +2322,10 @@ void buildpolys() {
hpcpush(ddi(i, scalefactor * hcrossf7 * (0.4 + .03 * sin(i * M_PI * 2 / S84 * 7))) * C0);
bshape(shHeptaMarker, PPR::HEPTAMARK);
for(int t=0; t<=S7; t++) hpcpush(ddi(t*S12, zhexf*.2) * C0);
for(int t=0; t<=SD7; t++) hpcpush(ddi(t*S12, zhexf*.2) * C0);
bshape(shSnowball, PPR::ITEM);
for(int t=0; t<=S7*4; t++) hpcpush(ddi(t*S3, zhexf*.1) * C0);
for(int t=0; t<=SD7*4; t++) hpcpush(ddi(t*SD3, zhexf*.1) * C0);
bshape(shRose, PPR::ITEM);
PRING(t)