321 lines
10 KiB
C#
Raw Normal View History

2025-03-11 15:30:07 +08:00
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using ZXKFramework;
public class Question_ChoicePanel : UIBase
{
public override string GroupName => UIGroupLiao.Question.ToString();
public override string Name => "Question_ChoicePanel";
public Dictionary<string, string> optionsDic = new Dictionary<string, string>();
public string analysis;
int groupId;
Text question_Text;
Button button_QuestionSumbit;
RectTransform optionsParent;
Text analysis_Text;
RectTransform analysis_Panel;
Button button_AnalysisClose;
Button button_AnalysisShow;
Button button_QuestionClose;
Button button_QuestionNext;
ToggleGroup toggleGroup;
Dictionary<Toggle, string> toggleDic = new Dictionary<Toggle, string>();
List<int> quesitonIds = new List<int>();
int index_Question = 0;
GameModel gameModel;
List<string> rightAnswersList = new List<string>();
Transform rightIcon;
Transform falseIcon;
bool single;
bool ifRight = false;
public override void Init(IUIManager uictrl)
{
base.Init(uictrl);
gameModel = GetModel<GameModel>();
question_Text = transform.FindFirst<Text>("question_Text");
optionsParent = transform.FindFirst<RectTransform>("Options");
analysis_Text = transform.FindFirst<Text>("Text_Analysis");
analysis_Panel = transform.FindFirst<RectTransform>("Panel_Analysis");
toggleGroup = transform.FindFirst<ToggleGroup>("Options");
button_QuestionSumbit = transform.FindFirst<Button>("Button_QuestionSumbit");
button_AnalysisClose = transform.FindFirst<Button>("Button_AnalysisConfirm");
button_AnalysisShow = transform.FindFirst<Button>("Button_TurnToAnalysis");
button_QuestionNext = transform.FindFirst<Button>("Button_NextQuestion");
button_QuestionClose = transform.FindFirst<Button>("Button_CloseQuestion");
rightIcon = transform.FindFirst<Transform>("Right");
falseIcon = transform.FindFirst<Transform>("False");
button_QuestionSumbit.onClick.AddListener(Submit);
button_AnalysisClose.onClick.AddListener(ConfirmAnalysis);
button_AnalysisShow.onClick.AddListener(ShowAnalysis);
button_QuestionNext.onClick.AddListener(ShowNextQustion);
button_QuestionClose.onClick.AddListener(() => {
SetActive(false);
Game.Instance.eventManager.Raise(new CloseQuestionEvent());
});
}
public override void ShowData(params object[] obj)
{
base.ShowData(obj);
//<2F><>ȡid
groupId = (int)obj[0];
quesitonIds = gameModel.questionChoiceData.GetQuestionIDsByGroup(groupId);
//<2F><>ʼ<EFBFBD><CABC>
index_Question = 0;
rightAnswersList.Clear();
optionsDic.Clear();
//<2F><>ʾϰ<CABE><CFB0>
ShowContent(index_Question);
}
//<2F><>ʾϰ<CABE><CFB0>
public void ShowContent(int value)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SetQuestion(gameModel.questionChoiceData.GetQuestionByID(quesitonIds[value]));
SetSingleOrMultiple(gameModel.questionChoiceData.GetType(quesitonIds[value]));
SetOptions(gameModel.questionChoiceData.GetOptionsByID(quesitonIds[value]));
SetAnswers(gameModel.questionChoiceData.GetAnswersByID(quesitonIds[value]));
SetAnalysis(gameModel.questionChoiceData.GetAnalysisByID(quesitonIds[value]));
//<2F><>ʾ
analysis_Panel.gameObject.SetActive(false);
button_AnalysisShow.gameObject.SetActive(false);
button_QuestionClose.gameObject.SetActive(false);
button_QuestionNext.gameObject.SetActive(false);
button_QuestionSumbit.gameObject.SetActive(true);
rightIcon.gameObject.SetActive(false);
falseIcon.gameObject.SetActive(false);
if (gameModel.GetModeType() == ModeType.KaoHe)
{
Game.Instance.eventManager.Raise(new StepRecordEvent()
{
subModule = gameModel.mainData.GetSubModuleName(gameModel.GetId()),
task = gameModel.questionChoiceData.GetName(quesitonIds[index_Question]),
answer = gameModel.questionChoiceData.GetAnswerByID(quesitonIds[value]),
stepType = gameModel.mainData.GetMessageType(gameModel.GetId()),
start = true
});
}
}
void SetQuestion(string value)
{
question_Text.text = value;
}
void SetSingleOrMultiple(string value)
{
switch (value)
{
case "S":
single = true;
break;
case "M":
single = false;
break;
}
}
void SetOptions(Dictionary<string, string> optionsDic)
{
toggleDic.Clear();
rightAnswersList.Clear();
Game.Instance.objectPool.Unspawn("Toggle_Template");
foreach (var item in optionsDic.Keys)
{
Game.Instance.objectPool.Spawn("Toggle_Template", optionsParent, m =>
{
Toggle tempToggle = m.GetComponent<Toggle>();
tempToggle.isOn = false;
if (single)
{
tempToggle.group = toggleGroup;
}
else
{
tempToggle.group = null;
}
tempToggle.GetComponentInChildren<Text>().text = item + "<22><>" + optionsDic[item];
tempToggle.name = item;
toggleDic.Add(tempToggle, item);
});
}
ResetAllToggle();
}
void SetAnswers(List<string> answers)
{
rightAnswersList = answers;
}
void SetAnalysis(string value)
{
analysis_Text.text = value;
}
public override void Destroy()
{
button_QuestionSumbit.onClick.RemoveAllListeners();
button_AnalysisShow.onClick.RemoveAllListeners();
button_AnalysisClose.onClick.RemoveAllListeners();
button_QuestionNext.onClick.RemoveAllListeners();
button_QuestionClose.onClick.RemoveAllListeners();
}
void ResetAllToggle()
{
SetAllToggleInteractive();
SetAllToggleUnSelected();
ResetAllColor();
}
void SetAllToggleInteractive()
{
foreach (var item in toggleDic.Keys)
{
item.interactable = true;
}
}
void SetAllToggleUnSelected()
{
foreach (var item in toggleDic.Keys)
{
item.isOn = false;
}
}
/// <summary>
/// <20>
/// </summary>
void Submit()
{
if (GetToggleOnCount() == 0) return;
//<2F>ж<EFBFBD><D0B6>߼<EFBFBD>
if (GetToggleOnCount() == rightAnswersList.Count)
{
ifRight = true;
foreach (var item in toggleDic.Keys)
{
if (item.isOn && !rightAnswersList.Contains(toggleDic[item]))
{
ifRight = false;
SetWrongColor(item);
}
}
}
else
{
ifRight = false;
foreach (var item in toggleDic.Keys)
{
if (item.isOn && !rightAnswersList.Contains(toggleDic[item]))
{
SetWrongColor(item);
}
}
}
string yourAnswer = "";
foreach (var item in toggleDic.Keys)
{
if (item.isOn)
{
yourAnswer += item.name;
}
}
foreach (var item in toggleDic.Keys)
{
item.interactable = false;
if (rightAnswersList.Contains(toggleDic[item]))
{
SetRightColor(item);
}
}
//<2F>Ƿ<EFBFBD><C7B7><EFBFBD>ʾ<EFBFBD><CABE>һ<EFBFBD>ⰴť
if (index_Question < quesitonIds.Count - 1)
{
button_QuestionNext.gameObject.SetActive(true);
}
else
{
button_QuestionClose.gameObject.SetActive(true);
}
//<2F>ر<EFBFBD>
button_AnalysisShow.gameObject.SetActive(true);
button_QuestionSumbit.gameObject.SetActive(false);
if (ifRight)
{
rightIcon.gameObject.SetActive(true);
}
else
{
falseIcon.gameObject.SetActive(true);
}
//<2F>ɼ<EFBFBD>
if (gameModel.GetModeType() == ModeType.KaoHe)
{
Game.Instance.eventManager.Raise(new ScoreRecordEvent()
{
subModule = gameModel.mainData.GetSubModuleName(gameModel.GetId()),
task = gameModel.questionChoiceData.GetName(quesitonIds[index_Question]),
right = ifRight
});
Game.Instance.eventManager.Raise(new StepRecordEvent()
{
subModule = gameModel.mainData.GetSubModuleName(gameModel.GetId()),
task = gameModel.questionChoiceData.GetName(quesitonIds[index_Question]),
yourAnswer = yourAnswer,
start = false
});
Game.Instance.eventManager.Raise(new ProcessEvent()
{
subModule = gameModel.mainData.GetSubModuleName(gameModel.GetId()),
task = gameModel.questionChoiceData.GetName(quesitonIds[index_Question])
});
}
}
/// <summary>
/// <20><>һ<EFBFBD><D2BB>
/// </summary>
void ShowNextQustion()
{
index_Question++;
ShowContent(index_Question);
}
void ShowAnalysis()
{
analysis_Panel.gameObject.SetActive(true);
}
void ConfirmAnalysis()
{
analysis_Panel.gameObject.SetActive(false);
}
private void SetRightColor(Toggle toggle)
{
toggle.targetGraphic.color = Color.green;
}
void SetWrongColor(Toggle toggle)
{
toggle.targetGraphic.color = Color.red;
}
void SetNormalColor(Toggle toggle)
{
toggle.targetGraphic.color = Color.white;
}
void ResetAllColor()
{
foreach (var item in toggleDic.Keys)
{
SetNormalColor(item);
}
}
int GetToggleOnCount()
{
int temp = 0;
foreach (var item in toggleDic.Keys)
{
if (item.isOn)
{
temp++;
}
}
return temp;
}
public override void HandleEvent(string name, object data)
{
}
}