132 lines
4.6 KiB
C#
132 lines
4.6 KiB
C#
|
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
|
||
|
}
|
||
|
}
|