using System; using UnityEngine; public class TilesetWithSegments : MonoBehaviour { private const int MaxSegments = 128; private static readonly Vector4[] segments = new Vector4[MaxSegments * 2]; private static readonly int segmentsId = Shader.PropertyToID("_Segments"); private static readonly int countSegmentsId = Shader.PropertyToID("_CountSegments"); private static readonly int thicknessId = Shader.PropertyToID("_SegmentsThickness"); private static readonly int colorId = Shader.PropertyToID("_SegmentsColor"); public OnlineMaps map; public float thickness = 50; // world points public Color color = Color.red; private OnlineMapsTileSetControl control; private OnlineMapsMarker marker1; private OnlineMapsMarker marker2; private void Start() { if (!map) map = OnlineMaps.instance; control = map.control as OnlineMapsTileSetControl; if (!control) throw new Exception("You must use the Tileset control."); map.OnMapUpdated += OnMapUpdated; marker1 = map.markerManager.Create(-10, 0, "M1"); marker1.SetDraggable(); marker2 = map.markerManager.Create(10, 0, "M2"); marker2.SetDraggable(); } private void OnMapUpdated() { Vector3 p1 = control.GetWorldPosition(marker1.position); Vector3 p2 = control.GetWorldPosition(marker2.position); segments[0] = new Vector4(p1.x, p1.z); segments[1] = new Vector4(p2.x, p2.z); Shader.SetGlobalVectorArray(segmentsId, segments); Shader.SetGlobalInt(countSegmentsId, 1); Shader.SetGlobalFloat(thicknessId, thickness); Shader.SetGlobalColor(colorId, color); } }