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

145 lines
5.0 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-08-29 03:41:24 +00:00
[field: Tooltip("Ai 종류")]
[field: EnumToggleButtons]
[field: SerializeField] public AiType AiType { 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; }
2023-08-08 07:53:35 +00:00
[field: Tooltip("공격 사거리")]
[field: SerializeField] public float AtkRange { 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, 2f)]
[field: SerializeField] public float Inaccuracy { get; set; }
#endregion
#region Constructor
/// <summary>
/// 기본 생성자
/// </summary>
public AiStat()
{
Idx = null;
ViewIdx = null;
2023-08-29 03:41:24 +00:00
AiType = AiType.NONE;
MaxHp = 0f;
CurrentHp = 0f;
Atk = 0f;
Def = 0f;
MoveSpd = 0f;
AtkCooldown = 0f;
AtkRange = 0f;
ShieldPenetrationRate = 0;
AvoidanceRate = 0;
UsingShield = false;
PenetrationResistivity = 0;
2023-08-29 03:41:24 +00:00
UsingBow = false;
Inaccuracy = 0;
}
/// <summary>
/// 일반 생성자
/// </summary>
2023-08-29 03:41:24 +00:00
public AiStat(string idx, string viewIdx, AiType aiType, float maxHp, float currentHp, float atk, float def,
float moveSpd, float atkCooldown, float atkRange, int shieldPenetrationRate, int avoidanceRate,
bool usingShield, int penetrationResistivity, bool usingBow, float inaccuracy)
{
Idx = idx;
ViewIdx = viewIdx;
2023-08-29 03:41:24 +00:00
AiType = aiType;
MaxHp = maxHp;
CurrentHp = currentHp;
Atk = atk;
Def = def;
MoveSpd = moveSpd;
AtkCooldown = atkCooldown;
AtkRange = atkRange;
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-08-29 03:41:24 +00:00
AiType = aiStat.AiType;
MaxHp = aiStat.MaxHp;
CurrentHp = aiStat.CurrentHp;
Atk = aiStat.Atk;
Def = aiStat.Def;
MoveSpd = aiStat.MoveSpd;
AtkCooldown = aiStat.AtkCooldown;
AtkRange = aiStat.AtkRange;
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
}
}