사이드뷰 로그라이크 액션 게임 NULL(가제) 개발중인 상태이다.
오늘 헤멨던 부분은 정말 간단했다.
boss에서 HP를 업데이트 하는 부분인데, 보스가 맞을 때마다 호출하는 함수이다.
/// <summary>
/// boss hp update
/// </summary>
public void UpdateHP()
{
// boss's hp cannot be negative
if (enemyStat.HP <= 0)
{
enemyStat.HP = 0;
onBossDied.Invoke();
}
if (phaseAmount != 1)
{
if(queueHP.Count!=0)
{
float phaseHP = queueHP.Dequeue();
Debug.Log("cur HP : " +enemyStat.HP +" phaseHP : "+ phaseHP);
if (enemyStat.HP < phaseHP)
{
Debug.Log("nextPhase");
enemyStat.HP = phaseHP;
onNextPhase.Invoke();
}
}
}
// updating HP UI
bossHPUI.value = (float)enemyStat.HP / enemyStat.maxHP;
}
hp phase를 queue넣고 관리하며 해당 phase에 도달하면 queue에서 dequeue해준다.
큐에는 다음 페이즈 체력이 peek에 담겨있는 상태이다.
문제는 조건문에서
if(queueHP.Count!=0){
float phaseHP = queueHP.Dequeue();
peek이 아니라 dequeue를 써버렸더니, 체크만 해야하는데 값을 빼버려서
다음 페이즈값으로 넘어가버렸다...
이 간단한 걸 조심안하고 시간을 날렷다..