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

let ChargeFlag1=true;
let ChargeFlag2=true;
let ChargeFlag3=true;
loop
{
	Power+=ReChargePower;
	ReChargePower=0;
	if(GetCommonDataDefault("SELECTEDDIFFICULT","None")=="None" && !OnEvent && !IsForbidBomb && !OnMissed)
	{
		if(Power<1000){Power+=AutoReCharge;}
		else if(Power<2000){Power+=AutoReCharge*2/3;}
		else if(Power<3000){Power+=AutoReCharge*1/3;}
	}
	if(Power>3000){Power=3000;}
	if(BurstRank>10)
	{
		BurstRank=10;
	}
	if(BurstRank<0)
	{
		BurstRank=0;
	}
	if(GetKeyState(VK_USER)==KEY_PUSH && Power>=1000 && BurstModeCount==0 && IsForbidBomb==false && !OnMissed)
	{
		PlaySE(SE[0]);
		if(BurstRank<10)
		{
			BurstRank+=1;
		}
		if(BurstRank>10)
		{
			BurstRank=10;
		}
		Burst(Power);
		loop
		{
		if(BurstMode==0)
		{
		break;
		}
		SetItemCollectLine(500);//アイテム回収されるy座標
		Power-=4;

		if(Power>3000){Power=3000;}
		yield;
		}
	if(Power<1000){ChargeFlag1=true;}
	if(Power<2000){ChargeFlag2=true;}
	ChargeFlag3=true;
	BurstModeCount=10;
	}
if(BurstModeCount>0)
{
	BurstModeCount-=1;
}

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

if(trunc(Power)>=2000 && ChargeFlag2 && BurstMode==0)
{
PowerChargeEffect(2);
ChargeFlag2=false;
}

if(trunc(Power)>=3000 && ChargeFlag3 && BurstMode==0)
{
PowerChargeEffect(3);
ChargeFlag3=false;
}

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

if(miss<GetMissCount)
{//ミスしたときに一回実行
	miss+=1;
       SetPlayerInvincibility(190);
	Power+=500;
	if(Power>3000){Power=3000;}
	BurstRank-=2;
	if(BurstRank<0)
	{
		BurstRank=0;
	}
}
yield;
}
}
///////////////////////////////////////////////////////////////////////

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

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

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

	//	PlaySE(SE[1]);
		Bonus(level);

		BurstEndEffect;
		BurstMode=0;
}

task Bonus(level) //収縮時のタスク
{
	 SetPlayerInvincibility(120);
	BurstLevel=0;
	if(Power>=level-1000)
	{
		Power=level-1000;
	}

	DeleteEnemyShot(SHOT);
}

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

	yield;
	}
}

task DeleteShot
{
	 SetPlayerInvincibility(120);

	DeleteEnemyShot(SHOT);
}

task CommonDataSetting
{
loop
{
	SetCommonData("MAGICPOWER",Power);
	SetCommonData("BURSTLEVEL",BurstLevel);
	SetCommonData("MAGICCOUNTER",MagicCounter);
	yield;
}
}

task DeleteBulletCheck
{
DeleteBulletReChargeTask;
let Dnum;
let Dx;
let Dy;
		let DifficultChargeAmp=1;
		let DifficultCounterAmp=1;

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

		alternative(GetCommonDataDefault("SELECTEDDIFFICULT","None"))
		case("Moderate")
		{
			DifficultChargeAmp=1-BurstRank*0.1;
			DifficultCounterAmp=1;
		}
		case("Extream")
		{
			DifficultChargeAmp=1-BurstRank*0.1;
			DifficultCounterAmp=2;
		}
		case("Apocalypse")
		{
			DifficultChargeAmp=1-BurstRank*0.1;
			DifficultCounterAmp=4;
		}

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

task DeleteBulletReChargeTask
{
loop
{
	if(DeleteBulletReCharge>0)
	{
	loop(10)
	{
	if(DeleteBulletReCharge>0)
	{
		if(Power<1000){Power+=1*(1-BurstRank*0.1);}
		else if(Power<2000){Power+=1*2/3*(1-BurstRank*0.1);}
		else if(Power<3000){Power+=1*1/3*(1-BurstRank*0.1);}
		DeleteBulletReCharge-=1;
	}
	}
	}

	yield;
}
}