using System.Collections.Generic; using UnityEngine; using UnityEngine.Rendering; namespace ET { public static class BuildingViewHelper { public static GameObject CreateOcupyPlaceInicator(string name, Color color) { GameObject indicatorObj = new GameObject(name); MeshRenderer meshRenderer = indicatorObj.AddComponent(); meshRenderer.material = new Material(Shader.Find("Sprites/Default")); meshRenderer.material.color = color; meshRenderer.material.renderQueue = (int)RenderQueue.Transparent - 1; var meshFilter = indicatorObj.AddComponent(); var mesh = new Mesh(); var verticies = new List(); var indicies = new List(); //0--3 //|/ | //1--2 verticies.Add(new Vector3()); verticies.Add(new Vector3()); verticies.Add(new Vector3()); verticies.Add(new Vector3()); indicies.Add(0); indicies.Add(1); indicies.Add(3); indicies.Add(1); indicies.Add(2); indicies.Add(3); mesh.vertices = verticies.ToArray(); mesh.SetIndices(indicies.ToArray(), MeshTopology.Triangles, 0); meshFilter.mesh = mesh; return indicatorObj; } public static void UpdateIndicatorLocal(GameObject indicatorObj, MapComponent mapComp, Vector3 worldPos, Vector2Int size) { indicatorObj.transform.position = worldPos; var meshFilter = indicatorObj.GetComponent(); var mesh = meshFilter.mesh; var verticies = mesh.vertices; // 1 // / \ //0 2 // \ / // 3 Vector3 left = mapComp.MapToLocalPos(size.x, 0); Vector3 top = mapComp.MapToLocalPos(size.x, size.y); Vector3 right = mapComp.MapToLocalPos(0, size.y); Vector3 bottom = Vector3.zero; verticies[0] = left; verticies[1] = top; verticies[2] = right; verticies[3] = bottom; mesh.vertices = verticies; meshFilter.mesh = mesh; mesh.RecalculateBounds(); } public static void UpdateIndicator(GameObject indicatorObj, MapComponent mapComp, Vector3 worldPos, Vector2Int size) { RectIndices rectIndices = mapComp.GetUnitRectIndices(worldPos, size); UpdateIndicator(indicatorObj, mapComp, rectIndices); } public static void UpdateIndicator(GameObject indicatorObj, MapComponent mapComp, RectIndices rectIndices) { var meshFilter = indicatorObj.GetComponent(); var mesh = meshFilter.mesh; var verticies = mesh.vertices; // 1 // / \ //0 2 // \ / // 3 Vector3 left = mapComp.MapToWorldPos(rectIndices.endRow, rectIndices.startCol); Vector3 top = mapComp.MapToWorldPos(rectIndices.endRow, rectIndices.endCol); Vector3 right = mapComp.MapToWorldPos(rectIndices.startRow, rectIndices.endCol); Vector3 bottom = mapComp.MapToWorldPos(rectIndices.startRow, rectIndices.startCol); verticies[0] = left; verticies[1] = top; verticies[2] = right; verticies[3] = bottom; mesh.vertices = verticies; meshFilter.mesh = mesh; } } }