252 lines
7.9 KiB
C#
252 lines
7.9 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using TMPro;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
namespace ZC
|
|
{
|
|
[UIType(UIType.AnswerUI)]
|
|
public class AnswerUI : UIBase
|
|
{
|
|
private Transform panel_Answer;
|
|
private TMP_Text txt_AnswerTitle;
|
|
private TMP_Text txt_TrueOption;
|
|
private TMP_Text txt_JXContent;
|
|
private TMP_Text txt_Label0;
|
|
private TMP_Text txt_Label1;
|
|
private TMP_Text txt_Label2;
|
|
private TMP_Text txt_Label3;
|
|
private Toggle tog_Option0;
|
|
private Toggle tog_Option1;
|
|
private Toggle tog_Option2;
|
|
private Toggle tog_Option3;
|
|
private Button btn_Last;
|
|
private Button btn_Submit;
|
|
private Button btn_Next;
|
|
|
|
//
|
|
private Transform panel_Result;
|
|
private TMP_Text txt_TrueCount;
|
|
private TMP_Text txt_ScoreCount;
|
|
private TMP_Text txt_FalseCount;
|
|
private Button btn_TryAgain;
|
|
private Button btn_Finish;
|
|
|
|
private QuestionBankData _bankData;
|
|
|
|
private int currentIndex = 0;
|
|
bool isSubmit = false; // 是否提交
|
|
|
|
Action callback;
|
|
|
|
public override void Init()
|
|
{
|
|
base.Init();
|
|
txt_AnswerTitle = GetValue<TMP_Text>("txt_AnswerTitle");
|
|
txt_TrueOption = GetValue<TMP_Text>("txt_TrueOption");
|
|
txt_JXContent = GetValue<TMP_Text>("txt_JXContent");
|
|
txt_Label0 = GetValue<TMP_Text>("txt_Label0");
|
|
txt_Label1 = GetValue<TMP_Text>("txt_Label1");
|
|
txt_Label2 = GetValue<TMP_Text>("txt_Label2");
|
|
txt_Label3 = GetValue<TMP_Text>("txt_Label3");
|
|
tog_Option0 = GetValue<Toggle>("tog_Option0");
|
|
tog_Option1 = GetValue<Toggle>("tog_Option1");
|
|
tog_Option2 = GetValue<Toggle>("tog_Option2");
|
|
tog_Option3 = GetValue<Toggle>("tog_Option3");
|
|
btn_Last = GetValue<Button>("btn_Last");
|
|
btn_Submit = GetValue<Button>("btn_Submit");
|
|
btn_Next = GetValue<Button>("btn_Next");
|
|
|
|
|
|
panel_Answer = GetValue<Transform>("panel_Answer");
|
|
panel_Result = GetValue<Transform>("panel_Result");
|
|
|
|
txt_TrueCount = GetValue<TMP_Text>("txt_TrueCount");
|
|
txt_ScoreCount = GetValue<TMP_Text>("txt_ScoreCount");
|
|
txt_FalseCount = GetValue<TMP_Text>("txt_FalseCount");
|
|
btn_TryAgain = GetValue<Button>("btn_TryAgain");
|
|
btn_Finish = GetValue<Button>("btn_Finish");
|
|
|
|
btn_Last.onClick.AddListener(ClickLastButton);
|
|
btn_Submit.onClick.AddListener(ClickSubmitButton);
|
|
btn_Next.onClick.AddListener(ClickNextButton);
|
|
btn_TryAgain.onClick.AddListener(ClickTryAgainButton);
|
|
btn_Finish.onClick.AddListener(ClickFinishButton);
|
|
|
|
tog_Option0.onValueChanged.AddListener(Option0_onValueChanged);
|
|
tog_Option1.onValueChanged.AddListener(Option1_onValueChanged);
|
|
tog_Option2.onValueChanged.AddListener(Option2_onValueChanged);
|
|
tog_Option3.onValueChanged.AddListener(Option3_onValueChanged);
|
|
|
|
// 读取题库
|
|
_bankData = ResourcesLocalComponent.Instance.LoadAssetSync<QuestionBankData>(AssetConst
|
|
.Assets_DemoGame_GameRes_Config_QuestionBank_asset);
|
|
ResetAnswer();
|
|
}
|
|
|
|
private void Option0_onValueChanged(bool arg0)
|
|
{
|
|
if (arg0)
|
|
currentChooseStr[currentIndex] = "A";
|
|
}
|
|
|
|
private void Option1_onValueChanged(bool arg0)
|
|
{
|
|
if (arg0)
|
|
currentChooseStr[currentIndex] = "B";
|
|
}
|
|
|
|
private void Option2_onValueChanged(bool arg0)
|
|
{
|
|
if (arg0)
|
|
currentChooseStr[currentIndex] = "C";
|
|
}
|
|
|
|
private void Option3_onValueChanged(bool arg0)
|
|
{
|
|
if (arg0)
|
|
currentChooseStr[currentIndex] = "D";
|
|
}
|
|
|
|
public override void Dispose()
|
|
{
|
|
base.Dispose();
|
|
btn_Last.onClick.RemoveListener(ClickLastButton);
|
|
btn_Submit.onClick.RemoveListener(ClickSubmitButton);
|
|
btn_Next.onClick.RemoveListener(ClickNextButton);
|
|
}
|
|
|
|
public override void Open()
|
|
{
|
|
base.Open();
|
|
isSubmit = false;
|
|
}
|
|
|
|
void CheckIsShowJX()
|
|
{
|
|
if (!txt_TrueOption.gameObject.activeSelf)
|
|
{
|
|
txt_TrueOption.gameObject.SetActive(true);
|
|
txt_JXContent.gameObject.SetActive(true);
|
|
}
|
|
else
|
|
{
|
|
if (currentIndex >= _bankData.AnswerDatas.Count - 1)
|
|
return;
|
|
currentIndex++;
|
|
SetUIContent(_bankData.AnswerDatas[currentIndex]);
|
|
}
|
|
}
|
|
|
|
private void ClickNextButton()
|
|
{
|
|
CheckIsShowJX();
|
|
}
|
|
|
|
private void ClickSubmitButton()
|
|
{
|
|
isSubmit = true;
|
|
ShowResult();
|
|
}
|
|
|
|
private void ClickLastButton()
|
|
{
|
|
currentIndex--;
|
|
SetUIContent(_bankData.AnswerDatas[currentIndex]);
|
|
}
|
|
|
|
// 当前选择结果
|
|
private string[] currentChooseStr;
|
|
|
|
public void SetQuestionBankData(QuestionBankData bankData)
|
|
{
|
|
this._bankData = bankData;
|
|
ResetAnswer();
|
|
}
|
|
|
|
private void SetUIContent(AnswerData data)
|
|
{
|
|
currentIndex = data.index;
|
|
txt_AnswerTitle.text = data.title;
|
|
txt_Label0.text = data.options[0].content;
|
|
txt_Label1.text = data.options[1].content;
|
|
txt_Label2.text = data.options[2].content;
|
|
txt_Label3.text = data.options[3].content;
|
|
txt_TrueOption.text = $"正确答案:{data.trueOption}";
|
|
txt_JXContent.text = data.analyze;
|
|
txt_TrueOption.gameObject.SetActive(false);
|
|
txt_JXContent.gameObject.SetActive(false);
|
|
|
|
tog_Option0.isOn = false;
|
|
tog_Option1.isOn = false;
|
|
tog_Option2.isOn = false;
|
|
tog_Option3.isOn = false;
|
|
|
|
// if (currentIndex >= _bankData.AnswerDatas.Count - 1) // 最后一题
|
|
// {
|
|
// btn_Next.gameObject.SetActive(false);
|
|
// // 提交按钮显示
|
|
// }
|
|
// else if (currentIndex <= 0) // 第一题
|
|
// {
|
|
// btn_Last.gameObject.SetActive(false);
|
|
// }
|
|
// else
|
|
// {
|
|
// // btn_Last.gameObject.SetActive(true);
|
|
// btn_Next.gameObject.SetActive(true);
|
|
// }
|
|
}
|
|
|
|
void ResetAnswer()
|
|
{
|
|
panel_Answer.gameObject.SetActive(true);
|
|
panel_Result.gameObject.SetActive(false);
|
|
currentChooseStr = new string[_bankData.AnswerDatas.Count];
|
|
|
|
currentIndex = 0;
|
|
SetUIContent(_bankData.AnswerDatas[currentIndex]);
|
|
}
|
|
|
|
public void SetData(Action callback)
|
|
{
|
|
this.callback = callback;
|
|
}
|
|
|
|
#region Result
|
|
|
|
void ShowResult()
|
|
{
|
|
panel_Answer.gameObject.SetActive(false);
|
|
panel_Result.gameObject.SetActive(true);
|
|
|
|
var answerDatas = _bankData.AnswerDatas;
|
|
int trueCount = 0;
|
|
int falseCount = 0;
|
|
for (var i = 0; i < currentChooseStr.Length; i++)
|
|
{
|
|
if (answerDatas[i].trueOption == currentChooseStr[i])
|
|
trueCount++;
|
|
else
|
|
falseCount++;
|
|
}
|
|
|
|
txt_TrueCount.text = trueCount.ToString();
|
|
txt_FalseCount.text = falseCount.ToString();
|
|
txt_ScoreCount.text = $"{trueCount}分";
|
|
}
|
|
|
|
private void ClickFinishButton()
|
|
{
|
|
callback?.Invoke();
|
|
}
|
|
|
|
private void ClickTryAgainButton()
|
|
{
|
|
ResetAnswer();
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
} |