#東方弾幕風
#Title[魔法「ザムデイン」]
#Text[]
#ScriptVersion[2]

script_enemy_main {
	let name	= "魔法「ザムデイン」";

	// shot_all.png
	#include_function ".\lib_usershot.txt"
	// 白蓮さん初期設定
	#include_function ".\lib\setting_byakuren.txt"

	imgBlankCircle = GetCurrentScriptDirectory() ~ "\img\zamu.png";

	// 初期位置
	let xIni	= GetCenterX;
	let yIni	= GetClipMinY + 64+32;

	let D_RATE = 38;
	let D_WAIT = 210;

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

		SetLife(1250);
		SetTimer(50);
		SetScore(1500000);
		SetDamageRate(5, 5);

		Ini_Graphic;
		LoadGraphic(imgEffect);
		LoadGraphic(imgBlankCircle);

		TMain;
	}

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

		yield;
	}

	@DrawLoop {
		Draw_Byakuren;
	}

	@Finalize {
		if (!IsTimeOut()) { makeTokutenItem(20); }
//		DeleteGraphic(imgBoss);
	}

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

		sub_effects;

		TRate;
		standBy;
		powerSave;
		effect_guruguru_circle(255,255,128);

		//弾
		wait(20);
		TShot;
	}

	//弾射出タスク
	task TShot()
	{
		let t = 0;
		let WAY = 20;
		
		let WT = 12;

		ATTACK_FLAG = 1;

		shot_circle_plus(2.5, 0,-2.5, 10, US_STAR_S_YELLOW, WT, 30);
		shot_circle_plus(2.5, 0, 2.5, 10, US_STAR_S_YELLOW, WT, 30);
		shot_circle_plus(2.5, rand(0,360), 360/64, 32, US_STAR_S_RED, WT*15, 30+WT*5);
		shot_circle_plus(2.5, rand(0,360), 360/64, 32, US_STAR_S_BLUE, WT*15, 30+WT*13);

		wait(120);
		Thenyori;
	}

	task Thenyori()
	{
		let byaku_optionX = [-90,90,-45,45];
		let byaku_optionY = [30,30,-60,-60];
		let byaku_optionR = [1,-1,1,-1];
		let t = 0;
		
		loop
		{
			StopSE(SE_SHOT);
			PlaySE(SE_SHOT);

			shot_henyolazer_jiki(GetX+byaku_optionX[t%4],GetY+byaku_optionY[t%4], 400, 5, 10, 30, YELLOW01, 0, 600, byaku_optionR[t%4]);
			t++;
			loop(28) {yield;}
		}

	}

	//ワインダー風味
	task shot_circle_plus(speed, angle, a_speed, way, graphic, wt, start_wt)
	{
		let base_angle = angle;
		wait(start_wt);

		loop
		{
			ascent (let n in 0 .. way)
			{
				CreateShot01(GetX, GetY, speed, base_angle+n*360/way, graphic, 5);
			}
			base_angle += a_speed;
			wait(wt);
		}
	}

	// 自機狙いへにょりレーザー　発射角度指定ver　上手く動かないので×
	// 誤差の関係か、当たらない場合がある
	// 発射位置から近い角度の場合、外側、遠い場合、内側気味に着弾する
	// memo:回転弾の半径=(speed*180)/(PI*achange)
	function shot_henyolazer_jiki_botu(x, y, angle, speed, width, leng, graphic, delay, killtime)
	{
		let PI = 3.1415926535;	//π

		let ca = GetAngleToPlayer - angle;	//へにょりレーザーの弧の角度の1/2
		let r = (((x-GetPlayerX)^2+(y-GetPlayerY)^2)^0.5)/(2*sin(ca));	//へにょりレーザーの半径

		let ac = (speed*180)/(PI*r);	//frame毎の移動角度
		let timer = ceil(absolute(ca*2/ac));	//自機までの到達時間

		CreateLaserC(0, x, y, width, leng, graphic, delay);
		SetLaserDataC(0, 0, speed, angle, ac, 0, speed);
		SetLaserDataC(0, timer, speed, NULL, ac/2, 0, speed);	//円移動に移行するのを防ぐため、へにょりを弱くする
		SetLaserDataC(0, timer+12, speed, NULL, ac/4, 0, speed);
		SetLaserDataC(0, timer+24, speed, NULL, 0, 0, speed);
		SetShotKillTime(0, killtime);
		FireShot(0);
	}

	// 自機狙い（のはずが実質自機外し）へにょりレーザー　軸となる円の半径指定ver
	// r=接する想定円の半径
	// muki=1 ... 時計回り  muki=-1 ... 反時計回り
	function shot_henyolazer_jiki(x, y, r, speed, width, leng, graphic, delay, killtime, muki)
	{
		let PI = 3.1415926535;	//π
		let gen = ((x-GetPlayerX)^2+(y-GetPlayerY)^2)^0.5;	//プレイヤーとの距離＝弦の長さ
		let c_rad = gen/r;	//扇形の角度(単位：rad)
		let b = 2*r*sin(c_rad/2 *180/PI);	//弧の長さ
		
		let timer = b/speed;		//プレイヤーに接触する時間
		let ac = muki * c_rad/timer *180/PI;	//frame毎の増分角度
		let angle = atan2(GetPlayerY-y,GetPlayerX-x) - muki*(c_rad*180/PI)/2;
		
		CreateLaserC(0, x, y, width, leng, graphic, delay);
		SetLaserDataC(0, 0, speed, angle, ac, 0, speed);
//		SetLaserDataC(0, timer, speed, NULL, -ac/2, 0, speed);	//円移動に移行するのを防ぐため、へにょりを弱くする
		SetShotKillTime(0, killtime);
		FireShot(0);
	}
}
