From d988230df6f7d5d973d7c9e061b5d574a332abb8 Mon Sep 17 00:00:00 2001 From: brnkhy Date: Mon, 17 Apr 2017 00:56:50 +0300 Subject: [PATCH 1/8] remove static fields from MapController move referece tile field to map visualization as map visualization relies on reference point remove world scale and made other scripts to get it from world root transform. scale shouldn't be relevant to map vis, it is unity vis --- .../Factories/DirectionsFactory.cs | 2 +- .../Unity/MeshGeneration/Factories/Factory.cs | 2 + .../Unity/MeshGeneration/MapController.cs | 48 ++++++++++--------- .../Unity/MeshGeneration/MapVisualization.cs | 23 ++++++++- .../Drive/Direction/DirectionsHelper.cs | 11 ++++- .../Assets/Mapbox/Examples/Drive/Drive.unity | 2 + .../SlippyVectorTerrain/SlippyDemo.unity | 1 + .../Examples/_resources/Scripts/Slippy.cs | 11 ++++- 8 files changed, 71 insertions(+), 29 deletions(-) diff --git a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Factories/DirectionsFactory.cs b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Factories/DirectionsFactory.cs index cfa365d9f..887b12253 100644 --- a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Factories/DirectionsFactory.cs +++ b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Factories/DirectionsFactory.cs @@ -39,7 +39,7 @@ void HandleDirectionsResponse(DirectionsResponse response) { foreach (var point in response.Routes[0].Geometry) { - meshData.Vertices.Add(Conversions.GeoToWorldPosition(point.x, point.y, MapController.ReferenceTileRect.Center, MapController.WorldScaleFactor).ToVector3xz()); + //meshData.Vertices.Add(Conversions.GeoToWorldPosition(point.x, point.y, MapVisualization.ReferenceTileRect.Center, MapVisualization.WorldScaleFactor).ToVector3xz()); } } diff --git a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Factories/Factory.cs b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Factories/Factory.cs index 91b2499a0..f47171cf3 100644 --- a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Factories/Factory.cs +++ b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Factories/Factory.cs @@ -6,10 +6,12 @@ namespace Mapbox.Unity.MeshGeneration.Factories public class Factory : ScriptableObject { + //private IWorldParameter MapVisualization; protected IFileSource FileSource; public virtual void Initialize(IFileSource fileSource) { + //MapVisualization = vis; FileSource = fileSource; } diff --git a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/MapController.cs b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/MapController.cs index 224ce95d7..dce857b6e 100644 --- a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/MapController.cs +++ b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/MapController.cs @@ -10,9 +10,6 @@ namespace Mapbox.Unity.MeshGeneration public class MapController : MonoBehaviour { - public static RectD ReferenceTileRect { get; set; } - public static float WorldScaleFactor { get; set; } - public MapVisualization MapVisualization; public float TileSize = 100; @@ -24,12 +21,13 @@ public class MapController : MonoBehaviour public int Zoom; public Vector4 Range; - private GameObject _root; + public GameObject Root; private Dictionary _tiles; public void Awake() { - MapVisualization.Initialize(MapboxAccess.Instance); + var parm = LatLng.Split(','); + MapVisualization.Initialize(MapboxAccess.Instance, double.Parse(parm[0]), double.Parse(parm[1]), Zoom); _tiles = new Dictionary(); } @@ -46,7 +44,7 @@ public void Update() RaycastHit rayhit; if (Physics.Raycast(ray, out rayhit)) { - _root.transform.position = new Vector3(0, -rayhit.point.y, 0); + Root.transform.position = new Vector3(0, -rayhit.point.y, 0); _snapYToZero = false; } } @@ -61,25 +59,20 @@ public void Execute() public void Execute(double lat, double lng, int zoom, Vector4 frame) { //frame goes left-top-right-bottom here - if (_root != null) + if (Root != null) { - foreach (Transform t in _root.transform) + foreach (Transform t in Root.transform) { Destroy(t.gameObject); } } - _root = new GameObject("worldRoot"); + Root = new GameObject("worldRoot"); + Root.transform.localScale = Vector3.one * (float)(TileSize / MapVisualization.ReferenceMercatorRect.Size.x); - var v2 = Conversions.GeoToWorldPosition(lat, lng, new Vector2d(0, 0)); - var tms = Conversions.MetersToTile(v2, zoom); - ReferenceTileRect = Conversions.TileBounds(tms, zoom); - WorldScaleFactor = (float)(TileSize / ReferenceTileRect.Size.x); - _root.transform.localScale = Vector3.one * WorldScaleFactor; - - for (int i = (int)(tms.x - frame.x); i <= (tms.x + frame.z); i++) + for (int i = (int)(MapVisualization.ReferenceTile.x - frame.x); i <= (MapVisualization.ReferenceTile.x + frame.z); i++) { - for (int j = (int)(tms.y - frame.y); j <= (tms.y + frame.w); j++) + for (int j = (int)(MapVisualization.ReferenceTile.y - frame.y); j <= (MapVisualization.ReferenceTile.y + frame.w); j++) { var tile = new GameObject("Tile - " + i + " | " + j).AddComponent(); _tiles.Add(new Vector2(i, j), tile); @@ -87,11 +80,13 @@ public void Execute(double lat, double lng, int zoom, Vector4 frame) tile.RelativeScale = Conversions.GetTileScaleInMeters(0, Zoom) / Conversions.GetTileScaleInMeters((float)lat, Zoom); tile.TileCoordinate = new Vector2(i, j); tile.Rect = Conversions.TileBounds(tile.TileCoordinate, zoom); - tile.transform.position = new Vector3((float)(tile.Rect.Center.x - ReferenceTileRect.Center.x), 0, (float)(tile.Rect.Center.y - ReferenceTileRect.Center.y)); - tile.transform.SetParent(_root.transform, false); + tile.transform.position = new Vector3((float)(tile.Rect.Center.x - MapVisualization.ReferenceMercatorRect.Center.x), 0, (float)(tile.Rect.Center.y - MapVisualization.ReferenceMercatorRect.Center.y)); + tile.transform.SetParent(Root.transform, false); MapVisualization.ShowTile(tile); } } + + OnWorldCreated(Root); } public void Execute(double lat, double lng, int zoom, Vector2 frame) @@ -110,17 +105,26 @@ public void Request(Vector2 pos, int zoom) { var tile = new GameObject("Tile - " + pos.x + " | " + pos.y).AddComponent(); _tiles.Add(pos, tile); - tile.transform.SetParent(_root.transform, false); + tile.transform.SetParent(Root.transform, false); tile.Zoom = zoom; tile.TileCoordinate = new Vector2(pos.x, pos.y); tile.Rect = Conversions.TileBounds(tile.TileCoordinate, zoom); tile.RelativeScale = Conversions.GetTileScaleInMeters(0, Zoom) / Conversions.GetTileScaleInMeters((float)Conversions.MetersToLatLon(tile.Rect.Center).x, Zoom); - tile.transform.localPosition = new Vector3((float)(tile.Rect.Center.x - ReferenceTileRect.Center.x), + tile.transform.localPosition = new Vector3((float)(tile.Rect.Center.x - MapVisualization.ReferenceMercatorRect.Center.x), 0, - (float)(tile.Rect.Center.y - ReferenceTileRect.Center.y)); + (float)(tile.Rect.Center.y - MapVisualization.ReferenceMercatorRect.Center.y)); MapVisualization.ShowTile(tile); } } + + + public delegate void MapControllerEventArgs(MapController sender, GameObject root); + public event MapControllerEventArgs WorldCreated; + protected virtual void OnWorldCreated(GameObject root) + { + var handler = WorldCreated; + if (handler != null) handler(this, root); + } } } \ No newline at end of file diff --git a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/MapVisualization.cs b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/MapVisualization.cs index 525289c93..3e0f68fa2 100644 --- a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/MapVisualization.cs +++ b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/MapVisualization.cs @@ -6,20 +6,31 @@ namespace Mapbox.Unity.MeshGeneration using Mapbox.Unity.MeshGeneration.Data; using Mapbox.Unity.MeshGeneration.Factories; using Mapbox.Platform; + using Utils; + using Utilities; [CreateAssetMenu(menuName = "Mapbox/MapVisualization")] public class MapVisualization : ScriptableObject { + public Vector2 ReferenceTile; + public RectD ReferenceMercatorRect; + public List Factories; - public void Initialize(IFileSource fs) + public void Initialize(IFileSource fs, double lat, double lng, int zoom) { foreach (Factory fac in Factories.Where(x => x != null)) { fac.Initialize(fs); } - } + + var v2 = Conversions.GeoToWorldPosition(lat, lng, new Vector2d(0, 0)); + ReferenceTile = Conversions.MetersToTile(v2, zoom); + ReferenceMercatorRect = Conversions.TileBounds(ReferenceTile, zoom); + OnInitialized(); + } + public void ShowTile(UnityTile tile) { foreach (var fac in Factories.Where(x => x != null)) @@ -27,5 +38,13 @@ public void ShowTile(UnityTile tile) fac.Register(tile); } } + + public delegate void MapVisualizationEventArgs(MapVisualization sender, object param); + public event MapVisualizationEventArgs Initialized; + protected virtual void OnInitialized() + { + var handler = Initialized; + if (handler != null) handler(this, null); + } } } diff --git a/sdkproject/Assets/Mapbox/Examples/Drive/Direction/DirectionsHelper.cs b/sdkproject/Assets/Mapbox/Examples/Drive/Direction/DirectionsHelper.cs index 317a58bfc..6a339993f 100644 --- a/sdkproject/Assets/Mapbox/Examples/Drive/Direction/DirectionsHelper.cs +++ b/sdkproject/Assets/Mapbox/Examples/Drive/Direction/DirectionsHelper.cs @@ -10,13 +10,20 @@ namespace Mapbox.Examples.Drive public class DirectionsHelper : MonoBehaviour { + private Transform _root; + public MapController MapController; + public MapVisualization MapVisualization; public DirectionsFactory Directions; public List Waypoints; void Start() { // draw directions path at start - Query(); + MapController.WorldCreated += (s, e) => + { + _root = e.transform; + Query(); + }; } public void Query() @@ -24,7 +31,7 @@ public void Query() var waypoints = new List(); foreach (var wp in Waypoints) { - waypoints.Add(wp.transform.GetGeoPosition(MapController.ReferenceTileRect.Center, MapController.WorldScaleFactor)); + waypoints.Add(wp.transform.GetGeoPosition(MapVisualization.ReferenceMercatorRect.Center, _root.localScale.x)); } Directions.Query(waypoints); diff --git a/sdkproject/Assets/Mapbox/Examples/Drive/Drive.unity b/sdkproject/Assets/Mapbox/Examples/Drive/Drive.unity index 6b07653cd..b20558f07 100644 --- a/sdkproject/Assets/Mapbox/Examples/Drive/Drive.unity +++ b/sdkproject/Assets/Mapbox/Examples/Drive/Drive.unity @@ -305,6 +305,8 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 3d8534d45be3bd44f84c41bc08827496, type: 3} m_Name: m_EditorClassIdentifier: + MapController: {fileID: 199863780} + MapVisualization: {fileID: 11400000, guid: 4f4961d6f3e45f84f99bda9cdc9dbb2b, type: 2} Directions: {fileID: 11400000, guid: d370b4703777f8c48b26eead134f2edb, type: 2} Waypoints: - {fileID: 1553875871} diff --git a/sdkproject/Assets/Mapbox/Examples/SlippyVectorTerrain/SlippyDemo.unity b/sdkproject/Assets/Mapbox/Examples/SlippyVectorTerrain/SlippyDemo.unity index c81143033..2f312e812 100644 --- a/sdkproject/Assets/Mapbox/Examples/SlippyVectorTerrain/SlippyDemo.unity +++ b/sdkproject/Assets/Mapbox/Examples/SlippyVectorTerrain/SlippyDemo.unity @@ -481,6 +481,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: ab322f3f81267624dbd388daa9e37945, type: 3} m_Name: m_EditorClassIdentifier: + MapVisualization: {fileID: 11400000, guid: 7f949b7bf234f3049adb4259192eda3d, type: 2} _range: 2 --- !u!1 &1515605195 GameObject: diff --git a/sdkproject/Assets/Mapbox/Examples/_resources/Scripts/Slippy.cs b/sdkproject/Assets/Mapbox/Examples/_resources/Scripts/Slippy.cs index 509e150f1..45c28d71d 100644 --- a/sdkproject/Assets/Mapbox/Examples/_resources/Scripts/Slippy.cs +++ b/sdkproject/Assets/Mapbox/Examples/_resources/Scripts/Slippy.cs @@ -7,6 +7,8 @@ namespace Mapbox.Examples public class Slippy : MonoBehaviour { + private Transform _root; + public MapVisualization MapVisualization; private MapController _mapController; private Camera _camera; [SerializeField] @@ -24,15 +26,20 @@ void Start() _mapController = GetComponent(); _camera = Camera.main; _yPlane = new Plane(Vector3.up, Vector3.zero); + _root = _mapController.Root.transform; + _mapController.WorldCreated += (s, e) => { _root = e.transform; }; } void Update() { + if (_root == null || MapVisualization == null) + return; + _ray = _camera.ViewportPointToRay(new Vector3(0.5f, 0.5f, 0)); if (_yPlane.Raycast(_ray, out _hitDistance)) { - _cameraTarget = _ray.GetPoint(_hitDistance) / MapController.WorldScaleFactor; - _currentTile = Conversions.MetersToTile(new Vector2d(MapController.ReferenceTileRect.Center.x + _cameraTarget.x, MapController.ReferenceTileRect.Center.y + _cameraTarget.z), _mapController.Zoom); + _cameraTarget = _ray.GetPoint(_hitDistance) / _root.localScale.x; + _currentTile = Conversions.MetersToTile(new Vector2d(MapVisualization.ReferenceMercatorRect.Center.x + _cameraTarget.x, MapVisualization.ReferenceMercatorRect.Center.y + _cameraTarget.z), _mapController.Zoom); if (_currentTile != _cachedTile) { for (int i = -_range; i <= _range; i++) From 4419fe6e10d7cde6d8854b430afeae9b1f5b72b7 Mon Sep 17 00:00:00 2001 From: brnkhy Date: Mon, 17 Apr 2017 01:15:19 +0300 Subject: [PATCH 2/8] move ref tile field back to map controller as it's not used in map vis but only in support modules like directions helper, slippy etc --- .../Unity/MeshGeneration/MapController.cs | 20 ++++++++++++------- .../Unity/MeshGeneration/MapVisualization.cs | 18 +---------------- .../Drive/Direction/DirectionsHelper.cs | 3 +-- .../Examples/_resources/Scripts/Slippy.cs | 5 ++--- 4 files changed, 17 insertions(+), 29 deletions(-) diff --git a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/MapController.cs b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/MapController.cs index dce857b6e..39ae8755d 100644 --- a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/MapController.cs +++ b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/MapController.cs @@ -10,6 +10,7 @@ namespace Mapbox.Unity.MeshGeneration public class MapController : MonoBehaviour { + public RectD ReferenceMercatorRect; public MapVisualization MapVisualization; public float TileSize = 100; @@ -23,11 +24,16 @@ public class MapController : MonoBehaviour public GameObject Root; private Dictionary _tiles; + private Vector2 _refTile; public void Awake() { var parm = LatLng.Split(','); - MapVisualization.Initialize(MapboxAccess.Instance, double.Parse(parm[0]), double.Parse(parm[1]), Zoom); + var v2 = Conversions.GeoToWorldPosition(double.Parse(parm[0]), double.Parse(parm[1]), new Vector2d(0, 0)); + _refTile = Conversions.MetersToTile(v2, Zoom); + ReferenceMercatorRect = Conversions.TileBounds(_refTile, Zoom); + + MapVisualization.Initialize(MapboxAccess.Instance); _tiles = new Dictionary(); } @@ -68,11 +74,11 @@ public void Execute(double lat, double lng, int zoom, Vector4 frame) } Root = new GameObject("worldRoot"); - Root.transform.localScale = Vector3.one * (float)(TileSize / MapVisualization.ReferenceMercatorRect.Size.x); + Root.transform.localScale = Vector3.one * (float)(TileSize / ReferenceMercatorRect.Size.x); - for (int i = (int)(MapVisualization.ReferenceTile.x - frame.x); i <= (MapVisualization.ReferenceTile.x + frame.z); i++) + for (int i = (int)(_refTile.x - frame.x); i <= (_refTile.x + frame.z); i++) { - for (int j = (int)(MapVisualization.ReferenceTile.y - frame.y); j <= (MapVisualization.ReferenceTile.y + frame.w); j++) + for (int j = (int)(_refTile.y - frame.y); j <= (_refTile.y + frame.w); j++) { var tile = new GameObject("Tile - " + i + " | " + j).AddComponent(); _tiles.Add(new Vector2(i, j), tile); @@ -80,7 +86,7 @@ public void Execute(double lat, double lng, int zoom, Vector4 frame) tile.RelativeScale = Conversions.GetTileScaleInMeters(0, Zoom) / Conversions.GetTileScaleInMeters((float)lat, Zoom); tile.TileCoordinate = new Vector2(i, j); tile.Rect = Conversions.TileBounds(tile.TileCoordinate, zoom); - tile.transform.position = new Vector3((float)(tile.Rect.Center.x - MapVisualization.ReferenceMercatorRect.Center.x), 0, (float)(tile.Rect.Center.y - MapVisualization.ReferenceMercatorRect.Center.y)); + tile.transform.position = new Vector3((float)(tile.Rect.Center.x - ReferenceMercatorRect.Center.x), 0, (float)(tile.Rect.Center.y - ReferenceMercatorRect.Center.y)); tile.transform.SetParent(Root.transform, false); MapVisualization.ShowTile(tile); } @@ -111,9 +117,9 @@ public void Request(Vector2 pos, int zoom) tile.Rect = Conversions.TileBounds(tile.TileCoordinate, zoom); tile.RelativeScale = Conversions.GetTileScaleInMeters(0, Zoom) / Conversions.GetTileScaleInMeters((float)Conversions.MetersToLatLon(tile.Rect.Center).x, Zoom); - tile.transform.localPosition = new Vector3((float)(tile.Rect.Center.x - MapVisualization.ReferenceMercatorRect.Center.x), + tile.transform.localPosition = new Vector3((float)(tile.Rect.Center.x - ReferenceMercatorRect.Center.x), 0, - (float)(tile.Rect.Center.y - MapVisualization.ReferenceMercatorRect.Center.y)); + (float)(tile.Rect.Center.y - ReferenceMercatorRect.Center.y)); MapVisualization.ShowTile(tile); } } diff --git a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/MapVisualization.cs b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/MapVisualization.cs index 3e0f68fa2..ddba6dac2 100644 --- a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/MapVisualization.cs +++ b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/MapVisualization.cs @@ -12,23 +12,15 @@ namespace Mapbox.Unity.MeshGeneration [CreateAssetMenu(menuName = "Mapbox/MapVisualization")] public class MapVisualization : ScriptableObject { - public Vector2 ReferenceTile; - public RectD ReferenceMercatorRect; public List Factories; - public void Initialize(IFileSource fs, double lat, double lng, int zoom) + public void Initialize(IFileSource fs) { foreach (Factory fac in Factories.Where(x => x != null)) { fac.Initialize(fs); } - - var v2 = Conversions.GeoToWorldPosition(lat, lng, new Vector2d(0, 0)); - ReferenceTile = Conversions.MetersToTile(v2, zoom); - ReferenceMercatorRect = Conversions.TileBounds(ReferenceTile, zoom); - - OnInitialized(); } public void ShowTile(UnityTile tile) @@ -38,13 +30,5 @@ public void ShowTile(UnityTile tile) fac.Register(tile); } } - - public delegate void MapVisualizationEventArgs(MapVisualization sender, object param); - public event MapVisualizationEventArgs Initialized; - protected virtual void OnInitialized() - { - var handler = Initialized; - if (handler != null) handler(this, null); - } } } diff --git a/sdkproject/Assets/Mapbox/Examples/Drive/Direction/DirectionsHelper.cs b/sdkproject/Assets/Mapbox/Examples/Drive/Direction/DirectionsHelper.cs index 6a339993f..8a18bc0a3 100644 --- a/sdkproject/Assets/Mapbox/Examples/Drive/Direction/DirectionsHelper.cs +++ b/sdkproject/Assets/Mapbox/Examples/Drive/Direction/DirectionsHelper.cs @@ -12,7 +12,6 @@ public class DirectionsHelper : MonoBehaviour { private Transform _root; public MapController MapController; - public MapVisualization MapVisualization; public DirectionsFactory Directions; public List Waypoints; @@ -31,7 +30,7 @@ public void Query() var waypoints = new List(); foreach (var wp in Waypoints) { - waypoints.Add(wp.transform.GetGeoPosition(MapVisualization.ReferenceMercatorRect.Center, _root.localScale.x)); + waypoints.Add(wp.transform.GetGeoPosition(MapController.ReferenceMercatorRect.Center, _root.localScale.x)); } Directions.Query(waypoints); diff --git a/sdkproject/Assets/Mapbox/Examples/_resources/Scripts/Slippy.cs b/sdkproject/Assets/Mapbox/Examples/_resources/Scripts/Slippy.cs index 45c28d71d..be3d58db2 100644 --- a/sdkproject/Assets/Mapbox/Examples/_resources/Scripts/Slippy.cs +++ b/sdkproject/Assets/Mapbox/Examples/_resources/Scripts/Slippy.cs @@ -8,7 +8,6 @@ namespace Mapbox.Examples public class Slippy : MonoBehaviour { private Transform _root; - public MapVisualization MapVisualization; private MapController _mapController; private Camera _camera; [SerializeField] @@ -32,14 +31,14 @@ void Start() void Update() { - if (_root == null || MapVisualization == null) + if (_root == null || _mapController == null) return; _ray = _camera.ViewportPointToRay(new Vector3(0.5f, 0.5f, 0)); if (_yPlane.Raycast(_ray, out _hitDistance)) { _cameraTarget = _ray.GetPoint(_hitDistance) / _root.localScale.x; - _currentTile = Conversions.MetersToTile(new Vector2d(MapVisualization.ReferenceMercatorRect.Center.x + _cameraTarget.x, MapVisualization.ReferenceMercatorRect.Center.y + _cameraTarget.z), _mapController.Zoom); + _currentTile = Conversions.MetersToTile(new Vector2d(_mapController.ReferenceMercatorRect.Center.x + _cameraTarget.x, _mapController.ReferenceMercatorRect.Center.y + _cameraTarget.z), _mapController.Zoom); if (_currentTile != _cachedTile) { for (int i = -_range; i <= _range; i++) From abaa4df1255dcbb5bd43ae702057d23c6a9f6ca4 Mon Sep 17 00:00:00 2001 From: brnkhy Date: Wed, 10 May 2017 20:51:30 +0300 Subject: [PATCH 3/8] fix reference tile and world scale references --- .../Unity/Location/TransformLocationProvider.cs | 7 +++++-- .../Core/Unity/MeshGeneration/MapController.cs | 16 ++++++++++------ .../Examples/Drive/Direction/DirectionsHelper.cs | 2 +- .../Scripts/PositionWithLocationProvider.cs | 11 +++++++---- .../Mapbox/Examples/_resources/Scripts/Slippy.cs | 2 +- 5 files changed, 24 insertions(+), 14 deletions(-) diff --git a/sdkproject/Assets/Mapbox/Core/Unity/Location/TransformLocationProvider.cs b/sdkproject/Assets/Mapbox/Core/Unity/Location/TransformLocationProvider.cs index 3a8b6e2d5..2250080e3 100644 --- a/sdkproject/Assets/Mapbox/Core/Unity/Location/TransformLocationProvider.cs +++ b/sdkproject/Assets/Mapbox/Core/Unity/Location/TransformLocationProvider.cs @@ -14,6 +14,9 @@ namespace Mapbox.Unity.Location /// public class TransformLocationProvider : MonoBehaviour, ILocationProvider { + [SerializeField] + private MapController _mapController; + /// /// The transform that will be queried for location and heading data. /// @@ -70,11 +73,11 @@ void Update() Vector2d GetLocation() { - if (MapController.ReferenceTileRect == null) + if (_mapController.ReferenceTileRect == null) { return LocationProviderFactory.Instance.DefaultLocationProvider.Location; } - return _targetTransform.GetGeoPosition(MapController.ReferenceTileRect.Center, MapController.WorldScaleFactor); + return _targetTransform.GetGeoPosition(_mapController.ReferenceTileRect.Center, _mapController.WorldScaleFactor); } } } diff --git a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/MapController.cs b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/MapController.cs index 5375a68d0..0fa62b4dd 100644 --- a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/MapController.cs +++ b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/MapController.cs @@ -13,7 +13,9 @@ namespace Mapbox.Unity.MeshGeneration /// public class MapController : MonoBehaviour { - public RectD ReferenceMercatorRect; + public RectD ReferenceTileRect; + public float WorldScaleFactor = 1; + public MapVisualization MapVisualization; public float TileSize = 100; @@ -29,6 +31,7 @@ public class MapController : MonoBehaviour private Dictionary _tiles; private Vector2 _refTile; + /// /// Resets the map controller and initializes the map visualization /// @@ -37,7 +40,7 @@ public void Awake() var parm = LatLng.Split(','); var v2 = Conversions.GeoToWorldPosition(double.Parse(parm[0]), double.Parse(parm[1]), new Vector2d(0, 0)); _refTile = Conversions.MetersToTile(v2, Zoom); - ReferenceMercatorRect = Conversions.TileBounds(_refTile, Zoom); + ReferenceTileRect = Conversions.TileBounds(_refTile, Zoom); MapVisualization.Initialize(MapboxAccess.Instance); _tiles = new Dictionary(); @@ -90,7 +93,8 @@ public void Execute(double lat, double lng, int zoom, Vector4 frame) } Root = new GameObject("worldRoot"); - Root.transform.localScale = Vector3.one * (float)(TileSize / ReferenceMercatorRect.Size.x); + WorldScaleFactor = (float)(TileSize / ReferenceTileRect.Size.x); + Root.transform.localScale = Vector3.one * WorldScaleFactor; for (int i = (int)(_refTile.x - frame.x); i <= (_refTile.x + frame.z); i++) { @@ -102,7 +106,7 @@ public void Execute(double lat, double lng, int zoom, Vector4 frame) tile.RelativeScale = Conversions.GetTileScaleInMeters(0, Zoom) / Conversions.GetTileScaleInMeters((float)lat, Zoom); tile.TileCoordinate = new Vector2(i, j); tile.Rect = Conversions.TileBounds(tile.TileCoordinate, zoom); - tile.transform.position = new Vector3((float)(tile.Rect.Center.x - ReferenceMercatorRect.Center.x), 0, (float)(tile.Rect.Center.y - ReferenceMercatorRect.Center.y)); + tile.transform.position = new Vector3((float)(tile.Rect.Center.x - ReferenceTileRect.Center.x), 0, (float)(tile.Rect.Center.y - ReferenceTileRect.Center.y)); tile.transform.SetParent(Root.transform, false); MapVisualization.ShowTile(tile); } @@ -138,9 +142,9 @@ public void Request(Vector2 pos, int zoom) tile.Rect = Conversions.TileBounds(tile.TileCoordinate, zoom); tile.RelativeScale = Conversions.GetTileScaleInMeters(0, Zoom) / Conversions.GetTileScaleInMeters((float)Conversions.MetersToLatLon(tile.Rect.Center).x, Zoom); - tile.transform.localPosition = new Vector3((float)(tile.Rect.Center.x - ReferenceMercatorRect.Center.x), + tile.transform.localPosition = new Vector3((float)(tile.Rect.Center.x - ReferenceTileRect.Center.x), 0, - (float)(tile.Rect.Center.y - ReferenceMercatorRect.Center.y)); + (float)(tile.Rect.Center.y - ReferenceTileRect.Center.y)); MapVisualization.ShowTile(tile); } } diff --git a/sdkproject/Assets/Mapbox/Examples/Drive/Direction/DirectionsHelper.cs b/sdkproject/Assets/Mapbox/Examples/Drive/Direction/DirectionsHelper.cs index 8a18bc0a3..19edaf738 100644 --- a/sdkproject/Assets/Mapbox/Examples/Drive/Direction/DirectionsHelper.cs +++ b/sdkproject/Assets/Mapbox/Examples/Drive/Direction/DirectionsHelper.cs @@ -30,7 +30,7 @@ public void Query() var waypoints = new List(); foreach (var wp in Waypoints) { - waypoints.Add(wp.transform.GetGeoPosition(MapController.ReferenceMercatorRect.Center, _root.localScale.x)); + waypoints.Add(wp.transform.GetGeoPosition(MapController.ReferenceTileRect.Center, _root.localScale.x)); } Directions.Query(waypoints); diff --git a/sdkproject/Assets/Mapbox/Examples/LocationProvider/Scripts/PositionWithLocationProvider.cs b/sdkproject/Assets/Mapbox/Examples/LocationProvider/Scripts/PositionWithLocationProvider.cs index 84d5aaeb0..9579c47e2 100644 --- a/sdkproject/Assets/Mapbox/Examples/LocationProvider/Scripts/PositionWithLocationProvider.cs +++ b/sdkproject/Assets/Mapbox/Examples/LocationProvider/Scripts/PositionWithLocationProvider.cs @@ -7,6 +7,9 @@ namespace Mapbox.Examples.LocationProvider public class PositionWithLocationProvider : MonoBehaviour { + [SerializeField] + private MapController _mapController; + /// /// The rate at which the transform's position tries catch up to the provided location. /// @@ -66,15 +69,15 @@ void OnDestroy() void LocationProvider_OnLocationUpdated(object sender, LocationUpdatedEventArgs e) { - if (MapController.ReferenceTileRect == null) + if (_mapController.ReferenceTileRect == null) { return; } _targetPosition = Conversions.GeoToWorldPosition(e.Location, - MapController.ReferenceTileRect.Center, - MapController.WorldScaleFactor).ToVector3xz(); - } + _mapController.ReferenceTileRect.Center, + _mapController.WorldScaleFactor).ToVector3xz(); + } void Update() { diff --git a/sdkproject/Assets/Mapbox/Examples/_resources/Scripts/Slippy.cs b/sdkproject/Assets/Mapbox/Examples/_resources/Scripts/Slippy.cs index be3d58db2..7e2f05505 100644 --- a/sdkproject/Assets/Mapbox/Examples/_resources/Scripts/Slippy.cs +++ b/sdkproject/Assets/Mapbox/Examples/_resources/Scripts/Slippy.cs @@ -38,7 +38,7 @@ void Update() if (_yPlane.Raycast(_ray, out _hitDistance)) { _cameraTarget = _ray.GetPoint(_hitDistance) / _root.localScale.x; - _currentTile = Conversions.MetersToTile(new Vector2d(_mapController.ReferenceMercatorRect.Center.x + _cameraTarget.x, _mapController.ReferenceMercatorRect.Center.y + _cameraTarget.z), _mapController.Zoom); + _currentTile = Conversions.MetersToTile(new Vector2d(_mapController.ReferenceTileRect.Center.x + _cameraTarget.x, _mapController.ReferenceTileRect.Center.y + _cameraTarget.z), _mapController.Zoom); if (_currentTile != _cachedTile) { for (int i = -_range; i <= _range; i++) From af9ef544f128183ffaa1b1a8a824b2a5b0bcc579 Mon Sep 17 00:00:00 2001 From: David Rhodes Date: Wed, 10 May 2017 12:43:31 -0600 Subject: [PATCH 4/8] update submodule to master --- dependencies/mapbox-sdk-cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dependencies/mapbox-sdk-cs b/dependencies/mapbox-sdk-cs index 558cb770a..a41e0a5d1 160000 --- a/dependencies/mapbox-sdk-cs +++ b/dependencies/mapbox-sdk-cs @@ -1 +1 @@ -Subproject commit 558cb770ade50ff737bf4d6001b88af6e68578ba +Subproject commit a41e0a5d16030d022d1d407c535854ac47f84747 From f1d2e99b173bb3a558a7db94a7ed86fee49b1d08 Mon Sep 17 00:00:00 2001 From: David Rhodes Date: Wed, 10 May 2017 13:09:28 -0600 Subject: [PATCH 5/8] map generation happens on start rather than awake (to give developers chance to override lat/lon on enable). Private setters for ref rect and world scale --- .../Core/Unity/MeshGeneration/MapController.cs | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/MapController.cs b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/MapController.cs index 0fa62b4dd..7e5ac25d8 100644 --- a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/MapController.cs +++ b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/MapController.cs @@ -13,8 +13,8 @@ namespace Mapbox.Unity.MeshGeneration /// public class MapController : MonoBehaviour { - public RectD ReferenceTileRect; - public float WorldScaleFactor = 1; + public RectD ReferenceTileRect { get; private set; } + public float WorldScaleFactor { get; private set; } public MapVisualization MapVisualization; public float TileSize = 100; @@ -31,11 +31,10 @@ public class MapController : MonoBehaviour private Dictionary _tiles; private Vector2 _refTile; - /// /// Resets the map controller and initializes the map visualization /// - public void Awake() + public void Start() { var parm = LatLng.Split(','); var v2 = Conversions.GeoToWorldPosition(double.Parse(parm[0]), double.Parse(parm[1]), new Vector2d(0, 0)); @@ -44,11 +43,7 @@ public void Awake() MapVisualization.Initialize(MapboxAccess.Instance); _tiles = new Dictionary(); - } - - public void Start() - { - Execute(); + Execute(); } /// From 73fbc071d5c1624016b4b812c8564b4548c78ae1 Mon Sep 17 00:00:00 2001 From: David Rhodes Date: Wed, 10 May 2017 13:09:39 -0600 Subject: [PATCH 6/8] serialized missing references to map controller --- .../Mapbox/Examples/LocationProvider/LocationProvider.unity | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/sdkproject/Assets/Mapbox/Examples/LocationProvider/LocationProvider.unity b/sdkproject/Assets/Mapbox/Examples/LocationProvider/LocationProvider.unity index 67eb06d75..4137109a1 100644 --- a/sdkproject/Assets/Mapbox/Examples/LocationProvider/LocationProvider.unity +++ b/sdkproject/Assets/Mapbox/Examples/LocationProvider/LocationProvider.unity @@ -121,9 +121,10 @@ MonoBehaviour: MapVisualization: {fileID: 11400000, guid: 38f8ab26621bb424d86f009e3dce979f, type: 2} TileSize: 100 _snapYToZero: 0 - LatLng: 37.7648, -122.463 + LatLng: injected from build map component Zoom: 15 Range: {x: 1, y: 1, z: 1, w: 1} + Root: {fileID: 0} --- !u!4 &114606472 Transform: m_ObjectHideFlags: 0 @@ -472,6 +473,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: a034c4eeb3293418aab101c1895844a4, type: 3} m_Name: m_EditorClassIdentifier: + _mapController: {fileID: 114606471} _targetTransform: {fileID: 1649127106} --- !u!4 &1649127106 Transform: @@ -528,6 +530,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 4bb39d89f6f3742418be7c93b4259637, type: 3} m_Name: m_EditorClassIdentifier: + _mapController: {fileID: 114606471} _positionFollowFactor: 0.5 _useTransformLocationProvider: 0 --- !u!4 &1934621224 From f24cb232a413b5d6e0a4b2fefe15a1deda0ccf03 Mon Sep 17 00:00:00 2001 From: brnkhy Date: Wed, 10 May 2017 23:38:50 +0300 Subject: [PATCH 7/8] introduce world parameters class, create it in map controller and pass it down to factories --- .../Location/TransformLocationProvider.cs | 4 +- .../Factories/DirectionsFactory.cs | 15 +- .../Unity/MeshGeneration/Factories/Factory.cs | 4 +- .../Factories/MapImageFactory.cs | 4 +- .../MeshGeneration/Factories/MeshFactory.cs | 210 ++++++++++-------- .../Factories/TerrainFactory.cs | 4 +- .../Unity/MeshGeneration/MapController.cs | 45 ++-- .../Unity/MeshGeneration/MapVisualization.cs | 7 +- .../Drive/Direction/DirectionsHelper.cs | 11 +- .../Scripts/PositionWithLocationProvider.cs | 6 +- .../Examples/_resources/Scripts/Slippy.cs | 2 +- 11 files changed, 169 insertions(+), 143 deletions(-) diff --git a/sdkproject/Assets/Mapbox/Core/Unity/Location/TransformLocationProvider.cs b/sdkproject/Assets/Mapbox/Core/Unity/Location/TransformLocationProvider.cs index 2250080e3..58d889f8d 100644 --- a/sdkproject/Assets/Mapbox/Core/Unity/Location/TransformLocationProvider.cs +++ b/sdkproject/Assets/Mapbox/Core/Unity/Location/TransformLocationProvider.cs @@ -73,11 +73,11 @@ void Update() Vector2d GetLocation() { - if (_mapController.ReferenceTileRect == null) + if (_mapController.WorldParameters.ReferenceTileRect == null) { return LocationProviderFactory.Instance.DefaultLocationProvider.Location; } - return _targetTransform.GetGeoPosition(_mapController.ReferenceTileRect.Center, _mapController.WorldScaleFactor); + return _targetTransform.GetGeoPosition(_mapController.WorldParameters.ReferenceTileRect.Center, _mapController.WorldParameters.WorldScaleFactor); } } } diff --git a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Factories/DirectionsFactory.cs b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Factories/DirectionsFactory.cs index 887b12253..f99f2fbb5 100644 --- a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Factories/DirectionsFactory.cs +++ b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Factories/DirectionsFactory.cs @@ -18,15 +18,20 @@ public class DirectionsFactory : Factory private Directions _directions; public List MeshModifiers; - public override void Initialize(IFileSource fileSource) + public override void Initialize(IFileSource fileSource, WorldParameters parameters) { - base.Initialize(fileSource); + base.Initialize(fileSource, parameters); _directions = MapboxAccess.Instance.Directions; } - public void Query(List waypoints) + public void Query(List waypoints) { - var _directionResource = new DirectionResource(waypoints.ToArray(), RoutingProfile.Driving); + var wp = new Vector2d[waypoints.Count]; + for (int i = 0; i < waypoints.Count; i++) + { + wp[i] = waypoints[i].GetGeoPosition(Parameters.ReferenceTileRect.Center, Parameters.WorldScaleFactor); + } + var _directionResource = new DirectionResource(wp, RoutingProfile.Driving); _directionResource.Steps = true; _directions.Query(_directionResource, HandleDirectionsResponse); } @@ -39,7 +44,7 @@ void HandleDirectionsResponse(DirectionsResponse response) { foreach (var point in response.Routes[0].Geometry) { - //meshData.Vertices.Add(Conversions.GeoToWorldPosition(point.x, point.y, MapVisualization.ReferenceTileRect.Center, MapVisualization.WorldScaleFactor).ToVector3xz()); + meshData.Vertices.Add(Conversions.GeoToWorldPosition(point.x, point.y, Parameters.ReferenceTileRect.Center, Parameters.WorldScaleFactor).ToVector3xz()); } } diff --git a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Factories/Factory.cs b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Factories/Factory.cs index d82ef42f2..ee69bb76c 100644 --- a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Factories/Factory.cs +++ b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Factories/Factory.cs @@ -11,11 +11,13 @@ public class Factory : ScriptableObject { //private IWorldParameter MapVisualization; protected IFileSource FileSource; + protected WorldParameters Parameters; - public virtual void Initialize(IFileSource fileSource) + public virtual void Initialize(IFileSource fileSource, WorldParameters parameters) { //MapVisualization = vis; FileSource = fileSource; + Parameters = parameters; } public virtual void Register(UnityTile tile) diff --git a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Factories/MapImageFactory.cs b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Factories/MapImageFactory.cs index accabd0f3..821077a20 100644 --- a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Factories/MapImageFactory.cs +++ b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Factories/MapImageFactory.cs @@ -41,9 +41,9 @@ public class MapImageFactory : Factory private Dictionary _tiles; - public override void Initialize(IFileSource fs) + public override void Initialize(IFileSource fs, WorldParameters parameters) { - base.Initialize(fs); + base.Initialize(fs, parameters); _tiles = new Dictionary(); } diff --git a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Factories/MeshFactory.cs b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Factories/MeshFactory.cs index 9665bb367..cd7611a38 100644 --- a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Factories/MeshFactory.cs +++ b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Factories/MeshFactory.cs @@ -1,108 +1,130 @@ -namespace Mapbox.Unity.MeshGeneration.Factories { - using System.Collections.Generic; - using UnityEngine; - using Mapbox.Unity.MeshGeneration.Enums; - using Mapbox.Unity.MeshGeneration.Data; - using Mapbox.Unity.MeshGeneration.Interfaces; - using Mapbox.Platform; +namespace Mapbox.Unity.MeshGeneration.Factories +{ + using System.Collections.Generic; + using UnityEngine; + using Mapbox.Unity.MeshGeneration.Enums; + using Mapbox.Unity.MeshGeneration.Data; + using Mapbox.Unity.MeshGeneration.Interfaces; + using Mapbox.Platform; - /// - /// Uses vector tile api to visualize vector data. - /// Fetches the vector data for given tile and passes layer data to layer visualizers. - /// - [CreateAssetMenu(menuName = "Mapbox/Factories/Mesh Factory")] - public class MeshFactory : Factory { - [SerializeField] - private string _mapId = ""; - public List Visualizers; + /// + /// Uses vector tile api to visualize vector data. + /// Fetches the vector data for given tile and passes layer data to layer visualizers. + /// + [CreateAssetMenu(menuName = "Mapbox/Factories/Mesh Factory")] + public class MeshFactory : Factory + { + [SerializeField] + private string _mapId = ""; + public List Visualizers; - private Dictionary _tiles; - private Dictionary> _layerBuilder; + private Dictionary _tiles; + private Dictionary> _layerBuilder; - public void OnEnable() { - if (Visualizers == null) - Visualizers = new List(); - } + public void OnEnable() + { + if (Visualizers == null) + Visualizers = new List(); + } - /// - /// Sets up the Mesh Factory - /// - /// - public override void Initialize(IFileSource fs) { - base.Initialize(fs); - _tiles = new Dictionary(); - _layerBuilder = new Dictionary>(); - foreach (LayerVisualizerBase factory in Visualizers) { - if (_layerBuilder.ContainsKey(factory.Key)) { - _layerBuilder[factory.Key].Add(factory); - } else { - _layerBuilder.Add(factory.Key, new List() { factory }); - } - } - } + /// + /// Sets up the Mesh Factory + /// + /// + public override void Initialize(IFileSource fs, WorldParameters parameters) + { + base.Initialize(fs, parameters); + _tiles = new Dictionary(); + _layerBuilder = new Dictionary>(); + foreach (LayerVisualizerBase factory in Visualizers) + { + if (_layerBuilder.ContainsKey(factory.Key)) + { + _layerBuilder[factory.Key].Add(factory); + } + else + { + _layerBuilder.Add(factory.Key, new List() { factory }); + } + } + } - public override void Register(UnityTile tile) { - base.Register(tile); - _tiles.Add(tile.TileCoordinate, tile); - Run(tile); - } + public override void Register(UnityTile tile) + { + base.Register(tile); + _tiles.Add(tile.TileCoordinate, tile); + Run(tile); + } - /// - /// Mesh Factory waits for both Height and Image data to be processed if they are requested - /// - /// - private void Run(UnityTile tile) { - if (tile.HeightDataState == TilePropertyState.Loading || - tile.ImageDataState == TilePropertyState.Loading) { - tile.HeightDataChanged += HeightDataChangedHandler; - tile.ImageDataChanged += ImageDataChangedHandler; - } else { - CreateMeshes(tile, null); - } - } + /// + /// Mesh Factory waits for both Height and Image data to be processed if they are requested + /// + /// + private void Run(UnityTile tile) + { + if (tile.HeightDataState == TilePropertyState.Loading || + tile.ImageDataState == TilePropertyState.Loading) + { + tile.HeightDataChanged += HeightDataChangedHandler; + tile.ImageDataChanged += ImageDataChangedHandler; + } + else + { + CreateMeshes(tile, null); + } + } - private void HeightDataChangedHandler(UnityTile t, object e) { - if (t.ImageDataState != TilePropertyState.Loading) - CreateMeshes(t, e); - } + private void HeightDataChangedHandler(UnityTile t, object e) + { + if (t.ImageDataState != TilePropertyState.Loading) + CreateMeshes(t, e); + } - private void ImageDataChangedHandler(UnityTile t, object e) { - if (t.HeightDataState != TilePropertyState.Loading) - CreateMeshes(t, e); - } + private void ImageDataChangedHandler(UnityTile t, object e) + { + if (t.HeightDataState != TilePropertyState.Loading) + CreateMeshes(t, e); + } - /// - /// Fetches the vector data and passes each layer to relevant layer visualizers - /// - /// - /// - private void CreateMeshes(UnityTile tile, object e) { - tile.HeightDataChanged -= HeightDataChangedHandler; - tile.ImageDataChanged -= ImageDataChangedHandler; + /// + /// Fetches the vector data and passes each layer to relevant layer visualizers + /// + /// + /// + private void CreateMeshes(UnityTile tile, object e) + { + tile.HeightDataChanged -= HeightDataChangedHandler; + tile.ImageDataChanged -= ImageDataChangedHandler; - var parameters = new Mapbox.Map.Tile.Parameters { - Fs = this.FileSource, - Id = new Mapbox.Map.CanonicalTileId(tile.Zoom, (int)tile.TileCoordinate.x, (int)tile.TileCoordinate.y), - MapId = _mapId - }; + var parameters = new Mapbox.Map.Tile.Parameters + { + Fs = this.FileSource, + Id = new Mapbox.Map.CanonicalTileId(tile.Zoom, (int)tile.TileCoordinate.x, (int)tile.TileCoordinate.y), + MapId = _mapId + }; - var vectorTile = new Mapbox.Map.VectorTile(); - vectorTile.Initialize(parameters, () => { - if (vectorTile.HasError) { - Debug.Log(vectorTile.ExceptionsAsString); - return; - } + var vectorTile = new Mapbox.Map.VectorTile(); + vectorTile.Initialize(parameters, () => + { + if (vectorTile.HasError) + { + Debug.Log(vectorTile.ExceptionsAsString); + return; + } - foreach (var layerName in vectorTile.Data.LayerNames()) { - if (_layerBuilder.ContainsKey(layerName)) { - foreach (var builder in _layerBuilder[layerName]) { - if (builder.Active) - builder.Create(vectorTile.Data.GetLayer(layerName), tile); - } - } - } - }); - } - } + foreach (var layerName in vectorTile.Data.LayerNames()) + { + if (_layerBuilder.ContainsKey(layerName)) + { + foreach (var builder in _layerBuilder[layerName]) + { + if (builder.Active) + builder.Create(vectorTile.Data.GetLayer(layerName), tile); + } + } + } + }); + } + } } diff --git a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Factories/TerrainFactory.cs b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Factories/TerrainFactory.cs index bc286cc2f..4bf018d6b 100644 --- a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Factories/TerrainFactory.cs +++ b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Factories/TerrainFactory.cs @@ -53,9 +53,9 @@ public class TerrainFactory : Factory private Dictionary _tiles; private Vector2 _stitchTarget; - public override void Initialize(IFileSource fs) + public override void Initialize(IFileSource fs, WorldParameters parameters) { - base.Initialize(fs); + base.Initialize(fs, parameters); _tiles = new Dictionary(); } diff --git a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/MapController.cs b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/MapController.cs index 0fa62b4dd..8dce960ae 100644 --- a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/MapController.cs +++ b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/MapController.cs @@ -8,14 +8,18 @@ namespace Mapbox.Unity.MeshGeneration using Mapbox.Unity.Utilities; using Utils; + public class WorldParameters + { + public RectD ReferenceTileRect; + public float WorldScaleFactor = 1; + } + /// /// MapController is just an helper class imitating the game/app logic controlling the map. It creates and passes the tiles requests to MapVisualization. /// public class MapController : MonoBehaviour { - public RectD ReferenceTileRect; - public float WorldScaleFactor = 1; - + public WorldParameters WorldParameters; public MapVisualization MapVisualization; public float TileSize = 100; @@ -40,9 +44,21 @@ public void Awake() var parm = LatLng.Split(','); var v2 = Conversions.GeoToWorldPosition(double.Parse(parm[0]), double.Parse(parm[1]), new Vector2d(0, 0)); _refTile = Conversions.MetersToTile(v2, Zoom); - ReferenceTileRect = Conversions.TileBounds(_refTile, Zoom); + WorldParameters = new WorldParameters(); + WorldParameters.ReferenceTileRect = Conversions.TileBounds(_refTile, Zoom); + if (Root != null) + { + foreach (Transform t in Root.transform) + { + Destroy(t.gameObject); + } + } + + WorldParameters.WorldScaleFactor = (float)(TileSize / WorldParameters.ReferenceTileRect.Size.x); + Root = new GameObject("worldRoot"); + Root.transform.localScale = Vector3.one * WorldParameters.WorldScaleFactor; - MapVisualization.Initialize(MapboxAccess.Instance); + MapVisualization.Initialize(MapboxAccess.Instance, WorldParameters); _tiles = new Dictionary(); } @@ -83,19 +99,6 @@ public void Execute() /// Tiles to load around central tile in each direction; west-north-east-south public void Execute(double lat, double lng, int zoom, Vector4 frame) { - //frame goes left-top-right-bottom here - if (Root != null) - { - foreach (Transform t in Root.transform) - { - Destroy(t.gameObject); - } - } - - Root = new GameObject("worldRoot"); - WorldScaleFactor = (float)(TileSize / ReferenceTileRect.Size.x); - Root.transform.localScale = Vector3.one * WorldScaleFactor; - for (int i = (int)(_refTile.x - frame.x); i <= (_refTile.x + frame.z); i++) { for (int j = (int)(_refTile.y - frame.y); j <= (_refTile.y + frame.w); j++) @@ -106,7 +109,7 @@ public void Execute(double lat, double lng, int zoom, Vector4 frame) tile.RelativeScale = Conversions.GetTileScaleInMeters(0, Zoom) / Conversions.GetTileScaleInMeters((float)lat, Zoom); tile.TileCoordinate = new Vector2(i, j); tile.Rect = Conversions.TileBounds(tile.TileCoordinate, zoom); - tile.transform.position = new Vector3((float)(tile.Rect.Center.x - ReferenceTileRect.Center.x), 0, (float)(tile.Rect.Center.y - ReferenceTileRect.Center.y)); + tile.transform.position = new Vector3((float)(tile.Rect.Center.x - WorldParameters.ReferenceTileRect.Center.x), 0, (float)(tile.Rect.Center.y - WorldParameters.ReferenceTileRect.Center.y)); tile.transform.SetParent(Root.transform, false); MapVisualization.ShowTile(tile); } @@ -142,9 +145,9 @@ public void Request(Vector2 pos, int zoom) tile.Rect = Conversions.TileBounds(tile.TileCoordinate, zoom); tile.RelativeScale = Conversions.GetTileScaleInMeters(0, Zoom) / Conversions.GetTileScaleInMeters((float)Conversions.MetersToLatLon(tile.Rect.Center).x, Zoom); - tile.transform.localPosition = new Vector3((float)(tile.Rect.Center.x - ReferenceTileRect.Center.x), + tile.transform.localPosition = new Vector3((float)(tile.Rect.Center.x - WorldParameters.ReferenceTileRect.Center.x), 0, - (float)(tile.Rect.Center.y - ReferenceTileRect.Center.y)); + (float)(tile.Rect.Center.y - WorldParameters.ReferenceTileRect.Center.y)); MapVisualization.ShowTile(tile); } } diff --git a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/MapVisualization.cs b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/MapVisualization.cs index 239f5a88f..af3ba4150 100644 --- a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/MapVisualization.cs +++ b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/MapVisualization.cs @@ -12,18 +12,19 @@ namespace Mapbox.Unity.MeshGeneration [CreateAssetMenu(menuName = "Mapbox/MapVisualization")] public class MapVisualization : ScriptableObject { - + public WorldParameters WorldParameters; public List Factories; /// /// Initializes the factories by passing the file source down, which's necessary for data (web/file) calls /// /// - public void Initialize(IFileSource fs) + public void Initialize(IFileSource fs, WorldParameters parameters) { + WorldParameters = parameters; foreach (Factory fac in Factories.Where(x => x != null)) { - fac.Initialize(fs); + fac.Initialize(fs, parameters); } } diff --git a/sdkproject/Assets/Mapbox/Examples/Drive/Direction/DirectionsHelper.cs b/sdkproject/Assets/Mapbox/Examples/Drive/Direction/DirectionsHelper.cs index 19edaf738..f426cea53 100644 --- a/sdkproject/Assets/Mapbox/Examples/Drive/Direction/DirectionsHelper.cs +++ b/sdkproject/Assets/Mapbox/Examples/Drive/Direction/DirectionsHelper.cs @@ -15,25 +15,18 @@ public class DirectionsHelper : MonoBehaviour public DirectionsFactory Directions; public List Waypoints; - void Start() + void Awake() { // draw directions path at start MapController.WorldCreated += (s, e) => { - _root = e.transform; Query(); }; } public void Query() { - var waypoints = new List(); - foreach (var wp in Waypoints) - { - waypoints.Add(wp.transform.GetGeoPosition(MapController.ReferenceTileRect.Center, _root.localScale.x)); - } - - Directions.Query(waypoints); + Directions.Query(Waypoints); } } } \ No newline at end of file diff --git a/sdkproject/Assets/Mapbox/Examples/LocationProvider/Scripts/PositionWithLocationProvider.cs b/sdkproject/Assets/Mapbox/Examples/LocationProvider/Scripts/PositionWithLocationProvider.cs index 9579c47e2..9612cb338 100644 --- a/sdkproject/Assets/Mapbox/Examples/LocationProvider/Scripts/PositionWithLocationProvider.cs +++ b/sdkproject/Assets/Mapbox/Examples/LocationProvider/Scripts/PositionWithLocationProvider.cs @@ -69,14 +69,14 @@ void OnDestroy() void LocationProvider_OnLocationUpdated(object sender, LocationUpdatedEventArgs e) { - if (_mapController.ReferenceTileRect == null) + if (_mapController.WorldParameters == null) { return; } _targetPosition = Conversions.GeoToWorldPosition(e.Location, - _mapController.ReferenceTileRect.Center, - _mapController.WorldScaleFactor).ToVector3xz(); + _mapController.WorldParameters.ReferenceTileRect.Center, + _mapController.WorldParameters.WorldScaleFactor).ToVector3xz(); } void Update() diff --git a/sdkproject/Assets/Mapbox/Examples/_resources/Scripts/Slippy.cs b/sdkproject/Assets/Mapbox/Examples/_resources/Scripts/Slippy.cs index 7e2f05505..6342f288d 100644 --- a/sdkproject/Assets/Mapbox/Examples/_resources/Scripts/Slippy.cs +++ b/sdkproject/Assets/Mapbox/Examples/_resources/Scripts/Slippy.cs @@ -38,7 +38,7 @@ void Update() if (_yPlane.Raycast(_ray, out _hitDistance)) { _cameraTarget = _ray.GetPoint(_hitDistance) / _root.localScale.x; - _currentTile = Conversions.MetersToTile(new Vector2d(_mapController.ReferenceTileRect.Center.x + _cameraTarget.x, _mapController.ReferenceTileRect.Center.y + _cameraTarget.z), _mapController.Zoom); + _currentTile = Conversions.MetersToTile(new Vector2d(_mapController.WorldParameters.ReferenceTileRect.Center.x + _cameraTarget.x, _mapController.WorldParameters.ReferenceTileRect.Center.y + _cameraTarget.z), _mapController.Zoom); if (_currentTile != _cachedTile) { for (int i = -_range; i <= _range; i++) From d56d79dc16dec23d978e790a0268f241ad9d5826 Mon Sep 17 00:00:00 2001 From: David Rhodes Date: Thu, 11 May 2017 16:00:19 -0600 Subject: [PATCH 8/8] Fixing location provider scene references. Moving execution to start to allow developers to set lat/lon before map creation. --- .../Mapbox/Core/Unity/MeshGeneration/MapController.cs | 7 ++----- .../Examples/LocationProvider/LocationProvider.unity | 3 +++ 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/MapController.cs b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/MapController.cs index 8dce960ae..32c87552b 100644 --- a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/MapController.cs +++ b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/MapController.cs @@ -39,7 +39,7 @@ public class MapController : MonoBehaviour /// /// Resets the map controller and initializes the map visualization /// - public void Awake() + public void Start() { var parm = LatLng.Split(','); var v2 = Conversions.GeoToWorldPosition(double.Parse(parm[0]), double.Parse(parm[1]), new Vector2d(0, 0)); @@ -60,11 +60,8 @@ public void Awake() MapVisualization.Initialize(MapboxAccess.Instance, WorldParameters); _tiles = new Dictionary(); - } - public void Start() - { - Execute(); + Execute(); } /// diff --git a/sdkproject/Assets/Mapbox/Examples/LocationProvider/LocationProvider.unity b/sdkproject/Assets/Mapbox/Examples/LocationProvider/LocationProvider.unity index 67eb06d75..9674afa7d 100644 --- a/sdkproject/Assets/Mapbox/Examples/LocationProvider/LocationProvider.unity +++ b/sdkproject/Assets/Mapbox/Examples/LocationProvider/LocationProvider.unity @@ -124,6 +124,7 @@ MonoBehaviour: LatLng: 37.7648, -122.463 Zoom: 15 Range: {x: 1, y: 1, z: 1, w: 1} + Root: {fileID: 114606470} --- !u!4 &114606472 Transform: m_ObjectHideFlags: 0 @@ -472,6 +473,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: a034c4eeb3293418aab101c1895844a4, type: 3} m_Name: m_EditorClassIdentifier: + _mapController: {fileID: 114606471} _targetTransform: {fileID: 1649127106} --- !u!4 &1649127106 Transform: @@ -528,6 +530,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 4bb39d89f6f3742418be7c93b4259637, type: 3} m_Name: m_EditorClassIdentifier: + _mapController: {fileID: 114606471} _positionFollowFactor: 0.5 _useTransformLocationProvider: 0 --- !u!4 &1934621224