OldBlueWater/BlueWater/Assets/02.Scripts/Ai/Human/Combat/Enemy/EnemyStat.cs

174 lines
6.3 KiB
C#
Raw Normal View History

using System;
using Sirenix.OdinInspector;
using UnityEngine;
// ReSharper disable once CheckNamespace
namespace BlueWaterProject
{
[Serializable]
2023-09-12 07:41:11 +00:00
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; }
2023-09-04 07:31:04 +00:00
[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; }
2023-08-29 03:41:24 +00:00
[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; }
2023-08-08 07:53:35 +00:00
2023-09-04 07:31:04 +00:00
[field: Tooltip("시야 사거리")]
[field: SerializeField] public float ViewRange { get; set; }
[field: Tooltip("공격 사거리")]
[field: SerializeField] public float AtkRange { get; set; }
2023-09-04 07:31:04 +00:00
[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; }
2023-08-29 03:41:24 +00:00
[field: Tooltip("캐릭터의 활 사용 유무")]
[field: SerializeField] public bool UsingBow { get; set; }
[field: Tooltip("화살이 타겟에 도달하는 오차 범위(부정확함)")]
[field: ShowIf("@UsingBow == true")]
[field: Range(0, 5f)]
2023-08-29 03:41:24 +00:00
[field: SerializeField] public float Inaccuracy { get; set; }
#endregion
#region Constructor
/// <summary>
/// 기본 생성자
/// </summary>
2023-09-12 07:41:11 +00:00
public EnemyStat()
{
Idx = null;
ViewIdx = null;
2023-09-04 07:31:04 +00:00
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;
2023-09-04 07:31:04 +00:00
ViewRange = 0f;
AtkRange = 0f;
2023-09-04 07:31:04 +00:00
DefenseRange = 0f;
ShieldPenetrationRate = 0;
AvoidanceRate = 0;
UsingShield = false;
PenetrationResistivity = 0;
2023-08-29 03:41:24 +00:00
UsingBow = false;
Inaccuracy = 0;
}
/// <summary>
/// 일반 생성자
/// </summary>
2023-09-12 07:41:11 +00:00
public EnemyStat(string idx, string viewIdx, GlobalValue.UnitType unitType, float maxHp, float currentHp, float atk, float def,
2023-09-04 07:31:04 +00:00
float moveSpd, float atkCooldown, float viewRange, float atkRange, float defenseRange, int shieldPenetrationRate, int avoidanceRate,
2023-08-29 03:41:24 +00:00
bool usingShield, int penetrationResistivity, bool usingBow, float inaccuracy)
{
Idx = idx;
ViewIdx = viewIdx;
2023-09-04 07:31:04 +00:00
UnitType = unitType;
MaxHp = maxHp;
CurrentHp = currentHp;
Atk = atk;
Def = def;
MoveSpd = moveSpd;
AtkCooldown = atkCooldown;
2023-09-04 07:31:04 +00:00
ViewRange = viewRange;
AtkRange = atkRange;
2023-09-04 07:31:04 +00:00
DefenseRange = defenseRange;
ShieldPenetrationRate = shieldPenetrationRate;
AvoidanceRate = avoidanceRate;
UsingShield = usingShield;
PenetrationResistivity = penetrationResistivity;
2023-08-29 03:41:24 +00:00
UsingBow = usingBow;
Inaccuracy = inaccuracy;
}
/// <summary>
/// 복사 생성자
/// </summary>
2023-09-12 07:41:11 +00:00
public EnemyStat(EnemyStat enemyStat)
{
2023-09-12 07:41:11 +00:00
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
}
}