//--------------------
//GtFNgȂ
//--------------------

//GtFNg}l[W
//GtFNg^CvCparam1, param2
task main_Effect_EffectManager()
{
	loop
	{
		let effects = GetCommonDataDefaultEx("INVADER","Stage.Effect",[]);
		if(length(effects) > 0)
		{
			ascent(i in 0..length(effects))
			{
				let effect_item = effects[i];
				alternative(effect_item[0])
				case(_EFFECT_CAUTION)
				{
					main_Effect_Caution(effect_item[1], effect_item[2]);
				}
				case(_EFFECT_BURST)
				{
					main_Effect_Burst(effect_item[1], effect_item[2], [220, 220, 220, 220]);
				}
				case(_EFFECT_WARNING)
				{
					main_Effect_Warning(GetCenterX(), GetCenterY());
				}
				case(_EFFECT_UFO)
				{
					main_Effect_UFOencounter(GetCenterX(), GetClipMinY()+10);
				}
				case(_EFFECT_SPELL)
				{
					main_Effect_Spell(effect_item[1]);
				}

			}
			SetCommonDataEx("INVADER","Stage.Effect", []);
		}

		 loop(2){ yield; }
	 }



}//end task


//Vbg
task main_Effect_EraseShot(let baseX, let baseY, let rad, let time)
{

	ascent(i in 0..time){
		let r = rad * (i+1)/time;
		DeleteEnemyShotImmediatelyInCircle(SHOT, baseX, baseY, r);
		yield;
	}

}//end task

//XRA\
task main_Effect_Score(let x, let y, let score, let rate)
{

	score_text();
	if(rate >= 2)
	{
		loop(4){yield;}
		rate_text();
	}

	//--------
	task score_text()
	{

		let obj = REMY_Effect_CreateObject(img_System, 4, 5);
		let rect;
		alternative(score)
		case(10){rect = func_GetGraphicRect("SCORE10");}
		case(20){rect = func_GetGraphicRect("SCORE20");}
		case(30){rect = func_GetGraphicRect("SCORE30");}
		case(50){rect = func_GetGraphicRect("SCORE50");}
		case(100){rect = func_GetGraphicRect("SCORE100");}
		case(150){rect = func_GetGraphicRect("SCORE150");}
		case(300){rect = func_GetGraphicRect("SCORE300");}
		others{ return; }

		REMY_Effect_SetVertexSquare(obj, rect, [0, 0], [255, 255, 255, 255]);
		Obj_SetPosition(obj, x, y);
		ObjEffect_SetRenderState(obj, ALPHA);
		ObjEffect_SetScale(obj, 1.0, 1.0);
		Obj_SetSpeed(obj, 0.1);
		Obj_SetAngle(obj, -90);

		loop(30){ yield; }
		REMY_Effect_FadeDelete(obj, 30, 4, [255,255,255,255]);

	}//end task

	task rate_text()
	{
		let obj = REMY_Effect_CreateObject(img_System, 4, 5);
		let rect;
		alternative(rate)
		case(2){rect = func_GetGraphicRect("SCOREx2");}
		case(3){rect = func_GetGraphicRect("SCOREx3");}
		case(4){rect = func_GetGraphicRect("SCOREx4");}
		case(5){rect = func_GetGraphicRect("SCOREx5");}
		REMY_Effect_SetVertexSquare(obj, rect, [0, 0], [255, 255, 255, 255]);
		Obj_SetPosition(obj, x, y + 20);
		ObjEffect_SetRenderState(obj, ALPHA);
		ObjEffect_SetScale(obj, 1.0, 1.0);
		Obj_SetSpeed(obj, 0.1);
		Obj_SetAngle(obj, -90);

		loop(40){ yield; }
		REMY_Effect_FadeDelete(obj, 30, 4, [255,255,255,255]);
		
	}//end task

}//end task


//XRA\
task main_Effect_PopString(let x, let y, let type, let color)
{

	type_text();

	//--------
	task type_text()
	{

		let obj = REMY_Effect_CreateObject(img_System, 4, 5);
		let rect;
		alternative(type)
		case("EXTEND"){rect = func_GetGraphicRect("EXTEND");}
		others{ return; }

		REMY_Effect_SetVertexSquare(obj, rect, [0, 0], [color[0], color[1], color[2], color[3]]);
		Obj_SetPosition(obj, x, y);
		ObjEffect_SetRenderState(obj, ALPHA);
		ObjEffect_SetScale(obj, 1.0, 1.0);
		Obj_SetSpeed(obj, 0.1);
		Obj_SetAngle(obj, -90);

		loop(30){ yield; }
		REMY_Effect_FadeDelete(obj, 30, 4, [color[0], color[1], color[2], color[3]]);

	}//end task

}//endtask


