diff options
| author | xolatile | 2025-08-04 22:53:42 +0200 |
|---|---|---|
| committer | xolatile | 2025-08-04 22:53:42 +0200 |
| commit | d309df4ce4d8ad0ed995a8e1c4267412a7782021 (patch) | |
| tree | 999ca8d785ecc1681e5eb7538ce2e6a18d244fa5 /src/engine/lightning.h | |
| parent | 29d613d9cb65a0faa7e3f80e75bea0b6d910cb9a (diff) | |
| download | xolatile-badassbug-d309df4ce4d8ad0ed995a8e1c4267412a7782021.tar.xz xolatile-badassbug-d309df4ce4d8ad0ed995a8e1c4267412a7782021.tar.zst | |
Bunch of small changes...
Diffstat (limited to 'src/engine/lightning.h')
| -rw-r--r-- | src/engine/lightning.h | 178 |
1 files changed, 89 insertions, 89 deletions
diff --git a/src/engine/lightning.h b/src/engine/lightning.h index 16b146d..cec993a 100644 --- a/src/engine/lightning.h +++ b/src/engine/lightning.h @@ -12,112 +12,112 @@ FVAR(lnblendpower, 0, 0.25f, 1000); static void calclightningjitter(int frame) { - loopi(MAXLIGHTNINGSTEPS) - { - lnjitterx[lnjitterframe][i] = -lnjitterradius + rnd(2*lnjitterradius + 1); - lnjittery[lnjitterframe][i] = -lnjitterradius + rnd(2*lnjitterradius + 1); - } + loopi(MAXLIGHTNINGSTEPS) + { + lnjitterx[lnjitterframe][i] = -lnjitterradius + rnd(2*lnjitterradius + 1); + lnjittery[lnjitterframe][i] = -lnjitterradius + rnd(2*lnjitterradius + 1); + } } static void setuplightning() { - if(!lastlnjitter || lastmillis-lastlnjitter > lnjittermillis) - { - if(!lastlnjitter) calclightningjitter(lnjitterframe); - lastlnjitter = lastmillis - (lastmillis%lnjittermillis); - calclightningjitter(lnjitterframe ^= 1); - } + if(!lastlnjitter || lastmillis-lastlnjitter > lnjittermillis) + { + if(!lastlnjitter) calclightningjitter(lnjitterframe); + lastlnjitter = lastmillis - (lastmillis%lnjittermillis); + calclightningjitter(lnjitterframe ^= 1); + } } static void renderlightning(Texture *tex, const vec &o, const vec &d, float sz) { - vec step(d); - step.sub(o); - float len = step.magnitude(); - int numsteps = clamp(int(ceil(len/LIGHTNINGSTEP)), 2, MAXLIGHTNINGSTEPS); - step.div(numsteps+1); - int jitteroffset = detrnd(int(d.x+d.y+d.z), MAXLIGHTNINGSTEPS); - vec cur(o), up, right; - up.orthogonal(step); - up.normalize(); - right.cross(up, step); - right.normalize(); - float scroll = -float(lastmillis%lnscrollmillis)/lnscrollmillis, - scrollscale = lnscrollscale*(LIGHTNINGSTEP*tex->ys)/(sz*tex->xs), - blend = pow(clamp(float(lastmillis - lastlnjitter)/lnjittermillis, 0.0f, 1.0f), lnblendpower), - jitter0 = (1-blend)*lnjitterscale*sz/lnjitterradius, jitter1 = blend*lnjitterscale*sz/lnjitterradius; - gle::begin(GL_TRIANGLE_STRIP); - loopj(numsteps) - { - vec next(cur); - next.add(step); - if(j+1==numsteps) next = d; - else - { - int lj = (j+jitteroffset)%MAXLIGHTNINGSTEPS; - next.add(vec(right).mul((jitter1*lnjitterx[lnjitterframe][lj] + jitter0*lnjitterx[lnjitterframe^1][lj]))); - next.add(vec(up).mul((jitter1*lnjittery[lnjitterframe][lj] + jitter0*lnjittery[lnjitterframe^1][lj]))); - } - vec dir1 = next, dir2 = next, across; - dir1.sub(cur); - dir2.sub(camera1->o); - across.cross(dir2, dir1).normalize().mul(sz); - gle::attribf(cur.x-across.x, cur.y-across.y, cur.z-across.z); - gle::attribf(scroll, 1); - gle::attribf(cur.x+across.x, cur.y+across.y, cur.z+across.z); - gle::attribf(scroll, 0); - scroll += scrollscale; - if(j+1==numsteps) - { - gle::attribf(next.x-across.x, next.y-across.y, next.z-across.z); - gle::attribf(scroll, 1); - gle::attribf(next.x+across.x, next.y+across.y, next.z+across.z); - gle::attribf(scroll, 0); - } - cur = next; - } - gle::end(); + vec step(d); + step.sub(o); + float len = step.magnitude(); + int numsteps = clamp(int(ceil(len/LIGHTNINGSTEP)), 2, MAXLIGHTNINGSTEPS); + step.div(numsteps+1); + int jitteroffset = detrnd(int(d.x+d.y+d.z), MAXLIGHTNINGSTEPS); + vec cur(o), up, right; + up.orthogonal(step); + up.normalize(); + right.cross(up, step); + right.normalize(); + float scroll = -float(lastmillis%lnscrollmillis)/lnscrollmillis, + scrollscale = lnscrollscale*(LIGHTNINGSTEP*tex->ys)/(sz*tex->xs), + blend = pow(clamp(float(lastmillis - lastlnjitter)/lnjittermillis, 0.0f, 1.0f), lnblendpower), + jitter0 = (1-blend)*lnjitterscale*sz/lnjitterradius, jitter1 = blend*lnjitterscale*sz/lnjitterradius; + gle::begin(GL_TRIANGLE_STRIP); + loopj(numsteps) + { + vec next(cur); + next.add(step); + if(j+1==numsteps) next = d; + else + { + int lj = (j+jitteroffset)%MAXLIGHTNINGSTEPS; + next.add(vec(right).mul((jitter1*lnjitterx[lnjitterframe][lj] + jitter0*lnjitterx[lnjitterframe^1][lj]))); + next.add(vec(up).mul((jitter1*lnjittery[lnjitterframe][lj] + jitter0*lnjittery[lnjitterframe^1][lj]))); + } + vec dir1 = next, dir2 = next, across; + dir1.sub(cur); + dir2.sub(camera1->o); + across.cross(dir2, dir1).normalize().mul(sz); + gle::attribf(cur.x-across.x, cur.y-across.y, cur.z-across.z); + gle::attribf(scroll, 1); + gle::attribf(cur.x+across.x, cur.y+across.y, cur.z+across.z); + gle::attribf(scroll, 0); + scroll += scrollscale; + if(j+1==numsteps) + { + gle::attribf(next.x-across.x, next.y-across.y, next.z-across.z); + gle::attribf(scroll, 1); + gle::attribf(next.x+across.x, next.y+across.y, next.z+across.z); + gle::attribf(scroll, 0); + } + cur = next; + } + gle::end(); } struct lightningrenderer : listrenderer { - lightningrenderer() - : listrenderer("packages/particles/lightning.png", 2, PT_LIGHTNING|PT_TRACK|PT_GLARE) - {} + lightningrenderer() + : listrenderer("packages/particles/lightning.png", 2, PT_LIGHTNING|PT_TRACK|PT_GLARE) + {} - void startrender() - { - glDisable(GL_CULL_FACE); - gle::defattrib(gle::ATTRIB_VERTEX, 3, GL_FLOAT); - gle::defattrib(gle::ATTRIB_TEXCOORD0, 2, GL_FLOAT); - } + void startrender() + { + glDisable(GL_CULL_FACE); + gle::defattrib(gle::ATTRIB_VERTEX, 3, GL_FLOAT); + gle::defattrib(gle::ATTRIB_TEXCOORD0, 2, GL_FLOAT); + } - void endrender() - { - glEnable(GL_CULL_FACE); - } + void endrender() + { + glEnable(GL_CULL_FACE); + } - void update() - { - setuplightning(); - } + void update() + { + setuplightning(); + } - void seedemitter(particleemitter &pe, const vec &o, const vec &d, int fade, float size, int gravity) - { - pe.maxfade = max(pe.maxfade, fade); - pe.extendbb(o, size); - pe.extendbb(d, size); - } + void seedemitter(particleemitter &pe, const vec &o, const vec &d, int fade, float size, int gravity) + { + pe.maxfade = max(pe.maxfade, fade); + pe.extendbb(o, size); + pe.extendbb(d, size); + } - void renderpart(listparticle *p, const vec &o, const vec &d, int blend, int ts) - { - blend = min(blend<<2, 255); - if(type&PT_MOD) //multiply alpha into color - gle::colorub((p->color.r*blend)>>8, (p->color.g*blend)>>8, (p->color.b*blend)>>8); - else - gle::color(p->color, blend); - renderlightning(tex, o, d, p->size); - } + void renderpart(listparticle *p, const vec &o, const vec &d, int blend, int ts) + { + blend = min(blend<<2, 255); + if(type&PT_MOD) //multiply alpha into color + gle::colorub((p->color.r*blend)>>8, (p->color.g*blend)>>8, (p->color.b*blend)>>8); + else + gle::color(p->color, blend); + renderlightning(tex, o, d, p->size); + } }; static lightningrenderer lightnings; |
