75 lines
2.4 KiB
C#
75 lines
2.4 KiB
C#
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;
|
|
}
|
|
}
|
|
} |