174 lines
6.4 KiB
C#
174 lines
6.4 KiB
C#
using System;
|
|
using Sirenix.OdinInspector;
|
|
using UnityEngine;
|
|
|
|
// ReSharper disable once CheckNamespace
|
|
namespace BlueWaterProject
|
|
{
|
|
[Serializable]
|
|
public class PirateStat : 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 PirateStat()
|
|
{
|
|
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 PirateStat(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 PirateStat(PirateStat pirateStat)
|
|
{
|
|
Idx = pirateStat.Idx;
|
|
ViewIdx = pirateStat.ViewIdx;
|
|
UnitType = pirateStat.UnitType;
|
|
AttackerType = pirateStat.AttackerType;
|
|
OffenseType = pirateStat.OffenseType;
|
|
DefenseType = pirateStat.DefenseType;
|
|
MaxHp = pirateStat.MaxHp;
|
|
CurrentHp = pirateStat.CurrentHp;
|
|
Atk = pirateStat.Atk;
|
|
Def = pirateStat.Def;
|
|
MoveSpd = pirateStat.MoveSpd;
|
|
AtkCooldown = pirateStat.AtkCooldown;
|
|
ViewRange = pirateStat.ViewRange;
|
|
AtkRange = pirateStat.AtkRange;
|
|
DefenseRange = pirateStat.DefenseRange;
|
|
ShieldPenetrationRate = pirateStat.ShieldPenetrationRate;
|
|
AvoidanceRate = pirateStat.AvoidanceRate;
|
|
UsingShield = pirateStat.UsingShield;
|
|
PenetrationResistivity = pirateStat.PenetrationResistivity;
|
|
UsingBow = pirateStat.UsingBow;
|
|
Inaccuracy = pirateStat.Inaccuracy;
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
} |