//Xe[Wf[^Ginclude鋤ʃt@C

let g_Level = 0;


//===============================================
//Gf[^
//===============================================

//pos:[X,Y]
//params:[MoverID, MoveX, MoveY]
function func_CreateEnemyMover(let type, let pos, let params)
{

	let id = GetCommonDataDefaultEx("INVADER","EnemyMover.Count", 0);

	let file = GetCurrentScriptDirectory();
	alternative(type)
	case("EnemyMover01"){ file = file ~ "script_enemymover01.txt"; }
	case("EnemyMover02"){ file = file ~ "script_enemymover02.txt";}

	CreateEnemyFromFile(file, pos[0], pos[1], 0, 0, [id] ~ params);

	REMY_CommonDataArrayEx_Add("INVADER","EnemyMovers.Status", _ENEMY_ALIVE);
	REMY_CommonDataArrayEx_Add("INVADER","EnemyMovers.CallBack", _ENEMYMOVERCALL_NONE);
	REMY_CommonDataArrayEx_Add("INVADER","EnemyMovers.PositionX", 0);
	REMY_CommonDataArrayEx_Add("INVADER","EnemyMovers.PositionY", 0);
	REMY_CommonDataArrayEx_Add("INVADER","EnemyMovers.MoveStatus", _MOVESTATUS_NORMAL);

	SetCommonDataEx("INVADER","EnemyMover.Count", id + 1);

	return id;
}


//G쐬
function func_CreateEnemy(let type, let parentID, let moveType, let param01, let param02, let param03){

	let id = GetCommonDataDefaultEx("INVADER","Enemy.Count", 0);
	let alive = GetCommonDataDefaultEx("INVADER","Enemy.AliveCount", 0);

	let directory = GetCommonDataEx("INVADER","System.Directory.Enemy");
	let arg = [id, parentID, type, moveType, param01, param02, param03];

	if(type == _GRA_UFO){ CreateEnemyFromFile(directory ~ "enemy_main_UFO.txt", -20, -20, 0, 0, arg); }
	else if(type == _GRA_VACULA){ CreateEnemyFromFile(directory ~ "enemy_main_vacula.txt", -20, -20, 0, 0, arg); }
	else if(type == _GRA_BOSS1){ CreateEnemyFromFile(directory ~ "enemy_main_boss1.txt", GetCenterX() - 20, -60, 0, 0, arg); }
	else if(type == _GRA_BOSS2){ CreateEnemyFromFile(directory ~ "enemy_main_boss2.txt", GetCenterX() - 20, -60, 0, 0, arg); }
	else if(type == _GRA_BOSS3){ CreateEnemyFromFile(directory ~ "enemy_main_boss3.txt", GetCenterX() - 20, -60, 0, 0, arg); }
	else if(type == _GRA_BOSS4){ CreateEnemyFromFile(directory ~ "enemy_main_boss4.txt", GetCenterX(), 150, 0, 0, arg); }
	else if(type == _GRA_BATTERY){ CreateEnemyFromFile(directory ~ "enemy_main_battery.txt", GetCenterX(), 0, 0, 0, arg); }
	else{ CreateEnemyFromFile(directory ~ "enemy_main_invaders.txt", -20, -20, 0, 0, arg);}

	SetCommonDataEx("INVADER","Enemy.Count", id + 1);
	SetCommonDataEx("INVADER","Enemy.AliveCount", alive + 1);

	REMY_CommonDataArrayEx_Add("INVADER", "Enemies.Status", _ENEMY_ALIVE);
	REMY_CommonDataArrayEx_Add("INVADER", "Enemies.PositionX", 0);
	REMY_CommonDataArrayEx_Add("INVADER", "Enemies.PositionY", 0);
	REMY_CommonDataArrayEx_Add("INVADER", "Enemies.BeamHit", 0);
	REMY_CommonDataArrayEx_Add("INVADER", "Enemies.ItemType", _ITEMTYPE_STAR);
	REMY_CommonDataArrayEx_Add("INVADER", "Enemies.Score", 10);
	REMY_CommonDataArrayEx_Add("INVADER", "Enemies.ScoreRate", 1);

	local{
		let item = 0;
		alternative(type)
		case(_GRA_BATTERY){ item = 3; }
		case(_GRA_UFO){ item = 6; }
		case(_GRA_JELLY){ item = 3; }
		case(_GRA_CRAB){ item = 2; }
		case(_GRA_SHELL){ item = 1; }
		case(_GRA_VACULA){ item = 0; }
		others{ item = 1; }
		REMY_CommonDataArrayEx_Add("INVADER","Enemies.ItemEnergy", item);
	}
	return id;

}//end function


