
task Powor	//powerの値を変化させるタスク。バリア発動やP回復。
{
CheckMagicItem;

let ChargeFlag=true;

loop
{

	if(GetCommonDataDefault("SELECTEDDIFFICULT","None")=="None" && !OnEvent && !IsForbidBomb && !OnMissed)
	{
		if(Power<1000){Power+=AutoReCharge;}
	}
	if(Power>1000){Power=1000;}
	if(MagicCounter>10000){MagicCounter=10000;}

	if(GetKeyState(VK_USER)==KEY_PUSH && Power>=1000 && BurstModeCount==0 && IsForbidBomb==false && !OnMissed)
	{
	//	Slow(1);
		PlaySE(SE[0]);
		BurstLevel=3;
		Burst;
		Shadow(600);
		loop
		{
		if(BurstMode==0)
		{
		break;
		}
		SetItemCollectLine(500);//アイテム回収されるy座標
		Power-=1000/600;

		if(Power>1000){Power=1000;}
		if(MagicCounter>10000){MagicCounter=10000;}
		yield;
		}
	ChargeFlag=true;
	MagicCounter=MagicCounter/2;
	BurstModeCount=10;
	}
	//Slow(0);
if(BurstModeCount>0)
{
	BurstModeCount-=1;
}

if(trunc(Power)>=1000 && ChargeFlag && BurstMode==0)
{
PowerChargeEffect;
ChargeFlag=false;
}

SetItemCollectLine(AutoItemCollectLine);//アイテム回収されるy座標
//SetCommonData("KEKKAI",false);

if(miss<GetMissCount)
{//ミスしたときに一回実行
	miss+=1;
       SetPlayerInvincibility(190);
	MagicCounter=MagicCounter/2;
}
yield;
}
}
///////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////
task CheckMagicItem
{
let ItemCheck=0;//共通データの配列の長さをチェックする変数
let XY=[];//共通データの書き換えにワンクッション置くための変数
let ItemPerFrame=60;//１フレームあたりの最大アイテム生成数（処理落ち対策）
loop
{
	ItemCheck=length(GetCommonDataDefault("ItemXY",[]));//毎フレーム共通データの長さチェック
	if(ItemCheck>0)
	{//配列に中身がある（アイテム発生フラグ立っている）場合の処理
		loop(ItemPerFrame)
		{
			XY=GetCommonDataDefault("ItemXY",[]);//共通データ内容を変数に渡す
			CreateMigicItem(XY[0],XY[1],XY[2]);//アイテム生成。順番にX座標、Y座標、アイテムの種類
/*
			alternative(XY[2])
			case(1)
			{
				CreateMigicItem(XY[0],XY[1],XY[2]);//アイテム生成。順番にX座標、Y座標、アイテムの種類
			}
			case(2)
			{
				CreateMigicItem(XY[0],XY[1],XY[2]);//アイテム生成。順番にX座標、Y座標、アイテムの種類
			}
			case(3)
			{
				CreateMigicItem(XY[0],XY[1],XY[2]);//アイテム生成。順番にX座標、Y座標、アイテムの種類
			}
			case(4)
			{
				CreateMigicItem(XY[0],XY[1],XY[2]);//アイテム生成。順番にX座標、Y座標、アイテムの種類
			}
			case(5)
			{
				CreateMigicItem(XY[0],XY[1],XY[2]);//アイテム生成。順番にX座標、Y座標、アイテムの種類
			}
			case(6)
			{
				CreateMigicItem(XY[0],XY[1],XY[2]);//アイテム生成。順番にX座標、Y座標、アイテムの種類
			}
			case(7)
			{
				CreateMigicItem(XY[0],XY[1],XY[2]);//アイテム生成。順番にX座標、Y座標、アイテムの種類
			}
			case(8)
			{
				CreateMigicItem(XY[0],XY[1],XY[2]);//アイテム生成。順番にX座標、Y座標、アイテムの種類
			}
			case(9)
			{
				CreateMigicItem(XY[0],XY[1],XY[2]);//アイテム生成。順番にX座標、Y座標、アイテムの種類
			}
			others
			{

			}
*/	
			loop(3)
			{
				XY=erase(XY, 0);
			}//生成したのでその要素を配列から削除
			if(length(XY)==0)
			{//削除後の配列が空になった場合
				SetCommonData("ItemXY",[]);//共通データを空にして
				break;//アイテム生成ループ脱出
		
			}
			else
			{
				SetCommonData("ItemXY",XY);
			}//配列が空でない場合共通データに変更後の配列を渡す
		}
	}
yield;
}
}

