//---------------------
//Vbg[`
//---------------------

//Vbg[`
let m_ShotRoutine = [false, false, false, false, false];

//Vbg[`I点
function func_ShotRoutine_End(let id)
{
	m_ShotRoutine[id] = false;
}


//郌xɂȂ܂ő҂
function block_LevelWait(let level)
{
	loop
	{
		loop(5){ yield; }
		if(!g_Alive){ return; }
		if(GetCommonDataDefaultEx("INVADER","EnemyMover.Level", 0) >= level){ break; }
	}

}//end task


//Vbg[`uDownv
//ԊuŉɃVbg
//base_param:[interval, wait]
task main_ShotRoutine_Down(let id, let speed, let type, let base_param)
{
	let interval = base_param[0];
	let wait = base_param[1];

	m_ShotRoutine[id] = true;
	block_WaitForStartShot();
	loop
	{
		block_WaitTimerTick(interval);
		if(!g_Alive){ return; }
		if(!m_ShotRoutine[id]){ break; }
		if(!func_TestFrontEnemy()){
			main_Shot_Normal01(speed, func_GetTickTime() * wait, type);
		}
	}

}//end task 

//Vbg[`uAimv
//ԊuŎ@_̃Vbg
//base_param:[interval, wait]
task main_ShotRoutine_Aim(let id, let speed, let type, let base_param)
{
	let interval = base_param[0];
	let wait = base_param[1];

	m_ShotRoutine[id] = true;
	block_WaitForStartShot();
	loop
	{
		block_WaitTimerTick(interval);
		if(!g_Alive){ return; }
		if(!m_ShotRoutine[id]){ break; }
		if(!func_TestFrontEnemy()){
			main_Shot_Normal03(speed, func_GetTickTime() * wait, type);
		}
	}

}//end task 


//Vbg[`ushowerv
//ԊuŉNWAYVbg
//base_param:[interval, wait]
//params:[way, base_angle, width]
task main_ShotRoutine_Shower(let id, let speed, let type, let base_param, let params)
{
	let interval = base_param[0];
	let wait = base_param[1];

	m_ShotRoutine[id] = true;
	block_WaitForStartShot();
	loop
	{
		block_WaitTimerTick(interval);
		if(!g_Alive){ return; }
		if(!m_ShotRoutine[id]){ break; }
		if(!func_TestFrontEnemy()){
			main_Shot_NWay01(speed, func_GetTickTime() * wait, type, params);
		}
	}

}//end task 

//Vbg[`umissilev
//ԊuŃ~TC
//base_param:[interval, wait]
//params:[angle, way]
task main_ShotRoutine_MissileTick(let id, let speed, let base_param, let params)
{
	let interval = base_param[0];
	let wait = base_param[1];

	m_ShotRoutine[id] = true;
	loop
	{
		block_WaitTimerTick(interval);
		if(!g_Alive){ return; }
		if(!m_ShotRoutine[id]){ break; }
		if(!func_TestFrontEnemy()){
			CreateEnemyFromScript("Missile", GetX(), GetY()+ 14, speed, params[0], params[1]);
		}
		yield;
	}

}//end task 


//Vbg[`umissilev
//ԊuŃ~TC
//base_param:[shot_frames...] t[
//params:[angle, way]
task main_ShotRoutine_MissileFrame(let id, let speed, let base_param, let params)
{
	let idx = 0;
	let counter = 0;
	m_ShotRoutine[id] = true;
	loop
	{
		counter++;
		if(!g_Alive){ return; }
		if(!m_ShotRoutine[id]){ break; }
		if(counter == base_param[idx] ){
			CreateEnemyFromScript("Missile", GetX(), GetY() + 14, speed, params[0], params[1]);
			idx ++;
			if(idx >= length(base_param)){ break; }
		}
		yield;
		wait_WaitWhileFreeze();
	}

}//end task 


//Vbg[`uDownv
//ԊuŃVbgBt[B
//base_param:[interval, wait, first_wait] t[
task main_ShotRoutine_DownFrame(let id, let speed, let type, let base_param)
{

	let interval = base_param[0];
	let wait = base_param[1];
	let first_wait = base_param[2];

	m_ShotRoutine[id] = true;

	loop(first_wait)
	{
		yield;
		wait_WaitWhileFreeze();
	}
	loop
	{
		if(!g_Alive){ return; }
		if(!m_ShotRoutine[id]){ break; }
		main_Shot_Normal01(speed, wait, type);

		loop(interval)
		{
			yield;
			wait_WaitWhileFreeze();
		}
	}

}//end task 

