#e
#Title[鉹ʏ3]
#Text[]
#ScriptVersion[2]
script_enemy_main
{
	let cx=GetCenterX();//STGV[̒SxW擾
	let cy=GetCenterY();//STGV[̒SyW擾
	let doll=0;
	let imgExRumia=GetCurrentScriptDirectory~"img\ExRumia.png";
	let imgExRumiaBack=GetCurrentScriptDirectory~"img\ExRumiaBack.png";
	LoadUserShotData(GetCurrentScriptDirectory~"shot.txt");
	@Initialize
	{
		SetLife(2000);
		SetDamageRate(100,100);
		SetMovePosition02(cx,cy-120,60);
		SetTimer(60);
		SetGraphicRect(1,1,64,64);
		SetInvincibility(180);
		LoadGraphic(imgExRumia);
		LoadGraphic(GetCurrentScriptDirectory~".\img\ma.png");
		SetTexture(imgExRumia);
		shottask;
		shottask2;
		shottask3;
		shottask4;
		movetask;
	}
	@MainLoop
	{
		yield;
		SetCollisionA(GetX(),GetY(),24);//蔻(e)o^
		SetCollisionB(GetX(),GetY(),24);//蔻(̓)o^
	}
	@Finalize
	{
	}
	@DrawLoop
	{
		SetGraphicRect(1,1,64,64);
		SetAlpha(255);
		DrawGraphic(GetX(),GetY());
	}
	task shottask
	{
		SetShotAutoDeleteClip(256,256,256,256);
		let s=0;
		let angle=0;
		wait(120);
		loop
		{
			angle=rand(0,360);
			loop(60)
			{
				CreateObjShot(2.5,angle,73,0);
				angle+=6;
			}
			wait(120);
		}
	}
	task shottask2
	{
		let s=0;
		let speed=0;
		wait(120);
		loop
		{
			speed=0.5;
			loop(15)
			{
				CreateShotA(s,GetX,GetY,0);	
				SetShotDataA(s,0,speed,180,0,-speed/60,0,11);
				SetShotDataA(s,60,2,90,0,0,2,11);
				FireShot(s);
				speed+=0.55;
			}
			wait(60);
			speed=0.5;
			loop(15)
			{
				CreateShotA(s,GetX,GetY,0);	
				SetShotDataA(s,0,speed,0,0,-speed/60,0,11);
				SetShotDataA(s,60,2,90,0,0,2,11);
				FireShot(s);
				speed+=0.55;
			}
			wait(60);
		}
	}
	task shottask3
	{
		wait(120);
		loop
		{
			CreateObjLaser(rand(GetClipMinX,GetClipMaxX),GetClipMinY,270,240,24,33,0);
			wait(45);
		}
	}
	task shottask4
	{
		wait(120);
		loop
		{
			wait(210);
			Ghost(3,90,1,160);
			wait(30);
		}
	}
	task movetask
	{
		yield;
		wait(120);
		loop
		{
			move(rand(40, 80),rand(-40, 40),60,GetClipMinX+32,GetClipMinY+64,GetClipMaxX-32,GetClipMinY+160);
			wait(120);
		}
	}
	task CreateObjShot(let speed,let angle, let graphic, let delay)
	{
		let count=1;
		let time=0;
		let obj = Obj_Create(OBJ_SHOT);
		Obj_SetPosition(obj,GetX+45*cos(angle),GetY+45*sin(angle));
		Obj_SetSpeed(obj, speed);
		Obj_SetAngle(obj, GetAngleToPlayer);
		ObjShot_SetGraphic(obj, graphic);
		ObjShot_SetDelay(obj, delay);
		while(!Obj_BeDeleted(obj))
		{
			if(Obj_GetX(obj)<GetClipMinX&&count>0)
			{
				Obj_SetX(obj, GetClipMinX*2 - Obj_GetX(obj));
				Obj_SetAngle(obj, 180 - Obj_GetAngle(obj));
				count--;
			}
			if(Obj_GetX(obj)>GetClipMaxX&&count>0)
			{
				Obj_SetX(obj, GetClipMaxX*2 - Obj_GetX(obj));
				Obj_SetAngle(obj, 180 - Obj_GetAngle(obj));
				count--;
			}
			if(Obj_GetY(obj)<GetClipMinY&&count>0)
			{
				Obj_SetY(obj, GetClipMinY*2 - Obj_GetY(obj));
				Obj_SetAngle(obj, 360 - Obj_GetAngle(obj));
				count--;
			}
			time++;
			yield;
		}
	}
	task CreateObjLaser(let x, let y, let angle, let length,let width, let graphic, let delay)
	{
		let obj = Obj_Create(OBJ_LASER);
		Obj_SetPosition(obj, x, y);
		Obj_SetSpeed(obj, 0);
		Obj_SetAngle(obj, angle);
		ObjShot_SetGraphic(obj, graphic);
		ObjShot_SetDelay(obj, delay);
		ObjLaser_SetLength(obj, length);
		ObjLaser_SetWidth(obj, width);
		ObjLaser_SetSource(obj, false);
	        loop(delay){ yield; }
		while(!Obj_BeDeleted(obj))
		{
			Obj_SetY(obj,Obj_GetY(obj)+5);
			yield;
		}
	}
	task Ghost(let speed,let angle,let length,let graphic,)
	{
		let obj = Obj_Create(OBJ_SINUATE_LASER);
		let width=12;
		Obj_SetPosition(obj,GetX, GetY);
		Obj_SetSpeed(obj, speed);
		Obj_SetAngle(obj, angle);
		ObjShot_SetGraphic(obj, graphic);
		ObjShot_SetDelay(obj, 0);
		ObjSinuateLaser_SetLength(obj, length);
		ObjSinuateLaser_SetWidth(obj, width);
		loop(480)
		{
			let angleToPlayer = atan2(GetPlayerY-Obj_GetY(obj), GetPlayerX-Obj_GetX(obj));
			if(length<72)
			{
				length++;
			}
			if(Obj_BeDeleted(obj))
			{
				break;
			}
			if(sin(angleToPlayer - Obj_GetAngle(obj))>0)
			{
				Obj_SetAngle(obj, Obj_GetAngle(obj) + 1);
			}
			else
			{
				Obj_SetAngle(obj, Obj_GetAngle(obj) - 1);
			}
			ObjSinuateLaser_SetLength(obj, length);
			yield;
		}
		loop(36)
		{
			width-=1/3;
			Obj_SetCollisionToPlayer(obj,false);
			ObjSinuateLaser_SetWidth(obj, width);
			yield;
		}
	}
	function move(xMove, yAdd, frame, left, top, right, bottom)
	{
    		let x;
    		let y;
		if(GetPlayerX < GetX) 
		{
			x = GetX - xMove;
			if(x < left) 
			{
				x = GetX + xMove;
			}
		} 
		else {
			x = GetX + xMove;
			if(right < x)
			{
				x = GetX - xMove;
			}
		}
		y = GetY + yAdd;
		if(y < top)
		{
			y = top;
		}
		else if(bottom < y)
		{
			y = bottom;
		}
  			SetMovePosition02(x, y, frame);
	}
	function wait(w) 
	{
		loop(w)
		{
			yield;
		}
	}
}