task Graze //グレイズに関するタスク
{
	let OldGraze=0;
	loop
	{
		let Graze=GetGraze-OldGraze;
		if(KekkaiOn==1)
		{
		if(Graze> 0)
		{
			loop(Graze)
			{
				Item;
			}
		}
		}
			OldGraze=GetGraze;
		if(Graze<0)
		{
			OldGraze=0;
		}
	yield;
	}
}

task Item //アイテム生成と挙動に関するタスク
{
		let bx1=GetPlayerX;
		let by1=GetPlayerY;
		let scax=0.6;
		let scay=0.6;
		let r=0;
		let angle=rand(240,300);

		let obj = Obj_Create(OBJ_EFFECT);
		ObjEffect_SetTexture(obj, imgShot);
		ObjEffect_SetPrimitiveType(obj, PRIMITIVE_TRIANGLEFAN);
		ObjEffect_SetRenderState(obj, ADD); 
		ObjEffect_CreateVertex(obj, 4);
		ObjEffect_SetVertexXY(obj, 0, -8, -8);
		ObjEffect_SetVertexXY(obj, 1, 8,  -8);
		ObjEffect_SetVertexXY(obj, 2, 8, 8);
		ObjEffect_SetVertexXY(obj, 3,  -8,  8);
		
		ObjEffect_SetVertexUV(obj, 0,  62,  320);
		ObjEffect_SetVertexUV(obj, 1,  77, 320);
		ObjEffect_SetVertexUV(obj, 2, 77,  335);
		ObjEffect_SetVertexUV(obj, 3, 62, 335);

		ObjEffect_SetVertexColor(obj,0,150,200,255,200);
		ObjEffect_SetVertexColor(obj,1,150,200,255,200);
		ObjEffect_SetVertexColor(obj,2,150,200,255,200);
		ObjEffect_SetVertexColor(obj,3,150,200,255,200);
		
		ObjEffect_SetAngle(obj, 0,0,0);
		ObjEffect_SetScale(obj, scax,scay);
		Obj_SetPosition(obj,bx1,by1);

		loop(30)
		{
			Obj_SetPosition(obj,bx1+r*cos(angle),by1+r*sin(angle));
			r++;
			yield;
		}
		while(!Obj_BeDeleted(obj))
		{
			angle=atan2(GetPlayerY-Obj_GetY(obj),GetPlayerX-Obj_GetX(obj));
			Obj_SetAngle(obj,angle);
			Obj_SetSpeed(obj,7.5);
			Obj_SetPosition(obj,Obj_GetX(obj),Obj_GetY(obj));
			if((Obj_GetX(obj)<=GetPlayerX+5 && Obj_GetX(obj)>=GetPlayerX-5) && (Obj_GetY(obj)<=GetPlayerY+5 && Obj_GetY(obj)>=GetPlayerY-5))
			{
				Obj_Delete(obj);
				bonuspoint+=100;
				SetCommonData("BONUSPOINT",bonuspoint);
				PlaySE("seScore.wav");
			}
			yield;
		}
}

task GetBonusItem//ステージ側でPアイテムを取った時アイテム生成
{
let ItemCheck=0;//共通データの配列の長さをチェックする変数
let XY=[];//共通データの書き換えにワンクッション置くための変数
let ItemPerFrame=5;//１フレームあたりの最大アイテム生成数（処理落ち対策）
loop
{
	ItemCheck=length(GetCommonDataDefault("BONUSITEM",[]));//毎フレーム共通データの長さチェック
	if(ItemCheck>0)
	{//配列に中身がある（アイテム発生フラグ立っている）場合の処理
		loop(ItemPerFrame)
		{
			XY=GetCommonDataDefault("BONUSITEM",[]);//共通データ内容を変数に渡す
			bonuspoint+=10;
			SetCommonData("BONUSPOINT",bonuspoint);
			loop(1)
			{
				XY=erase(XY, 0);
			}//生成したのでその要素を配列から削除
			if(length(XY)==0)
			{//削除後の配列が空になった場合
				SetCommonData("BONUSITEM",[]);//共通データを空にして
				break;//アイテム生成ループ脱出
		
			}
			else
			{
				SetCommonData("BONUSITEM",XY);
			}//配列が空でない場合共通データに変更後の配列を渡す
		}
	}
yield;
}
}