192 lines
6.6 KiB
C#
Raw Normal View History

2025-02-07 17:06:19 +08:00
using UnityEngine;
using UnityEngine.UI;
using QFramework;
using System.Collections.Generic;
using TMPro;
2025-03-24 17:38:27 +08:00
using System.Linq;
2025-02-07 17:06:19 +08:00
namespace QFramework.Example
{
public class UIInputData : UIPanelData
{
public class InputData
{
public string name;
public string var;
public string answer;
}
public class BtnData
{
public string name;
public string clickEvent;
public bool checkAnswer;
public string wrongLabel;
public string wrongEvent;
public int wrongCount;
public string scoreStepName;
public float rightScore = 0;
public float wrongScore = 0;
public float autoHide = -1;
}
public string title;
public List<InputData> inputs = new List<InputData>();
public List<BtnData> btns = new List<BtnData>();
public string finishedEvent;
}
public partial class UIInput : UIPanel
{
int curCount = 0;
protected override void OnInit(IUIData uiData = null)
{
// please add init code here
}
protected override void OnOpen(IUIData uiData = null)
{
mData = uiData as UIInputData ?? new UIInputData();
curCount = 0;
Title.text = mData.title;
InputContent.RemoveAllChildren();
BtnContent.RemoveAllChildren();
foreach (var item in mData.inputs)
{
GameObject input = GameObject.Instantiate(InputItem.gameObject, InputContent);
2025-04-28 10:27:15 +08:00
input.name = item.name;
2025-02-07 17:06:19 +08:00
input.transform.Find("Name").GetComponent<TextMeshProUGUI>().text = item.name;
var inputField = input.transform.Find("Input").GetComponent<TMP_InputField>();
inputField.onEndEdit.AddListener(value =>
{
2025-04-28 10:27:15 +08:00
if (string.IsNullOrEmpty(item.var) == false)
{
float v = 0;
float.TryParse(value, out v);
VarController.Instance.Set(item.var, v);
}
2025-02-07 17:06:19 +08:00
});
}
foreach (var item in mData.btns)
{
GameObject btn = GameObject.Instantiate(BtnItem.gameObject, BtnContent);
btn.transform.Find("Label").GetComponent<TextMeshProUGUI>().text = item.name;
btn.name = item.name;
btn.GetComponent<Button>().onClick.AddListener(() =>
{
if (item.checkAnswer)
{
if (Check())
{
if (string.IsNullOrEmpty(item.scoreStepName) == false)
{
ScoreController.Instance.Add(item.scoreStepName, item.rightScore);
}
Hide();
}
else
{
if (curCount >= item.wrongCount)
{
Hide();
}
else
{
if (string.IsNullOrEmpty(item.scoreStepName) == false)
{
ScoreController.Instance.Add(item.scoreStepName, item.wrongScore);
}
curCount++;
var data = new UIResultTipData();
data.label = item.wrongLabel;
data.isRight = false;
data.callback = () =>
{
if (string.IsNullOrEmpty(item.wrongEvent) == false)
{
StringEventSystem.Global.Send(item.wrongEvent);
}
};
data.autoHideTime = item.autoHide;
UIKit.OpenPanelAsync<UIResultTip>(uiData: data, canvasLevel: UILevel.PopUI).ToAction().Start(this);
}
}
}
else
{
Hide();
if (string.IsNullOrEmpty(item.clickEvent) == false)
{
StringEventSystem.Global.Send(item.clickEvent);
}
}
});
}
}
public bool Check()
{
bool allCorrect = true; // <20><>ʼ<EFBFBD><CABC>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD>ڸ<EFBFBD><DAB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>ȷ
2025-02-07 17:06:19 +08:00
foreach (var item in mData.inputs)
{
2025-05-14 15:55:40 +08:00
string[] list = item.answer.Contains('|')
? item.answer.Split('|')
: new[] { item.answer }; // <20>޷ָ<DEB7><D6B8><EFBFBD>ʱ<EFBFBD><CAB1>Ϊ<EFBFBD><CEAA>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
2025-04-28 10:27:15 +08:00
if (string.IsNullOrEmpty(item.var))
{
Transform trans = InputContent.transform.Find(item.name);
2025-04-28 10:34:53 +08:00
string inputStr = trans.Find("Input").GetComponent<TMP_InputField>().text;
Debug.Log(item.var);
bool currentCorrect = false; // <20><><EFBFBD>ǵ<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ
for (int i = 0; i < list.Length; i++)
2025-04-28 10:27:15 +08:00
{
if (inputStr.Equals(list[i]))
{
currentCorrect = true;
break; // <20>ҵ<EFBFBD>ƥ<EFBFBD><C6A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD>
}
}
if (!currentCorrect) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EBB2BB>ȷ
{
allCorrect = false; // <20><><EFBFBD><EFBFBD>Ϊ<EFBFBD>д<EFBFBD><D0B4><EFBFBD>
2025-04-28 10:27:15 +08:00
}
}
else
2025-02-07 17:06:19 +08:00
{
2025-05-14 15:55:40 +08:00
if (!list.Contains(VarController.Instance.Get(item.var).ToString()))
2025-04-28 10:27:15 +08:00
{
2025-05-14 15:55:40 +08:00
allCorrect = false; // <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>ƥ<EFBFBD><C6A5>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ϊ<EFBFBD>д<EFBFBD><D0B4><EFBFBD>
2025-04-28 10:27:15 +08:00
}
2025-02-07 17:06:19 +08:00
}
}
return allCorrect; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD>
2025-02-07 17:06:19 +08:00
}
protected override void OnShow()
{
}
protected override void OnHide()
{
if (string.IsNullOrEmpty(mData.finishedEvent) == false)
{
StringEventSystem.Global.Send(mData.finishedEvent);
}
mData = null;
}
protected override void OnClose()
{
}
}
}