SetStaticHeatmapTime.cs 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEngine.UI;
  5. [SerializeField]
  6. public class Heatmap3D
  7. {
  8. public List<int> x1;
  9. public List<int> y1;
  10. public int z1;
  11. public List<float> dz1;
  12. public List<float> alpha_values1;
  13. public List<int> x2;
  14. public List<int> y2;
  15. public int z2;
  16. public List<float> dz2;
  17. public List<float> alpha_values2;
  18. public List<int> x3;
  19. public List<int> y3;
  20. public int z3;
  21. public List<float> dz3;
  22. public List<float> alpha_values3;
  23. }
  24. public class SetStaticHeatmapTime : MonoBehaviour
  25. {
  26. [Header("Settings")]
  27. public string jsonPath1 = "json/1/heatmap3D1";
  28. public string jsonPath2 = "json/1/heatmap3D2";
  29. public string jsonPath3 = "json/1/heatmap3D3";
  30. public float scaleHight = 10;
  31. [Header("Set the color for each day")]
  32. public Material defaultMaterial;
  33. public Color color1;
  34. public Color color2;
  35. public Color color3;
  36. [Header("Disable Game Object")]
  37. public GameObject playback;
  38. // GameObjects to store all the created bars and to easily toggle them
  39. private GameObject staticBars1;
  40. private GameObject staticBars2;
  41. private GameObject staticBars3;
  42. // Toggles that define if the bars should be active/inactive
  43. private Toggle[] days;
  44. private Toggle day1;
  45. private Toggle day2;
  46. private Toggle day3;
  47. public static T ImportJson<T>(string path)
  48. {
  49. TextAsset textAsset = Resources.Load<TextAsset>(path);
  50. return JsonUtility.FromJson<T>(textAsset.text);
  51. }
  52. // Start is called before the first frame update
  53. void Start()
  54. {
  55. // Get the Checkboxes from the Legend
  56. days = FindObjectsOfType<Toggle>();
  57. foreach (var day in days)
  58. {
  59. if ("Visibility 2019" == day.name)
  60. {
  61. day1 = day;
  62. }
  63. else if ("Visibility 2020" == day.name)
  64. {
  65. day2 = day;
  66. }
  67. else if ("Visibility 2021" == day.name)
  68. {
  69. day3 = day;
  70. }
  71. }
  72. if (playback.activeSelf)
  73. playback.SetActive(false);
  74. // Take data from json file and save in variable
  75. Heatmap3D heatmap3DData1 = ImportJson<Heatmap3D>(jsonPath1);
  76. Heatmap3D heatmap3DData2 = ImportJson<Heatmap3D>(jsonPath2);
  77. heatmap3DData2.x2 = heatmap3DData2.x1;
  78. heatmap3DData2.y2 = heatmap3DData2.y1;
  79. heatmap3DData2.z2 = heatmap3DData2.z1;
  80. heatmap3DData2.dz2 = heatmap3DData2.dz1;
  81. heatmap3DData2.alpha_values2 = heatmap3DData2.alpha_values1;
  82. Heatmap3D heatmap3DData3 = ImportJson<Heatmap3D>(jsonPath3);
  83. heatmap3DData3.x3 = heatmap3DData3.x1;
  84. heatmap3DData3.y3 = heatmap3DData3.y1;
  85. heatmap3DData3.z3 = heatmap3DData3.z1;
  86. heatmap3DData3.dz3 = heatmap3DData3.dz1;
  87. heatmap3DData3.alpha_values3 = heatmap3DData3.alpha_values1;
  88. // GameObjects where all the bars are stored
  89. staticBars1 = new GameObject("StaticBars1");
  90. staticBars2 = new GameObject("StaticBars2");
  91. staticBars3 = new GameObject("StaticBars3");
  92. staticBars1.transform.position = new Vector3(0, 0, 0);
  93. staticBars2.transform.position = new Vector3(0, 0, 0);
  94. staticBars3.transform.position = new Vector3(0, 0, 0);
  95. // Iterate through the length of the x coordiante, bc x, y have the same length
  96. for (int it = 0; it < heatmap3DData1.x1.Count; it++)
  97. {
  98. GameObject block1 = GameObject.CreatePrimitive(PrimitiveType.Cube);
  99. // take position from data and add Vector(0.25f, 0, 0.25f) to align the bars right
  100. block1.transform.parent = staticBars1.transform;
  101. block1.transform.localPosition = new Vector3(0.5f + heatmap3DData1.x1[it], 0.49f + 0.5f * (heatmap3DData1.dz1[it] * scaleHight), 0.5f + heatmap3DData1.y1[it]);
  102. block1.transform.localScale = new Vector3(1f, (heatmap3DData1.dz1[it] * scaleHight), 1f);
  103. // Create new Material and set the color; Turn off the shadows to have a better visibility
  104. Renderer renderer = block1.GetComponent<Renderer>();
  105. renderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off;
  106. Material mat = new Material(defaultMaterial);
  107. Color customColor = new Color(color1.r, color1.g, color1.b, heatmap3DData1.alpha_values1[it]);
  108. mat.color = customColor;
  109. renderer.material = mat;
  110. }
  111. for (int it = 0; it < heatmap3DData2.x2.Count; it++)
  112. {
  113. GameObject block2 = GameObject.CreatePrimitive(PrimitiveType.Cube);
  114. block2.transform.parent = staticBars2.transform;
  115. block2.transform.localPosition = new Vector3(1.5f + heatmap3DData2.x2[it], 0.49f + 0.5f * (heatmap3DData2.dz2[it] * scaleHight), 0.5f + heatmap3DData2.y2[it]);
  116. block2.transform.localScale = new Vector3(1f, (heatmap3DData2.dz2[it] * scaleHight), 1f);
  117. Renderer renderer = block2.GetComponent<Renderer>();
  118. renderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off;
  119. Material mat = new Material(defaultMaterial);
  120. Color customColor = new Color(color2.r, color2.g, color2.b, heatmap3DData2.alpha_values2[it]);
  121. mat.color = customColor;
  122. renderer.material = mat;
  123. }
  124. for (int it = 0; it < heatmap3DData3.x3.Count; it++)
  125. {
  126. GameObject block3 = GameObject.CreatePrimitive(PrimitiveType.Cube);
  127. block3.transform.parent = staticBars3.transform;
  128. block3.transform.localPosition = new Vector3(1.5f + heatmap3DData3.x3[it], 0.49f + 0.5f * (heatmap3DData3.dz3[it] * scaleHight), 1.5f + heatmap3DData3.y3[it]);
  129. block3.transform.localScale = new Vector3(1f, (heatmap3DData3.dz3[it] * scaleHight), 1f);
  130. Renderer renderer = block3.GetComponent<Renderer>();
  131. renderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off;
  132. Material mat = new Material(defaultMaterial);
  133. Color customColor = new Color(color3.r, color3.g, color3.b, heatmap3DData3.alpha_values3[it]);
  134. mat.color = customColor;
  135. renderer.material = mat;
  136. }
  137. }
  138. private void FixedUpdate()
  139. {
  140. // Toggle the visibility of the bars according to the checkboxes in the legend
  141. if (!day1.isOn)
  142. staticBars1.SetActive(false);
  143. else
  144. staticBars1.SetActive(true);
  145. if (!day2.isOn)
  146. staticBars2.SetActive(false);
  147. else
  148. staticBars2.SetActive(true);
  149. if (!day3.isOn)
  150. staticBars3.SetActive(false);
  151. else
  152. staticBars3.SetActive(true);
  153. }
  154. }