#東方弾幕風
#Title[連打「拳骨魔神丸」]
#Text[test]
#ScriptVersion[2]

script_enemy_main {
	let name	   = "連打「拳骨魔神丸」";
	let imgBoss	= "script\img\ExRumia.png";

	// 初期位置
	let xIni	   = GetCenterX+100;
	let yIni	   = GetClipMinY-300;
	
	//shotall.png
	#include_function ".\lib_usershot.txt"
	//一輪の基本設定
	#include_function ".\lib\setting_itirin.txt"
//	CreateDebugWindow;

	let imgShotKobushi	= GetCurrentScriptDirectory() ~ "\img\genkotu.png";

	let D_RATE = 0;
	let D_WAIT = 999;

	@Initialize {
		CutIn(YOUMU, name, "", 0, 0, 0, 0);

		SetLife(1);
		SetTimer(20);
		SetScore(800000);
		SetDamageRate(0, 0);
		SetDurableSpellCard();	//耐久

		LoadGraphic(imgShotKobushi);
		Ini_Graphic;

		TMain;
	}

	@MainLoop {
		SetCollisionA(GetX, GetY, 32);

		yield;
	}

	@DrawLoop {
		Draw_Itirin;
	}

	@Finalize {
//		DeleteGraphic(imgBoss);
	}

	// メインタスク
	task TMain {
		yield;

		TRate;
		standBy;

		//弾
		SetY(-900);
		TShot;
	}

	task TShot()
	{
		let kabe = [1, 3, 2, 4 ];
		let muki_x = [1, -1, -1, 1];
		let muki_y = [1, 1, -1, -1];
		let wt = 120;
		let t = 0;
		
		loop
		{
			shot_masingun(kabe[t%4], muki_x[t%4], muki_y[t%4], 5, 10);
			loop(wt) { yield; }
			t++;
			wt -= 10; if (wt < 40) { wt = 40; }
		}
	}
	
	// 拳マシンガン
	//muki=1 .... 下から上 or 右から左
	//muki=-1 ... 上から下 or 左から右
	task shot_masingun(kabe, muki_x, muki_y, way, wt)
	{
		ascent (let n in 0 .. way)
		{
			let x; let y;

			if (muki_y == 1) { y = GetClipMaxY - (GetClipMaxY-GetClipMinY)/way * (n+0.5); }
			else { y = GetClipMinY + (GetClipMaxY-GetClipMinY)/way * (n+0.5); }

			if (muki_x == 1) { x = GetClipMaxX - (GetClipMaxX-GetClipMinX)/way * (n+0.5); }
			else { x = GetClipMinX + (GetClipMaxX-GetClipMinX)/way * (n+0.5); }

			shot_kobushi(10, kabe, x, y);
			loop(wt) { yield; }
		}
	}
	
	//画面外から拳を振る　自機狙い
	// kabe=1:左 2=右 3=上 4=下 それ以外だと打たない
	// kabe_x, kabe_y 拳が_*一時停止する*座標。kabeで設定した壁付近で停止する
	function shot_kobushi(speed, kabe, kabe_x, kabe_y)
	{
		let x = 0; let y = 0;
		let angle = 0;
		let FLAG = 2;

		while (FLAG > 0)	//角度が急になり過ぎる場合は発射位置を調整→調整しない
		{
			alternative (kabe)
			case (1)
			{
				angle = (atan2(GetPlayerY-kabe_y ,GetPlayerX-2)+360)%360;
				x = GetClipMinX-60; y = kabe_y-tan(angle)*60;
			//	if (angle <= 90 && angle > 70) { kabe = 3; }
			//	else if (angle >= 270 && angle < 290) { kabe = 4; }
			//	else { FLAG = 0; }
			}
			case (2)
			{
				angle = (atan2(GetPlayerY-kabe_y ,GetPlayerX-(GetClipMaxX-2))+360)%360;
				x = GetClipMaxX+60; y = kabe_y+tan(angle)*60;
			//	if (angle < 110) { kabe = 3; }
			//	else if (angle > 250) { kabe = 4; }
			//	else { FLAG = 0; }
			}
			case (3)
			{
				angle = (atan2(GetPlayerY-2 ,GetPlayerX-kabe_x)+360)%360;
				x = kabe_x-60/tan(angle); y = GetClipMinY-60;
			//	if (angle > 160) { kabe = 2; }
			//	else if (angle < 20) { kabe = 1; }
			//	else { FLAG = 0; }
			}
			case (4)
			{
				angle = (atan2(GetPlayerY-(GetClipMaxY-2) ,GetPlayerX-kabe_x)+360)%360;
				x = kabe_x+60/tan(angle); y = GetClipMaxY+60;
			//	if (angle < 200) { kabe = 2; }
			//	else if (angle > 340) { kabe = 1; }
			//	else { FLAG = 0; }
			}
			others
			{
				return (false);
			}
			FLAG--;
		}
		
		CreateShotFromScript("Kobushi", x, y, speed, angle, 75, 2);
	}
}


