수정 내역 1. 토끼 이미지, 크기 변경 2. 슬라임 이미지(색감), 크기 변경 3. 슬라임 그림자 이미지 변경 4. 슬라임 얼룩자국 이미지(색감) 변경 5. 토끼 슬라임 최대 4단계로 변경 6. 맵 이동 및 재시작 과정에서 전투플레이어 삭제 후 생성하는 로직으로 변경 7. 1단계 슬라임이 점프할 때, 카메라 흔들림 효과 강화 8. 슬라임 시작 또는 분열할 때, 0.5초 무적 기능 추가 버그 수정 내역 1. 일반 슬라임이 본체로 인식되는 버그 수정 2. 간헐적으로 슬라임 얼룩 자국이 남아있는 버그 수정 3. 마지막 보스를 스킬로 잡을 때, 전투플레이어 오류 수정 4. 대쉬 중에 디버프를 받는 버그 수정
119 lines
3.4 KiB
C#
119 lines
3.4 KiB
C#
using System.Collections;
|
|
using UnityEngine;
|
|
|
|
// ReSharper disable once CheckNamespace
|
|
namespace BlueWaterProject
|
|
{
|
|
public class CombatHealth : MonoBehaviour, IDamageable
|
|
{
|
|
// Components
|
|
private SpriteRenderer flashWhiteSpriteRenderer;
|
|
|
|
// Health
|
|
[SerializeField] private int maxHp;
|
|
[SerializeField] private int currentHp;
|
|
[SerializeField] private float takeDamageCoolDown = 0.5f;
|
|
|
|
// Variables
|
|
private WaitForSeconds flashWhiteWaitTime;
|
|
private bool enableTakeDamage = true;
|
|
|
|
// Hashes
|
|
private static readonly int IsHitHash = Shader.PropertyToID("_IsHit");
|
|
|
|
// events
|
|
public delegate void ChangedCurrentHp(int currentHp);
|
|
public event ChangedCurrentHp OnChangedCurrentHp;
|
|
|
|
// Unity events
|
|
private void Start()
|
|
{
|
|
OnChangedCurrentHp += CombatUiManager.Inst.HeartHpUi.SetCurrentHp;
|
|
CombatUiManager.Inst.GameOverPopupUi.OnRestartEvent += SetMaxHp;
|
|
|
|
flashWhiteWaitTime = new WaitForSeconds(takeDamageCoolDown * 0.1f);
|
|
SetCurrentHp(maxHp);
|
|
}
|
|
|
|
private void OnDestroy()
|
|
{
|
|
if (CombatUiManager.Inst)
|
|
{
|
|
OnChangedCurrentHp -= CombatUiManager.Inst.HeartHpUi.SetCurrentHp;
|
|
CombatUiManager.Inst.GameOverPopupUi.OnRestartEvent -= SetMaxHp;
|
|
}
|
|
}
|
|
|
|
// Init
|
|
public void InitComponent(SpriteRenderer spriteRenderer)
|
|
{
|
|
flashWhiteSpriteRenderer = spriteRenderer;
|
|
}
|
|
|
|
// Events methods
|
|
public void HandleEnableTakeDamage() => enableTakeDamage = true;
|
|
public void HandleDisableTakeDamage() => enableTakeDamage = false;
|
|
|
|
// Methods
|
|
public void TakeDamage(float attackerPower, Vector3? attackPos = null)
|
|
{
|
|
if (!enableTakeDamage) return;
|
|
|
|
enableTakeDamage = false;
|
|
var changeHp = Mathf.Max(currentHp - (int)attackerPower, 0);
|
|
SetCurrentHp(changeHp);
|
|
|
|
// 죽었는지 체크
|
|
if (changeHp == 0f)
|
|
{
|
|
Die();
|
|
return;
|
|
}
|
|
|
|
StartCoroutine(nameof(FlashWhiteCoroutine));
|
|
StartCoroutine(Utils.CoolDown(takeDamageCoolDown, HandleEnableTakeDamage));
|
|
}
|
|
|
|
public void Die()
|
|
{
|
|
CombatUiManager.Inst.GameOverPopupUi.Open();
|
|
Destroy(gameObject);
|
|
}
|
|
|
|
public float GetCurrentHp()
|
|
{
|
|
return currentHp;
|
|
}
|
|
|
|
private void SetCurrentHp(int value)
|
|
{
|
|
currentHp = value;
|
|
OnChangedCurrentHp?.Invoke(value);
|
|
|
|
if (currentHp <= 2)
|
|
{
|
|
CameraManager.Inst.CombatCamera.LowHpVignette();
|
|
}
|
|
else
|
|
{
|
|
CameraManager.Inst.CombatCamera.DefaultHpVignette();
|
|
}
|
|
}
|
|
|
|
private void SetMaxHp()
|
|
{
|
|
SetCurrentHp(maxHp);
|
|
}
|
|
|
|
private IEnumerator FlashWhiteCoroutine()
|
|
{
|
|
for (var i = 0; i < 5; i++)
|
|
{
|
|
flashWhiteSpriteRenderer.material.SetInt(IsHitHash, 1);
|
|
yield return flashWhiteWaitTime;
|
|
flashWhiteSpriteRenderer.material.SetInt(IsHitHash, 0);
|
|
yield return flashWhiteWaitTime;
|
|
}
|
|
}
|
|
}
|
|
} |