using System; using System.Globalization; using EasyButtons; using Mapbox.Unity.Utilities; using Mapbox.Utils; using UnityEditor; using UnityEngine; using UnityEngine.Serialization; [CreateAssetMenu(fileName = "duck", menuName = "Duck/Collectable", order = 0)] public class CollectableDuckData: ScriptableObject { [SerializeField] private string _id = Guid.NewGuid().ToString(); [SerializeField] [Geocode] private string _latitudeLongitude; [SerializeField] private GameObject _modelPrefab; [FormerlySerializedAs("_sticker")] [SerializeField] private DuckStickerData stickerData; public Vector2d LatitudeLongitude { get { if (string.IsNullOrEmpty(_latitudeLongitude)) { return Vector2d.zero; } var splitIndex = _latitudeLongitude.IndexOf(",", StringComparison.Ordinal); if (splitIndex < 0) { throw new Exception("Invalid Duck coordinate: " + _latitudeLongitude); } var lat = double.Parse(_latitudeLongitude.Substring(0, splitIndex), NumberStyles.Float, CultureInfo.InvariantCulture); var lon = double.Parse(_latitudeLongitude.Substring(splitIndex + 1), NumberStyles.Float, CultureInfo.InvariantCulture); return new Vector2d(lat, lon); } } public string Id => _id; public GameObject ModelPrefab => _modelPrefab; public DuckStickerData StickerData => stickerData; #if UNITY_EDITOR [Button] public void RegenerateId() { _id = Guid.NewGuid().ToString(); EditorUtility.SetDirty(this); } #endif }