#東方弾幕風
#Title[KIRIN「小岩井ぶどう果肉入り」L]
#Text[そして俺はスペカ名を真剣に考えることを止めた]
#ScriptVersion[2]


script_enemy_main {
    //共通初期設定
    #include_function ".\INCLUDE\BOSS_INI.txt"

    let name        = "KIRIN「小岩井ぶどう果肉入り」";

    let wIni    = 100;

    @Initialize {
        SetMovePosition02(GetCenterX, GetClipMinY + 120, wIni);
        SetX(GetCenterX);
        SetY(GetClipMinY + 150);

        thMCutIn(1,name);
        SetLife(2500);		//ライフ
        SetTimer(98);		//タイマー
        SetScore(4000000);	//ボーナススコア

        LoadGraphicthM;
        SetTexture(imgBoss);

        SetInvincibility(wIni);
        SetDamageRate(50, 50);

        TMain;
    }

    @MainLoop {
        SetCollisionA(GetX, GetY, 24);
        SetCollisionB(GetX, GetY, 24);

        yield; 
    }

    @DrawLoop {
        BossDraw(1);
    }

    @Finalize {
	SpellClear;
        DeleteGraphic(imgBoss);
    }

    @BackGround {
	BgDraw;
    }

//==========================================================================================

    // メインタスク（普通はここ以降から編集してください）
    task TMain {
        yield;
        loop(wIni) { yield; }

	Shot;
    }

    //メインショット
    task Shot{
	let f = 45;	//発射と発射の間隔
	let f2 = 1;	//発射の間隔
	let f3 = 45;	//発射と発射の間隔２
	let tk = 5;	//発射数
	let tdist = 10;	//１段あたりの距離
	let dist = 50;	//中心からの距離
	let tangle = 5;	//角度加算用
	let way = 20;	//発射way数
	let totalangle = 540;//合計角度
	let gap = 0;//自機への角度
	let budou = 23;//ぶどう弾
	
	loop{
		//ぶどう弾
		SetShotColor(200,128,180);
		ascent(let j in 0..budou){
			let angle = (360/budou)*j;
			ascent(let i in 0..10){
				CreateShot02(GetX + cos(36*i + GetAngleToPlayer)*15, GetY + sin(36*i + GetAngleToPlayer)*15, 1, angle, +0.03, 8, [US_BALL_S_PURPLE,US_BALL_S_BLUE][i % 2], 15);
			}
			CreateShot02(GetX, GetY, 1, angle, +0.03, 8, US_BALL_M_BLUE, 15);
		}
		SetShotColor(255,255,255);
		
		__wait(f3);
		
		//反射する弾
		gap = GetAngleToPlayer;
		ascent(let j in 0..way){
			ascent(let i in 0..tk){
				let angle = -(totalangle/way)*j - i*tangle - gap - 90;
				ShotA(GetX + cos(angle)*(tdist*i+dist), GetY + sin(angle)*(tdist*i+dist), 0, angle);
			}
			__wait(f2);
		}
		
		BossMoveEX(15);
		__wait(f);
	}
    }


//==========================================================================================
    // w フレームだけ待つ
    function __wait(w) {
        loop(w) { yield; }
    }


//ショットタスク
//   @  x y		: 発射位置
//   @	speed		: 速度
//   @	angle		: 角度
task ShotA(let x, let y, let speed, let angle){
	//弾タスク初期化
	let count = 0;
	let id = 1001;
	let refangle = 0;
	let tno = 0;
	
	let obj = Obj_Create(OBJ_SHOT);//弾オブジェクトを作成

	Obj_SetX(obj, x);//x座標設定
	Obj_SetY(obj, y);//y座標設定;
	Obj_SetSpeed(obj, speed);//速度設定
	Obj_SetAngle(obj, angle);//移動角度設定
	ObjShot_SetGraphic(obj, US_RICE_S_GREEN);//画像設定
	Obj_SetAutoDelete(obj,false);//画面外に出たら弾を消す
	ObjShot_SetDelay(obj, 25);
	ObjShot_SetBombResist(obj,true);
	ObjShot_ToItem(obj,false);
	
	while( !Obj_BeDeleted(obj) ){ //削除されるまでループを実行
		speed += 0.04;
		Obj_SetSpeed(obj, speed);
		
		//if(IsStageClip(Obj_GetX(obj), Obj_GetY(obj), 5) > 0){	//IsStageClipについては ./INCLUDE/SHOT.txtを参照
			//反射弾生成==============================================
			
			//反射する壁で処理を変更
			if(IsStageClip(Obj_GetX(obj), Obj_GetY(obj), 5) == 2){
				refangle = 360 - angle + rand(-65,45);
				SetShotColor(180,128,220);
				ascent(let i in 0..10){
					CreateShotA(id, Obj_GetX(obj) + cos(36*i + 90)*15, Obj_GetY(obj) + sin(36*i + 90)*15, 15);
					SetShotDataA_XY(id, 0, SAtoS_X(1.25,refangle), SAtoS_Y(1.25,refangle), 0, +0.02, 1, 4, [US_BALL_S_PURPLE,US_BALL_S_BLUE][i % 2]);
					FireShot(id);
				}
				CreateShotA(id, Obj_GetX(obj), Obj_GetY(obj), 15);
				SetShotDataA_XY(id, 0, SAtoS_X(1.25,refangle), SAtoS_Y(1.25,refangle), 0, +0.02, 1, 4, US_BALL_M_PURPLE);
				FireShot(id);
				
				Obj_Delete(obj);
				SetShotColor(255,255,255);
			}
			//=========================================================
			
			//Obj_Delete(obj);
		//}
		
		
		
		if(count > 500){ //500フレームで自動消滅
			ObjShot_FadeDelete(obj);
			break;
		}
		count++;
		yield;
	}
}

}