Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- task TWaveCircle()
- {
- //レンダリングターゲットに使用するテクスチャ
- let renderTexture = GetReservedRenderTargetName(0);
- let frame = 0; //フレーム
- let baseEffectRadius = 128; //基準エフェクト半径
- let outerFluct = 16; //エフェクト半径の最大変化量
- let effectRadius = 0; //エフェクト半径
- let priEffectMin = 20; //エフェクトをかける最小優先度
- let priEffectMax = 28; //エフェクトをかける最大優先度
- //背景のみエフェクトの対象とする
- //エフェクトの描画でまかなえるため、
- //優先度20~28の通常描画を無効にする。
- 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); //2Dスプライトオブジェクト生成
- Obj_SetRenderPriorityI(objWave, 25); //描画優先度を設定
- 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 ~ "SamplePS03_HLSL.txt";
- ObjShader_SetShaderF(objWave, pathShader);
- ObjShader_SetTechnique(objWave, "TecWave");
- //ボスのライフが0になるまでエフェクトをかける。
- let objEnemy = GetEnemyBossObjectID[0];
- while(ObjEnemy_GetInfo(objEnemy, INFO_LIFE) > 0)
- {
- //エフェクト半径
- effectRadius = baseEffectRadius + outerFluct * sin(frame*4);
- let enemyX = ObjMove_GetX(objEnemy); //敵座標X
- let enemyY = ObjMove_GetY(objEnemy); //敵座標Y
- //--------------------------------
- //優先度20~28(背景)をエフェクト用のテクスチャに描画
- //シェーダ解除
- 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);
- frame++;
- yield;
- }
- //エフェクト用オブジェクト削除
- Obj_Delete(objWave);
- ClearInvalidRenderPriority();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement