From f296a4acee296bd0be0a66262d3d32ce85a4d1f5 Mon Sep 17 00:00:00 2001 From: runette Date: Mon, 13 May 2024 14:06:14 +0100 Subject: [PATCH] add extensions --- MapBox Extension.meta | 8 ++ MapBox Extension/MapBoxLayer.cs | 92 ++++++++++++++++++++++ MapBox Extension/MapBoxLayer.cs.meta | 11 +++ MapBox Extension/MapBox_Typings.cs | 17 ++++ MapBox Extension/MapBox_Typings.cs.meta | 11 +++ MapBox Extension/VirgisAbstractMap.cs | 23 ++++++ MapBox Extension/VirgisAbstractMap.cs.meta | 11 +++ 7 files changed, 173 insertions(+) create mode 100644 MapBox Extension.meta create mode 100644 MapBox Extension/MapBoxLayer.cs create mode 100644 MapBox Extension/MapBoxLayer.cs.meta create mode 100644 MapBox Extension/MapBox_Typings.cs create mode 100644 MapBox Extension/MapBox_Typings.cs.meta create mode 100644 MapBox Extension/VirgisAbstractMap.cs create mode 100644 MapBox Extension/VirgisAbstractMap.cs.meta diff --git a/MapBox Extension.meta b/MapBox Extension.meta new file mode 100644 index 0000000..2a75d7c --- /dev/null +++ b/MapBox Extension.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: daaa3de8d868e9143915557053953b5b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/MapBox Extension/MapBoxLayer.cs b/MapBox Extension/MapBoxLayer.cs new file mode 100644 index 0000000..3528767 --- /dev/null +++ b/MapBox Extension/MapBoxLayer.cs @@ -0,0 +1,92 @@ + +using Mapbox.Unity.Map; +using Project; +using System; +using Unity.Netcode; +using GeoJSON.Net.Geometry; +using Newtonsoft.Json; + +namespace Virgis { + + public class MapBoxLayer : MapBoxLayerPrototype + { + + private readonly NetworkVariable data = new(); + private MapboxData tmpdata = new(); + + new protected void Awake() { + base.Awake(); + featureType = FeatureType.MAP; + } + + public override void OnNetworkSpawn() { + base.OnNetworkSpawn(); + data.OnValueChanged += SetData; + data.Value = tmpdata; + } + + public override void OnNetworkDespawn() + { + base.OnNetworkDespawn(); + data.OnValueChanged -= SetData; + } + + public override void Initialize(GeogData props) + { + + Enum.TryParse(props.imagerySourceType, true, out tmpdata.st); + Enum.TryParse(props.elevationLayerType, true, out tmpdata.lt); + Enum.TryParse(props.elevationSourceType, true, out tmpdata.et); + tmpdata.origin = GeoAppState.instance.project.Origin; + tmpdata.MapSize = props.MapSize; + tmpdata.MapScale = props.MapScale; + } + + private void SetData(MapboxData olddata, MapboxData newdata) { + VirgisAbstractMap mbLayer = GetComponent(); + mbLayer.UseWorldScale(); + mbLayer.SetProperties(newdata.st, newdata.lt, newdata.et, newdata.MapSize); + mbLayer.Initialize(newdata.origin.Coordinates.Vector2d(), newdata.MapScale); + } + } + + /// + /// Serializeable struct that defines all data needed to instantiate the Mapbox Map + /// + struct MapboxData : INetworkSerializable + { + public ImagerySourceType st; + public ElevationLayerType lt; + public ElevationSourceType et; + public Point origin; + public int MapSize; + public int MapScale; + + public void NetworkSerialize(BufferSerializer serializer) where T : IReaderWriter + { + if (serializer.IsReader) + { + var reader = serializer.GetFastBufferReader(); + reader.ReadValueSafe(out st); + reader.ReadValueSafe(out lt); + reader.ReadValueSafe(out et); + reader.ReadValueSafe(out string json); + origin = JsonConvert.DeserializeObject(json); + reader.ReadValueSafe(out MapSize); + reader.ReadValueSafe(out MapScale); + } + else + { + var writer = serializer.GetFastBufferWriter(); + writer.WriteValueSafe(st); + writer.WriteValueSafe(lt); + writer.WriteValueSafe(et); + writer.WriteValueSafe(JsonConvert.SerializeObject(origin)); + writer.WriteValueSafe(MapSize); + writer.WriteValueSafe(MapScale); + } + } + } +} + + diff --git a/MapBox Extension/MapBoxLayer.cs.meta b/MapBox Extension/MapBoxLayer.cs.meta new file mode 100644 index 0000000..2ca2a00 --- /dev/null +++ b/MapBox Extension/MapBoxLayer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 108d18c9bfd6e924ab7b9faeaffe5a01 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/MapBox Extension/MapBox_Typings.cs b/MapBox Extension/MapBox_Typings.cs new file mode 100644 index 0000000..bcb0254 --- /dev/null +++ b/MapBox Extension/MapBox_Typings.cs @@ -0,0 +1,17 @@ +using GeoJSON.Net.Geometry; +using Mapbox.Utils; + + +namespace Virgis { + + public static class MapboxExtensionMethods { + /// + /// Converts Iposition to Vector2D + /// + /// IPosition + /// Mapbox.Utils.Vector2d + public static Vector2d Vector2d(this IPosition position) { + return new Vector2d(position.Latitude, position.Longitude); + } + } +} diff --git a/MapBox Extension/MapBox_Typings.cs.meta b/MapBox Extension/MapBox_Typings.cs.meta new file mode 100644 index 0000000..e511f8e --- /dev/null +++ b/MapBox Extension/MapBox_Typings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bdf747bbaecadf740b027f2f0d328b42 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/MapBox Extension/VirgisAbstractMap.cs b/MapBox Extension/VirgisAbstractMap.cs new file mode 100644 index 0000000..e3b2ab1 --- /dev/null +++ b/MapBox Extension/VirgisAbstractMap.cs @@ -0,0 +1,23 @@ +using UnityEngine; +using Mapbox.Unity.Map; + +namespace Virgis { + + public class VirgisAbstractMap : AbstractMap { + + public Material tileMaterial; + + public void SetProperties(ImagerySourceType imageSource, ElevationLayerType elevationLayerType, ElevationSourceType elevationSource, int size = 1) { + _imagery.SetProperties(imageSource, false, false, false); + _terrain.SetProperties(elevationSource, elevationLayerType); + MapOptions mapOptions = Options; + MapExtentOptions extentOptions = mapOptions.extentOptions; + extentOptions.extentType = MapExtentType.RangeAroundCenter; + extentOptions.defaultExtents.rangeAroundCenterOptions.east = size; + extentOptions.defaultExtents.rangeAroundCenterOptions.west = size; + extentOptions.defaultExtents.rangeAroundCenterOptions.north = size; + extentOptions.defaultExtents.rangeAroundCenterOptions.south = size; + SetTileMaterial(tileMaterial); + } + } +} \ No newline at end of file diff --git a/MapBox Extension/VirgisAbstractMap.cs.meta b/MapBox Extension/VirgisAbstractMap.cs.meta new file mode 100644 index 0000000..2ebf99d --- /dev/null +++ b/MapBox Extension/VirgisAbstractMap.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 34041eb43a44fa44195af04bd19b3c42 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: