2025-03-11 15:30:07 +08:00

321 lines
10 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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