#ScriptVersion[2]

script_enemy_main {

	let Current = GetCurrentScriptDirectory;
	let IMG = Current ~ "IMG\ExRumia.png";
	LoadGraphic(IMG);
	let SE00 = Current ~ "se\shot00.wav";
	LoadSE(SE00);
	let SE01 = Current ~ "se\damage00.wav";
	LoadSE(SE01);
	
	@Initialize{
		SetTexture(IMG);
		SetX(-100); SetY(-100);
		SetMovePosition03(GetCenterX, GetClipMinY + 112, 20, 10);
		SetBossLifeCircle(5000);
		SetInvincibility(480);
		LoadUserShotData(Current ~ "img\shot_All.txt");
		TMain;
	}
	
	@MainLoop{
		yield;
		SetCollisionA(GetX, GetY, 24);
		SetCollisionB(GetX, GetY, 24);
		if(GetSpeedX > 0){ SetGraphicRect(196, 0, 256, 64); }
		else if(GetSpeedX < 0){ SetGraphicRect(128, 0, 196, 64); }
		else{ SetGraphicRect(0, 0, 64, 64); }
	}
	
	@DrawLoop{
		DrawGraphic(GetX, GetY);
	}
	
	@Finalize{
		DeleteEnemyShotToItemInCircle(ALL, GetCenterX, GetCenterY, 500);
		DeleteGraphic(IMG);
		DeleteSE(SE00);
		DeleteSE(SE01);
	}
	
	task TMain{
		yield;
		HitSE;
		while(GetSpeedX){ SetInvincibility(2); yield; }
		Move;
		Shot;
	}
	
	

	task Move{
		loop(120){ yield; }
		while(GetLife){
			SetMovePosition03(rand_int(GetClipMinX + 100, GetClipMaxX - 100), rand_int(GetClipMinY + 100, GetClipMinY + 130), 20, 10);
			while(GetSpeedX){ yield; }
			loop(120){ yield; }
		}
	}

	task Shot{
		loop(60){ yield; }
		let Angle = 0;
		let Way = 16;
		let Set_X;
		let Set_Y;
		let Flag = false;
		while(GetLife){
			Angle = 0;
			Set_X = GetX;
			Set_Y = GetY;
			while(Angle < 360){
				PlaySE(SE00);
				CreateShot(Set_X + 50 * sin(Angle * [1, -1][Flag]), Set_Y + 50 * cos(Angle * [1, -1][Flag]), 8, Flag);
				Angle += 360 / Way;
				loop(2){ yield; }
			}
			Flag = !Flag;
			loop(60){ yield; }
		}
	}

	task CreateShot(let  Set_X, let Set_Y, let Way, let Flag){
		let Angle = 360 / Way;
		ascent(Number in 0..Way){
			CreateShotA(Number, Set_X, Set_Y, 20);
			SetShotDataA(Number, 0, 0, Angle * Number, 0, 0, 0, 17);
			SetShotDataA(Number, 20, 0, Angle * Number, [0.5, -0.5][Flag], 0.05, 3, 17);
			FireShot(Number);
		}
	}

	task HitSE{
		while(GetLife){
			if(GetHitCount){ PlaySE(SE01); }
			loop(3){ yield; }
		}
	}







	//	~`CtQ[W̍쐬t@NV
	function SetBossLifeCircle(let MaxLife){
		SetLife(MaxLife + 10000);			//GCt̐ݒ
		Create_Life_Circle_Gage(MaxLife);		//~`CtQ[W̎쐬^XNN
		Create_Life_Magic_Circle;			//~`CtQ[Wg̎쐬^XNN
		Enemy_Vanish;				//萔lȉł̓Gj^XNN
	}




	//	~`CtQ[W̍쐬
	task Create_Life_Circle_Gage(let MaxLife){
		//CtQ[Wp摜iRGB:255,255,255摜j̃pXEǂݍ
		let Dummy = Current ~ "img\DUMMY.png";
		LoadGraphic(Dummy);
		
		let Life = 0;	//ōpxZop
		let Angle = 0;	//_pxZop
		
		//IuWFNg̍쐬iqEj
		let Obj = Obj_Create(OBJ_EFFECT);
		ObjEffect_SetTexture(Obj, Dummy);
		ObjEffect_SetPrimitiveType(Obj, PRIMITIVE_TRIANGLESTRIP);
		ObjEffect_CreateVertex(Obj, 96);
		ObjEffect_SetLayer(Obj, 1);
		ObjEffect_SetAngle(Obj, 0, 0, 180);
		ascent(Vertex_Number in 0..4){
			ObjEffect_SetVertexUV(Obj, Vertex_Number, Vertex_Number, [0, 1][Vertex_Number % 2]);
			ObjEffect_SetVertexColor(Obj, Vertex_Number, 255, 255, 225, 255);
		}
		
		//G̃Ct0ȏȂ烋[v
		while(GetLife){
			Life = (GetLife - 10000) / (MaxLife / 360);	//GCtQ[W̍ōpxi360MAX@0MINjZo@GCtQ[W~ɂׂ̕ϊĂ܂
			Angle = Life / 94;		//e_pxZo
			
			//	e_̎ۊpxݒ
			ascent(Vertex_Number in 0..96){
				alternative(Vertex_Number)
					case(0, 1){ ObjEffect_SetVertexXY(Obj, Vertex_Number, [94, 101][Vertex_Number % 2] * sin(0), [94, 101][Vertex_Number % 2] * cos(0)); }
					case(94, 95){ ObjEffect_SetVertexXY(Obj, Vertex_Number, [94, 101][Vertex_Number % 2] * sin(Life), [94, 101][Vertex_Number % 2] * cos(Life)); }
					others{
						ObjEffect_SetVertexXY(Obj, Vertex_Number, [94, 101][Vertex_Number % 2] * sin(Angle * Vertex_Number), [94, 101][Vertex_Number % 2] * cos(Angle * Vertex_Number));
					}
			}
			
			Obj_SetPosition(Obj, GetX, GetY);	//IuWFNgʒu̒iGƓʒuj
			yield;
		}
	}




	//	~`CtQ[Wg̍쐬
	task Create_Life_Magic_Circle{
		//CtQ[Wgp摜̃pXEǂݍ
		let Circle = Current~"IMG\Circle.png";
		LoadGraphic(Circle);
		
		let Angle = 0;	//GtFNg̉]pxp
		
		//IuWFNg̍쐬iˏ/`j
		let Obj = Obj_Create(OBJ_EFFECT);
		ObjEffect_SetTexture(Obj, Circle);
		ObjEffect_SetPrimitiveType(Obj, PRIMITIVE_TRIANGLEFAN);
		ObjEffect_CreateVertex(Obj, 4);
		ObjEffect_SetLayer(Obj, 1);
		ascent(Vertex_Number in 0..4){
			ObjEffect_SetVertexXY(Obj, Vertex_Number, [-128, 128, 128, -128][Vertex_Number], [-128, -128, 128, 128][Vertex_Number]);
			ObjEffect_SetVertexUV(Obj, Vertex_Number, [0, 256, 256, 0][Vertex_Number], [0, 0, 256, 256][Vertex_Number]);
			ObjEffect_SetVertexColor(Obj, Vertex_Number, 255, 255, 255, 255);
		}
		
		//G̃Ct0ȏȂ烋[v
		while(GetLife){
			ObjEffect_SetAngle(Obj, 0, 0, Angle);		//Q[Wg̖ʂȉ]
			Angle -= 3; if(Angle <= -360){ Angle += 360; }	//ϐl̃I[o[t[
			Obj_SetPosition(Obj, GetX, GetY);
			yield;
		}
	}




	//	З͎@ɂAGj̃GtFNg֘A΍p
	task Enemy_Vanish{
		while(GetLife){
			if(GetLife <= 10000){ VanishEnemy; }	//G̗͂10000ȉ̏ꍇAj
			yield;
		}
	}


}