using System; using System.Collections.Generic; using System.Linq; using UnityEngine; using UnityEngine.Serialization; using UnityEngine.UI; using ZGameFramework; using ZXL.Excel; namespace Script.UI { public class AnsweringPanel : PanelBase { // top [SerializeField] private Text txt_ID; [SerializeField] private Text txt_Progress; private List _aDataInfos = new List(); private List _bDataInfos = new List(); private List _cDataInfos = new List(); private List _dDataInfos = new List(); // down [SerializeField] private List _rightQuestionItems = new List(); [SerializeField] private Button btn_ConfirmSubmit; private List textItemList = new List(); private List toggleItemList = new List(); public Color answeredColor; // 已答 public Color unansweredColor; // 未答 public override void Init() { base.Init(); btn_ConfirmSubmit.onClick.AddListener(ClickConfirmSubmit); EventManager.Instance.Subscribe(QuestionSureEventArgs.EventId, QuestionSureEvent); } private void QuestionSureEvent(object sender, GameEventArgs e) { var args = e as QuestionSureEventArgs; if (args.isTrue) _toggles[args.index].transform.Find("Background").GetComponent().color = answeredColor; else _toggles[args.index].transform.Find("Background").GetComponent().color = unansweredColor; } public override void Open() { base.Open(); } public override void ResetPanelData() { base.ResetPanelData(); Debug.Log("重置抽题数据"); _aDataInfos.Clear(); _bDataInfos.Clear(); _cDataInfos.Clear(); _dDataInfos.Clear(); // 数据存入 _aDataInfos.Add(ExcelManager.Instance.GetRandomAInfo); _bDataInfos.Add(ExcelManager.Instance.GetRandomBInfo); _dDataInfos.Add(ExcelManager.Instance.GetRandomDInfo); for (int i = 0; i < 2; i++) { _cDataInfos.Add(ExcelManager.Instance.GetRandomCInfo); } if (_aDataInfos[0] == null || _bDataInfos[0] == null || _dDataInfos[0] == null || _cDataInfos[0] == null || _cDataInfos[1] == null) { Debug.Log("题库没内容了,请检查"); UIManager.Instance.OpenPanel(PanelType.Error); return; } FileManager.Instance.SaveAnsweredData(FileManager.QuestionBankType.A, _aDataInfos[0].id); FileManager.Instance.SaveAnsweredData(FileManager.QuestionBankType.B, _bDataInfos[0].id); FileManager.Instance.SaveAnsweredData(FileManager.QuestionBankType.C, _cDataInfos[0].id); FileManager.Instance.SaveAnsweredData(FileManager.QuestionBankType.C, _cDataInfos[1].id); FileManager.Instance.SaveAnsweredData(FileManager.QuestionBankType.D, _dDataInfos[0].id); _rightQuestionItems[0].SetData( 0, "单项判断题(每小题2分,共2小题)", _cDataInfos[0].topic, _cDataInfos[0].options, _cDataInfos[0].answer, ShowIndexQuestion, ShowIndexQuestion ); GlobalManager.Instance.AddCurrentAnswer(_cDataInfos[0].topic, _cDataInfos[0].options, _cDataInfos[0].answer); _rightQuestionItems[1].SetData( 1, "单项判断题(每小题2分,共2小题)", _cDataInfos[1].topic, _cDataInfos[1].options, _cDataInfos[1].answer, ShowIndexQuestion, ShowIndexQuestion ); GlobalManager.Instance.AddCurrentAnswer(_cDataInfos[1].topic, _cDataInfos[1].options, _cDataInfos[1].answer); _rightQuestionItems[2].SetData( 2, "单项选择题(每小题2分,共2小题)", _aDataInfos[0].topic, _aDataInfos[0].options, _aDataInfos[0].answer, ShowIndexQuestion, ShowIndexQuestion ); GlobalManager.Instance.AddCurrentAnswer(_aDataInfos[0].topic, _aDataInfos[0].options, _aDataInfos[0].answer); _rightQuestionItems[3].SetData( 3, "单项选择题(每小题2分,共2小题)", _bDataInfos[0].topic, _bDataInfos[0].options, _bDataInfos[0].answer, ShowIndexQuestion, ShowIndexQuestion ); GlobalManager.Instance.AddCurrentAnswer(_bDataInfos[0].topic, _bDataInfos[0].options, _bDataInfos[0].answer); _rightQuestionItems[4].SetData( 4, "多项选择题(每小题2分,共1小题)", _dDataInfos[0].topic, _dDataInfos[0].options, _dDataInfos[0].answer, ShowIndexQuestion, ShowIndexQuestion ); GlobalManager.Instance.AddCurrentAnswer(_dDataInfos[0].topic, _dDataInfos[0].options, _dDataInfos[0].answer); // txt_ID.text = GlobalManager.Instance.CurrentInfo.id; SetLeftStart(); ShowIndexQuestion(0); foreach (var rightQuestionItem in _rightQuestionItems) { rightQuestionItem.Hide(); } _rightQuestionItems[0].Show(); } public override void Dispose() { base.Dispose(); EventManager.Instance.Unsubscribe(QuestionSureEventArgs.EventId, QuestionSureEvent); } #region Down Left [SerializeField] private List _toggles = new List(); void SetLeftStart() { foreach (var toggle in _toggles) { toggle.SetAction(ShowIndexQuestion); toggle.transform.GetChild(0).GetComponent().color = unansweredColor; } _toggles[0].toggle.isOn = true; } void SetLeftToggle(int index) { _toggles[index].toggle.isOn = true; } private void ClickConfirmSubmit() { var openPanel = UIManager.Instance.OpenPanel(PanelType.Tips); var tipsPanel = openPanel as TipsPanel; } #endregion #region Down Right private void ShowIndexQuestion(int index) { SetLeftToggle(index); txt_Progress.text = $"{index + 1}/5"; foreach (var rightQuestionItem in _rightQuestionItems) { rightQuestionItem.Hide(); } _rightQuestionItems[index].Show(); } #endregion #region Top [SerializeField] private CountDownItem _countDownItem; public void Pause() { SaveData(); _countDownItem.Pause(); } public void Resume() { _countDownItem.Resume(); } public void Stop() { _countDownItem.StopCountDown(); } #endregion public void SaveData() { int score = 0; int trueCount = 0; int falseCount = 0; int nullCount = 0; foreach (var rightQuestionItem in _rightQuestionItems) { var resultType = rightQuestionItem.GetResult(); switch (resultType) { case ResultType.未答: ++nullCount; break; case ResultType.正确: score += 2; ++trueCount; break; case ResultType.错误: ++falseCount; break; default: throw new ArgumentOutOfRangeException(); } } var count = (trueCount / 5f) * 100; Debug.Log($"{score}-{trueCount}-{falseCount}-{nullCount}-{count}%"); // GlobalManager.Instance.summaryInfo.score = score; // GlobalManager.Instance.summaryInfo.trueCount = trueCount; // GlobalManager.Instance.summaryInfo.falseCount = falseCount; // GlobalManager.Instance.summaryInfo.nullCount = nullCount; // GlobalManager.Instance.summaryInfo.accuracy = $"{count}%"; GlobalManager.Instance.SetCurrentScoreAndOther(score.ToString(), trueCount.ToString(), falseCount.ToString(), nullCount.ToString(), $"{count}%"); } } }