51 lines
1.7 KiB
C#
51 lines
1.7 KiB
C#
using System;
|
|
using UnityEngine;
|
|
|
|
// 호감도 비교 연산자. (호감도 [연산자] Value)
|
|
public enum AffectionCompare
|
|
{
|
|
[InspectorName("≥")] AtLeast,
|
|
[InspectorName(">")] GreaterThan,
|
|
[InspectorName("≤")] AtMost,
|
|
[InspectorName("<")] LessThan,
|
|
[InspectorName("=")] Equal,
|
|
[InspectorName("≠")] NotEqual,
|
|
}
|
|
|
|
// 다음 조건과 묶는 방식. AND가 OR보다 우선순위가 높다 (A and B or C → (A and B) or C).
|
|
public enum AffectionJoin
|
|
{
|
|
[InspectorName("AND")] And,
|
|
[InspectorName("OR")] Or,
|
|
}
|
|
|
|
// 호감도 분기 노드가 검사하는 조건 하나. (캐릭터, 연산자, 값) + 다음 조건과의 연결자.
|
|
// 여러 개를 이어 붙여 조건식을 만든다 — DialogNode.AffectionRequirements 참고.
|
|
[Serializable]
|
|
public class AffectionRequirement
|
|
{
|
|
// 검사 대상 캐릭터. 비우면 대화 주인 NPC의 호감도를 본다.
|
|
public CharacterData Character;
|
|
|
|
// 호감도를 Value와 어떻게 비교할지
|
|
public AffectionCompare Compare = AffectionCompare.AtLeast;
|
|
|
|
// 비교 기준값
|
|
public int Value;
|
|
|
|
// 다음 조건과 묶는 방식 (마지막 조건에서는 무시된다)
|
|
public AffectionJoin JoinWithNext = AffectionJoin.And;
|
|
|
|
// 이 조건 하나의 성립 여부
|
|
public bool IsMet(int affection) => Compare switch
|
|
{
|
|
AffectionCompare.AtLeast => affection >= Value,
|
|
AffectionCompare.GreaterThan => affection > Value,
|
|
AffectionCompare.AtMost => affection <= Value,
|
|
AffectionCompare.LessThan => affection < Value,
|
|
AffectionCompare.Equal => affection == Value,
|
|
AffectionCompare.NotEqual => affection != Value,
|
|
_ => false,
|
|
};
|
|
}
|