mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2025-04-29 06:03:11 +00:00
fixed hunting flashes
This commit is contained in:
parent
26fb19e7a8
commit
e5a2116958
130
graph.cpp
130
graph.cpp
@ -4118,67 +4118,11 @@ void drawFlashes() {
|
|||||||
for(int k=0; k<isize(flashes); k++) {
|
for(int k=0; k<isize(flashes); k++) {
|
||||||
bool kill = true;
|
bool kill = true;
|
||||||
flashdata& f = flashes[k];
|
flashdata& f = flashes[k];
|
||||||
ADC(V, f.where) {
|
bool copies = false;
|
||||||
|
ADC(V, f.where) copies = true, draw_flash(f, V, kill);
|
||||||
int tim = ticks - f.t;
|
forCellIdEx(c2, id, f.where) if(!copies) ADC(V, c2) {
|
||||||
|
draw_flash(f, V * currentmap->iadj(f.where, id), kill);
|
||||||
if(tim <= f.size && !f.spd) kill = false;
|
copies = true;
|
||||||
|
|
||||||
if(f.spd) {
|
|
||||||
#if CAP_SHAPES
|
|
||||||
if(tim <= 300) kill = false;
|
|
||||||
int partcol = darkena(f.color, 0, GDIM == 3 ? 255 : max(255 - tim*255/300, 0));
|
|
||||||
poly_outline = OUTLINE_DEFAULT;
|
|
||||||
ld t = f.spd * tim * cgi.scalefactor / 50000.;
|
|
||||||
transmatrix T =
|
|
||||||
GDIM == 2 ? V * spin(f.angle) * xpush(t) :
|
|
||||||
V * cspin(0, 1, f.angle) * cspin(0, 2, f.angle2) * cpush(2, t);
|
|
||||||
queuepoly(T, cgi.shParticle[f.size], partcol);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
else if(f.size == 1000) {
|
|
||||||
for(int u=0; u<=tim; u++) {
|
|
||||||
if((u-tim)%50) continue;
|
|
||||||
if(u < tim-150) continue;
|
|
||||||
ld rad = u * 3 / 1000.;
|
|
||||||
rad = rad * (5-rad) / 2;
|
|
||||||
rad *= cgi.hexf;
|
|
||||||
int flashcol = f.color;
|
|
||||||
if(u > 500) flashcol = gradient(flashcol, 0, 500, u, 1100);
|
|
||||||
flashcol = darkena(flashcol, 0, 0xFF);
|
|
||||||
#if MAXMDIM >= 4
|
|
||||||
if(GDIM == 3)
|
|
||||||
queueball(V * zpush(cgi.GROIN1), rad, flashcol, itDiamond);
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
PRING(a) curvepoint(V*xspinpush0(a * M_PI / cgi.S42, rad));
|
|
||||||
queuecurve(flashcol, 0x8080808, PPR::LINE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if(f.size == 2000) {
|
|
||||||
for(int u=0; u<=tim; u++) {
|
|
||||||
if((u-tim)%50) continue;
|
|
||||||
if(u < tim-250) continue;
|
|
||||||
ld rad = u * 3 / 2000.;
|
|
||||||
rad = rad * (5-rad) * 1.25;
|
|
||||||
rad *= cgi.hexf;
|
|
||||||
int flashcol = f.color;
|
|
||||||
if(u > 1000) flashcol = gradient(flashcol, 0, 1000, u, 2200);
|
|
||||||
flashcol = darkena(flashcol, 0, 0xFF);
|
|
||||||
#if MAXMDIM >= 4
|
|
||||||
if(GDIM == 3)
|
|
||||||
queueball(V * zpush(cgi.GROIN1), rad, flashcol, itRuby);
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
PRING(a) curvepoint(V*xspinpush0(a * M_PI / cgi.S42, rad));
|
|
||||||
queuecurve(flashcol, 0x8080808, PPR::LINE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if(kill) {
|
if(kill) {
|
||||||
f = flashes[isize(flashes)-1];
|
f = flashes[isize(flashes)-1];
|
||||||
@ -4188,6 +4132,70 @@ void drawFlashes() {
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if CAP_QUEUE
|
||||||
|
EX void draw_flash(struct flashdata& f, const transmatrix& V, bool& kill) {
|
||||||
|
int tim = ticks - f.t;
|
||||||
|
|
||||||
|
if(tim <= f.size && !f.spd) kill = false;
|
||||||
|
|
||||||
|
if(f.spd) {
|
||||||
|
#if CAP_SHAPES
|
||||||
|
if(tim <= 300) kill = false;
|
||||||
|
int partcol = darkena(f.color, 0, GDIM == 3 ? 255 : max(255 - tim*255/300, 0));
|
||||||
|
poly_outline = OUTLINE_DEFAULT;
|
||||||
|
ld t = f.spd * tim * cgi.scalefactor / 50000.;
|
||||||
|
transmatrix T =
|
||||||
|
GDIM == 2 ? V * spin(f.angle) * xpush(t) :
|
||||||
|
V * cspin(0, 1, f.angle) * cspin(0, 2, f.angle2) * cpush(2, t);
|
||||||
|
queuepoly(T, cgi.shParticle[f.size], partcol);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
else if(f.size == 1000) {
|
||||||
|
for(int u=0; u<=tim; u++) {
|
||||||
|
if((u-tim)%50) continue;
|
||||||
|
if(u < tim-150) continue;
|
||||||
|
ld rad = u * 3 / 1000.;
|
||||||
|
rad = rad * (5-rad) / 2;
|
||||||
|
rad *= cgi.hexf;
|
||||||
|
int flashcol = f.color;
|
||||||
|
if(u > 500) flashcol = gradient(flashcol, 0, 500, u, 1100);
|
||||||
|
flashcol = darkena(flashcol, 0, 0xFF);
|
||||||
|
#if MAXMDIM >= 4
|
||||||
|
if(GDIM == 3)
|
||||||
|
queueball(V * zpush(cgi.GROIN1), rad, flashcol, itDiamond);
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
PRING(a) curvepoint(V*xspinpush0(a * M_PI / cgi.S42, rad));
|
||||||
|
queuecurve(flashcol, 0x8080808, PPR::LINE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(f.size == 2000) {
|
||||||
|
for(int u=0; u<=tim; u++) {
|
||||||
|
if((u-tim)%50) continue;
|
||||||
|
if(u < tim-250) continue;
|
||||||
|
ld rad = u * 3 / 2000.;
|
||||||
|
rad = rad * (5-rad) * 1.25;
|
||||||
|
rad *= cgi.hexf;
|
||||||
|
int flashcol = f.color;
|
||||||
|
if(u > 1000) flashcol = gradient(flashcol, 0, 1000, u, 2200);
|
||||||
|
flashcol = darkena(flashcol, 0, 0xFF);
|
||||||
|
#if MAXMDIM >= 4
|
||||||
|
if(GDIM == 3)
|
||||||
|
queueball(V * zpush(cgi.GROIN1), rad, flashcol, itRuby);
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
PRING(a) curvepoint(V*xspinpush0(a * M_PI / cgi.S42, rad));
|
||||||
|
queuecurve(flashcol, 0x8080808, PPR::LINE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
EX bool allowIncreasedSight() {
|
EX bool allowIncreasedSight() {
|
||||||
if(cheater || autocheat) return true;
|
if(cheater || autocheat) return true;
|
||||||
if(peace::on) return true;
|
if(peace::on) return true;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user