#東方弾幕風[Stage]
#Title[ExRumiaステージ]
#Text[ExRumiaステージ]
#Image[.\img\ExRumia(星符「ミッドナイトレヴァリエ」).png]
#BackGround[Default]
#Player[FREE]
#ScriptVersion[2]

script_stage_main
{
/*	変数宣言に追加した行　ここから	*/

	let title=true;//タイトル中ならtrue
	let musicroom=false;//ミュージックルームに居る時はtrue
	let testbgm1="bgm\Regular\stage\戦艦ハルバード・艦内.MP3";//再生したい曲１
	let testbgm2="bgm\Regular\boss\ボスとの戦い.MP3";//再生したい曲２
	let titleimg=GetCurrentScriptDirectory~".\img\ExRumiaBack.png";//タイトル画面中に表示する画像
	let cursol=1;//カーソルの初期位置を１にする
	let form=1;//現在位置を1番とする

/*	変数宣言に追加した行　ここまで	*/

	let cx=GetCenterX();//STGシーンの中心x座標を取得
	let imgEnemy=GetCurrentScriptDirectory~"img\Enemy.png";//Enemy.pngへのパス
	@Initialize()
	{
		LoadGraphic(imgEnemy);//敵画像読みこみ
/*	@Initializeに追加した行　ここから	*/

		LoadGraphic(titleimg);//タイトル画面中に表示する画像を読み込む
		MainTask;//メインタスク起動

/*	@Initializeに追加した行　ここまで	*/

	}
	
	@MainLoop()
	{
/*	@MainLoopに追加した行　ここから	*/

		if(title==true)//タイトル画面中か調べる
		{//タイトル画面中だった
			ForbidShot(true);//ショット禁止
			ForbidBomb(true);//ボム禁止
			SetPlayerX(GetCenterX);//プレイヤーのX位置を固定
			SetPlayerY(GetClipMaxY/3+GetCenterY);//プレイヤーのY位置固定
		}
		else//タイトル画面中では無かった場合
		{
			ForbidShot(false);//ショット使用許可
			ForbidBomb(false);//ボム使用許可
		}

/*	@MainLoopに追加した行　ここまで	*/

		yield;//毎フレームタスク復帰
	}

/*	@DrawTopObject　追加行　ここから	*/
	@DrawTopObject
	{
		if(title==true)//タイトル画面中か調べる
		{
			SetTexture(titleimg);//タイトル画面の画像をセット
			SetGraphicRect(0,0,384,448);//画像の切り出し範囲を指定　短形は自由に
			DrawGraphic(GetCenterX,GetCenterY);//中央に描画　任意ですよ任意
			DrawText("⇒",50,40*cursol,18,255);//カーソル位置に⇒を描画
			if(form==1)
			{//タイトル画面時
				DrawText("ゲームスタート",100,40,18,255);//第１項目描画
				DrawText("サウンドテスト",100,80,18,255);//第２項目描画
				DrawText("やっぱ帰る",100,120,18,255);//第３項目描画
			}
			else if(form==21)
			{//フォーム21　ミュージックルーム時
				DrawText("テストBGM１再生",100,40,18,255);//第１項目描画
				DrawText("テストBGM２再生",100,80,18,255);//第２項目描画
			}
		}
	}
/*	@DrawTopObject　追加行　ここまで	*/
	
	@Finalize()
	{
/*	@Finalizeに追加した行　ここから	*/

		DeleteGraphic(titleimg);//タイトル画面の画像を破棄

/*	@Finalizeに追加した行　ここまで	*/

		DeleteGraphic(imgEnemy);
	}
/*
	@BackGround()
	{
	 //@BackGroundが存在すると
	 //#BackGround[Default]より優先されて描画される
	}
*/


/*	ここから暫く　追加した行とか	*/
	task MainTask
	{
		yield;//正常に初期化
		TSystem;//システム管理タスク
		TMusicRoom;//ミュージックルーム構成タスク
		TStage;//ステージ管理タスク
	}
	task TSystem
	{
		loop//疑似的　@MainLoop
		{
			if(title==true)
			{
				if(form==1)
				{//タイトル画面時
					if(GetKeyState(VK_UP)==KEY_PUSH)
					{
						if(cursol==1)
						{
							cursol=3;
						}
						else
						{
							cursol--;
						}
					}
					else if(GetKeyState(VK_DOWN)==KEY_PUSH)
					{//押された
						if(cursol==3)
						{
							cursol=1;
						}
						else
						{
							cursol++;
						}
					}
					else if(GetKeyState(VK_SHOT)==KEY_PUSH)
					{
						if(form<=10)//第１層か調べる
						{//第１層だった
							form=cursol*10+form;
						}
						else if(form<=100)//第２層か調べる
						{//第２層だった
							form=cursol*100+form;
						}
						else if(form<=1000)//第３層か調べる
						{//第３層だった
							form=cursol*1000+form;
						}
						else if(form<=10000)//第４層か調べる
						{//第４層だった
							form=cursol*10000+form;
						}
						cursol=1;
					}
					else if(GetKeyState(VK_BOMB)==KEY_PUSH)
					{
						cursol=3;
					}
				}
				else if(form==21)
				{//ミュージックルーム時
					if(GetKeyState(VK_UP)==KEY_PUSH)
					{
						if(cursol==1)
						{
							cursol=2;
						}
						else
						{
							cursol--;
						}
					}
					else if(GetKeyState(VK_DOWN)==KEY_PUSH)
					{
						if(cursol==2)
						{
							cursol=1;
						}
						else
						{
							cursol++;
						}
					}
					else if(GetKeyState(VK_BOMB)==KEY_PUSH)
					{
						if(form<=10)//第１層か調べる
						{//第１層だった
							cursol=3;
						}
						else if(form<=100)//第２層か調べる
						{//第２層だった
							cursol=int(form/10);//段階を1/10してカーソルに入れる
							form=1;//第１層に戻す
						}
						else if(form<=1000)//第３層か調べる
						{//第３層だった
							cursol=int(form/100);//段階を1/100してカーソルに入れる
							form=form-cursol*100;//第２層に戻す
						}
						else if(form<=10000)//第４層か調べる
						{//第４層だった
							cursol=int(form/1000);
							form=form-cursol*1000;//第３層に戻す
						}
					}
				}
				else if(form==31)
				{//やっぱ帰る選択時
					ClearStage;
				}
			}
			else
			{//タイトル以外の時はブレイクして無限ループ終了
				break;
			}
			yield;
		}
	}
	task TMusicRoom
	{
		loop//疑似的@MainLoop
		{
			let p_music=1;
			if(title==true)
			{
				if(form==21)
				{//ミュージックルーム突入か？
					if(musicroom==false)
					{//突入1フレーム目か?
						musicroom=true;
					}//この処理を書かないと1フレーム目でいきなり1項目目が決定された扱いになる
					else
					{
						if(GetKeyState(VK_SHOT)==KEY_PUSH)
						{
							if(cursol==1)
							{
								p_music=1;
								PlayMusic(testbgm1);//曲再生
							}
							else if(cursol==2)
							{
								p_music=2;
								PlayMusic(testbgm2);//曲再生
							}
						}
					else if(GetKeyState(VK_USER)==KEY_PUSH)
					{
						if(p_music==1)
						{
							DeleteMusic(testbgm1);
						}
						else if(p_music==2)
						{
							DeleteMusic(testbgm2);
						}
					}
				}
			}
			else
			{//ミュージックルームから出た場合
				musicroom=false;//フラグを下ろす
			}
		}
		else
		{//タイトル以外の場合はブレイクして無限ループ終了
			break;
		}
		yield;
		}
	}
	task TStage
	{
		loop
		{
			if(form==11)
			{//ステージ突入
				title=false;//タイトル画面フラグを下ろす
				StageTask;//ステージ起動
			}
			yield;
		}
	}
/*	追加した行ここまで	*/
	
/*	StageTaskの関数型をtask→functionに変更	*/
	function StageTask
	{//ステージタスク
		function Wait(let frame)
		{//待機関数
			loop(frame){yield};
		}
		function WaitForZeroEnemy()
		{//敵数が0になるまで待機する関数
			while(GetEnemyNum() != 0){yield;}
		}	
		Wait(60);//60フレーム待つ
		//敵をファイルから読みこんで出現
		CreateEnemyFromFile(GetCurrentScriptDirectory~"Enemy01.txt",cx,0,0,0,0);
		WaitForZeroEnemy();//敵が消えるまで停止
		Wait(240);//240フレーム待つ
		//ExRumia出現
		CreateEnemyBossFromFile(GetCurrentScriptDirectory~"ExRumia.txt",cx,0,0,0,0);
		WaitForZeroEnemy();//敵が消えるまで停止
		Wait(60);//60フレーム待つ
		Clear();//ステージクリア
	}
}
