#e
#Title[]
#Text[[U[ƒe̓蔻̎ɂāH]
#Player[FREE]
#ScriptVersion[2]
script_enemy_main{
//--------------------------------------------------------------------------------
//ʕϐ̐錾
//--------------------------------------------------------------------------------
let csd = GetCurrentScriptDirectory; //XNvg̈ʒuK
let imgBoss = csd ~ "img\ExRumia.png"; //{X摜
let arrayLaser=[]; //悭񂯂Ǔ蔻eɎgc

//--------------------------------------------------------------------------------
//͂߂Ɉxs鏈
//--------------------------------------------------------------------------------
@Initialize{
	SetLife(4000);
	SetTimer(60);
	SetDamageRate(200, 200);
	
	LoadGraphic(imgBoss);
	SetTexture(imgBoss);
	SetGraphicRect(0, 0, 63, 63);
	SetEnemyMarker(true);
	TMain;
}
//--------------------------------------------------------------------------------
//1Fɍs鏈
//--------------------------------------------------------------------------------
@MainLoop{
	SetCollisionA(GetX, GetY, 24);
	SetCollisionB(GetX, GetY, 24);
	yield;
}
//--------------------------------------------------------------------------------
//`揈
//--------------------------------------------------------------------------------
@DrawLoop{
	DrawGraphic(GetX, GetY);
}
//--------------------------------------------------------------------------------
//Ōɍs鏈
//--------------------------------------------------------------------------------
@Finalize {
	DeleteGraphic(imgBoss);
}

//--------------------------------------------------------------------------------
//^XNyTMainzFC^XN
//--------------------------------------------------------------------------------
task TMain{
	STANDBY;
	Concentration;
	SHOT01;
	SHOT02;
}
//--------------------------------------------------------------------------------
//Tu[`ySTANDBYzFʒuֈړ
//--------------------------------------------------------------------------------
sub STANDBY{
	let Time = 60;
	SetInvincibility(60*4);
	SetMovePosition02(GetCenterX, GetClipMinY+90, Time);
	wait(Time);
}
//--------------------------------------------------------------------------------
//Tu[`yConcentrationzF_WB
//--------------------------------------------------------------------------------
sub Concentration{
	let Time = 120;
	Concentration01(Time);
	wait(Time);
}

//--------------------------------------------------------------------------------
//^XNySHOT01zFShotA60F1񔭎˂
//--------------------------------------------------------------------------------
task SHOT01{
	loop{
		ShotA(GetX, GetY, 20, 5, rand(-180, 180), 50, 360/50, WHITE01, 10, 1, -0.05);
		wait(60);
	}
}
//--------------------------------------------------------------------------------
//^XNySHOT02zF200F1ALaserA𔭎˂B
//--------------------------------------------------------------------------------
task SHOT02{
	let radius = 60;
	let l = 600;
	let w = 15;
	let dir = 90;
	let delay = 60;
	let change = 120;
	let ChangeAngle = 0.2;
	loop{
		LazerA(GetX, GetY, radius, l, w, dir, 1, 1, RED01, delay, change, ChangeAngle);
		wait(200);
		LazerA(GetX, GetY, radius, l, w, dir, 1, 1, BLUE01, delay, change, -ChangeAngle);
		wait(200);
		LazerA(GetX, GetY, radius, l, w, dir, 6, 360/6, RED01, delay, change, ChangeAngle);
		wait(200);
		LazerA(GetX, GetY, radius, l, w, dir, 6, 360/6, BLUE01, delay, change, -ChangeAngle);
		wait(200);
		LazerA(GetX, GetY, radius, l, w, dir, 1, 1, RED01, delay, change, ChangeAngle);
		LazerA(GetX, GetY, radius, l, w, dir, 1, 1, BLUE01, delay, change, -ChangeAngle);
		wait(200);
	}
}

//--------------------------------------------------------------------------------
//֐yShotAzFOS_Away쐬
//--------------------------------------------------------------------------------
function ShotA(x, y, radius, v, dir, way, span, color, delay, StopSpeed, SpeedDown){
	let angle  = dir - (way - 1) / 2 * span;
	loop(way){
		let x2 = x + offsetX(radius, angle);
		let y2 = y + offsetY(radius, angle);
		OS_A(x2, y2, v, angle, color, delay, StopSpeed, SpeedDown);
		angle += span;
	}
}

//--------------------------------------------------------------------------------
//֐yLazerAzFOL_Away쐬
//--------------------------------------------------------------------------------
function LazerA(x, y, radius, l, w, dir, way, span, color, delay, change, ChangeAngle){
	let angle  = dir - (way - 1) / 2 * span;
	loop(way) {
		let x2 = x + offsetX(radius, angle);
		let y2 = y + offsetY(radius, angle);
		OL_A(x2, y2, l, w, angle, color, delay, change, ChangeAngle);
		angle += span;
	}
}

//--------------------------------------------------------------------------------
//IuWFNgeyOS_AzFOL_Aɓ珈se
//--------------------------------------------------------------------------------
task OS_A(x, y, v, angle, color, delay, StopSpeed, SpeedDown){
	let obj = Obj_Create(OBJ_SHOT);
	Obj_SetPosition(obj, x, y);
	Obj_SetSpeed(obj, v);
	Obj_SetAngle(obj, angle);
	ObjShot_SetGraphic(obj, color);
	ObjShot_SetDelay(obj, delay);
	while( !Obj_BeDeleted(obj) ){
		if(Obj_GetSpeed(obj) > StopSpeed){
			Obj_SetSpeed(obj, Obj_GetSpeed(obj)+SpeedDown);
		}
		
		let i = 0;
		loop(length(arrayLaser)){
			if(Collision_Obj_Obj(arrayLaser[i], obj)){
				CreateShot01(Obj_GetX(obj), Obj_GetY(obj), 2, Obj_GetAngle(obj)+rand(-20, 20), RED01+rand_int(0, 5), 0);
				Obj_Delete(obj);
				break;
			}
		}
		i++;
		wait(1);
	}
}

//--------------------------------------------------------------------------------
//IuWFNg[U[yOL_AzFOS_AɓOS_AɓƂm点e
//--------------------------------------------------------------------------------
task OL_A(x, y, l, w, angle, color, delay, change, ChangeAngle){
	let obj = Obj_Create(OBJ_LASER);
	let TimeCount = 0;
	arrayLaser = arrayLaser ~ [obj];
	Obj_SetPosition(obj, x, y);
	Obj_SetAngle(obj, angle);
	ObjShot_SetGraphic(obj, color);
	ObjLaser_SetLength(obj, l);
	ObjLaser_SetWidth(obj, w);
	ObjShot_SetDelay(obj, delay);
	ObjLaser_SetSource(obj, true);
	while( !Obj_BeDeleted(obj) ){
		Obj_SetAngle(obj, Obj_GetAngle(obj)+ChangeAngle);
		let x2 = GetX + offsetX(60, Obj_GetAngle(obj));
		let y2 = GetY + offsetY(60, Obj_GetAngle(obj));
		Obj_SetPosition(obj, x2, y2);
		if(TimeCount == delay+change){ObjShot_FadeDelete(obj);}
		TimeCount++;
		wait(1);
	}
	let i=0;
	loop(length(arrayLaser)){
		if(arrayLaser[i] == obj){
			arrayLaser = erase(arrayLaser, i);
			break;
		}
		i++;
	}
}

//--------------------------------------------------------------------------------
//֐yoffsetzFcossin
//--------------------------------------------------------------------------------
function offsetX(radius, angle) {
	return radius * cos(angle);
}
function offsetY(radius, angle) {
	return radius * sin(angle);
}
//--------------------------------------------------------------------------------
//֐ywaitzwyield
//--------------------------------------------------------------------------------
function wait(w) {
	loop(w) { yield;}
}

}
