1
0
mirror of https://github.com/zenorogue/hyperrogue.git synced 2024-12-25 17:40:36 +00:00

3D:: spinning items; improved Grimoire gfx

This commit is contained in:
? 2019-02-22 21:29:01 +01:00 committed by Zeno Rogue
parent ae257b952d
commit 6b893af89e

View File

@ -658,6 +658,9 @@ bool drawItemType(eItem it, cell *c, const transmatrix& V, int icol, int pticks,
poly_outline = OUTLINE_OTHER; poly_outline = OUTLINE_OTHER;
} }
transmatrix Vit = V;
if(DIM == 3 && c) Vit = V * cspin(0, 2, ptick(618, 0));
if(c && conformal::includeHistory && conformal::infindhistory.count(c)) poly_outline = OUTLINE_DEAD; if(c && conformal::includeHistory && conformal::infindhistory.count(c)) poly_outline = OUTLINE_DEAD;
if(!mmitem && it) return true; if(!mmitem && it) return true;
@ -668,18 +671,18 @@ bool drawItemType(eItem it, cell *c, const transmatrix& V, int icol, int pticks,
} }
else if(it == itStrongWind) { else if(it == itStrongWind) {
queuepoly(V * spinptick(750), shFan, darkena(icol, 0, 255)); queuepoly(Vit * spinptick(750), shFan, darkena(icol, 0, 255));
} }
else if(it == itWarning) { else if(it == itWarning) {
queuepoly(V * spinptick(750), shTriangle, darkena(icol, 0, 255)); queuepoly(Vit * spinptick(750), shTriangle, darkena(icol, 0, 255));
} }
else if(it == itBabyTortoise) { else if(it == itBabyTortoise) {
int bits = c ? tortoise::babymap[c] : tortoise::last; int bits = c ? tortoise::babymap[c] : tortoise::last;
int over = c && c->monst == moTortoise; int over = c && c->monst == moTortoise;
tortoise::draw(V * spinptick(5000) * ypush(crossf*.15), bits, over ? 4 : 2, 0); tortoise::draw(Vit * spinptick(5000) * ypush(crossf*.15), bits, over ? 4 : 2, 0);
// queuepoly(V, shHeptaMarker, darkena(tortoise::getMatchColor(bits), 0, 0xC0)); // queuepoly(Vit, shHeptaMarker, darkena(tortoise::getMatchColor(bits), 0, 0xC0));
} }
else if(it == itCompass) { else if(it == itCompass) {
@ -718,27 +721,27 @@ bool drawItemType(eItem it, cell *c, const transmatrix& V, int icol, int pticks,
} }
else if(it == itPalace) { else if(it == itPalace) {
transmatrix V2 = V * spin(ticks / 1500.); transmatrix V2 = Vit * spin(ticks / 1500.);
draw_floorshape(c, V2, shMFloor3, 0xFFD500FF); draw_floorshape(c, V2, shMFloor3, 0xFFD500FF);
draw_floorshape(c, V2, shMFloor4, darkena(icol, 0, 0xFF)); draw_floorshape(c, V2, shMFloor4, darkena(icol, 0, 0xFF));
queuepoly(V2, shGem[ct6], 0xFFD500FF); queuepoly(V2, shGem[ct6], 0xFFD500FF);
xsh = NULL; xsh = NULL;
} }
else if(mapeditor::drawUserShape(V, mapeditor::sgItem, it, darkena(icol, 0, 0xFF), c)) ; else if(mapeditor::drawUserShape(Vit, mapeditor::sgItem, it, darkena(icol, 0, 0xFF), c)) ;
else if(it == itRose) { else if(it == itRose) {
for(int u=0; u<4; u++) for(int u=0; u<4; u++)
queuepoly(V * spinptick(1500) * spin(2*M_PI / 3 / 4 * u), shRose, darkena(icol, 0, hidden ? 0x30 : 0xA0)); queuepoly(Vit * spinptick(1500) * spin(2*M_PI / 3 / 4 * u), shRose, darkena(icol, 0, hidden ? 0x30 : 0xA0));
} }
else if(it == itBarrow && c) { else if(it == itBarrow && c) {
for(int i = 0; i<c->landparam; i++) for(int i = 0; i<c->landparam; i++)
queuepolyat(V * spin(2 * M_PI * i / c->landparam) * xpush(.15) * spinptick(1500), *xsh, darkena(icol, 0, hidden ? 0x40 : queuepolyat(Vit * spin(2 * M_PI * i / c->landparam) * xpush(.15) * spinptick(1500), *xsh, darkena(icol, 0, hidden ? 0x40 :
(highwall(c) && wmspatial) ? 0x60 : 0xFF), (highwall(c) && wmspatial) ? 0x60 : 0xFF),
PPR::HIDDEN); PPR::HIDDEN);
// queuepoly(V*spin(M_PI+(1-2*ang)*2*M_PI/S84), shMagicSword, darkena(0xC00000, 0, 0x80 + 0x70 * sin(ticks / 200.0))); // queuepoly(Vit*spin(M_PI+(1-2*ang)*2*M_PI/S84), shMagicSword, darkena(0xC00000, 0, 0x80 + 0x70 * sin(ticks / 200.0)));
} }
else if(xsh) { else if(xsh) {
@ -749,10 +752,14 @@ bool drawItemType(eItem it, cell *c, const transmatrix& V, int icol, int pticks,
if(it == itLotus) icol = 0x101010; if(it == itLotus) icol = 0x101010;
if(it == itSwitch) icol = minf[active_switch()].color; if(it == itSwitch) icol = minf[active_switch()].color;
transmatrix V2 = V * spinptick(1500); transmatrix V2 = Vit * spinptick(1500);
if(xsh == &shBookCover && mmitem) if(xsh == &shBookCover && mmitem) {
if(DIM == 3)
queuepoly(V2 * cpush(2, 1e-3), shBook, 0x805020FF);
else
queuepoly(V2, shBook, 0x805020FF); queuepoly(V2, shBook, 0x805020FF);
}
PPR pr = PPR::ITEM; PPR pr = PPR::ITEM;
int alpha = hidden ? (it == itKraken ? 0xC0 : 0x40) : 0xF0; int alpha = hidden ? (it == itKraken ? 0xC0 : 0x40) : 0xF0;
@ -761,7 +768,7 @@ bool drawItemType(eItem it, cell *c, const transmatrix& V, int icol, int pticks,
queuepolyat(V2, *xsh, darkena(icol, 0, alpha), pr); queuepolyat(V2, *xsh, darkena(icol, 0, alpha), pr);
if(it == itZebra) if(it == itZebra)
queuepolyat(V * spinptick(1500, .5/(ct6+6)), *xsh, darkena(0x202020, 0, hidden ? 0x40 : 0xF0), PPR::ITEMb); queuepolyat(Vit * spinptick(1500, .5/(ct6+6)), *xsh, darkena(0x202020, 0, hidden ? 0x40 : 0xF0), PPR::ITEMb);
} }
else if(xch == 'o' || it == itInventory) { else if(xch == 'o' || it == itInventory) {
@ -783,9 +790,9 @@ bool drawItemType(eItem it, cell *c, const transmatrix& V, int icol, int pticks,
color_t col = darkena(icol, 0, int(0x80 + 0x70 * sinptick(300))); color_t col = darkena(icol, 0, int(0x80 + 0x70 * sinptick(300)));
if(it == itOrbFish) if(it == itOrbFish)
queuepolyat(V * spinptick(1500), shFishTail, col, PPR::ITEM_BELOW); queuepolyat(Vit * spinptick(1500), shFishTail, col, PPR::ITEM_BELOW);
queuepolyat(V, shDisk, darkena(icol1, 0, inice ? 0x80 : hidden ? 0x20 : 0xC0), prio); queuepolyat(Vit, shDisk, darkena(icol1, 0, inice ? 0x80 : hidden ? 0x20 : 0xC0), prio);
hpcshape& sh = hpcshape& sh =
it == itOrbLove ? shLoveRing : it == itOrbLove ? shLoveRing :
isRangedOrb(it) ? shTargetRing : isRangedOrb(it) ? shTargetRing :
@ -795,7 +802,7 @@ bool drawItemType(eItem it, cell *c, const transmatrix& V, int icol, int pticks,
isDirectionalOrb(it) ? shSpearRing : isDirectionalOrb(it) ? shSpearRing :
among(it, itOrb37, itOrbGravity) ? shHeptaRing : among(it, itOrb37, itOrbGravity) ? shHeptaRing :
shRing; shRing;
queuepolyat(V * spinptick(1500), sh, col, prio); queuepolyat(Vit * spinptick(1500), sh, col, prio);
} }
else if(it) return true; else if(it) return true;