// 主にボスの初期設定を行うインクルード専用スクリプトです
// ボスの各スペカから呼ばれます

//---------------------------------------------------------------------------------

//SetDefaultStatusVisible(false);

//◆呼び出し用定数
//ディレクトリ
let csd = GetCurrentScriptDirectory;

//◆当たり判定画像
let setcol = csd ~ "\img\col.png";

//◆背景画像
let bg3uzu = csd ~ "\img\bguzu.png";

//◆インクルード専用スクリプトを呼ぶ
/*
 *　ALL		：すべてのスクリプトに共通する汎用関数
 *　SE		：効果音を鳴らす
 *　DRAW	：描画関係
 *　EFFECT	：エフェクト関係
 *
 */
#include_function ".\INCLUDE\ALL.txt"
#include_function ".\INCLUDE\SHOT.txt"
#include_function ".\INCLUDE\SE.txt"
#include_function ".\_index_UserShot.dnh"

//テクスチャ定数
let mAlpha = 255;	//透明度
let bgframe = 0;	//背景フレーム

//◆ユーザ定義弾画像のディレクトリ
let shotAll = csd ~ "\shot_All.dnh";

//◆ドット画像
let imgBoss = csd ~ "\img\dot2.png";
SetGraphicRect(0, 0, 52, 88);

//◆左下のRateを非表示にする
SetRateScoreSystemEnable(false);

//Expertモード(デバッグキーが使えないモード)にする　現時点ではデバッグキーは必要なのでコメントアウトしてます
//Expert;

//前処理
SpellCount;
HitBoss;
PlayerCol;

//---------------------------------------------------------------------------------

//ボスカットイン
function thMCutIn(let Bossno,let name){

	let Cdir = "";
	if(Bossno == 1){
		//Cdir = csd ~ "\img\m.png";
	}else{
		//Cdir = csd ~ "\img\y.png";
	}
	
	CutIn(YOUMU, name, "なし", 0, 0, 0, 0);
}

//ボスが攻撃を開始したときに実行するタスク
task AtStart{

}

//スペカタイマー
task SpellCount{
	let count = 0;

	loop{
		if(!(count == GetTimer)){
			if(GetTimer <= 5){
				PlaySE(SE_TIME2);
			}else if(GetTimer <= 10){
				PlaySE(SE_TIME1);
			}
		}
		count = GetTimer;
		yield;
	}
}

//ボスのHPによって相手へのショットの当たり音を変えるタスク(名前長い...)
task HitBoss{
	yield;
	let life = GetEnemyLife;
	let maxlife = life;
	yield;

	loop{
		if(!(GetEnemyLife == life)){
			life = GetEnemyLife;	

			//ライフが5%、10%を切った
			if(life < (maxlife * 10 / 100)){
				PlaySE(SE_HIT1);
			}else{
				PlaySE(SE_HIT2);
			}
		}
		loop(5){ yield; }
	}
}

//ボスの攻撃が終わったときに実行する共通タスク(スペカ)
task SpellClear{
	//両方に共通するタスクを呼び出す
	SpellClearCom;

	//ボス撃破音
	PlaySE(SE_SHOT1);
	if(GotSpellCardBonus){
		PlaySE(SE_BONUS);
		PlaySE(SE_CARD);
	}
}

//ボスの攻撃が終わったときに実行する共通タスク(通常)
task SpellClear2{
	//両方に共通するタスクを呼び出す
	SpellClearCom;

	//ボス撃破音
	PlaySE(SE_SHOT1);
	if(GetMissCountInThisSpell == 0){
		PlaySE(SE_BONUS);
	}
}

//ボスの攻撃が終わったときに実行する共通タスク(共通)
task SpellClearCom{
	
}

//ボム無効タスク
task Bom {
	yield; 
	loop {
		let bom = OnBomb;
		if(bom==true){
			SetInvincibility(50);
		}
		loop(1) { yield; }
	}
}

//画像読み込みタスク
task LoadGraphicthM {
	LoadUserShotData(shotAll);
        LoadGraphic(imgBoss);
	LoadGraphic(bg3uzu);
}

//四角エフェクトオブジェクト生成タスク
task CreateSquareEffectObject(let mObj,let nLeft,let nTop,let nRight,let nBottom,let ConText){
	mObj = Obj_Create(OBJ_EFFECT);
	ObjEffect_SetPrimitiveType(mObj, PRIMITIVE_TRIANGLESTRIP);//プリミティブタイプを設定
	ObjEffect_CreateVertex(mObj, 4);//頂点を4個つくる
	ObjEffect_SetTexture(mObj,ConText);
	//ObjEffect_SetLayer(mObj,8);

	let width = (|nRight|) - (|nLeft|);
	let length = (|nBottom|) - (|nTop|);

	let width2 = ceil(width /  2);
	let length2 = ceil(length / 2);

	let width3 = width - width2;
	let length3 = length - length2;

	//四角形状に各頂点の座標を設定
	ObjEffect_SetVertexXY(mObj, 0, -width3, -length3);
	ObjEffect_SetVertexXY(mObj, 1, -width3,  length2);
	ObjEffect_SetVertexXY(mObj, 2,  width2, -length3);
	ObjEffect_SetVertexXY(mObj, 3,  width2,  length2);
		
	//四角形状に各頂点のUV値を設定。
	ObjEffect_SetVertexUV(mObj, 0,  nLeft,  nTop);
	ObjEffect_SetVertexUV(mObj, 1,  nLeft, nBottom);
	ObjEffect_SetVertexUV(mObj, 2, nRight,  nTop);
	ObjEffect_SetVertexUV(mObj, 3, nRight, nBottom);
}

