using System; using CodeMonkey.Utils; using UnityEngine; public class HeatMapGeneralVisual : MonoBehaviour { private Grid grid; private Mesh mesh; private bool updateMesh; private void Awake() { mesh = new Mesh(); GetComponent().mesh = mesh; } public void SetGrid(Grid grid) { this.grid = grid; UpdateHeatMapVisual(); grid.OnGridObjectChanged += Grid_OnGridValueChanged; } private void Grid_OnGridValueChanged(object sender, Grid.OnGridObjectChangedEventArgs e) { updateMesh = true; } private void LateUpdate() { if (updateMesh) { updateMesh = false; UpdateHeatMapVisual(); } } private void UpdateHeatMapVisual() { MeshUtils.CreateEmptyMeshArrays(grid.GetWidth() * grid.GetHeight(), out Vector3[] vertices, out Vector2[] uv, out int[] triangles); for (int x = 0; x < grid.GetWidth(); x++) { for (int y = 0; y < grid.GetHeight(); y++) { int index = x * grid.GetHeight() + y; Vector3 quadSize = new Vector3(1, 1) * grid.GetCellSize(); HeatMapGridObject gridObject = grid.GetGridObject(x, y); float gridValueNormalized = gridObject.GetValueNormalized(); Vector2 gridValueUV = new Vector2(gridValueNormalized, 0f); MeshUtils.AddToMeshArrays(vertices, uv, triangles, index, grid.GetWorldPosition(x, y) + quadSize * .5f, 0f, quadSize, gridValueUV, gridValueUV); } } mesh.vertices = vertices; mesh.uv = uv; mesh.triangles = triangles; } }