//---------------------
//G̋ʊ֐
//---------------------


//BID擾Ȃ
function func_Initialize()
{
	//args  0:EnemyID / 1:MoverID / 2:GraType / 3:MovePatern / 4:param1(PosX) / 5:param2(PosY) / 6:param3
	let args = GetArgument();
	g_EnemyID = args[0];
	g_ParentMoverID =args[1];
	g_GraType = args[2];
	g_MoveType = args[3];
	g_Param01 = args[4];
	g_Param02 = args[5];
	g_Param03 = args[6];
	obj_BBShot = Obj_Create(OBJ_SHOT);

	LoadUserShotData(GetCurrentScriptDirectory() ~ "shot_data.txt");

}//end function


//jeXgtask
task main_TestDefeat()
{

	loop(10){yield;}
	loop{
		if(!g_Alive){ return; }

		//O猂j
		if(REMY_CommonDataArrayEx_Get("INVADER", "Enemies.Status", g_EnemyID) == _ENEMY_DEAD)
		{
			AddLife(const_EnemyLifeZero - GetLife());
		}

		if(GetLife() <= const_EnemyLifeZero)
		{
			//OutputDebugString(2, "Log1", (g_EnemyID * 10 + 1));

			REMY_CommonDataArrayEx_Set("INVADER", "Enemies.Status", g_EnemyID, _ENEMY_DEAD);
			REMY_CommonDataArrayEx_Add("INVADER", "Enemy.Defeated", g_EnemyID);
			let alive = GetCommonDataDefaultEx("INVADER", "Enemy.AliveCount", 1);
			SetCommonDataEx("INVADER", "Enemy.AliveCount", alive - 1);
			main_Vanish();
			return;
		}
		yield;
	}
}//end function


//r[蔻eXgtask
task main_TestBeamCollision()
{
	let beamhitcount = 0;

	loop(10){yield;}
	loop{
		if(!g_Alive){ return; }

		beamhitcount = REMY_CommonDataArrayEx_Get("INVADER", "Enemies.BeamHit", g_EnemyID);
		if(beamhitcount > 0)
		{
			func_AddHitCombo(beamhitcount);
			AddLife(const_EnemyLifeZero - GetLife());
			//r[œ|Ɠ_ω
			local{
				let score = 10;
				alternative(g_GraType)
				case(_GRA_SHELL){ score = 10; }
				case(_GRA_CRAB){ score = 20; }
				case(_GRA_JELLY){ score = 30; }
				case(_GRA_UFO){
					let shots = GetCommonDataDefaultEx("INVADER","Beam.Count", 0) % 15;
					 score = [300, 100, 100, 50, 50, 150, 150][(shots % 5 + shots % 3)]; 
				}
				REMY_CommonDataArrayEx_Set("INVADER", "Enemies.Score", g_EnemyID, score);
				//OutputDebugString(3, "Log2", (g_EnemyID * 10 + 2)); 
				REMY_CommonDataArrayEx_Set("INVADER","Enemies.BeamHit", g_EnemyID, 0);
			}
			return;
		}
		yield;
	}

}//end function

//K񐔂Tick҂
function block_WaitTimerTick(let wait_count)
{
	let count = 0;
	loop{
		yield;
		wait_WaitWhileFreeze();
		while(!GetCommonDataDefaultEx("INVADER","EnemyMover.OnTick", false)){ yield; }
		count ++;
		if(count >= wait_count || !g_Alive){ break; }
	}

}//end function

//݂TickTime
function func_GetTickTime()
{
	return GetCommonDataDefaultEx("INVADER","EnemyMover.TickTime", 60);

}//end function

//fbhC𒴂
task main_TestDeadLine()
{
	yield;
	loop{
		yield;
		if(!g_Alive){ return; }

		if(GetY() > const_DeadLine)
		{
			SetCommonDataEx("INVADER","Enemy.OverDeadLine", true);
		}

	}
}//end function

//t[Y̓Xgbv
function wait_WaitWhileFreeze()
{
	while(GetCommonDataDefaultEx("INVADER","EnemyMover.StopAll", false)){ yield; }
}//end function


