OldBlueWater/BlueWater/Assets/02.Scripts/NewSkill/SkillBase.cs

73 lines
2.0 KiB
C#
Raw Normal View History

using System;
using System.Collections;
using Sirenix.OdinInspector;
using UnityEngine;
// ReSharper disable once CheckNamespace
namespace BlueWaterProject
{
[Serializable]
public class SkillInputData
{
[Title("초기화 데이터")]
public Collider playerCollider;
public Rigidbody playerRb;
public Transform playerVisualLook;
public LayerMask targetLayer;
public SkillUi skillUi;
[Title("실시간 데이터")]
public Vector3 startPosition;
public void InitInputData(Collider collider, Rigidbody rb, Transform visualLook, LayerMask target, SkillUi ui)
{
playerCollider = collider;
playerRb = rb;
playerVisualLook = visualLook;
targetLayer = target;
skillUi = ui;
}
public void UpdateInputData(Vector3 start)
{
startPosition = start;
}
}
public abstract class SkillBase : MonoBehaviour, ISkill
{
[Title("기본 설정")]
public string skillName;
public bool enableSkill = true;
public float damage;
public float cooldown;
public float range;
public float castingTime;
public float skillDuration;
[field: DisableIf("@true")]
[field: SerializeField] public SkillInputData SkillInputData { get; set; }
public abstract void ActivateSkill();
public virtual bool EnableSkill() => enableSkill;
public void CoolDown(float waitTime, Action onCooldownComplete = null)
{
StartCoroutine(CoolDownCoroutine(waitTime, onCooldownComplete));
}
private IEnumerator CoolDownCoroutine(float waitTime, Action onCooldownComplete = null)
{
var time = 0f;
while (time <= waitTime)
{
time += Time.deltaTime;
yield return null;
}
onCooldownComplete?.Invoke();
}
}
}