#e
#Title[ʏe3]
#Text[]
#ScriptVersion[2]


script_enemy_main {
	let name	= "uv";
	let imgBoss	= "script\img\ExRumia.png";

	// ʒu
	let xIni	= GetCenterX;
	let yIni	= GetClipMinY + 120;
	
	let LAST_HAGURUMA = [0, 0, 0, 0];
	let HAGURUMA_SIZE = [0, 0, 0, 0];
	let HAGURUMA_ASPD = [0, 0, 0, 0];

	@Initialize {
		SetLife(16000);
		SetTimer(50);
		SetDamageRate(5, 5);

		LoadGraphic(imgBoss);
		SetTexture(imgBoss);
		setGraphicStop;

		TMain;
	}

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

		yield;
	}

	@DrawLoop {
		DrawGraphic(GetX, GetY);
	}

	@Finalize {
		DeleteGraphic(imgBoss);
	}

	// C^XN
	task TMain {
		yield;

		TRate;
		standBy;

		//e
		TShot(0.5, 90, 0.5, RED01, 0);
		TShot(0.5, 180, -0.5, BLUE01, 1);
		TShot(0.5, 270, -0.5, YELLOW01, 2);
		TShot(0.5, 0, 0.5, GREEN01, 3);
		TShot_effect;
	}

	//eˏo^XN
	task TShot(speed, angle, a_speed, graphic, num)
	{
		loop
		{
			shot_haguruma(GetPlayerX, GetPlayerY, angle, speed, a_speed, 150, graphic, num);
			loop
			{
				wait(300);

				let r = ((Obj_GetX(LAST_HAGURUMA[num])-GetPlayerX)^2+(Obj_GetY(LAST_HAGURUMA[num])-GetPlayerY)^2)^0.5-HAGURUMA_SIZE[num];
				let as = -HAGURUMA_ASPD[num]*HAGURUMA_SIZE[num]/r;
				if (LAST_HAGURUMA[num] == 0) { break; }
				else if (r > 0) {
					PlaySE(GetCurrentScriptDirectory ~ "/se/hit82.wav");
					shot_haguruma(GetPlayerX, GetPlayerY, angle, speed, as, r, graphic, num);
				}
			}
		}
	}

	task TShot_effect
	{
		loop
		{
			PlaySE(GetCurrentScriptDirectory ~ "/se/hit82.wav");

			loop
			{
				wait(210);
				PlaySE(GetCurrentScriptDirectory ~ "/se/eco00_e.wav");
				Concentration01(90);
				wait(90);
			}
		}
	}

	// _[W[g̕ύX
	task TRate {
		wait(200);
		SetDamageRate(400, 400);
	}

	// ʒuֈړAUJn
	sub standBy {
		let wIni = 120;

		SetMovePosition02(xIni, yIni, wIni);
		setGraphicMove;

		SetInvincibility(wIni);
		wait(wIni);

		setGraphicPose;
	}

	// OtBbN̐ݒ
	sub setGraphicStop  { SetGraphicRect(  0,   0,  64,  64); }
	sub setGraphicPose  { SetGraphicRect( 64,   0, 128,  64); }
	sub setGraphicLeft  { SetGraphicRect(128,   0, 192,  64); }
	sub setGraphicRight { SetGraphicRect(192,   0, 256,  64); }

	sub setGraphicMove {
		if(GetSpeedX < 0) {
			setGraphicLeft;
		} else {
			setGraphicRight;
		}
	}
	
	task shot_haguruma(x, y, angle, speed, a_speed, r_size, graphic, num)
	{
		//IuWFNge̍쐬
		let obj = Obj_Create(OBJ_SHOT);
		LAST_HAGURUMA[num] = obj;
		HAGURUMA_SIZE[num] = r_size;
		HAGURUMA_ASPD[num] = a_speed;
		
		//p[^̐ݒ
		Obj_SetPosition(obj, x, y);
		Obj_SetSpeed(obj, speed);
		Obj_SetAngle(obj, angle);
		ObjShot_SetGraphic(obj, NULL);
		Obj_SetAutoDelete(obj,false);
		ObjShot_SetBombResist(obj, true);
		
		let way = int(r_size/5);
		ascent (let i in 0 .. way)
		{
			shot_haguruma_sub(obj, i*360/way, a_speed, r_size, graphic);
		}

		while(!Obj_BeDeleted(obj)) {
			if (Obj_GetY(obj)-r_size > GetClipMaxY)
			{
				break;
			}
			yield;
		}

		if (obj == LAST_HAGURUMA[num]) { LAST_HAGURUMA[num] = 0; }

		Obj_Delete(obj);
	}

	task shot_haguruma_sub(parent, angle, a_speed, r_size, graphic)
	{
		//IuWFNge̍쐬
		let obj = Obj_Create(OBJ_SHOT);
		let BF = 0;
		let TIMER = 10;
				
		//p[^̐ݒ
		Obj_SetPosition(obj, Obj_GetX(parent)+cos(angle)*r_size, Obj_GetY(parent)+sin(angle)*r_size);
		Obj_SetAngle(obj, angle);
		ObjShot_SetGraphic(obj, graphic);
		Obj_SetAutoDelete(obj,false);
		ObjShot_SetBombResist(obj, true);
		
		while(!Obj_BeDeleted(parent)) {
			if (TIMER > 0)
			{
				CreateShotA(0, Obj_GetX(obj), Obj_GetY(obj), 10);
				SetShotDataA(0, 0, 0, 0, 0, 0, 0, graphic);
				SetShotKillTime(0, 0);
				FireShot(0);
			}
			angle += a_speed;
			Obj_SetPosition(obj, Obj_GetX(parent)+cos(angle)*r_size, Obj_GetY(parent)+sin(angle)*r_size);
			Obj_SetAngle(obj, angle);
			TIMER--;
			yield;
		}

		Obj_Delete(obj);
	}

	// w t[҂
	function wait(w) {
		loop(w) { yield; }
	}
}
