killapp/Assets/Scripts/UI/Pages/Safetylearning/SafetylearningQuestion.cs

120 lines
3.6 KiB
C#
Raw Normal View History

2026-04-24 16:57:44 +08:00
using System;
using System.Collections;
using System.Collections.Generic;
using Kill.Managers;
using UnityEngine;
using UnityEngine.UI;
public class SafetylearningQuestion : MonoBehaviour
{
public Text questionIndexText;
public Text questionText;
public GameObject answerContainer;
public GameObject answerButtonPrefab;
QuestionInfo questionInfo;
public bool isChinese = false;
List<GameObject> answerButtons = new List<GameObject>();
// 选项选择事件
public event Action OnOptionSelected;
public void Init(int questionIndex, QuestionInfo question)
{
answerButtons.Clear();
questionIndexText.text = questionIndexText.text.Replace("{0}", questionIndex.ToString());
answerButtonPrefab.SetActive(false);
questionInfo = question;
isChinese = LanguageManager.Instance.languageType == LanguageManager.LanguageType.Chinese;
questionText.text = isChinese ? question.questionContent : question.questionContentEn;
for (int i = 0; i < question.options.Count; i++)
{
int index = i;
var option = question.options[i];
var answerButton = Instantiate(answerButtonPrefab, answerContainer.transform);
answerButton.SetActive(true);
answerButton.GetComponent<Button>().onClick.AddListener(() => ClickAnswerButton(index));
answerButton.GetComponent<SafetylearningOption>().Init(option, isChinese);
answerButtons.Add(answerButton);
}
}
public void ClickAnswerButton(int index)
{
2026-06-08 08:55:10 +08:00
for(int i = 0; i <answerButtons.Count; i++) {
answerButtons[i].GetComponent<SafetylearningOption>().SetSelected(i==index);
}
2026-04-24 16:57:44 +08:00
// 触发选择事件
OnOptionSelected?.Invoke();
}
/// <summary>
/// 获取用户选择的答案(如 "AB"、"C"
/// </summary>
public string GetUserAnswer()
{
string answer = "";
for (int i = 0; i < answerButtons.Count; i++)
{
if (answerButtons[i].GetComponent<SafetylearningOption>().isSelected)
{
answer += questionInfo.options[i].optionLabel;
}
}
// 排序确保 AB 而不是 BA
char[] chars = answer.ToCharArray();
Array.Sort(chars);
return new string(chars);
}
/// <summary>
/// 是否已选择答案
/// </summary>
public bool HasSelectedAnswer()
{
foreach (var btn in answerButtons)
{
if (btn.GetComponent<SafetylearningOption>().isSelected)
return true;
}
return false;
}
/// <summary>
/// 禁用所有选项交互
/// </summary>
public void DisableAllOptions()
{
foreach (var btn in answerButtons)
{
btn.GetComponent<Button>().interactable = false;
}
}
public void CheckAnswer()
{
for (int i = 0; i < questionInfo.options.Count; i++)
{
var option = questionInfo.options[i];
var optionComponent = answerButtons[i].GetComponent<SafetylearningOption>();
bool isSelected = optionComponent.isSelected;
// 标注正确答案
if (option.isCorrect)
{
optionComponent.SetCorrect(true);
}
// 标注选错的
else if (isSelected)
{
optionComponent.SetCorrect(false);
}
// 其他只禁用交互
else
{
optionComponent.GetComponent<Button>().interactable = false;
}
}
}
}