//UFOł邼[
task main_Effect_UFOencounter(let x, let y)
{

	text();

	//--------
	task text()
	{

		let obj = REMY_Effect_CreateObject(img_System, 4, 5);
		let rect = func_GetGraphicRect("UFO_ENCOUNTER");

		REMY_Effect_SetVertexSquare(obj, rect, [0, 0], [255, 240, 50, 50]);
		Obj_SetPosition(obj, x, y);
		ObjEffect_SetRenderState(obj, ALPHA);
		ObjEffect_SetScale(obj, 1.0, 1.0);

		loop(3){
			loop(20){ yield; }
			REMY_Effect_SetColorSquare(obj, [0, 240, 50, 50]);
			loop(20){ yield; }
			REMY_Effect_SetColorSquare(obj, [255, 240, 50, 50]);
		}

		loop(30){ yield; }
		REMY_Effect_FadeDelete(obj, 30, 4, [255, 240, 50, 50]);

	}//end task

}//endtask

//t[Ỹ^CJEg
task main_Effect_FreezeTimeCount(let counter)
{

	let baseX = GetPlayerX();
	let baseY = GetPlayerY();
	let c = counter;
	let changed = false;

	ascent(i in 0..counter)
	{
		chip(i);
	}

	loop{
		yield;
		baseX = GetPlayerX();
		baseY = GetPlayerY();
		changed = (c != func_Enemy_GetStopAllCounter());
		c = func_Enemy_GetStopAllCounter();
		if(c <= 0){ break; }
	}

	//--------
	task chip(let id)
	{
		let ang = -90 + 360 * (id / counter);
		let x = 25 * cos(ang);
		let y = 25 * sin(ang);
		let obj = REMY_Effect_CreateObject(img_System, 4, 5);
		let rect = func_GetGraphicRect("TIMER_CHIP");

		REMY_Effect_SetVertexSquare(obj, rect, [0, 0], [255, 50, 150, 250]);
		ObjEffect_SetAngle(obj, 0, 0, ang);
		ObjEffect_SetRenderState(obj, ALPHA);
		ObjEffect_SetScale(obj, 1.0, 1.0);

		move();

		loop{
			yield;
			if(changed && id >= c){
				REMY_Effect_SetColorSquare(obj, [255, 240, 150, 50]);
			}
			if(c <= 0){ break; }
		}

		loop(30){ yield; }
		REMY_Effect_FadeDelete(obj, 20, 4, [255, 240, 150, 50]);

		//--------------
		task move()
		{
			loop{
				yield;
				if(Obj_BeDeleted(obj)){ break; }
				Obj_SetPosition(obj, baseX + x, baseY + y);
			}
		}

	}//end task

}//endtask


//EH[jO
task main_Effect_Warning(let x, let y)
{

	text();

	//--------
	task text()
	{

		let obj = REMY_Effect_CreateObject(img_Warning, 4, 5);
		let rect = func_GetGraphicRect("WARNING");

		REMY_Effect_SetVertexSquare(obj, rect, [0, 0], [255, 240, 50, 50]);
		Obj_SetPosition(obj, x, y);
		ObjEffect_SetRenderState(obj, ALPHA);
		ObjEffect_SetScale(obj, 1.0, 1.0);

		loop(3){
			PlaySE(se_Warning);
			loop(40){ yield; }
			REMY_Effect_SetColorSquare(obj, [0, 240, 50, 50]);
			loop(40){ yield; }
			REMY_Effect_SetColorSquare(obj, [255, 240, 50, 50]);
		}
		PlaySE(se_Warning);
		loop(30){ yield; }
		REMY_Effect_FadeDelete(obj, 30, 4, [255, 240, 50, 50]);

	}//end task

}//endtask

//R[V
task main_Effect_Caution(let x, let y)
{

	icon();

	//--------
	task icon()
	{
		let count = 0;
		let obj = REMY_Effect_CreateObject(img_System, 4, 5);
		let rect = func_GetGraphicRect("CAUTION");

		REMY_Effect_SetVertexSquare(obj, rect, [0, 0], [255, 240, 250, 50]);
		Obj_SetPosition(obj, x, y);
		ObjEffect_SetRenderState(obj, ALPHA);
		ObjEffect_SetScale(obj, 1.0, 1.0);

		loop(3){
			loop(14){ yield; }
			REMY_Effect_SetColorSquare(obj, [0, 240, 50, 50]);
			loop(6){ yield; }
			REMY_Effect_SetColorSquare(obj, [255, 240, [50, 240][count % 2], 50]);
			count++;
		}

		loop(14){ yield; }
		REMY_Effect_FadeDelete(obj, 30, 4, [255, 240, 50, 50]);

	}//end task

}//endtask



