- Try to get rid of all implicit casts from string to name, color or class. - Use FindClass where needed. - Used a map in a case where a dictionary was unneeded. - Use new bounce flags where needed. - Replace Legacy of Rust weapons/ammo.
182 lines
7.2 KiB
Text
182 lines
7.2 KiB
Text
// shaders stuff
|
|
|
|
extend Class SWWMHandler
|
|
{
|
|
static clearscope void ClearAllShaders( bool noscope = false )
|
|
{
|
|
PPShader.SetEnabled("WaterWarp",false);
|
|
PPShader.SetEnabled("LavaWarp",false);
|
|
PPShader.SetEnabled("SlimeWarp",false);
|
|
PPShader.SetEnabled("ZoomBlur",false);
|
|
if ( !noscope ) PPShader.SetEnabled("SilverScope",false);
|
|
PPShader.SetEnabled("BarrierShader",false);
|
|
PPShader.SetEnabled("GhostShader",false);
|
|
PPShader.SetEnabled("InvinciShader",false);
|
|
PPShader.SetEnabled("RagekitShader",false);
|
|
PPShader.SetEnabled("DevastationShader",false);
|
|
PPShader.SetEnabled("DivineShader",false);
|
|
PPShader.SetEnabled("Glitch",false);
|
|
PPShader.SetEnabled("Grain",false);
|
|
PPShader.SetEnabled("WindBlur",false);
|
|
PPShader.SetEnabled("BokehSel",false);
|
|
}
|
|
|
|
private ui void RenderShaders( RenderEvent e )
|
|
{
|
|
PlayerInfo p = players[consoleplayer];
|
|
let mo = p.mo;
|
|
bool pc = (p.camera == mo);
|
|
if ( !mo || !swwm_shaders || !pc )
|
|
{
|
|
if ( !swwm_shaders ) ClearAllShaders(true);
|
|
return;
|
|
}
|
|
// handle weapon wheel shader here
|
|
if ( wsel )
|
|
{
|
|
PPShader.SetEnabled("BokehSel",true);
|
|
double salph = SWWMUtility.Lerp(wsel.olalph,wsel.alph,e.fractic);
|
|
PPShader.SetUniform1f("BokehSel","strength",salph);
|
|
}
|
|
else PPShader.SetEnabled("BokehSel",false);
|
|
let divi = DivineSpriteEffect(mo.FindInventory('DivineSpriteEffect'));
|
|
if ( divi )
|
|
{
|
|
PPShader.SetEnabled("DivineShader",true);
|
|
PPShader.SetUniform1f("DivineShader","timer",(gametic+e.FracTic)/GameTicRate);
|
|
double str = divi.AlphInter?(clamp((divi.AlphInter.GetValue()-1000.)/6000.,0.,1.)**2.):0.;
|
|
PPShader.SetUniform1f("DivineShader","str",str);
|
|
}
|
|
else PPShader.SetEnabled("DevastationShader",false);
|
|
let deva = AngeryPower(mo.FindInventory('AngeryPower'));
|
|
if ( deva )
|
|
{
|
|
PPShader.SetEnabled("DevastationShader",true);
|
|
PPShader.SetUniform1f("DevastationShader","timer",(gametic+e.FracTic)/GameTicRate);
|
|
double xstrastr = 1.+max(0,deva.lastpulse-(gametic+e.Fractic))/35.;
|
|
PPShader.SetUniform1f("DevastationShader","xtrastr",xstrastr**2.);
|
|
}
|
|
else PPShader.SetEnabled("DevastationShader",false);
|
|
let rage = RagekitPower(mo.FindInventory('RagekitPower'));
|
|
if ( rage )
|
|
{
|
|
PPShader.SetEnabled("RagekitShader",true);
|
|
PPShader.SetUniform1f("RagekitShader","timer",(gametic+e.FracTic)/GameTicRate);
|
|
double xstrastr = 1.+max(0,rage.lastpulse-(gametic+e.Fractic))/35.;
|
|
PPShader.SetUniform1f("RagekitShader","xtrastr",xstrastr**2.);
|
|
}
|
|
else PPShader.SetEnabled("RagekitShader",false);
|
|
let ghost = GhostPower(mo.FindInventory('GhostPower'));
|
|
if ( ghost ) PPShader.SetEnabled("GhostShader",true);
|
|
else PPShader.SetEnabled("GhostShader",false);
|
|
let sunny = InvinciballPower(mo.FindInventory('InvinciballPower'));
|
|
if ( sunny )
|
|
{
|
|
PPShader.SetEnabled("InvinciShader",true);
|
|
double str = max(0,sunny.lastpulse-(gametic+e.Fractic))/35.;
|
|
PPShader.SetUniform1f("InvinciShader","str",str);
|
|
}
|
|
else PPShader.SetEnabled("InvinciShader",false);
|
|
let coat = BarrierPower(mo.FindInventory('BarrierPower'));
|
|
if ( coat )
|
|
{
|
|
PPShader.SetEnabled("BarrierShader",true);
|
|
PPShader.SetUniform1f("BarrierShader","timer",(gametic+e.FracTic)/GameTicRate);
|
|
}
|
|
else PPShader.SetEnabled("BarrierShader",false);
|
|
if ( !(mo is 'Demolitionist') )
|
|
{
|
|
PPShader.SetEnabled("WaterWarp",false);
|
|
PPShader.SetEnabled("LavaWarp",false);
|
|
PPShader.SetEnabled("SlimeWarp",false);
|
|
PPShader.SetEnabled("Glitch",false);
|
|
PPShader.SetEnabled("Grain",false);
|
|
PPShader.SetEnabled("ZoomBlur",false);
|
|
return;
|
|
}
|
|
let demo = Demolitionist(mo);
|
|
if ( demo.lastunder == Demolitionist.UNDER_WATER )
|
|
{
|
|
PPShader.SetEnabled("WaterWarp",true);
|
|
PPShader.SetUniform1f("WaterWarp","timer",(gametic+e.FracTic)/GameTicRate);
|
|
PPShader.SetUniform1f("WaterWarp","dfact",(coat?.25:1.)*underwater_fade_scalar);
|
|
PPShader.SetUniform3f("WaterWarp","lightcol",(demo.undercol.r/255.,demo.undercol.g/255.,demo.undercol.b/255.));
|
|
}
|
|
else PPShader.SetEnabled("WaterWarp",false);
|
|
if ( demo.lastunder == Demolitionist.UNDER_LAVA )
|
|
{
|
|
PPShader.SetEnabled("LavaWarp",true);
|
|
PPShader.SetUniform1f("LavaWarp","timer",(gametic+e.FracTic)/GameTicRate);
|
|
PPShader.SetUniform1f("LavaWarp","dfact",(coat?.25:1.)*underwater_fade_scalar);
|
|
PPShader.SetUniform3f("LavaWarp","lightcol",(demo.undercol.r/255.,demo.undercol.g/255.,demo.undercol.b/255.));
|
|
}
|
|
else PPShader.SetEnabled("LavaWarp",false);
|
|
if ( demo.lastunder == Demolitionist.UNDER_SLIME )
|
|
{
|
|
PPShader.SetEnabled("SlimeWarp",true);
|
|
PPShader.SetUniform1f("SlimeWarp","timer",(gametic+e.FracTic)/GameTicRate);
|
|
PPShader.SetUniform1f("SlimeWarp","dfact",(coat?.25:1.)*underwater_fade_scalar);
|
|
PPShader.SetUniform3f("SlimeWarp","lightcol",(demo.undercol.r/255.,demo.undercol.g/255.,demo.undercol.b/255.));
|
|
}
|
|
else PPShader.SetEnabled("SlimeWarp",false);
|
|
int lastdmg = (demo.Health>0)?demo.lastdamage:Random[Flicker](60,80);
|
|
int lastdmgtimer = (demo.Health>0)?demo.lastdamagetimer:(gametic+Random[Flicker](30,20));
|
|
double noiz = min(lastdmg*.09*max(0,(lastdmgtimer-(gametic+e.Fractic))/35.),.5)*blood_fade_scalar;
|
|
PPShader.SetEnabled("Glitch",noiz>0);
|
|
PPShader.SetEnabled("Grain",noiz>0);
|
|
if ( noiz > 0 )
|
|
{
|
|
PPShader.SetUniform1f("Glitch","Timer",(gametic+e.FracTic)/GameTicRate);
|
|
PPShader.SetUniform1f("Grain","Timer",(gametic+e.FracTic)/GameTicRate);
|
|
PPShader.SetUniform1f("Grain","ni",noiz);
|
|
noiz = min(lastdmg*.08*max(0,(lastdmgtimer-(gametic+e.Fractic))/35.),.8);
|
|
PPShader.SetUniform1f("Glitch","str1",noiz);
|
|
noiz = min(lastdmg*.03*max(0,(lastdmgtimer-(gametic+e.Fractic))/35.),3.5);
|
|
PPShader.SetUniform1f("Glitch","str2",noiz);
|
|
}
|
|
if ( demo.player.ReadyWeapon is 'ItamexHammer' )
|
|
{
|
|
let ham = ItamexHammer(demo.player.ReadyWeapon);
|
|
PPShader.SetEnabled("WindBlur",ham.bFalling||ham.bSpinning);
|
|
if ( ham.bFalling )
|
|
{
|
|
double hamfact = clamp(-demo.vel.z/25.,0.,1.);
|
|
PPShader.SetUniform1f("WindBlur","Speed",hamfact);
|
|
PPShader.SetUniform1f("WindBlur","Fade",hamfact**.5);
|
|
PPShader.SetUniform2f("WindBlur","WindDir",(0.,1.));
|
|
}
|
|
else if ( ham.bSpinning )
|
|
{
|
|
double hamfact = clamp(ham.charge/100.,0.,1.);
|
|
PPShader.SetUniform1f("WindBlur","Speed",hamfact);
|
|
PPShader.SetUniform1f("WindBlur","Fade",hamfact**.5);
|
|
PPShader.SetUniform2f("WindBlur","WindDir",(1.,0.));
|
|
}
|
|
}
|
|
else PPShader.SetEnabled("WindBlur",false);
|
|
if ( !demo.InStateSequence(demo.CurState,demo.FindState('Dash')) )
|
|
{
|
|
PPShader.SetEnabled("ZoomBlur",false);
|
|
return;
|
|
}
|
|
PPShader.SetEnabled("ZoomBlur",true);
|
|
Vector3 vel = demo.vel+demo.dashdir*demo.dashboost;
|
|
double baumpu = max(0.,(demo.bumptic-(gametic+e.Fractic))/35.);
|
|
vel += demo.dashdir*baumpu;
|
|
double spd = vel.length();
|
|
Vector3 worlddir = vel/spd;
|
|
PPShader.SetUniform1f("ZoomBlur","Fade",clamp((spd-20.)/60.,0.,1.));
|
|
double str = min(spd/40.,15.);
|
|
let [x, y, z] = SWWMUtility.GetAxes(e.ViewAngle,e.ViewPitch,e.ViewRoll);
|
|
Vector3 reldir = (worlddir dot y, worlddir dot z, worlddir dot x);
|
|
Vector2 centerspot = (.5+reldir.x*.5,.5+reldir.y*.5);
|
|
if ( reldir.z < 0 )
|
|
{
|
|
centerspot.x = 1.-centerspot.x;
|
|
centerspot.y = 1.-centerspot.y;
|
|
str *= -1;
|
|
}
|
|
PPShader.SetUniform1f("ZoomBlur","Str",str);
|
|
PPShader.SetUniform2f("ZoomBlur","CenterSpot",centerspot);
|
|
}
|
|
}
|