OldBlueWater/BlueWater/Assets/02.Scripts/Ai/AiStat.cs

181 lines
6.5 KiB
C#
Raw Normal View History

using System;
using Sirenix.OdinInspector;
using UnityEngine;
// ReSharper disable once CheckNamespace
namespace BlueWaterProject
{
[Serializable]
2023-08-29 03:41:24 +00:00
public class AiStat : 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; }
2023-08-29 03:41:24 +00:00
[field: Tooltip("Ai 종류")]
[field: EnumToggleButtons]
2023-09-04 07:31:04 +00:00
[field: SerializeField] public EAiType AiType { 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>
public AiStat()
{
Idx = null;
ViewIdx = null;
2023-09-04 07:31:04 +00:00
UnitType = GlobalValue.UnitType.NONE;
AiType = EAiType.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-04 07:31:04 +00:00
public AiStat(string idx, string viewIdx, GlobalValue.UnitType unitType, EAiType aiType, float maxHp, float currentHp, float atk, float def,
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;
2023-08-29 03:41:24 +00:00
AiType = aiType;
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>
public AiStat(AiStat aiStat)
{
Idx = aiStat.Idx;
ViewIdx = aiStat.ViewIdx;
2023-09-04 07:31:04 +00:00
UnitType = aiStat.UnitType;
2023-08-29 03:41:24 +00:00
AiType = aiStat.AiType;
2023-09-04 07:31:04 +00:00
AttackerType = aiStat.AttackerType;
OffenseType = aiStat.OffenseType;
DefenseType = aiStat.DefenseType;
MaxHp = aiStat.MaxHp;
CurrentHp = aiStat.CurrentHp;
Atk = aiStat.Atk;
Def = aiStat.Def;
MoveSpd = aiStat.MoveSpd;
AtkCooldown = aiStat.AtkCooldown;
2023-09-04 07:31:04 +00:00
ViewRange = aiStat.ViewRange;
AtkRange = aiStat.AtkRange;
2023-09-04 07:31:04 +00:00
DefenseRange = aiStat.DefenseRange;
ShieldPenetrationRate = aiStat.ShieldPenetrationRate;
AvoidanceRate = aiStat.AvoidanceRate;
UsingShield = aiStat.UsingShield;
PenetrationResistivity = aiStat.PenetrationResistivity;
2023-08-29 03:41:24 +00:00
UsingBow = aiStat.UsingBow;
Inaccuracy = aiStat.Inaccuracy;
}
#endregion
}
}