OldBlueWater/BlueWater/Assets/02.Scripts/NewSkill/BaseSkill.cs
NTG f1d0c6d371 Closes #244, #254 CombatPlayer 개선, 하트 시스템 추가
+ CombatPlayer 기능별 분리
+ Combat, CombatUi 전용 input action map 추가
+ 스킬 시스템 로직 수정
+ 전투플레이어 스킬(검의 왈츠) 로직 변경
2024-05-08 00:37:33 +09:00

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
}
}