using System; using Sirenix.OdinInspector; using UnityEngine; using UnityEngine.AI; using UnityEngine.Rendering.Universal; // ReSharper disable once CheckNamespace namespace BlueWaterProject { [Serializable] public class SkillInputData { [field: Title("초기화 데이터")] [field: SerializeField] public Transform Transform { get; set; } [field: SerializeField] public Collider PlayerCollider { get; set; } [field: SerializeField] public Rigidbody PlayerRb { get; set; } [field: SerializeField] public NavMeshAgent PlayerAgent { get; set; } [field: SerializeField] public Transform PlayerVisualLook { get; set; } [field: SerializeField] public Animator PlayerAnimator { get; set; } [field: SerializeField] public Collider TargetCollider { get; set; } [field: SerializeField] public LayerMask TargetLayer { get; set; } [field: SerializeField] public SkillUi SkillUi { get; set; } public Vector3 StartPosition { get; set; } public Vector3 PreviousDirection { get; set; } public void InitInputData(Transform transform, Collider collider, Rigidbody rb, NavMeshAgent playerAgent, Transform visualLook, Animator animator, Collider target, LayerMask layer, SkillUi ui) { Transform = transform; PlayerCollider = collider; PlayerRb = rb; PlayerAgent = playerAgent; PlayerVisualLook = visualLook; PlayerAnimator = animator; TargetCollider = target; TargetLayer = layer; SkillUi = ui; } } public abstract class BaseSkill : MonoBehaviour { /*********************************************************************** * Variables ***********************************************************************/ #region Variables // Skill Data [field: Title("스킬 데이터")] [field: SerializeField] public SkillData SkillData { get; private set; } [DisableIf("@true")] [SerializeField] protected bool enableSkill = true; // Indicator [Title("스킬 표시기 옵션")] [SerializeField] protected bool isUsingIndicator = true; [SerializeField] protected DecalProjector indicator; [field: DisableIf("@true")] [field: SerializeField] public SkillInputData SkillInputData { get; set; } // Hashes protected static readonly int FillHash = Shader.PropertyToID("_Fill"); #endregion /*********************************************************************** * Unity Events ***********************************************************************/ #region Unity Events private void Start() { InitData(); } #endregion /*********************************************************************** * Interfaces ***********************************************************************/ #region Interfaces public abstract void ActivateSkill(params Action[] actions); public virtual bool EnableSkill() => enableSkill; protected virtual void InitData() { BasicSetting(); HideIndicator(); } #endregion /*********************************************************************** * Methods ***********************************************************************/ #region Methods protected virtual void BasicSetting() { if (isUsingIndicator && indicator) { indicator.scaleMode = DecalScaleMode.InheritFromHierarchy; indicator.material = new Material(indicator.material); indicator.material.SetFloat(FillHash, 0f); } } protected virtual void HideIndicator() { if (isUsingIndicator && indicator) { indicator.enabled = false; indicator.material.SetFloat(FillHash, 0); } } protected virtual void ShowIndicator() { if (isUsingIndicator && indicator) { indicator.material.SetFloat(FillHash, 0); indicator.enabled = true; } } #endregion } }