#東方弾幕風[Single]
#ScriptVersion[3]
#Title["SampleA02"]
#Text["SampleA02：自機方向へ5WAY"]

//デフォルト弾画像をロード
#include"script/default_system/Default_ShotConst.txt"

//----------------------------------------------------
//グローバル変数宣言
//この位置で宣言した変数はスクリプト全体で有効です。
//ただしこの箇所での変数への代入は、定数以外の代入は行えません。
//(実行順序が保障されないため乱数などの使用はできません)
//----------------------------------------------------
let objEnemy; //敵オブジェクト
let frame = 0; //敵動作に使用するカウンタ(@MainLoopで1づつ増加させます)

//----------------------------------------------------
//敵の動作
//----------------------------------------------------
@Event
{
	alternative(GetEventType())
	case(EV_REQUEST_LIFE)
	{
		//敵ライフを要求された
		SetScriptResult(500);//ライフを500に設定
	}
}

@Initialize
{
	//敵オブジェクトを生成し登録
	objEnemy = ObjEnemy_Create(OBJ_ENEMY_BOSS);
	ObjEnemy_Regist(objEnemy);

	//敵画像の設定
	let imgExRumia = GetCurrentScriptDirectory ~ "ExRumia.png"; //敵画像ファイル
	ObjPrim_SetTexture(objEnemy, imgExRumia); //画像ファイルを読み込む
	ObjSprite2D_SetSourceRect(objEnemy, 64, 1, 127, 64); //描画元矩形を(64,1) - (127,64)に設定
	ObjSprite2D_SetDestCenter(objEnemy); //描画先を中心(0, 0)に設定

	//座標(cx, 60)へ60フレームかけて移動する
	let cx = GetStgFrameWidth() / 2;//STGシーンの中心x座標を取得
	ObjMove_SetDestAtFrame(objEnemy, cx, 60, 60);
}

@MainLoop
{
	//敵の座標を取得
	let ex = ObjMove_GetX(objEnemy);
	let ey = ObjMove_GetY(objEnemy);

	if(frame == 60)
	{
		//frameが60になったら実行される部分
		//自機の座標を取得
		let px = GetPlayerX();
		let py = GetPlayerY();

		//敵からみた自機方向の角度を求める。
		let angleToPlayer = atan2(py - ey, px - ex);

		//angleを-30から15ずつ増加させ5WAYにする
		let angle = -30;
		while(angle <= 30)
		{//(angle=-30, -15, 0, 15, 30)
			//敵の座標から自機に向かって5WAY弾を発射する
			//速度：1フレームに3
			//角度：angle + angleToPlayer
			//遅延時間：30フレーム
			CreateShotA1(ex, ey, 3, angle + angleToPlayer, DS_RICE_S_BLUE, 30);
			angle += 15;
		}

		frame = 0;//弾を出したらframeを0にする
	}

	//当たり判定登録
	ObjEnemy_SetIntersectionCircleToShot(objEnemy, ex, ey, 32);//当たり判定(自機弾用)登録
	ObjEnemy_SetIntersectionCircleToPlayer(objEnemy, ex, ey, 24);//当たり判定(体当たり用)登録

	//カウンタに1追加
	frame++;

	//ライフ0処理
	if(ObjEnemy_GetInfo(objEnemy, INFO_LIFE) <= 0)
	{
		//ライフが0になったら即座に終了
		//本来は爆発エフェクトのタスクを登録し、
		//エフェクト終了を待って、スクリプトを終了します。
		Obj_Delete(objEnemy);
		CloseScript(GetOwnScriptID());
		return;
	}
}

