//ǁB
//

script_enemy_main{

let img_Wall;
let m_IsLeft;
let m_Rect;
let m_Level = -1;
let const_BaseLife = 1000;

@Initialize{

	m_IsLeft = GetArgument();//E
	img_Wall = GetCommonDataEx("INVADER", "System.Directory.System") ~ "img\wall.png";
	SetLife(const_BaseLife + 40);
	SetDamageRate(80, 0);
	SetTexture(img_Wall);
	let count = GetCommonDataDefaultEx("INVADER","ScoreBonus.ShieldCount", 0);
	SetCommonDataEx("INVADER","ScoreBonus.ShieldCount",count + 1);

	main_MainRoutine();
}


@MainLoop{

	SetCollisionA(GetX(), GetY(), 3);
	yield;
}


@DrawLoop{

	TestRect();
	SetGraphicRect(m_Rect[0],m_Rect[1],m_Rect[2],m_Rect[3]);
	SetRenderState(ADD);
	SetColor(255,00,00);
	DrawGraphic(GetX(), GetY());

}


@Finalize{

}

task main_MainRoutine(){

	ShotDamage();
	BombDamage();
	TestClear();

	loop{
		if(GetLife() <= const_BaseLife)
		{
			let count = GetCommonDataDefaultEx("INVADER","ScoreBonus.ShieldCount", 0);
			SetCommonDataEx("INVADER","ScoreBonus.ShieldCount",count - 1);
			VanishEnemy();
		}
		yield;
	}


	task ShotDamage()
	{
		loop{
			yield;
			if(GetEnemyShotCountEx(GetX(), GetY()+4, 9, ALL) > 0){
				if(!OnPlayerMissed()){
					AddLife(-15 * GetEnemyShotCountEx(GetX(), GetY()+4, 9, ALL));
				}
				DeleteEnemyShotImmediatelyInCircle(SHOT, GetX(), GetY()+4, 9);
			}
		}
	}

	task BombDamage()
	{

		loop{
			yield;
			if(OnBomb()){
				AddLife(-15);
				if(GetLife() <= const_BaseLife){ break; }
				while(OnBomb()){ yield; }
			}
		}
	}

	task TestClear()
	{
		loop{
			loop(10){yield;}
			if(GetCommonDataDefaultEx("INVADER", "Stage.Status", -1) == _STAGE_CLEAR){ break; }
		}
		VanishEnemy();
	}


}//end task

function TestRect()
{
	let level = trunc((GetLife() - const_BaseLife - 1)/10);
	if(level == 0 && m_Level != 0){m_Rect = [[16, 0][m_IsLeft], 48, [32, 16][m_IsLeft], 64];}
	if(level == 1 && m_Level != 1){m_Rect = [[16, 0][m_IsLeft], 32, [32, 16][m_IsLeft], 48];}
	if(level == 2 && m_Level != 2){m_Rect = [[16, 0][m_IsLeft], 16, [32, 16][m_IsLeft], 32];}
	if(level == 3 && m_Level != 3){m_Rect = [[16, 0][m_IsLeft], 0, [32, 16][m_IsLeft], 16];}
	m_Level = level;
	
}//end function

//`
#include_function".\script_stagedata_define.txt"


}//end script