| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- using System;
- using CodeMonkey.Utils;
- using UnityEngine;
- public class HeatMapGeneralVisual : MonoBehaviour {
- private Grid<HeatMapGridObject> grid;
- private Mesh mesh;
- private bool updateMesh;
- private void Awake() {
- mesh = new Mesh();
- GetComponent<MeshFilter>().mesh = mesh;
- }
- public void SetGrid(Grid<HeatMapGridObject> grid) {
- this.grid = grid;
- UpdateHeatMapVisual();
- grid.OnGridObjectChanged += Grid_OnGridValueChanged;
- }
- private void Grid_OnGridValueChanged(object sender, Grid<HeatMapGridObject>.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;
- }
- }
|