e
#Title[͕uCoAut[v]
#Text[]
#BackGround[DEFAULT]
#Player[FREE]
#ScriptVersion[2]

script_enemy_main
{
	#include_function ".\init.txt"
	#include_function ".\lib\lib_anime_Range.txt"

	@Initialize
	{
		SetLife(700);
		StartSetting(60, 1000000, "͕uCoAut[v");
		SetInvincibility(180);
		SetExMode();
		SetHitState(0);

		InitPosition(GetCenterX(), GetClipMinY() + 120);

		LoadGraphic(img_range);

		LoadUserShotData(shot_00);
		SetShotAutoDeleteClip(16, 16, 16, 16);

		InitializeAction();
		InitializeBG();
		DeleteEnemyShot(ALL);
		LoadSE(se_shot1);
		LoadSE(se_shot2);
		LoadSE(se_shot4);

		T_Main();
		T_DamageRate(20, 0, 300, -1);
		T_HitTest(48);
	}

	@Finalize
	{
		CreateItemCircle(GetX(), GetY(), 20, 50);
		DeleteGraphic(img_range);
		DeleteSE(se_shot1);
		DeleteSE(se_shot2);
		DeleteSE(se_shot4);
		ClearBG();
	}

	@DrawLoop
	{
		SetAlpha([255, 128][IsExMode() && OnBomb()]);
		DrawBoss(img_range);
	}

	task T_Main()
	{
		yield;

		SetAction(ACT_SPELL, 60);

		Wait(120);
		SetHitState(1);

		T_Circle();
		T_Wave();
	}

	task T_Circle()
	{
		Wait(120);
		loop{
			PlaySE(se_shot2);
			CreateCircle(GetX(), GetY(), 1, 73);
			Wait(36);
			PlaySE(se_shot2);
			CreateCircle(GetX(), GetY(), -1, 73);
			Wait(36);
		}
	}

	task T_Wave()
	{
		let p_angle = 0;
		let dx = 180;

		loop{
			PlaySE(se_shot4);
			CreateRoadShot(GetCenterX() - dx, p_angle, 95);
			CreateRoadShot(GetCenterX() + dx, p_angle, 95);
			p_angle -= 7;
			if( dx > 90 ){
				dx -= 1;
			}
			Wait(5);
		}
	}

	task CreateCircle(x, y, k, type)
	{
		let obj = [];
		let n1 = 18;
		let n2 = 5;
		let n = n1 * n2;
		let d_type = 0;
		let a = 0;

		ascent( let i in 0..n1 ){
			ascent( let j in 0..n2 ){
				obj = obj ~ [Obj_Create(OBJ_SHOT)];
				Obj_SetPosition(obj[a], x, y);
				Obj_SetSpeed(obj[a], 2.8);
				ObjShot_SetGraphic(obj[a], type + d_type);
				a ++;
			}
			d_type = 1 - d_type;
		}

		let angle = rand(0, 360);
		let d_angle = 1.2 * k;
		let dd_angle = -d_angle / 120;
		let count = 0;

		loop{
			angle += d_angle;
			if( count < 120 ){
				d_angle += dd_angle;
			}
			let f_exit = 1;
			let a = 0;
			ascent( let i in 0..n1 ){
				let b_angle = angle + i * 360 / n1;
				ascent( let j in 0..n2 ){
					if( !Obj_BeDeleted(obj[a]) ){
						f_exit = 0;
						Obj_SetAngle(obj[a], b_angle + j * 2.7);
					}
					a ++;
				}
			}
			if( f_exit ){
				break;
			}
			count ++;
			yield;
		}
	}

	task CreateRoadShot(cx, p_angle, type)
	{
		let obj = Obj_Create(OBJ_SHOT);

		let r = 100;
		let y = GetClipMinY() + 8;
		let vy = 4.0;
		let dp_angle = 1.0;

		Obj_SetPosition(obj, cx + r * cos(p_angle), y);
		ObjShot_SetGraphic(obj, type);
		ObjShot_SetDelay(obj, 20);
		Obj_SetAutoDelete(obj, false);
		Wait(20);

		while( y < GetClipMaxY() + 12 ){
			Obj_SetPosition(obj, cx + r * cos(p_angle), y);
			Obj_SetAngle(obj, atan2(vy, r * (cos(p_angle) - cos(p_angle - dp_angle))));
			y += vy;
			p_angle += dp_angle;
			yield;
		}
		Obj_Delete(obj);
	}

	#include_function ".\f_base.txt"
	#include_function ".\f_enemy.txt"
	#include_function ".\f_boss.txt"
	#include_function ".\f_bg_range.txt"
}
