//---------------------
//{X̋ʊ֐
//---------------------

let se_NoDamage;
let se_Damage;
let se_BossDefeat;
let m_InvincibleTime = 200;

function func_Boss_Initialize()
{
	se_NoDamage = GetCommonDataEx("INVADER", "System.Directory.System") ~ "se\beep08.wav";
	se_Damage = GetCommonDataEx("INVADER", "System.Directory.System") ~ "se\pi53.wav";
	se_BossDefeat = GetCommonDataEx("INVADER", "System.Directory.System") ~ "se\fm001.wav";

}//end function

task main_Boss_LifeManager()
{
	let life;
	loop{
		loop(10){ yield; }
		life = GetLife() - const_EnemyLifeZero;
		if(life < 0){ life = 0; }
		SetCommonDataEx("INVADER","EnemyBoss.Life", life);
	}
}

//r[蔻eXg_Boss
task main_TestBeamCollisionBoss()
{
	loop(10){yield;}
	loop{
		if(m_InvincibleTime > 0){ m_InvincibleTime--; }

		SetCommonDataEx("INVADER","EnemyBoss.Life", GetLife());
		if(REMY_CommonDataArrayEx_Get("INVADER", "Enemies.BeamHit", g_EnemyID) > 0)
		{
			if(m_InvincibleTime > 0)
			{
				ascent(i in 0..3){ main_Shot_Counter(1.2 + 0.4 * i, 5, _SHOT05); }
				PlaySE(se_NoDamage);
			}
			else{
				PlaySE(se_Damage);
				m_InvincibleTime = 120;
				AddLife(-100);
				let score = 0;
				alternative(g_GraType)
				case(_GRA_BOSS1){ score = 50; }
				case(_GRA_BOSS2){ score = 100; }
				case(_GRA_BOSS3){ score = 150; }
				case(_GRA_BOSS4){ score = 300; }
				let score_rate = REMY_CommonDataArrayEx_Get("INVADER", "Enemies.ScoreRate", g_EnemyID);
				SetCommonDataEx("INVADER","EnemyBoss.Score",[GetX(), GetY()-70, score, score_rate]);
				func_AddHitCombo(REMY_CommonDataArrayEx_Get("INVADER", "Enemies.BeamHit", g_EnemyID));
			}
			loop(5){ yield; }
			REMY_CommonDataArrayEx_Set("INVADER", "Enemies.BeamHit", g_EnemyID, 0);
		}
		yield;
	}


}//end function

//GSł
task main_Enemy_DestroyAll()
{
	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

//CtGtFNg
task main_Boss_EffectLife(let max, let per)
{
	let lifes = trunc(max/per);
	let current_life = lifes;
	let life_old = lifes;
	let changed = false;

	ascent(i in 0..lifes)
	{
		Life(i);
	}

	loop{
		yield;
		current_life = ceil((GetLife() - const_EnemyLifeZero)/ per);
		if(current_life != life_old)
		{
			life_old = current_life;
			changed = true;
		}else
		{
			changed = false;
		}

	}


	task Life(let num)
	{
		let ang = -90 + 360 * (num / lifes);
		let x = 40 * cos(ang);
		let y = 40 * sin(ang);
		let obj = REMY_Effect_CreateObject(img_BossLife, 4, 5);
		REMY_Effect_SetVertexSquare(obj, [16, 0, 32, 16], [0, 0], [200, 55, 255, 255] );
		//ObjEffect_SetRenderState(obj, ALPHA);
		ObjEffect_SetScale(obj, 1, 1);
		ObjEffect_SetAngle(obj, 0, 0, 0);
		
		ChangeColor();

		loop{
			if(!g_Alive){break;}
			Obj_SetPosition(obj, GetX() + x, GetY() + y);
			yield;
		}
		Obj_Delete(obj);
		

		task ChangeColor()
		{
			loop
			{
				if(changed && num >= current_life)
				{
					REMY_Effect_SetUVSquare(obj, [0, 0, 16, 16]); 
					REMY_Effect_SetColorSquare(obj, [200 , 255, 55, 55]);
				}
				yield;
			}

		}//end task

	}//end task
}//end function

//V[hGtFNg
task main_Boss_EffectShield()
{

	Effect(0);
	Effect(1);

	task Effect(let type)
	{
		let angle = [0, 45][type];
		let obj = REMY_Effect_CreateObject(img_Shield, 4, 4);
		REMY_Effect_SetVertexSquare(obj, [0, 0, 64, 64], [0, 0], [100, 255, 55, 55] );
		ObjEffect_SetScale(obj, [1.5,1.0][type], [1.5,1.0][type]);
		ObjEffect_SetAngle(obj, 0, 0, angle);
		
		ChangeColor();

		loop{
			if(!g_Alive){break;}
			angle += [0.5, -0.5][type];
			Obj_SetPosition(obj, GetX(), GetY());
			ObjEffect_SetAngle(obj, 0, 0, angle);
			yield;
		}
		Obj_Delete(obj);
		

		task ChangeColor()
		{
			let alpha = 0;
			loop
			{
				if(m_InvincibleTime > 0 && alpha < 200)
				{
					alpha += 30;
					REMY_Effect_SetColorSquare(obj, [alpha , 255, 55, 55]);
				}
				else if(m_InvincibleTime == 0 && alpha > 0)
				{
					alpha -= 30;
					if(alpha < 0){ alpha = 0; }
					REMY_Effect_SetColorSquare(obj, [alpha , 255, 55, 55]);
				}
				yield;
			}

		}//end task

	}//end task

}//end task

