174 lines
6.3 KiB
C#
174 lines
6.3 KiB
C#
using System;
|
|
using Sirenix.OdinInspector;
|
|
using UnityEngine;
|
|
|
|
// ReSharper disable once CheckNamespace
|
|
namespace BlueWaterProject
|
|
{
|
|
[Serializable]
|
|
public class EnemyStat : IIdx
|
|
{
|
|
#region Property and variable
|
|
|
|
[field: Tooltip("고유 인덱스")]
|
|
[field: SerializeField] public string Idx { get; set; }
|
|
|
|
[field: Tooltip("캐릭터 모델 인덱스")]
|
|
[field: SerializeField] public string ViewIdx { get; set; }
|
|
|
|
[field: Tooltip("Ai 종류")]
|
|
[field: SerializeField] public GlobalValue.UnitType UnitType { get; set; }
|
|
|
|
[field: Tooltip("공격방식 종류")]
|
|
[field: DisableIf("@true")]
|
|
[field: SerializeField] public EAttackerType AttackerType { get; set; }
|
|
|
|
[field: Tooltip("공격 종류")]
|
|
[field: DisableIf("@true")]
|
|
[field: SerializeField] public EOffenseType OffenseType { get; set; }
|
|
|
|
[field: Tooltip("방어 종류")]
|
|
[field: DisableIf("@true")]
|
|
[field: SerializeField] public EDefenseType DefenseType { get; set; }
|
|
|
|
[field: Tooltip("캐릭터 최대 체력")]
|
|
[field: SerializeField] public float MaxHp { get; set; }
|
|
|
|
[field: Tooltip("캐릭터 현재 체력")]
|
|
[field: SerializeField] public float CurrentHp { get; set; }
|
|
|
|
[field: Tooltip("공격력")]
|
|
[field: SerializeField] public float Atk { get; set; }
|
|
|
|
[field: Tooltip("방어력")]
|
|
[field: SerializeField] public float Def { get; set; }
|
|
|
|
[field: Tooltip("이동속도")]
|
|
[field: SerializeField] public float MoveSpd { get; set; }
|
|
|
|
[field: Tooltip("공격속도(다음 공격 주기)")]
|
|
[field: SerializeField] public float AtkCooldown { get; set; }
|
|
|
|
[field: Tooltip("시야 사거리")]
|
|
[field: SerializeField] public float ViewRange { get; set; }
|
|
|
|
[field: Tooltip("공격 사거리")]
|
|
[field: SerializeField] public float AtkRange { get; set; }
|
|
|
|
[field: Tooltip("수비 사거리")]
|
|
[field: SerializeField] public float DefenseRange { get; set; }
|
|
|
|
[field: Tooltip("방패 캐릭터를 공격했을 때, 방패 관통률")]
|
|
[field: Range(0, 100)]
|
|
[field: SerializeField] public int ShieldPenetrationRate { get; set; }
|
|
|
|
[field: Tooltip("공격을 피할 수 있는 회피율")]
|
|
[field: Range(0, 100)]
|
|
[field: SerializeField] public int AvoidanceRate { get; set; }
|
|
|
|
[field: Tooltip("캐릭터의 방패 사용 유무")]
|
|
[field: SerializeField] public bool UsingShield { get; set; }
|
|
|
|
[field: Tooltip("방패 캐릭터가 관통 당할 확률을 줄여주는 관통 저항률")]
|
|
[field: ShowIf("@UsingShield == true")]
|
|
[field: Range(0, 100)]
|
|
[field: SerializeField] public int PenetrationResistivity { get; set; }
|
|
|
|
[field: Tooltip("캐릭터의 활 사용 유무")]
|
|
[field: SerializeField] public bool UsingBow { get; set; }
|
|
|
|
[field: Tooltip("화살이 타겟에 도달하는 오차 범위(부정확함)")]
|
|
[field: ShowIf("@UsingBow == true")]
|
|
[field: Range(0, 5f)]
|
|
[field: SerializeField] public float Inaccuracy { get; set; }
|
|
|
|
#endregion
|
|
|
|
#region Constructor
|
|
|
|
/// <summary>
|
|
/// 기본 생성자
|
|
/// </summary>
|
|
public EnemyStat()
|
|
{
|
|
Idx = null;
|
|
ViewIdx = null;
|
|
UnitType = GlobalValue.UnitType.NONE;
|
|
AttackerType = EAttackerType.NONE;
|
|
OffenseType = EOffenseType.NONE;
|
|
DefenseType = EDefenseType.NONE;
|
|
MaxHp = 0f;
|
|
CurrentHp = 0f;
|
|
Atk = 0f;
|
|
Def = 0f;
|
|
MoveSpd = 0f;
|
|
AtkCooldown = 0f;
|
|
ViewRange = 0f;
|
|
AtkRange = 0f;
|
|
DefenseRange = 0f;
|
|
ShieldPenetrationRate = 0;
|
|
AvoidanceRate = 0;
|
|
UsingShield = false;
|
|
PenetrationResistivity = 0;
|
|
UsingBow = false;
|
|
Inaccuracy = 0;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 일반 생성자
|
|
/// </summary>
|
|
public EnemyStat(string idx, string viewIdx, GlobalValue.UnitType unitType, float maxHp, float currentHp, float atk, float def,
|
|
float moveSpd, float atkCooldown, float viewRange, float atkRange, float defenseRange, int shieldPenetrationRate, int avoidanceRate,
|
|
bool usingShield, int penetrationResistivity, bool usingBow, float inaccuracy)
|
|
{
|
|
Idx = idx;
|
|
ViewIdx = viewIdx;
|
|
UnitType = unitType;
|
|
MaxHp = maxHp;
|
|
CurrentHp = currentHp;
|
|
Atk = atk;
|
|
Def = def;
|
|
MoveSpd = moveSpd;
|
|
AtkCooldown = atkCooldown;
|
|
ViewRange = viewRange;
|
|
AtkRange = atkRange;
|
|
DefenseRange = defenseRange;
|
|
ShieldPenetrationRate = shieldPenetrationRate;
|
|
AvoidanceRate = avoidanceRate;
|
|
UsingShield = usingShield;
|
|
PenetrationResistivity = penetrationResistivity;
|
|
UsingBow = usingBow;
|
|
Inaccuracy = inaccuracy;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 복사 생성자
|
|
/// </summary>
|
|
public EnemyStat(EnemyStat enemyStat)
|
|
{
|
|
Idx = enemyStat.Idx;
|
|
ViewIdx = enemyStat.ViewIdx;
|
|
UnitType = enemyStat.UnitType;
|
|
AttackerType = enemyStat.AttackerType;
|
|
OffenseType = enemyStat.OffenseType;
|
|
DefenseType = enemyStat.DefenseType;
|
|
MaxHp = enemyStat.MaxHp;
|
|
CurrentHp = enemyStat.CurrentHp;
|
|
Atk = enemyStat.Atk;
|
|
Def = enemyStat.Def;
|
|
MoveSpd = enemyStat.MoveSpd;
|
|
AtkCooldown = enemyStat.AtkCooldown;
|
|
ViewRange = enemyStat.ViewRange;
|
|
AtkRange = enemyStat.AtkRange;
|
|
DefenseRange = enemyStat.DefenseRange;
|
|
ShieldPenetrationRate = enemyStat.ShieldPenetrationRate;
|
|
AvoidanceRate = enemyStat.AvoidanceRate;
|
|
UsingShield = enemyStat.UsingShield;
|
|
PenetrationResistivity = enemyStat.PenetrationResistivity;
|
|
UsingBow = enemyStat.UsingBow;
|
|
Inaccuracy = enemyStat.Inaccuracy;
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
} |