//ʊOɏo
task main_FadeOutVanish()
{
	loop{
		yield;
		if(!g_Alive){ return; }

		if(GetX() < GetClipMinX() - 100 || GetX() > GetClipMaxX() + 100 || GetY() > GetClipMaxY() + 100 || GetY() < GetClipMinY() - 100)
		{
			REMY_CommonDataArrayEx_Set("INVADER", "Enemies.Status", g_EnemyID, _ENEMY_DEAD);
			let alive = GetCommonDataDefaultEx("INVADER", "Enemy.AliveCount", 1);
			SetCommonDataEx("INVADER", "Enemy.AliveCount", alive - 1);
			func_DeleteBBShot();
			g_Alive = false;
			VanishEnemy();
			return;
		}
	}

}//



//΃oAp
task main_BarrierBreakerShot(){

	Obj_Delete(obj_BBShot);
	obj_BBShot = func_CreateShot();

	loop{
		Obj_SetPosition(obj_BBShot, GetX(), GetY());
		yield;
		if(Obj_BeDeleted(obj_BBShot)){
			loop(1){yield;}
			if(!g_CreateBB){ return; }
			obj_BBShot = func_CreateShot();
		}
	}

    //---------
	function func_CreateShot(){

		let obj = Obj_Create(OBJ_SHOT);
		ObjShot_SetGraphic(obj, WHITE02);
		Obj_SetCollisionToPlayer(obj, false);
		Obj_SetAlpha(obj, 00);
		return obj;
	}//end function

}//end task

//΃oAVbg̏
function func_DeleteBBShot()
{
	g_CreateBB = false;
	if(!Obj_BeDeleted(obj_BBShot))
	{
		Obj_Delete(obj_BBShot);
	}

}//end function

//rect
function func_GetAnimationRect(let type, let frame){

	alternative(type)
	case(_GRA_JELLY)
	{
		let f = trunc(frame / 20) % 4;
		return [0 + f * 32, 0, 32 + f * 32 ,32];
	}
	case(_GRA_CRAB)
	{
		let f = trunc(frame / 20) % 4;
		return [0 + f * 32, 32, 32 + f * 32 ,64];
	}
	case(_GRA_SHELL)
	{
		let f = trunc(frame / 20) % 4;
		return [0 + f * 32, 64, 32 + f * 32 ,96];
	}
	case(_GRA_UFO)
	{
		let f = trunc(frame / 5) % 3;
		return [0 + f * 40, 96, 40 + f * 40 ,128];
	}
	case(_GRA_VACULA)
	{
		let f = trunc(frame / 5) % 6;
		return [[0, 48][trunc(f/3) % 2], [0, 32, 64][f % 3], 48 + [0, 48][trunc(f/3) % 2] ,32 + [0, 32, 64][f % 3]];
	}
	case(_GRA_BOSS1)
	{
		return [192, 0, 256 ,64];
	}
	case(_GRA_BOSS2)
	{
		return [128, 0, 192 ,64];
	}
	case(_GRA_BOSS3)
	{
		return [64, 0, 128 ,64];
	}
	case(_GRA_BOSS4)
	{
		return [0, 0, 64 ,64];
	}


	
}//end function


function func_GetColor(){

	if(GetY() > 260){SetColor(255, 0, 0);}
	else if(GetY() > 220){SetColor(255, 80, 80);}
	else if(GetY() > 180){SetColor(205, 80, 205);}
	else if(GetY() > 120){SetColor(85, 80, 205);}
	else if(GetY() > 70){SetColor(55, 250, 55);}
	else{SetColor(255, 255, 255);}

}//end function

//Xe[W
function func_GetShootingStage(){

	return GetCommonDataEx("INVADER", "STAGE_NUMBER");

}//end function

//
function func_ChAngle(let angle){

	if(angle >= 360){angle -= 360;}
	else if(angle < 0){angle += 360;}
	return angle;

}//end function


//É{[iX
function func_TestNagoya()
{
	let distX = absolute(GetPlayerX() - GetX());
	let distY = GetPlayerY() - GetY();
	if(distY < 25 && distY > -5 && distX < 15)
	{
		let nagoya = GetCommonDataEx("INVADER","ScoreBonus.NagoyaCount");
		SetCommonDataEx("INVADER","ScoreBonus.NagoyaCount", nagoya + 1 );
	}


}//end function


//R{ǉ
function func_AddHitCombo(let val)
{
	if(g_GraType == _GRA_VACULA){ return; }
	let combo = GetCommonDataEx("INVADER","ScoreBonus.HitComboCount") + val;

	SetCommonDataEx("INVADER","ScoreBonus.HitComboCount", combo);
}//end function
