[TASK] Initial commit with basic product setup
This commit is contained in:
78
Assets/Mapbox SDK/Mapbox/Examples/Scripts/FeatureUiMarker.cs
Normal file
78
Assets/Mapbox SDK/Mapbox/Examples/Scripts/FeatureUiMarker.cs
Normal file
@@ -0,0 +1,78 @@
|
||||
namespace Mapbox.Examples
|
||||
{
|
||||
using Mapbox.Unity.MeshGeneration.Data;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
using System.Linq;
|
||||
|
||||
public class FeatureUiMarker : MonoBehaviour
|
||||
{
|
||||
[SerializeField]
|
||||
private Transform _wrapperMarker;
|
||||
[SerializeField]
|
||||
private Transform _infoPanel;
|
||||
[SerializeField]
|
||||
private Text _info;
|
||||
|
||||
private Vector3[] _targetVerts;
|
||||
private VectorEntity _selectedFeature;
|
||||
|
||||
void Update()
|
||||
{
|
||||
Snap();
|
||||
}
|
||||
|
||||
internal void Clear()
|
||||
{
|
||||
gameObject.SetActive(false);
|
||||
}
|
||||
|
||||
internal void Show(VectorEntity selectedFeature)
|
||||
{
|
||||
if (selectedFeature == null)
|
||||
{
|
||||
Clear();
|
||||
return;
|
||||
}
|
||||
_selectedFeature = selectedFeature;
|
||||
transform.position = new Vector3(0, 0, 0);
|
||||
var mesh = selectedFeature.MeshFilter;
|
||||
|
||||
if (mesh != null)
|
||||
{
|
||||
_targetVerts = mesh.mesh.vertices;
|
||||
Snap();
|
||||
}
|
||||
gameObject.SetActive(true);
|
||||
}
|
||||
|
||||
private void Snap()
|
||||
{
|
||||
if (_targetVerts == null || _selectedFeature == null)
|
||||
return;
|
||||
|
||||
var left = float.MaxValue;
|
||||
var right = float.MinValue;
|
||||
var top = float.MinValue;
|
||||
var bottom = float.MaxValue;
|
||||
foreach (var vert in _targetVerts)
|
||||
{
|
||||
var pos = Camera.main.WorldToScreenPoint(_selectedFeature.Transform.position + (_selectedFeature.Transform.lossyScale.x * vert));
|
||||
if (pos.x < left)
|
||||
left = pos.x;
|
||||
else if (pos.x > right)
|
||||
right = pos.x;
|
||||
if (pos.y > top)
|
||||
top = pos.y;
|
||||
else if (pos.y < bottom)
|
||||
bottom = pos.y;
|
||||
}
|
||||
|
||||
_wrapperMarker.position = new Vector2(left - 10, top + 10);
|
||||
(_wrapperMarker as RectTransform).sizeDelta = new Vector2(right - left + 20, top - bottom + 20);
|
||||
|
||||
_infoPanel.position = new Vector2(right + 10, top + 10);
|
||||
_info.text = string.Join(" \r\n ", _selectedFeature.Feature.Properties.Select(x => x.Key + " - " + x.Value.ToString()).ToArray());
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user