//--------------------------
//蔻萧
//-------------------------




task main_CollisionManager_MainRoutine()
{

	loop
	{
		func_CollisionManager_TestBeamEnemyCollision();
		func_CollisionManager_TestItemPlayerCollision();
		//func_CollisionManager_TestBeamMissileCollision();
		yield;
	}

}


//r[ƓG̓蔻
function func_CollisionManager_TestBeamEnemyCollision()
{
	if ( GetCommonDataDefaultEx("INVADER", "Enemy.Count", 0) == 0 ){ return; }

	let status_list = GetCommonDataDefaultEx("INVADER","Enemies.Status", []);
	let x_list = GetCommonDataDefaultEx("INVADER","Enemies.PositionX", []);
	let y_list = GetCommonDataDefaultEx("INVADER","Enemies.PositionY", []);
	let count = length(status_list);
	
	ascent(j in 0..const_BeamSlotMax)
	{
		if(func_ObjBeam_GetStatus(j) == _BEAM_SHOOT)
		{
			let beam_x = func_ObjBeam_GetX(j);
			let beam_y = func_ObjBeam_GetY(j);
			ascent(i in 0..count)
			{
				if(status_list[i] != _ENEMY_DEAD)
				{
					let distX = absolute(x_list[i] - beam_x);
					let distY = absolute(y_list[i] - beam_y);
					if(distX < 14 && distY < 15)
					{
						//G̃XRA[gݒB
						let rate = [1, func_SpecialBeam_GetSpecialRate()][func_SpecialBeam_IsSpecialShot(j)];
						REMY_CommonDataArrayEx_Set("INVADER","Enemies.ScoreRate", i ,rate);
						let h = REMY_CommonDataArrayEx_Get("INVADER","Enemies.BeamHit", i);
						REMY_CommonDataArrayEx_Set("INVADER","Enemies.BeamHit", i , h + 1);
						CreateItems(i, beam_x, beam_y, h);
						func_Beam_HitNormal(j, beam_x, beam_y);	//r[̃qbg
					}
				}
			}
		}
	}

	return;

	//--------

	function CreateItems(let enemyID, let beam_x, let beam_y, let hit_count)
	{

		let item = REMY_CommonDataArrayEx_Get("INVADER","Enemies.ItemType",enemyID);
		
		//if((item != _ITEMTYPE_5STAR) || ((hit_count == 0) && item == _ITEMTYPE_5STAR))
		//{
			let energy = REMY_CommonDataArrayEx_Get("INVADER","Enemies.ItemEnergy",enemyID);
			main_Item_CreateStar(beam_x, beam_y, energy);
		//}

		if((hit_count == 0) && (item != _ITEMTYPE_STAR && item != _ITEMTYPE_5STAR))
		{
			main_Item_CreateSpecial(beam_x, beam_y, item);
		}

	}//end function




}


//r[ƃ~TC̓蔻
function func_CollisionManager_TestBeamMissileCollision()
{
	if ( GetCommonDataEx("INVADER", "Missile.Count") == 0 ){ return; }

	let status_list = GetCommonDataEx("INVADER","Missiles.Status");
	let x_list = GetCommonDataEx("INVADER","Missiles.PositionX");
	let y_list = GetCommonDataEx("INVADER","Missiles.PositionY");
	let beamhit = GetCommonDataEx("INVADER","Missiles.BeamHit");

	let count = length(status_list);
		
	//qbgJEgO
	ascent(i in 0..length(beamhit)){beamhit[i] = false;}

	ascent(j in 0..const_BeamSlotMax)
	{
		if(func_ObjBeam_GetStatus(j) == _BEAM_SHOOT)
		{
			let beam_x = func_ObjBeam_GetX(j);
			let beam_y = func_ObjBeam_GetY(j);
			ascent(i in 0..count)
			{
				if(status_list[i] != _ENEMY_DEAD)
				{
					let distX = absolute(x_list[i] - beam_x);
					let distY = absolute(y_list[i] - beam_y);
					if(distX < 5 && distY < 15)
					{
						beamhit[i] = true;
					}
				}
			}
		}
	}
	SetCommonDataEx("INVADER","Missiles.BeamHit", beamhit);
	return;

}



//ACeƎ@̓蔻
function func_CollisionManager_TestItemPlayerCollision()
{
	
	let plX = GetPlayerX();
	let plY = GetPlayerY();
	
	ascent(j in 0..const_ItemMaxCount)
	{
		if(func_ObjItem_GetStatus(j) == _ITEM_APPEAR)
		{
			let item_x = func_ObjItem_GetX(j);
			let item_y = func_ObjItem_GetY(j);
			local{
				let distX = absolute(plX - item_x);
				let distY = absolute(plY - item_y);
				if(distX < 14 && distY < 10)
				{
					let type =  func_ObjItem_GetType(j);
					if(type == _ITEMTYPE_STAR){ func_Item_HitNormal(j, item_x, item_y);}	//ACẽqbg
					else{ func_Item_HitSpecial(j, item_x, item_y, type);}
				}
			}
		}
	}
}