//拳弾
//画面端からGetArgumentピクセル以上離れたら一時停止、もう片方の画面端で停止
//フェードアウト後、削除
script_shot Kobushi
{
	let SPEED = GetSpeed();		//スピード
	let SIZE = 50;			//弾の半径

	let imgShot	= GetCurrentScriptDirectory() ~ "\img\genkotu.png";

	let ERACE_FLAG = 0;
	let g_alpha = 0;
	let FALED = 1;		//拳骨発射失敗
	let SE_FLAG = 0;

	//サウンドデータの在処
	#include_function ".\lib\lib_se.txt"

	@Initialize
	{	
//		LoadGraphic(imgShot);
		SetTexture(imgShot);
		SetGraphicRect(  0,   0, 128, 128);

		SetBombResist();	//ボムで消さない
		SetSpeed(6);		//speed初期値
	}
	@MainLoop
	{
		let angle = GetAngle%360;

		if(OnDelay()){
			//一定位置より内側に入ったら一時停止
			if (angle < 90) { if (GetX >= GetClipMinX+GetArgument && GetY >= GetClipMinY+GetArgument) { SetSpeed(0); FALED=0; } }
			else if (angle < 180) { if (GetX <= GetClipMaxX-GetArgument && GetY >= GetClipMinY+GetArgument) { SetSpeed(0); FALED=0; } }
			else if (angle < 270) { if (GetX <= GetClipMaxX-GetArgument && GetY <= GetClipMaxY-GetArgument) { SetSpeed(0); FALED=0; } }
			else { if (GetX >= GetClipMinX+GetArgument && GetY <= GetClipMaxY-GetArgument) { SetSpeed(0); FALED=0; } }
			
			if (FALED == 0)
			{
				if (SE_FLAG <= 0) { StopSE(SE_WARP); PlaySE(SE_WARP); SE_FLAG = 1; }
			}

		//	SetCollisionB(GetX, GetY, 60);	//当たり判定→やっぱり付けない
		}
		else if (ERACE_FLAG == 1)
		{
		//	if (SE_FLAG <= 1) { PlaySE(SE_KOBUSI); SE_FLAG = 2; }
			//徐々に薄く、消えたら削除
			g_alpha -= 10;
			if (g_alpha <= 0) { End(); }
			else if (g_alpha > 150) { SetCollisionB(GetX, GetY, 60); }	//当たり判定
		}
		else
		{
			//発射に失敗した場合は早々に削除
			if (FALED == 1) { End(); }
			
			//壁にぶつかったら停止
			if (angle < 90)
			{
				if (GetX >= GetClipMaxX-SIZE || GetY >= GetClipMaxY-SIZE) { g_alpha = 255; ERACE_FLAG = 1; SetSpeed(0); }
				else { SetSpeed(SPEED); }
			}
			else if (angle < 180)
			{
				if (GetX <= GetClipMinX+SIZE || GetY >= GetClipMaxY-SIZE) { g_alpha = 255; ERACE_FLAG = 1; SetSpeed(0); }
				else { SetSpeed(SPEED); }
			}
			else if (angle < 270)
			{
				if (GetX <= GetClipMinX+SIZE || GetY <= GetClipMinY+SIZE) { g_alpha = 255; ERACE_FLAG = 1; SetSpeed(0); }
				else { SetSpeed(SPEED); }
			}
			else
			{
				if (GetX >= GetClipMaxX-SIZE || GetY <= GetClipMinY+SIZE) { g_alpha = 255; ERACE_FLAG = 1; SetSpeed(0); }
				else { SetSpeed(SPEED); }
			}

			SetCollisionB(GetX, GetY, 60);	//当たり判定
		}
	}
	@DrawLoop
	{
		if (g_alpha > 0) { SetAlpha(g_alpha); }
		SetGraphicAngle(0, 0, 180+GetAngle);
		DrawGraphic(GetX, GetY);
	}
	@Finalize
	{
	}
}