QuestionControl.cs 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEngine.UI;
  5. using System;
  6. using SC.XR.Unity.Module_InputSystem;
  7. /*
  8. * 答题模块的控制面板
  9. */
  10. public class QuestionControl : MonoBehaviour
  11. {
  12. private GameObject m_Prefab;
  13. private GameObject m_SucessPanel;
  14. private Text m_SucessText;
  15. private int m_CurrentScore;
  16. private int m_RightQuestion;
  17. //已经回答的题目
  18. private List<Question> m_AlreadyQuestion;
  19. //所有题目
  20. private List<Question> m_Questions;
  21. // private UdpClient m_Udp;
  22. /// <summary>
  23. /// 是否向服务器发送数据
  24. /// </summary>
  25. [SerializeField]
  26. private bool IsSendMsgToServer;
  27. ///// <summary>
  28. ///// 等待太阳系现时间
  29. ///// </summary>
  30. //[SerializeField]
  31. //private float m_WaitP2GalaxTime;
  32. //太阳系
  33. public GameObject m_P2Galax;
  34. private void OnEnable()
  35. {
  36. //ChangeInputDeviceType(InputDeviceType.Head);
  37. }
  38. private void Awake()
  39. {
  40. DataManager.Instance.Init();
  41. }
  42. private void Start()
  43. {
  44. m_CurrentScore = 0;
  45. m_RightQuestion = 0;
  46. m_SucessPanel = transform.Find("Sucess").gameObject;
  47. m_SucessText = m_SucessPanel.transform.Find("Text").GetComponent<Text>();
  48. m_Prefab = transform.Find("Question").gameObject;
  49. m_Prefab.SetActive(false);
  50. m_AlreadyQuestion = new List<Question>();
  51. //if (IsSendMsgToServer)
  52. // m_Udp = GameObject.Find("Socket").GetComponent<UdpClient>();
  53. m_Questions = new List<Question>();
  54. CraetQuestions();
  55. }
  56. public void Update()
  57. {
  58. }
  59. /// <summary>
  60. /// 根据服务器数据创建问题UI面板
  61. /// </summary>
  62. private void CraetQuestions()
  63. {
  64. var data = DataManager.Instance.QuesDataMgr.QuestionList;
  65. for (int i = 0; i < data.Count; i++)
  66. {
  67. var obj = Instantiate(m_Prefab) as GameObject;
  68. obj.SetActive(true);
  69. var question = obj.AddComponent<Question>();
  70. question.transform.SetParent(this.transform);
  71. question.transform.localPosition = data[i].position;
  72. question.transform.localRotation = Quaternion.Euler(data[i].rotation);
  73. question.transform.localScale = data[i].scale;
  74. question.QuestionText = data[i].question;
  75. question.AnswerData.AddRange(data[i].Answer);
  76. question.RightID = data[i].RightAnswer;
  77. question.Score = data[i].score;
  78. question.CalScoreQuestion += CalScore;
  79. m_Questions.Add(question);
  80. }
  81. }
  82. /// <summary>
  83. /// 计算玩家获得的分数
  84. /// </summary>
  85. /// <param name="score"></param>
  86. /// <param name="isright"></param>
  87. /// <param name="question"></param>
  88. private void CalScore(int score, bool isright, Question question)
  89. {
  90. if (!m_AlreadyQuestion.Contains(question))
  91. {
  92. m_AlreadyQuestion.Add(question);
  93. if (isright)
  94. {
  95. m_CurrentScore += score;
  96. m_RightQuestion += 1;
  97. }
  98. }
  99. if (m_AlreadyQuestion.Count >= DataManager.Instance.QuesDataMgr.QuestionList.Count)
  100. {
  101. m_SucessPanel.SetActive(true);
  102. string str = String.Format("{0}{1}{2}{3}{4}", "恭喜你答对", m_RightQuestion.ToString(), "道题,获得", m_CurrentScore.ToString(), "积分");
  103. m_SucessText.text = str;
  104. //发送信息到服务器
  105. if (IsSendMsgToServer)
  106. {
  107. SendQuestionInfor questionInfor = new SendQuestionInfor();
  108. questionInfor.sn = DeviceSN.Instance.SendSerialBy16();
  109. questionInfor.correct = m_RightQuestion;
  110. questionInfor.incorrect = DataManager.Instance.QuesDataMgr.QuestionList.Count - m_RightQuestion;
  111. // m_Udp.SendIpTOQuestion(questionInfor);
  112. HttpSocket.Instance.SendIpTOQuestion(questionInfor);
  113. }
  114. //等待2秒后,答题面板消失,太阳系出现
  115. StartCoroutine(WaiteTime());
  116. }
  117. }
  118. IEnumerator WaiteTime()
  119. {
  120. yield return new WaitForSeconds(2f);
  121. for (int i = 0; i < m_Questions.Count; i++)
  122. {
  123. m_Questions[i].gameObject.SetActive(false);
  124. }
  125. m_P2Galax.SetActive(true);
  126. m_SucessPanel.SetActive(false);
  127. StopCoroutine(WaiteTime());
  128. }
  129. /// <summary>
  130. /// 改变交互方式
  131. /// </summary>
  132. /// <param name="type"></param>
  133. private void ChangeInputDeviceType(InputDeviceType type)
  134. {
  135. var list = API_Module_InputSystem.GetInstance().inputDeviceSupportList;
  136. for (int i = 0; i < list.Length; i++)
  137. {
  138. if (type == list[i].inputDeviceType)
  139. {
  140. API_Module_InputSystem.GetInstance().SetActiveInputDevice(list[i].inputDeviceType, true);
  141. }
  142. else
  143. {
  144. API_Module_InputSystem.GetInstance().SetActiveInputDevice(list[i].inputDeviceType, false);
  145. }
  146. }
  147. }
  148. private void OnDisable()
  149. {
  150. m_RightQuestion = 0;
  151. m_CurrentScore = 0;
  152. m_AlreadyQuestion.Clear();
  153. for (int i = 0; i < m_Questions.Count; i++)
  154. {
  155. m_Questions[i].gameObject.SetActive(true);
  156. }
  157. m_P2Galax.SetActive(false);
  158. m_SucessPanel.SetActive(false);
  159. // ChangeInputDeviceType(InputDeviceType.GGT26Dof);
  160. }
  161. }