TestManagement.cs 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using Valve.VR.InteractionSystem;
  5. using UnityEngine.SceneManagement;
  6. using Valve.VR;
  7. using UnityEngine.UI;
  8. public class TestManagement : MonoBehaviour
  9. {
  10. public static TestManagement Instance { get; private set; }
  11. // ------- Test Information-------------
  12. public float TotalTime = 600; // default test time
  13. // robot info
  14. [Tooltip("Number of collisions detected")]
  15. public int triggerCount = 0;
  16. [Tooltip("Total driving distance. (meter)")]
  17. public float totalDriveDistance = 0;
  18. [Tooltip("Total driving time. (second)")]
  19. public float totalDriveTime = 0;
  20. [Tooltip("Adverage speed. (m/s)")]
  21. public float averageSpeed = 0;
  22. // target info
  23. public int totalTarget = 0;
  24. public int rescuedTarget = 0;
  25. [Tooltip("visible target but not rescued")]
  26. public int visibleTarget = 0;
  27. [Tooltip("Not detected target")]
  28. public int unvisibleTarget = 0;
  29. // --------------
  30. public GameObject[] targetList;
  31. TestRobot currentTestRobot;
  32. SteamVR_LoadLevel loader;
  33. // Start is called before the first frame update
  34. void Start()
  35. {
  36. Instance = this;
  37. loader = gameObject.GetComponent<SteamVR_LoadLevel>();
  38. StartCoroutine(Time());
  39. targetList = GameObject.FindGameObjectsWithTag("target");
  40. currentTestRobot = GameObject.FindGameObjectWithTag("robot").GetComponent<TestRobot>();
  41. totalTarget = targetList.Length;
  42. }
  43. // Update is called once per frame
  44. void Update()
  45. {
  46. if(currentTestRobot != null){
  47. triggerCount = currentTestRobot.triggerCount;
  48. totalDriveDistance = currentTestRobot.totalDriveDistance;
  49. totalDriveTime = currentTestRobot.totalDriveTime;
  50. averageSpeed = currentTestRobot.averageSpeed;
  51. }
  52. // caculate the target info
  53. visibleTarget = 0;
  54. foreach(GameObject target in targetList){
  55. if(target!=null && target.layer != LayerMask.NameToLayer("Invisible")){
  56. visibleTarget++;
  57. }
  58. }
  59. unvisibleTarget = totalTarget - rescuedTarget - visibleTarget;
  60. }
  61. public void loadSceneAsync(string name)
  62. {
  63. GameObject.Find("Input").GetComponent<VRInput>().CurrentMode.SetActive(false);
  64. Destroy(Player.instance.gameObject);
  65. // delete targets and robt
  66. foreach(Transform child in transform){
  67. Destroy(child.gameObject);
  68. }
  69. loader.levelName = name;
  70. loader.Trigger();
  71. //SceneManager.LoadSceneAsync(name);
  72. }
  73. IEnumerator Time()
  74. {
  75. while (TotalTime > 0)
  76. {
  77. yield return new WaitForSeconds(1);
  78. // all the people are rescued, end test
  79. if(totalTarget == rescuedTarget){
  80. break;
  81. }
  82. TotalTime--;
  83. }
  84. endTest();
  85. }
  86. // rescue the selected person
  87. public void rescue(GameObject target){
  88. if( target.layer != LayerMask.NameToLayer("Invisible")){
  89. GameObject.Destroy(target);
  90. rescuedTarget ++;
  91. InteractionManagement.Instance.SetPlayerText("Rescued People: "+ (rescuedTarget-1) + " => " + rescuedTarget,5,false);
  92. }
  93. }
  94. public void endTest(){
  95. var testinfo ="";
  96. testinfo += "End Test: " + SceneManager.GetActiveScene().name + "\n";
  97. testinfo += "Remained Time: " + TotalTime + "\n";
  98. // Robot
  99. testinfo += "Collision:" + triggerCount + "\n";
  100. testinfo += "Drive Distance: " + totalDriveDistance + "\n";
  101. testinfo += "Total driving time:" + totalDriveTime + "\n";
  102. testinfo += "Adverage speed: " + averageSpeed + "\n";
  103. // Target
  104. testinfo += "Rescued Target:" + rescuedTarget + "/" + totalTarget + "\n";
  105. testinfo += "Remained Visible Target: " + visibleTarget + "\n";
  106. testinfo += "Remained Unvisible Target: " + unvisibleTarget + "\n";
  107. Debug.Log(testinfo);
  108. InteractionManagement.Instance.SetMenu(true);
  109. InteractionManagement.Instance.SetPlayerText("The test has ended. Please wait.",5,false);
  110. }
  111. }