Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //hlsl
- sampler sampler0_ : register(s0);
- static const float RENDER_WIDTH = 1024*5;
- static const float RENDER_HEIGHT = 1024*5;
- float frame_;
- float enemyX_;
- float enemyY_;
- float waveRadius_;
- struct PS_INPUT{
- float4 diffuse : COLOR0;
- float2 texCoord : TEXCOORD0;
- float2 vPos : VPOS;
- };
- struct PS_OUTPUT{float4 color : COLOR0;};
- PS_OUTPUT PsWave( PS_INPUT In ) : COLOR0{
- PS_OUTPUT Out;
- float dist2 = pow(In.vPos.x-enemyX_ ,2) + pow(In.vPos.y-enemyY_ ,2);
- float dist = sqrt(dist2);
- float sinTheta = (In.vPos.y - enemyY_) / dist;
- float cosTheta = (In.vPos.x - enemyX_) / dist;
- float angle = In.vPos.y - enemyY_ + In.vPos.x - enemyX_ + frame_;
- angle = radians(angle);
- float colorMult = 1;
- float waveRadius = waveRadius_ + waveRadius_/64 - cos(angle)*12;
- float powerRatio = (waveRadius - dist) / waveRadius;
- if(powerRatio < 0){powerRatio = 0;}
- float biasRadius = waveRadius * powerRatio;
- float biasX = biasRadius * cosTheta;
- float biasY = biasRadius * sinTheta;
- float2 texUV;
- texUV.x = -biasX / RENDER_WIDTH + In.texCoord.x;
- texUV.y = -biasY / RENDER_HEIGHT + In.texCoord.y;
- float4 colorTexture = tex2D(sampler0_, texUV);
- float4 colorDiffuse = In.diffuse;
- float4 color = colorTexture * colorDiffuse;
- if(powerRatio > 0){
- //color.r = color.r * (colorMult - powerRatio);
- color.g = color.g * (colorMult - powerRatio);
- color.b = color.b * (colorMult - powerRatio);
- }
- Out.color = color;
- return Out;
- }
- technique TecWave{
- pass P0{
- PixelShader = compile ps_3_0 PsWave();
- }
- }
- //calling task
- task CallBossShader{
- let renderTexture = GetReservedRenderTargetName(0);
- let frame = 0;
- let baseEffectRadius = 32;
- let outerFluct = 40;
- let trueFluct = 0;
- let effectRadius = 5;
- let priEffectMin = 19;
- let priEffectMax = 22;
- SetInvalidRenderPriorityA1(priEffectMin, priEffectMax);
- let frameWidth = GetStgFrameWidth();
- let frameHeight = GetStgFrameHeight();
- let frameLeft = GetStgFrameLeft();
- let frameRight = frameLeft + frameWidth;
- let frameTop = GetStgFrameTop();
- let frameBottom = frameTop + frameHeight;
- let objWave = ObjPrim_Create(OBJ_SPRITE_2D);
- Obj_SetRenderPriorityI(objWave, 24);
- ObjPrim_SetTexture(objWave, renderTexture);
- ObjSprite2D_SetSourceRect(objWave, frameLeft, frameTop, frameRight, frameBottom);
- ObjSprite2D_SetDestRect(objWave, 0, 0, frameWidth, frameHeight);
- Obj_SetRenderPriorityI(objWave, priEffectMax + 1);
- let pathShader = GetCurrentScriptDirectory ~ "hlsl.txt";
- ObjShader_SetShaderF(objWave, pathShader);
- ObjShader_SetTechnique(objWave, "TecWave");
- let objEnemy = GetEnemyBossObjectID[0];
- while(!Obj_IsDeleted(objEnemy)){
- effectRadius = baseEffectRadius + trueFluct * 5+cos(frame)*64;
- let enemyX = ObjMove_GetX(objEnemy);
- let enemyY = ObjMove_GetY(objEnemy);
- RenderToTextureA1(renderTexture, priEffectMin, priEffectMax, true);
- ObjShader_SetFloat(objWave, "frame_", frame);
- ObjShader_SetFloat(objWave, "enemyX_", enemyX + frameLeft);
- ObjShader_SetFloat(objWave, "enemyY_", enemyY + frameTop);
- ObjShader_SetFloat(objWave, "waveRadius_", effectRadius);
- if(trueFluct<outerFluct){trueFluct+=1;}
- frame+=7;
- yield;
- }
- Obj_Delete(objWave);
- ClearInvalidRenderPriority();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement