SetStaticHeatmapTime.cs 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  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 jsonPath = "json/output";
  28. public float scaleHight = 10;
  29. [Header("Set the color for each day")]
  30. public Material defaultMaterial;
  31. public Color color1;
  32. public Color color2;
  33. public Color color3;
  34. // GameObjects to store all the created bars and to easily toggle them
  35. private GameObject staticBars1;
  36. private GameObject staticBars2;
  37. private GameObject staticBars3;
  38. // Toggles that define if the bars should be active/inactive
  39. private Toggle[] days;
  40. private Toggle day1;
  41. private Toggle day2;
  42. private Toggle day3;
  43. public static T ImportJson<T>(string path)
  44. {
  45. TextAsset textAsset = Resources.Load<TextAsset>(path);
  46. return JsonUtility.FromJson<T>(textAsset.text);
  47. }
  48. // Start is called before the first frame update
  49. void Start()
  50. {
  51. // Get the Checkboxes from the Legend
  52. days = FindObjectsOfType<Toggle>();
  53. foreach (var day in days)
  54. {
  55. if ("Visibility 2019" == day.name)
  56. {
  57. day1 = day;
  58. }
  59. else if ("Visibility 2020" == day.name)
  60. {
  61. day2 = day;
  62. }
  63. else if ("Visibility 2021" == day.name)
  64. {
  65. day3 = day;
  66. }
  67. }
  68. // Take data from json file and save in variable
  69. Heatmap3D heatmap3DData = ImportJson<Heatmap3D>(jsonPath);
  70. // GameObjects where all the bars are stored
  71. staticBars1 = new GameObject("StaticBars1");
  72. staticBars2 = new GameObject("StaticBars2");
  73. staticBars3 = new GameObject("StaticBars3");
  74. staticBars1.transform.position = new Vector3(0, 0, 0);
  75. staticBars2.transform.position = new Vector3(0, 0, 0);
  76. staticBars3.transform.position = new Vector3(0, 0, 0);
  77. // Set the color of the bars
  78. //int colorIndex1 = 0;
  79. //int colorIndex2 = 0;
  80. //int colorIndex3 = 0;
  81. // Iterate through the length of the x coordiante, bc x, y have the same length
  82. for (int it = 0; it < heatmap3DData.x1.Count; it++)
  83. {
  84. GameObject block1 = GameObject.CreatePrimitive(PrimitiveType.Cube);
  85. // take position from data and add Vector(0.25f, 0, 0.25f) to align the bars right
  86. block1.transform.parent = staticBars1.transform;
  87. block1.transform.localPosition = new Vector3(0.25f + heatmap3DData.x1[it], 0.49f + 0.5f * (heatmap3DData.dz1[it] * scaleHight), 0.25f + heatmap3DData.y1[it]);
  88. block1.transform.localScale = new Vector3(0.5f, (heatmap3DData.dz1[it] * scaleHight), 0.5f);
  89. // Create new Material and set the color; Turn off the shadows to have a better visibility
  90. Renderer renderer = block1.GetComponent<Renderer>();
  91. renderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off;
  92. Material mat = new Material(defaultMaterial);
  93. //Color customColor = new Color(heatmap3DData.color_values1[colorIndex1++], heatmap3DData.color_values1[colorIndex1++], heatmap3DData.color_values1[colorIndex1++], heatmap3DData.color_values1[colorIndex1++]);
  94. //mat.color = customColor;
  95. Color customColor = new Color(color1.r, color1.g, color1.b, heatmap3DData.alpha_values1[it]);
  96. mat.color = customColor;
  97. renderer.material = mat;
  98. }
  99. for (int it = 0; it < heatmap3DData.x2.Count; it++)
  100. {
  101. GameObject block2 = GameObject.CreatePrimitive(PrimitiveType.Cube);
  102. block2.transform.parent = staticBars2.transform;
  103. block2.transform.localPosition = new Vector3(0.75f + heatmap3DData.x2[it], 0.49f + 0.5f * (heatmap3DData.dz2[it] * scaleHight), 0.25f + heatmap3DData.y2[it]);
  104. block2.transform.localScale = new Vector3(0.5f, (heatmap3DData.dz2[it] * scaleHight), 0.5f);
  105. Renderer renderer = block2.GetComponent<Renderer>();
  106. renderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off;
  107. Material mat = new Material(defaultMaterial);
  108. //Color customColor = new Color(heatmap3DData.color_values2[colorIndex2++], heatmap3DData.color_values2[colorIndex2++], heatmap3DData.color_values2[colorIndex2++], heatmap3DData.color_values2[colorIndex2++]);
  109. //mat.color = customColor;
  110. Color customColor = new Color(color2.r, color2.g, color2.b, heatmap3DData.alpha_values2[it]);
  111. mat.color = customColor;
  112. renderer.material = mat;
  113. }
  114. for (int it = 0; it < heatmap3DData.x3.Count; it++)
  115. {
  116. GameObject block3 = GameObject.CreatePrimitive(PrimitiveType.Cube);
  117. block3.transform.parent = staticBars3.transform;
  118. block3.transform.localPosition = new Vector3(0.75f + heatmap3DData.x3[it], 0.49f + 0.5f * (heatmap3DData.dz3[it] * scaleHight), 0.75f + heatmap3DData.y3[it]);
  119. block3.transform.localScale = new Vector3(0.5f, (heatmap3DData.dz3[it] * scaleHight), 0.5f);
  120. Renderer renderer = block3.GetComponent<Renderer>();
  121. renderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off;
  122. Material mat = new Material(defaultMaterial);
  123. //Color customColor = new Color(heatmap3DData.color_values3[colorIndex3++], heatmap3DData.color_values3[colorIndex3++], heatmap3DData.color_values3[colorIndex3++], heatmap3DData.color_values3[colorIndex3++]);
  124. //mat.color = customColor;
  125. Color customColor = new Color(color3.r, color3.g, color3.b, heatmap3DData.alpha_values3[it]);
  126. mat.color = customColor;
  127. renderer.material = mat;
  128. }
  129. }
  130. private void FixedUpdate()
  131. {
  132. // Toggle the visibility of the bars according to the checkboxes in the legend
  133. if (!day1.isOn)
  134. staticBars1.SetActive(false);
  135. else
  136. staticBars1.SetActive(true);
  137. if (!day2.isOn)
  138. staticBars2.SetActive(false);
  139. else
  140. staticBars2.SetActive(true);
  141. if (!day3.isOn)
  142. staticBars3.SetActive(false);
  143. else
  144. staticBars3.SetActive(true);
  145. }
  146. }