110 lines
3.0 KiB
C#
110 lines
3.0 KiB
C#
using UnityEngine;
|
|
|
|
namespace AibisDream.FixSystem
|
|
{
|
|
public class CheckGameHandler : MonoBehaviour
|
|
{
|
|
[SerializeField] private Transform questionPart;
|
|
[SerializeField] private SpriteRenderer resultPart;
|
|
|
|
private CheckRule _curRule;
|
|
private PipelineProduct _curProduct;
|
|
|
|
public void LoadRules(CheckRule checkRule)
|
|
{
|
|
_curRule = checkRule;
|
|
// 展示规则
|
|
}
|
|
|
|
public void Handle(PipelineProduct product)
|
|
{
|
|
// 展示该物体
|
|
resultPart.sprite = product.CheckData.sprite;
|
|
_curProduct = product;
|
|
}
|
|
|
|
public void OnCheck(bool isPass)
|
|
{
|
|
var matchRes = _curRule.Match(_curProduct.CheckData);
|
|
Debug.Log(matchRes == isPass ? "判断正确" : "判断错误");
|
|
|
|
_curProduct.CheckPass();
|
|
}
|
|
}
|
|
|
|
[CreateAssetMenu(fileName = "CheckData", menuName = "Level Data/CheckData")]
|
|
public class CheckData : ScriptableObject
|
|
{
|
|
// 目前想到的就是色彩,边数,圆角和直角
|
|
public Color color;
|
|
public int borderCount;
|
|
public bool isRound;
|
|
|
|
public Sprite sprite;
|
|
}
|
|
|
|
[CreateAssetMenu(fileName = "CheckRule", menuName = "Level Data/CheckRule")]
|
|
public class CheckRule : ScriptableObject
|
|
{
|
|
public bool isColorLimited;
|
|
public Color color;
|
|
|
|
public CompareSign borderCountSign;
|
|
public int borderCount;
|
|
|
|
public CompareSign roundSign;
|
|
public bool isRound;
|
|
|
|
public bool Match(CheckData data)
|
|
{
|
|
// 色彩
|
|
if (isColorLimited == true)
|
|
{
|
|
if (color != data.color)
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
// 圆角和直角
|
|
if (roundSign == CompareSign.Equal)
|
|
{
|
|
if (isRound != data.isRound)
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
else if (roundSign == CompareSign.NotEqual)
|
|
{
|
|
if (isRound == data.isRound)
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
// 边数
|
|
return borderCountSign switch
|
|
{
|
|
CompareSign.Ignore => true,
|
|
CompareSign.Equal => borderCount == data.borderCount,
|
|
CompareSign.NotEqual => borderCount != data.borderCount,
|
|
CompareSign.GreaterThan => data.borderCount > borderCount,
|
|
CompareSign.LessThan => data.borderCount < borderCount,
|
|
CompareSign.GreaterThanOrEqual => data.borderCount >= borderCount,
|
|
CompareSign.LessThanOrEqual => data.borderCount <= borderCount,
|
|
_ => true,
|
|
};
|
|
}
|
|
}
|
|
|
|
public enum CompareSign
|
|
{
|
|
Ignore,
|
|
Equal,
|
|
NotEqual,
|
|
GreaterThan,
|
|
LessThan,
|
|
GreaterThanOrEqual,
|
|
LessThanOrEqual
|
|
}
|
|
} |