//CreateSquareEffectObjectのエイリアス
task CSFO(let mObj,let nLeft,let nTop,let Right,let Bottom,let ConText){
	CreateSquareEffectObject(mObj,nLeft,nTop,Right,Bottom,ConText);
}

//ボスを描画するタスク
// 　このタスクは意味の無いタスクです
//   @nAnm	: 描画する画像
//
task BossDraw(let nAnm){
	SetTexture(imgBoss);
	SetGraphicScale(1,1);
	SetGraphicAngle(0,0,0);
	SetAlpha(mAlpha);
	SetGraphicRect(0, 0, 64, 64);
	DrawGraphic(GetX, GetY);
}


task BgDraw{

	SetTexture(bg3uzu);
	SetGraphicScale(1,1);
	SetGraphicAngle(0,0,bgframe/2);
	SetAlpha(255);
	SetGraphicRect(0, 0, 600, 600);
	DrawGraphic(GetCenterX, GetCenterY);

	bgframe += 1;
	
}

//自機当たり判定を描画
task PlayerCol{
	
	LoadGraphic(setcol);

	yield;

	loop{
		let obj = Obj_Create(OBJ_EFFECT);

		if(GetPlayerMoveState == MOVE_SLOW){
			//obj = Obj_Create(OBJ_EFFECT);
			ObjEffect_SetPrimitiveType(obj, PRIMITIVE_TRIANGLESTRIP);//プリミティブタイプを設定
			ObjEffect_CreateVertex(obj, 4);//頂点を4個つくる
			ObjEffect_SetTexture(obj,setcol);
			ObjEffect_SetLayer(obj,4);

			//四角形状に各頂点の座標を設定
			ObjEffect_SetVertexXY(obj, 0, -5, -5);
			ObjEffect_SetVertexXY(obj, 1, -5,  5);
			ObjEffect_SetVertexXY(obj, 2,  5, -5);
			ObjEffect_SetVertexXY(obj, 3,  5,  5);
		
			//四角形状に各頂点のUV値を設定。
			ObjEffect_SetVertexUV(obj, 0,  0,  0);
			ObjEffect_SetVertexUV(obj, 1,  0, 10);
			ObjEffect_SetVertexUV(obj, 2, 10,  0);
			ObjEffect_SetVertexUV(obj, 3, 10, 10);

			Obj_SetPosition(obj,GetPlayerX,GetPlayerY);
		}

		yield;
		
		Obj_Delete(obj);
		
		//yield;
	}
}


    // 移動
    // dist	:移動範囲
    function BossMoveEX(let dist){
	let dist2 = dist + rand(-dist/10, dist/10);	//移動距離 = 移動距離に移動距離の10%の前後誤差
	let theta = rand(0,360);
	
	let nX = cos(theta) * dist2;
	let nY = sin(theta) * dist2;
	
	BossMoveEXtoPlayer(absolute(nX), nY, GetClipMinX + 32, GetClipMinY + 32, GetClipMaxX - 32, GetClipMinY + 160);
    }

    // 連続移動(これを使うよりループの一部にBossMoveEXを組み込んで同期した方がいいと思います)
    // dist	:移動範囲
    // w	:待機時間
    task BossMoveEXloop(let dist, let w){
	yield;
	
	loop{
		BossMoveEX(dist);
		loop(w){ yield; }
	}
    }

    // 移動関数
    // nX,nY	:移動範囲(正負)
    // left,top,right,bottom	:可動領域
    function BossMoveEXtoPlayer(let nX, let nY, let left, let top, let right, let bottom) {
        let x = 0;
        let y = 0;
	
	//減速動作に不満ならここの値を弄って下さい
	let MAXSPEED = 3;	//最大速度
	let SLOW = 15;		//減速度

        if(GetPlayerX < GetX) {
        	x = GetX - nX;
        	if(x < left) {
        		x = GetX + nX;
        	}
        }else{
        	x = GetX + nX;
        	if(right < x) {
         		x = GetX - nX;
        	}
        }
        y = GetY + nY;
        if(y < top) {
        	y = top;
        }else if(bottom < y) {
        	y = bottom;
        }

        SetMovePosition03(x, y, SLOW, MAXSPEED);
    }