//
task main_Effect_Burst(let x, let y, let argb)
{

	burst();

	//--------
	task burst()
	{

		let obj = REMY_Effect_CreateObject(img_Explode2, 4, 5);

		REMY_Effect_SetVertexSquare(obj, [0, 0, 32, 32], [0, 0], [argb[0], argb[1], argb[2], argb[3]]);
		Obj_SetPosition(obj, x, y);
		ObjEffect_SetRenderState(obj, ADD);
		ObjEffect_SetScale(obj, 2.0, 2.0);

		ascent(i in 0..6){
			loop(4){ yield; }
			let uv = [i * 32 , 0, i * 32 + 32, 32];
			REMY_Effect_SetUVSquare(obj, uv);
		}
		Obj_Delete(obj);

	}//end task

}//endtask


//Xy
task main_Effect_Spell(let type )
{
	let x_size = 1.0;

	PlaySE("seUseSpellCard.wav");

	text();
	line();

	//--------
	task text()
	{
		let obj = REMY_Effect_CreateObject(img_Spell, 4, 6);
		let rect = func_GetGraphicRect(["SPELL01","SPELL02","SPELL03","SPELL04"][type]);

		REMY_Effect_SetVertexSquare(obj, rect, [(rect[2]-rect[0]) / 2, 0], [255, 255, 255, 255]);
		Obj_SetPosition(obj, GetClipMaxX()-10, 240);
		ObjEffect_SetRenderState(obj, ALPHA);
		ObjEffect_SetScale(obj, 1.0, 1.0);
		x_size = ((rect[2]-rect[0]) +12)/ 256;

		loop(20){ yield; }
		ascent(i in 0..51)
		{
			let y = 30 + 200  * (1 - sin(i/50 * 90)); 
			Obj_SetPosition(obj, GetClipMaxX()-10, y);
			yield;
		}

		loop(300){ yield; }
		REMY_Effect_FadeDelete(obj, 120, 4, [255, 255, 255, 255]);


	}//end task

	task line()
	{
		let obj = REMY_Effect_CreateObject(img_Spell, 4, 6);
		let rect = func_GetGraphicRect("SPELL_LINE");

		REMY_Effect_SetVertexSquare(obj, rect, [(rect[2]-rect[0]) / 2, 0], [255, 255, 255, 255]);
		Obj_SetPosition(obj, GetClipMaxX()-10, 240 + 15);
		ObjEffect_SetRenderState(obj, ALPHA);
		ObjEffect_SetScale(obj, x_size, 1.0);

		loop(20){ yield; }
		ascent(i in 0..51)
		{
			let y = 30 + 200  * (1 - sin(i/50 * 90)); 
			Obj_SetPosition(obj, GetClipMaxX()-10, y + 15);
			yield;
		}

		loop(300){ yield; }
		REMY_Effect_FadeDelete(obj, 120, 4, [255, 255, 255, 255]);


	}//end task



}//endtask


//GtFNg
task main_Effect_SquareEffect(let posX, let posY, let size, let time, let angle_base, let argb)
{
	let obj = REMY_Effect_CreateObject(img_Explode, 10, 5);
	Obj_SetPosition(obj, posX, posY);

	ascent(j in 0..5)
	{
		VertOuter(j * 2);
		VertInner(j * 2 + 1);
	}

	loop(time){yield;}
	
	Obj_Delete(obj);
	
	//---------
	task VertOuter(let id)
	{
		let angle = angle_base - 45 + 90 * (trunc(id/2));
		let radius = 0;

		ascent(i in 0..time){
			radius = size * (1-  (1 -i / time) * (1 -i / time));
			let x = radius * sin(angle);
			let y = radius * cos(angle);		
			ObjEffect_SetVertexXY(obj, id, x, y);
			ObjEffect_SetVertexUV(obj, id, [0, 16, 0, 16, 0][trunc(id/2)],  [0, 0, 16, 16, 0][trunc(id/2)]);
			ObjEffect_SetVertexColor(obj, id, argb[0], argb[1], argb[2], argb[3]);
			yield;
		}
	}
	
	task VertInner(let id)
	{
		let angle = angle_base - 45 + 90 * (trunc(id/2));
		let radius = 0;

		ascent(i in 0..time){
			radius = size * ((i / time));
			let x = radius * sin(angle);
			let y = radius * cos(angle);		
			ObjEffect_SetVertexXY(obj, id, x, y);
			ObjEffect_SetVertexUV(obj, id, [0, 16, 0, 16, 0][trunc(id/2)],  [0, 0, 16, 16, 0][trunc(id/2)]);
			ObjEffect_SetVertexColor(obj, id, 255, 255, 255, 255);
			yield;
		}
	}
	
}
