Advertisement
Guest User

Untitled

a guest
Jun 2nd, 2016
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.20 KB | None | 0 0
  1. //hlsl
  2. sampler sampler0_ : register(s0);
  3.  
  4. static const float RENDER_WIDTH = 1024*5;
  5. static const float RENDER_HEIGHT = 1024*5;
  6.  
  7. float frame_;
  8. float enemyX_;
  9. float enemyY_;
  10. float waveRadius_;
  11. struct PS_INPUT{
  12. float4 diffuse : COLOR0;
  13. float2 texCoord : TEXCOORD0;
  14. float2 vPos : VPOS;
  15. };
  16. struct PS_OUTPUT{float4 color : COLOR0;};
  17.  
  18. PS_OUTPUT PsWave( PS_INPUT In ) : COLOR0{
  19. PS_OUTPUT Out;
  20. float dist2 = pow(In.vPos.x-enemyX_ ,2) + pow(In.vPos.y-enemyY_ ,2);
  21. float dist = sqrt(dist2);
  22. float sinTheta = (In.vPos.y - enemyY_) / dist;
  23. float cosTheta = (In.vPos.x - enemyX_) / dist;
  24. float angle = In.vPos.y - enemyY_ + In.vPos.x - enemyX_ + frame_;
  25. angle = radians(angle);
  26.  
  27. float colorMult = 1;
  28.  
  29. float waveRadius = waveRadius_ + waveRadius_/64 - cos(angle)*12;
  30. float powerRatio = (waveRadius - dist) / waveRadius;
  31. if(powerRatio < 0){powerRatio = 0;}
  32. float biasRadius = waveRadius * powerRatio;
  33. float biasX = biasRadius * cosTheta;
  34. float biasY = biasRadius * sinTheta;
  35. float2 texUV;
  36. texUV.x = -biasX / RENDER_WIDTH + In.texCoord.x;
  37. texUV.y = -biasY / RENDER_HEIGHT + In.texCoord.y;
  38.  
  39. float4 colorTexture = tex2D(sampler0_, texUV);
  40. float4 colorDiffuse = In.diffuse;
  41. float4 color = colorTexture * colorDiffuse;
  42. if(powerRatio > 0){
  43. //color.r = color.r * (colorMult - powerRatio);
  44. color.g = color.g * (colorMult - powerRatio);
  45. color.b = color.b * (colorMult - powerRatio);
  46. }
  47.  
  48. Out.color = color;
  49.  
  50. return Out;
  51. }
  52.  
  53. technique TecWave{
  54. pass P0{
  55. PixelShader = compile ps_3_0 PsWave();
  56. }
  57. }
  58.  
  59. //calling task
  60.  
  61. task CallBossShader{
  62. let renderTexture = GetReservedRenderTargetName(0);
  63. let frame = 0;
  64. let baseEffectRadius = 32;
  65. let outerFluct = 40;
  66. let trueFluct = 0;
  67. let effectRadius = 5;
  68. let priEffectMin = 19;
  69. let priEffectMax = 22;
  70. SetInvalidRenderPriorityA1(priEffectMin, priEffectMax);
  71. let frameWidth = GetStgFrameWidth();
  72. let frameHeight = GetStgFrameHeight();
  73. let frameLeft = GetStgFrameLeft();
  74. let frameRight = frameLeft + frameWidth;
  75. let frameTop = GetStgFrameTop();
  76. let frameBottom = frameTop + frameHeight;
  77. let objWave = ObjPrim_Create(OBJ_SPRITE_2D);
  78.  
  79. Obj_SetRenderPriorityI(objWave, 24);
  80. ObjPrim_SetTexture(objWave, renderTexture);
  81. ObjSprite2D_SetSourceRect(objWave, frameLeft, frameTop, frameRight, frameBottom);
  82. ObjSprite2D_SetDestRect(objWave, 0, 0, frameWidth, frameHeight);
  83. Obj_SetRenderPriorityI(objWave, priEffectMax + 1);
  84.  
  85. let pathShader = GetCurrentScriptDirectory ~ "hlsl.txt";
  86. ObjShader_SetShaderF(objWave, pathShader);
  87. ObjShader_SetTechnique(objWave, "TecWave");
  88. let objEnemy = GetEnemyBossObjectID[0];
  89. while(!Obj_IsDeleted(objEnemy)){
  90. effectRadius = baseEffectRadius + trueFluct * 5+cos(frame)*64;
  91. let enemyX = ObjMove_GetX(objEnemy);
  92. let enemyY = ObjMove_GetY(objEnemy);
  93. RenderToTextureA1(renderTexture, priEffectMin, priEffectMax, true);
  94.  
  95. ObjShader_SetFloat(objWave, "frame_", frame);
  96. ObjShader_SetFloat(objWave, "enemyX_", enemyX + frameLeft);
  97. ObjShader_SetFloat(objWave, "enemyY_", enemyY + frameTop);
  98. ObjShader_SetFloat(objWave, "waveRadius_", effectRadius);
  99. if(trueFluct<outerFluct){trueFluct+=1;}
  100. frame+=7;
  101. yield;
  102. }
  103. Obj_Delete(objWave);
  104. ClearInvalidRenderPriority();
  105. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement