HeatMapGeneralVisual.cs 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. using System;
  2. using CodeMonkey.Utils;
  3. using UnityEngine;
  4. public class HeatMapGeneralVisual : MonoBehaviour {
  5. private Grid<HeatMapGridObject> grid;
  6. private Mesh mesh;
  7. private bool updateMesh;
  8. private void Awake() {
  9. mesh = new Mesh();
  10. GetComponent<MeshFilter>().mesh = mesh;
  11. }
  12. public void SetGrid(Grid<HeatMapGridObject> grid) {
  13. this.grid = grid;
  14. UpdateHeatMapVisual();
  15. grid.OnGridObjectChanged += Grid_OnGridValueChanged;
  16. }
  17. private void Grid_OnGridValueChanged(object sender, Grid<HeatMapGridObject>.OnGridObjectChangedEventArgs e) {
  18. updateMesh = true;
  19. }
  20. private void LateUpdate() {
  21. if (updateMesh) {
  22. updateMesh = false;
  23. UpdateHeatMapVisual();
  24. }
  25. }
  26. private void UpdateHeatMapVisual() {
  27. MeshUtils.CreateEmptyMeshArrays(grid.GetWidth() * grid.GetHeight(), out Vector3[] vertices, out Vector2[] uv, out int[] triangles);
  28. for (int x = 0; x < grid.GetWidth(); x++) {
  29. for (int y = 0; y < grid.GetHeight(); y++) {
  30. int index = x * grid.GetHeight() + y;
  31. Vector3 quadSize = new Vector3(1, 1) * grid.GetCellSize();
  32. HeatMapGridObject gridObject = grid.GetGridObject(x, y);
  33. float gridValueNormalized = gridObject.GetValueNormalized();
  34. Vector2 gridValueUV = new Vector2(gridValueNormalized, 0f);
  35. MeshUtils.AddToMeshArrays(vertices, uv, triangles, index, grid.GetWorldPosition(x, y) + quadSize * .5f, 0f, quadSize, gridValueUV, gridValueUV);
  36. }
  37. }
  38. mesh.vertices = vertices;
  39. mesh.uv = uv;
  40. mesh.triangles = triangles;
  41. }
  42. }