OldBlueWater/BlueWater/Assets/02.Scripts/Ai/NewBehaviorTree/Variable/Set/CompareSharedFloat2.cs

65 lines
2.1 KiB
C#
Raw Normal View History

using System;
using BehaviorDesigner.Runtime;
using BehaviorDesigner.Runtime.Tasks;
using UnityEngine;
// ReSharper disable once CheckNamespace
namespace BlueWaterProject
{
public enum Inequality
{
NONE = 0,
LESS_THEN,
LESS_THEN_OR_EQUAL_TO,
GREATER_THEN,
GREATER_THEN_OR_EQUAL_TO
}
[TaskCategory("Common")]
[Serializable]
public class CompareSharedFloat2 : Conditional
{
[RequiredField]
public SharedFloat variable;
[Header("비교값 float 설정")]
public float compareTo;
[Header("부등호 설정 - Tooltip 참고")]
[BehaviorDesigner.Runtime.Tasks.Tooltip("LessThen : variable < compareTo\n" +
"LessThenOrEqualTo : variable <= compareTo\n" +
"GreaterThen : variable > compareTo\n" +
"GreaterThenOrEqualTo : variable < compareTo\n")]
public Inequality inequality;
/// <summary>
/// 비교 값이 true면 Success, false면 Running
/// </summary>
public override TaskStatus OnUpdate()
{
return CompareInequality(variable.Value) ? TaskStatus.Success : TaskStatus.Failure;
}
public override void OnReset()
{
compareTo = 0;
}
/// <summary>
/// 부등호 선택에 따른 bool값 리턴
/// </summary>
/// <returns></returns>
private bool CompareInequality(float value)
{
return inequality switch
{
Inequality.NONE => throw new Exception("부등호 미설정 오류"),
Inequality.LESS_THEN => value < compareTo,
Inequality.LESS_THEN_OR_EQUAL_TO => value <= compareTo,
Inequality.GREATER_THEN => value > compareTo,
Inequality.GREATER_THEN_OR_EQUAL_TO => value >= compareTo,
_ => throw new ArgumentOutOfRangeException()
};
}
}
}