using UnityEngine; // ReSharper disable once CheckNamespace namespace BlueWaterProject { public class CombatSkillController : MonoBehaviour { // Components [SerializeField] private BaseSkill mainSkill; private BaseSkill instantiateMainSkill; private Collider col; private Rigidbody rb; private Transform visualLook; private Animator anim; // Interfaces private IMeleeComboAttackable iMeleeComboAttackable; // Variables private bool enableSkill = true; private bool isActivatingSkill; // Events public delegate void StartSkillEvent(); public event StartSkillEvent OnStartSkill; public delegate void EndSkillEvent(); public event EndSkillEvent OnEndSkill; // Unity events private void Start() { iMeleeComboAttackable = GetComponent(); InitSkill(); } // Init methods public void InitComponent(Collider collider, Rigidbody rigidbody, Transform visualLook, Animator animator) { col = collider; rb = rigidbody; this.visualLook = visualLook; anim = animator; } private void InitSkill() { instantiateMainSkill = Instantiate(mainSkill); if (instantiateMainSkill == null) return; var targetLayer = iMeleeComboAttackable.TargetLayer; var ui = CombatUiManager.Inst.MainSkillUi; ui.ResetSkillUi(); ui.gameObject.SetActive(true); instantiateMainSkill.SkillInputData.InitInputData(transform, col, rb, null, visualLook, anim, null, targetLayer, ui); } // Events methods public void HandleEnableSkill() => enableSkill = true; public void HandleDisableSkill() => enableSkill = false; public void HandleMainSkill() { if (!CanSkill()) return; StartSkill(); instantiateMainSkill.ActivateSkill(EndSkill); } // Methods private bool CanSkill() { if (!enableSkill || isActivatingSkill) return false; instantiateMainSkill.SkillInputData.StartPosition = rb.position; var enableMainSkill = instantiateMainSkill.EnableSkill(); return enableMainSkill; } private void StartSkill() { // 이동, 공격, 대쉬 X 이벤트 OnStartSkill?.Invoke(); enableSkill = false; isActivatingSkill = true; rb.velocity = Vector3.zero; } private void EndSkill() { // 이동, 공격, 대쉬 O 이벤트 OnEndSkill?.Invoke(); enableSkill = true; isActivatingSkill = false; } } }