using Sirenix.OdinInspector; using UnityEngine; // ReSharper disable once CheckNamespace namespace BlueWaterProject { public class CombatStatus : MonoBehaviour { [field: SerializeField] public bool IsStunned { get; private set; } [field: SerializeField] public bool IsSlowedMoveSpeed { get; private set; } [field: SerializeField] public float MoveSpeedCoefficient { get; private set; } [SerializeField] private Color slowColor; [Title("효과")] [SerializeField] private ParticleSystem stunParticle; private SpriteRenderer flashWhiteSpriteRenderer; private Coroutine stunCoolDownCoroutine; private Coroutine slowMoveSpeedCoolDownCoroutine; private bool enableTakeDamage = true; // Events methods public void HandleEnableTakeDamage() => enableTakeDamage = true; public void HandleDisableTakeDamage() => enableTakeDamage = false; public void InitComponent(SpriteRenderer spriteRenderer) { flashWhiteSpriteRenderer = spriteRenderer; } public void Stun(float duration) { if (!enableTakeDamage) return; IsStunned = true; stunParticle.Play(); if (stunCoolDownCoroutine != null) { StopCoroutine(stunCoolDownCoroutine); } stunCoolDownCoroutine = StartCoroutine(Utils.CoolDown(duration, EndStun)); } public void EndStun() { IsStunned = false; stunParticle.Stop(); stunCoolDownCoroutine = null; } public void SlowMoveSpeed(float duration, float moveSpeedCoefficient) { if (!enableTakeDamage) return; IsSlowedMoveSpeed = true; MoveSpeedCoefficient = moveSpeedCoefficient; flashWhiteSpriteRenderer.color = slowColor; if (slowMoveSpeedCoolDownCoroutine != null) { StopCoroutine(slowMoveSpeedCoolDownCoroutine); } slowMoveSpeedCoolDownCoroutine = StartCoroutine(Utils.CoolDown(duration, EndSlowMoveSpeed)); } public void EndSlowMoveSpeed() { flashWhiteSpriteRenderer.color = Color.white; IsSlowedMoveSpeed = false; slowMoveSpeedCoolDownCoroutine = null; } } }