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 } }