//GSł
task main_DestroyAllEnemy()
{
	let count = GetCommonDataDefaultEx("INVADER","Enemy.Count", 0);
	ascent(i in 0..count)
	{
		if(REMY_CommonDataArrayEx_Get("INVADER","Enemies.Status", i) == _ENEMY_ALIVE)
		{
			REMY_CommonDataArrayEx_Set("INVADER","Enemies.Status", i, _ENEMY_DEAD);
			loop(5){yield;}
		}
	}

}//end task
//===============================================


//===============================================
//x
//===============================================
//xKlȂKlɏグ
//trueԂB
function func_TestLevelUp(let next_level)
{
	if(g_Level < next_level)
	{
		g_Level = next_level;
		return true;
	}
	return false;

}

//xIɋKlɂ
function func_SetLevel(let val)
{
	g_Level = val;
}//end function

//̃xԂ
function func_GetLevel()
{
	return g_Level;
}//end function

//K背xȏォԂ
function func_IsLevelOver(let val)
{
	return (g_Level >= val);
}//end function
//===============================================


//===============================================
//Xe[Wis
//===============================================

//Xe[WJn҂
function wait_StageStart()
{
	loop{
		yield;
		if(GetCommonDataDefaultEx("INVADER", "Stage.Status", -1) == _STAGE_ONGAME){ break; }
	}
}//end wait

//Xe[WNAł邩ǂ
function func_TestStageClear()
{
	return GetCommonDataDefaultEx("INVADER", "Stage.ClearFlag", false);
}//end function


//Xe[WNAɂĂ悢tOĂB
function func_ClearStage()
{
	SetCommonDataEx("INVADER", "Stage.ClearFlag", true);
}//end function

//Mover̃Xe[^XZbg
function func_SetMoverStatus(let id, let stat)
{
	REMY_CommonDataArrayEx_Set("INVADER","EnemyMovers.MoveStatus", id, stat);
}//end function

//ăNAς݁H
function func_IsStageCleared()
{
	return GetCommonDataDefaultEx("INVADER", "Stage.ClearFlag", false);
}//end function

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




//===============================================
//EFCgn
//===============================================

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

//t[Y̓Xgbv
function wait_ScriptWait(let wait)
{
	loop(wait){
		yield;
		wait_WaitWhileFreeze();
	}
}//end function

//t[Y̓Xgbv
function wait_ScriptWaitUFO(let wait)
{
	let t = 0;
	loop{
		if(GetCommonDataDefaultEx("INVADER","EnemyMover.StopAll", false)){ yield; }
		else{ yield; t ++; }
		if(t > wait){ return; }
		if(func_IsStageCleared()){ return; }
	}
}//end function

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


//===============================================
//GtFNgȂ
//===============================================

//GtFNgݒ
function func_SetEffect(let effect_type, let param1, let param2)
{
	let effects = GetCommonDataDefaultEx("INVADER","Stage.Effect", []);
	effects = effects ~ [ [effect_type, param1, param2] ];
	SetCommonDataEx("INVADER","Stage.Effect", effects);

}//end function


//ȂƂȂ\ꂢɂ
function func_ArrayAdd(let arr, let add_item)
{
	return arr ~ [add_item];
}//end function