//////////////////////////////////////////////////////////////////////////////

task Burst//バーストのタスク。
{
	 	DeleteShot;
		BurstMode=1;
		BurstStartEffect;
		wait(5);
		parin;
		while(BurstMode==1){yield};

	//	PlaySE(SE[1]);

		BurstEndEffect;
		BurstMode=0;
}


task parin//バリア割りのタスク。
{
	wait(3);
	loop
	{
		if(BurstMode==0)
		{
			BurstLevel=0;
			DeleteShot;
			break;
		}
		if(Power<=0)
		{
			PlaySE(SE[1]);
			BurstMode=0;
			BurstLevel=0;
			Power=0;
			DeleteShot;
			break;
		}	
	yield;
	}
}

task DeleteShot
{
	 SetPlayerInvincibility(120);
	wait(5);
	let BulletNum=GetEnemyShotCount;
	if(GetCommonDataDefault("SELECTEDDIFFICULT","None")=="Apocalypse" && !OnMissed && !OnBomb)
	{
		Power+=BulletNum;
		AddScore(MagicCounter*BulletNum);
		DeleteShotNumdraw(BulletNum,GetPlayerX,GetPlayerY,3);
	}

	DeleteEnemyShot(SHOT);

}

task CommonDataSetting
{
loop
{
	if(GetCommonDataDefault("SectionShift",false)==true)
	{
		SectionMagicFragment=0;
		SetCommonData("SectionShift",false);
	}
	SetCommonData("MAGICPOWER",Power);
	SetCommonData("BURSTLEVEL",BurstLevel);
	SetCommonData("MAGICCOUNTER",MagicCounter);
	SetCommonData("MAGICFRAGMENT",MagicFragment);
	SetCommonData("SECTIONMAGICFRAGMENT",SectionMagicFragment);
	yield;
}
}

task DeleteBulletCheck
{
DeleteBulletReChargeTask;
let Dnum;
let Dx;
let Dy;

loop
{
	if(GetCommonDataDefault("DeleteBulletNum",0)>0)
	{
		Dnum=GetCommonDataDefault("DeleteBulletNum",0)/2;
		Dx=GetCommonDataDefault("DeleteBulletX",0);
		Dy=GetCommonDataDefault("DeleteBulletY",0);

		if(BurstMode==0)
		{
		if(GetKeyState(VK_SLOWMOVE)==KEY_FREE)
		{
			MagicCounter+=Dnum*4;
			DeleteShotNumdraw(Dnum*4,Dx,Dy,1);
		}
		else
		{
			DeleteBulletReCharge+=Dnum;
			DeleteShotNumdraw(Dnum,Dx,Dy,2);
		}
		}
		else
		{
			MagicCounter+=Dnum*8;
			DeleteShotNumdraw(Dnum*8,Dx,Dy,1);
		}
		SetCommonData("DeleteBulletNum",0);
	}
yield;
}
}

task DeleteBulletReChargeTask
{
loop
{
	if(DeleteBulletReCharge>0)
	{
	loop(10)
	{
	if(DeleteBulletReCharge>0)
	{
		if(Power<1000){Power+=1;}
		DeleteBulletReCharge-=1;
	}
	}
	}

	yield;
}
}