138 lines
4.9 KiB
C#
138 lines
4.9 KiB
C#
using System;
|
|
using Pathfinding;
|
|
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 IAnimationStateController IAnimationStateController { get; set; }
|
|
public IAstarAI Ai { 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,
|
|
IAnimationStateController iAnimationStateController, IAstarAI ai)
|
|
{
|
|
Transform = transform;
|
|
PlayerCollider = collider;
|
|
PlayerRb = rb;
|
|
PlayerAgent = playerAgent;
|
|
PlayerVisualLook = visualLook;
|
|
PlayerAnimator = animator;
|
|
TargetCollider = target;
|
|
TargetLayer = layer;
|
|
SkillUi = ui;
|
|
IAnimationStateController = iAnimationStateController;
|
|
Ai = ai;
|
|
}
|
|
}
|
|
|
|
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
|
|
|
|
/***********************************************************************
|
|
* Init methods
|
|
***********************************************************************/
|
|
#region Interfaces
|
|
|
|
protected virtual void InitData()
|
|
{
|
|
BasicSetting();
|
|
HideIndicator();
|
|
}
|
|
|
|
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
|
|
|
|
/***********************************************************************
|
|
* Methods
|
|
***********************************************************************/
|
|
#region Methods
|
|
|
|
public virtual bool EnableSkill() => enableSkill;
|
|
public abstract void ActivateSkill(params Action[] actions);
|
|
|
|
#endregion
|
|
}
|
|
} |