diff --git a/Assets/Extra/ManualRecieveExample.cs b/Assets/Extra/ManualRecieveExample.cs index 3a405e0..7975424 100644 --- a/Assets/Extra/ManualRecieveExample.cs +++ b/Assets/Extra/ManualRecieveExample.cs @@ -1,6 +1,7 @@ using System.Collections; using System.Threading.Tasks; using Speckle.ConnectorUnity; +using Speckle.ConnectorUnity.Components; using Speckle.Core.Api; using Speckle.Core.Credentials; using Speckle.Core.Transports; diff --git a/Assets/Extra/Speckle.Extra.asmdef b/Assets/Extra/Speckle.Extra.asmdef index 8c6a9e6..8ad356d 100644 --- a/Assets/Extra/Speckle.Extra.asmdef +++ b/Assets/Extra/Speckle.Extra.asmdef @@ -1,4 +1,4 @@ { "name": "Speckle.Extra", - "references":[ "GUID:eed1b8b83e2c0074d9e5de2348e3ff72" ] + "references":[ "GUID:eed1b8b83e2c0074d9e5de2348e3ff72", "GUID:e6adfdc4e436206479f48eafc82f32b5" ] } diff --git a/Assets/SpecklePlayground.unity b/Assets/SpecklePlayground.unity index 07a9cca..d8a460c 100644 --- a/Assets/SpecklePlayground.unity +++ b/Assets/SpecklePlayground.unity @@ -928,6 +928,165 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 194696812} m_CullTransparentMesh: 1 +--- !u!1 &218987857 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 218987861} + - component: {fileID: 218987860} + - component: {fileID: 218987859} + - component: {fileID: 218987858} + m_Layer: 0 + m_Name: Speckle Connector + m_TagString: Untagged + m_Icon: {fileID: 2800000, guid: ee2ed9d8fff3a1d4db5590491978062e, type: 3} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &218987858 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 218987857} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b95e704835cc48444b81e33c978f6f7f, type: 3} + m_Name: + m_EditorClassIdentifier: + k__BackingField: + rid: 5855987529328361546 + k__BackingField: + rid: 5855987529328361547 + k__BackingField: + rid: 5855987529328361548 + OnBranchSelectionChange: + m_PersistentCalls: + m_Calls: [] + OnErrorAction: + m_PersistentCalls: + m_Calls: [] + OnSendProgressAction: + m_PersistentCalls: + m_Calls: [] + references: + version: 2 + RefIds: + - rid: 5855987529328361546 + type: {class: AccountSelection, ns: Speckle.ConnectorUnity.Wrappers.Selection, asm: Speckle.ConnectorUnity.Wrappers} + data: + selectedIndex: 0 + - rid: 5855987529328361547 + type: {class: StreamSelection, ns: Speckle.ConnectorUnity.Wrappers.Selection, asm: Speckle.ConnectorUnity.Wrappers} + data: + selectedIndex: 0 + k__BackingField: 50 + k__BackingField: + rid: 5855987529328361546 + - rid: 5855987529328361548 + type: {class: BranchSelection, ns: Speckle.ConnectorUnity.Wrappers.Selection, asm: Speckle.ConnectorUnity.Wrappers} + data: + selectedIndex: 0 + k__BackingField: 30 + k__BackingField: 0 + k__BackingField: + rid: 5855987529328361547 +--- !u!114 &218987859 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 218987857} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0bc895f6cb37b674995dc13b79783c55, type: 3} + m_Name: + m_EditorClassIdentifier: + k__BackingField: + rid: 5855987529328361542 + k__BackingField: + rid: 5855987529328361543 + k__BackingField: + rid: 5855987529328361544 + k__BackingField: + rid: 5855987529328361545 + OnCommitSelectionChange: + m_PersistentCalls: + m_Calls: [] + OnReceiveProgressAction: + m_PersistentCalls: + m_Calls: [] + OnErrorAction: + m_PersistentCalls: + m_Calls: [] + OnTotalChildrenCountKnown: + m_PersistentCalls: + m_Calls: [] + OnComplete: + m_PersistentCalls: + m_Calls: [] + references: + version: 2 + RefIds: + - rid: 5855987529328361542 + type: {class: AccountSelection, ns: Speckle.ConnectorUnity.Wrappers.Selection, asm: Speckle.ConnectorUnity.Wrappers} + data: + selectedIndex: 0 + - rid: 5855987529328361543 + type: {class: StreamSelection, ns: Speckle.ConnectorUnity.Wrappers.Selection, asm: Speckle.ConnectorUnity.Wrappers} + data: + selectedIndex: 0 + k__BackingField: 50 + k__BackingField: + rid: 5855987529328361542 + - rid: 5855987529328361544 + type: {class: BranchSelection, ns: Speckle.ConnectorUnity.Wrappers.Selection, asm: Speckle.ConnectorUnity.Wrappers} + data: + selectedIndex: 0 + k__BackingField: 30 + k__BackingField: 15 + k__BackingField: + rid: 5855987529328361543 + - rid: 5855987529328361545 + type: {class: CommitSelection, ns: Speckle.ConnectorUnity.Wrappers.Selection, asm: Speckle.ConnectorUnity.Wrappers} + data: + selectedIndex: 0 + k__BackingField: + rid: 5855987529328361544 +--- !u!114 &218987860 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 218987857} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ed6cbf9ce4dca0349997d163ec9bce7e, type: 3} + m_Name: + m_EditorClassIdentifier: + k__BackingField: {fileID: 1710028308} +--- !u!4 &218987861 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 218987857} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &234733581 GameObject: m_ObjectHideFlags: 0 @@ -1457,6 +1616,18 @@ Rigidbody: m_Interpolate: 0 m_Constraints: 0 m_CollisionDetection: 0 +--- !u!114 &540478226 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b3354e8208862c341940152f5340d41a, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!1 &641375517 GameObject: m_ObjectHideFlags: 0 @@ -2064,19 +2235,6 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &916416845 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 141ce93d2d159c0448b5b8b33b1c0679, type: 3} - m_Name: - m_EditorClassIdentifier: - path: Assets/Resources --- !u!1 &1031574851 GameObject: m_ObjectHideFlags: 0 @@ -2861,21 +3019,6 @@ MonoBehaviour: m_PersistentCalls: m_Calls: [] m_IsOn: 1 ---- !u!114 &1409739885 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 88d6b4f2f80eaa14f9f07505f7e44ec2, type: 3} - m_Name: - m_EditorClassIdentifier: - nativeCaches: - - {fileID: 916416845} - - {fileID: 1951948666} --- !u!1 &1464556211 GameObject: m_ObjectHideFlags: 0 @@ -3456,6 +3599,21 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1707872729} m_CullTransparentMesh: 1 +--- !u!114 &1710028308 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 88d6b4f2f80eaa14f9f07505f7e44ec2, type: 3} + m_Name: + m_EditorClassIdentifier: + nativeCaches: + - {fileID: 1771830985} + - {fileID: 540478226} --- !u!1 &1729237655 GameObject: m_ObjectHideFlags: 0 @@ -3568,6 +3726,19 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1762991479} m_CullTransparentMesh: 1 +--- !u!114 &1771830985 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2a4a29c776298714c88f406ad39c6095, type: 3} + m_Name: + m_EditorClassIdentifier: + matchByName: 1 --- !u!1 &1885647142 GameObject: m_ObjectHideFlags: 0 @@ -3872,18 +4043,6 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1903798475} m_CullTransparentMesh: 1 ---- !u!114 &1951948666 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b3354e8208862c341940152f5340d41a, type: 3} - m_Name: - m_EditorClassIdentifier: --- !u!1 &2014586909 GameObject: m_ObjectHideFlags: 0 @@ -4065,70 +4224,6 @@ MonoBehaviour: m_VerticalOverflow: 0 m_LineSpacing: 1 m_Text: 'Select a stream on:' ---- !u!1 &2060322465 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2060322467} - - component: {fileID: 2060322469} - - component: {fileID: 2060322468} - m_Layer: 0 - m_Name: EditorReceiver - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2060322467 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2060322465} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 110.63661, y: 38.49095, z: -36.923782} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &2060322468 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2060322465} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 730f6d2eecf16994c918395debc877e7, type: 3} - m_Name: - m_EditorClassIdentifier: - SelectedAccountIndex: 0 - SelectedStreamIndex: 8 - SelectedBranchIndex: 1 - SelectedCommitIndex: 0 - OldSelectedAccountIndex: 0 - OldSelectedStreamIndex: 8 ---- !u!114 &2060322469 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2060322465} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: ed6cbf9ce4dca0349997d163ec9bce7e, type: 3} - m_Name: - m_EditorClassIdentifier: - k__BackingField: {fileID: 1409739885} --- !u!1 &2066864134 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Tests/Editor/Editor.asmdef b/Assets/Tests/Editor/Editor.asmdef index a912c1c..6e33215 100644 --- a/Assets/Tests/Editor/Editor.asmdef +++ b/Assets/Tests/Editor/Editor.asmdef @@ -14,7 +14,8 @@ "overrideReferences": true, "precompiledReferences": [ "nunit.framework.dll", - "SpeckleCore2.dll" + "SpeckleCore2.dll", + "Objects.dll" ], "autoReferenced": false, "defineConstraints": [ diff --git a/Assets/Tests/Editor/PerformanceTest.cs b/Assets/Tests/Editor/PerformanceTest.cs index e54f514..cc6a0a9 100644 --- a/Assets/Tests/Editor/PerformanceTest.cs +++ b/Assets/Tests/Editor/PerformanceTest.cs @@ -4,20 +4,23 @@ using System.Collections; using System.Diagnostics; using System.Threading.Tasks; using NUnit.Framework; +using Objects.Utils; using Speckle.Core.Api; +using Speckle.Core.Models; +using Speckle.Core.Models.Extensions; using UnityEngine; using UnityEngine.TestTools; public class PerformanceTest { - //This method is much faster private static readonly string[] dataSource = new[] { "https://latest.speckle.dev/streams/24c3741255/commits/0925840e09" }; + //This method is much faster [Test, TestCaseSource(nameof(dataSource))] public void Receive_GetAwaiterResult(string stream) { @@ -64,4 +67,30 @@ public class PerformanceTest // } + + + //This method takes around 46 seconds to complete + [Test] + public void TestTriangulate() + { + + + Base b = Task.Run(async () => + { + return await Helpers.Receive("https://speckle.xyz/streams/4a8fd0c6b6/commits/067bf723b1"); + }).GetAwaiter().GetResult(); + + + foreach (Base child in b.Traverse(b => b is Objects.Geometry.Mesh)) + { + if(child is not Objects.Geometry.Mesh m) continue; + + var stopwatch = Stopwatch.StartNew(); + + m.TriangulateMesh(); + + Console.WriteLine($"took {stopwatch.ElapsedMilliseconds:ms} to triangulate {child.id}"); + } + } + } diff --git a/Packages/manifest.json b/Packages/manifest.json index a7c4885..7833ac9 100644 --- a/Packages/manifest.json +++ b/Packages/manifest.json @@ -1,8 +1,8 @@ { "dependencies": { "com.unity.2d.sprite": "1.0.0", - "com.unity.collab-proxy": "1.17.2", - "com.unity.ide.rider": "3.0.15", + "com.unity.collab-proxy": "1.17.6", + "com.unity.ide.rider": "3.0.16", "com.unity.ide.visualstudio": "2.0.16", "com.unity.ide.vscode": "1.2.5", "com.unity.test-framework": "1.1.31", diff --git a/Packages/packages-lock.json b/Packages/packages-lock.json index fcfecb2..f79ee66 100644 --- a/Packages/packages-lock.json +++ b/Packages/packages-lock.json @@ -7,7 +7,7 @@ "dependencies": {} }, "com.unity.collab-proxy": { - "version": "1.17.2", + "version": "1.17.6", "depth": 0, "source": "registry", "dependencies": { @@ -23,7 +23,7 @@ "url": "https://packages.unity.com" }, "com.unity.ide.rider": { - "version": "3.0.15", + "version": "3.0.16", "depth": 0, "source": "registry", "dependencies": { @@ -55,7 +55,7 @@ "url": "https://packages.unity.com" }, "com.unity.services.core": { - "version": "1.4.2", + "version": "1.6.0", "depth": 1, "source": "registry", "dependencies": { diff --git a/Packages/systems.speckle.speckle-unity/Core/SpeckleCore2.pdb b/Packages/systems.speckle.speckle-unity/Core/SpeckleCore2.pdb deleted file mode 100644 index f5eb9be..0000000 Binary files a/Packages/systems.speckle.speckle-unity/Core/SpeckleCore2.pdb and /dev/null differ diff --git a/Packages/systems.speckle.speckle-unity/Editor.meta b/Packages/systems.speckle.speckle-unity/Editor.meta index 12f0885..7a3df7b 100644 --- a/Packages/systems.speckle.speckle-unity/Editor.meta +++ b/Packages/systems.speckle.speckle-unity/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: c988c8263f4d7324fac5398bd76b9812 +guid: d46af7c830c7c22499c82b7935610b83 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Packages/systems.speckle.speckle-unity/NativeCache/Editor.meta b/Packages/systems.speckle.speckle-unity/Editor/Components.meta similarity index 77% rename from Packages/systems.speckle.speckle-unity/NativeCache/Editor.meta rename to Packages/systems.speckle.speckle-unity/Editor/Components.meta index c76453b..4b56027 100644 --- a/Packages/systems.speckle.speckle-unity/NativeCache/Editor.meta +++ b/Packages/systems.speckle.speckle-unity/Editor/Components.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 8fa50e4bdeaa3e94d942d3a9f137d91c +guid: 0f18c15bbb6287d438b34e86d33385a4 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Packages/systems.speckle.speckle-unity/Editor/Components/Speckle.ConnectorUnity.Components.Editor.asmdef b/Packages/systems.speckle.speckle-unity/Editor/Components/Speckle.ConnectorUnity.Components.Editor.asmdef new file mode 100644 index 0000000..e5cd450 --- /dev/null +++ b/Packages/systems.speckle.speckle-unity/Editor/Components/Speckle.ConnectorUnity.Components.Editor.asmdef @@ -0,0 +1,22 @@ +{ + "name": "Speckle.ConnectorUnity.Components.Editor", + "rootNamespace": "Speckle.ConnectorUnity", + "references": [ + "GUID:eed1b8b83e2c0074d9e5de2348e3ff72", + "GUID:05078f9b6da40444fbd72ec600449925", + "GUID:e6adfdc4e436206479f48eafc82f32b5", + "GUID:d274441ecc3eb3f43b093eec1503d681", + "GUID:50d889142fdf9de4b8501c6eaa4b3225" + ], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Packages/systems.speckle.speckle-unity/Editor/Speckle.Connector.Editor.asmdef.meta b/Packages/systems.speckle.speckle-unity/Editor/Components/Speckle.ConnectorUnity.Components.Editor.asmdef.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/Editor/Speckle.Connector.Editor.asmdef.meta rename to Packages/systems.speckle.speckle-unity/Editor/Components/Speckle.ConnectorUnity.Components.Editor.asmdef.meta diff --git a/Packages/systems.speckle.speckle-unity/Editor/Components/SpeckleReceiverEditor.cs b/Packages/systems.speckle.speckle-unity/Editor/Components/SpeckleReceiverEditor.cs new file mode 100644 index 0000000..9625981 --- /dev/null +++ b/Packages/systems.speckle.speckle-unity/Editor/Components/SpeckleReceiverEditor.cs @@ -0,0 +1,213 @@ +using System; +using System.Collections.Concurrent; +using System.Linq; +using System.Threading.Tasks; +using Speckle.Core.Api; +using Speckle.Core.Models; +using UnityEditor; +using UnityEngine; + +#nullable enable +namespace Speckle.ConnectorUnity.Components.Editor +{ + [CanEditMultipleObjects] + [CustomEditor(typeof(SpeckleReceiver))] + public class SpeckleReceiverEditor : UnityEditor.Editor + { + private static bool generateAssets = false; + private bool foldOutStatus = true; + private Texture2D? previewImage; + + public void OnEnable() + { + Init(); + } + + public void Reset() + { + Init(); + } + + private void Init() + { + var speckleReceiver = (SpeckleReceiver) target; + UpdatePreviewImage(); + speckleReceiver.OnCommitSelectionChange.AddListener(_ => UpdatePreviewImage()); + UpdateGenerateAssets(); + } + + private void UpdatePreviewImage() + { + previewImage = null; + ((SpeckleReceiver)target).GetPreviewImage(t => previewImage = t); + } + + public override async void OnInspectorGUI() + { + var speckleReceiver = (SpeckleReceiver) target; + + DrawDefaultInspector(); + + //Preview image + foldOutStatus = EditorGUILayout.Foldout(foldOutStatus, "Preview Image"); + if (foldOutStatus) + { + Rect rect = GUILayoutUtility.GetAspectRect(7f/4f); + if(previewImage != null) GUI.DrawTexture(rect, previewImage); + } + + + //Receive button + bool receive = GUILayout.Button("Receive!"); + + bool selection = EditorGUILayout.ToggleLeft("Generate Assets", generateAssets); + if (generateAssets != selection) + { + generateAssets = selection; + UpdateGenerateAssets(); + } + + + //TODO: Draw events in a collapsed region + + + + if (receive) + { + await ReceiveAndConvert(speckleReceiver); + } + } + + private void UpdateGenerateAssets() + { + var speckleReceiver = (SpeckleReceiver) target; + speckleReceiver.Converter.AssetCache.nativeCaches = NativeCacheFactory.GetDefaultNativeCacheSetup(generateAssets); + } + + public async Task ReceiveAndConvert(SpeckleReceiver speckleReceiver) + { + speckleReceiver.CancellationTokenSource?.Cancel(); + if (!speckleReceiver.GetSelection(out Client? client, out _, out Commit? commit, out string? error)) + { + Debug.LogWarning($"Not ready to receive: {error}", speckleReceiver); + return null; + } + + Base? commitObject = await ReceiveCommit(speckleReceiver, client.ServerUrl); + + if (commitObject == null) return null; + + var gameObject = Convert(speckleReceiver, commitObject, commit.id); + Debug.Log($"Successfully received and converted commit: {commit.id}", target); + return gameObject; + } + + private GameObject Convert(SpeckleReceiver receiver, Base commitObject, string name) + { + //Convert Speckle Objects + int childrenConverted = 0; + float totalChildren = commitObject.totalChildrenCount; + + void BeforeConvertCallback(Base b) + { + //TODO: this is an incorrect way of measuring progress, as totalChildren != total convertable children + float progress = childrenConverted++ / totalChildren; + + EditorUtility.DisplayProgressBar("Converting To Native...", + $"{b.speckle_type} - {b.id}", + progress); + } + + var go = receiver.ConvertToNativeWithCategories(commitObject, + name, BeforeConvertCallback); + go.transform.SetParent(receiver.transform); + return go; + } + + private async Task ReceiveCommit(SpeckleReceiver speckleReceiver, string serverLogName) + { + string message = $"Receiving data from {serverLogName}..."; + EditorUtility.DisplayProgressBar(message, "", 0); + + var totalObjectCount = 1; + void OnTotalChildrenKnown(int count) + { + totalObjectCount = count; + }; + + void OnProgress(ConcurrentDictionary dict) + { + var currentProgress = dict.Values.Average(); + var progress = (float) currentProgress / totalObjectCount; + EditorApplication.delayCall += () => + { + bool shouldCancel = EditorUtility.DisplayCancelableProgressBar(message, + $"{currentProgress}/{totalObjectCount}", + progress); + + if (shouldCancel) + { + CancelReceive(); + } + }; + }; + + void OnError(string message, Exception e) + { + if (e is not OperationCanceledException) + { + Debug.LogError($"Receive failed: {message}\n{e}", speckleReceiver); + } + CancelReceive(); + }; + + Base? commitObject = null; + try + { + speckleReceiver.OnTotalChildrenCountKnown.AddListener(OnTotalChildrenKnown); + speckleReceiver.OnReceiveProgressAction.AddListener(OnProgress); + speckleReceiver.OnErrorAction.AddListener(OnError); + commitObject = await speckleReceiver.ReceiveAsync(); + if (commitObject == null) + { + Debug.LogWarning($"Receive warning: Receive operation returned null", speckleReceiver); + } + } + finally + { + speckleReceiver.OnTotalChildrenCountKnown.RemoveListener(OnTotalChildrenKnown); + speckleReceiver.OnReceiveProgressAction.RemoveListener(OnProgress); + speckleReceiver.OnErrorAction.RemoveListener(OnError); + EditorApplication.delayCall += EditorUtility.ClearProgressBar; + } + + return commitObject; + } + + private void CancelReceive() + { + ((SpeckleReceiver)target).CancellationTokenSource?.Cancel(); + EditorApplication.delayCall += EditorUtility.ClearProgressBar; + } + + [MenuItem("GameObject/Speckle/Speckle Connector", false, 10)] + static void CreateCustomGameObject(MenuCommand menuCommand) { + // Create a custom game object + GameObject go = new GameObject("Speckle Connector"); + // Ensure it gets reparented if this was a context click (otherwise does nothing) + GameObjectUtility.SetParentAndAlign(go, menuCommand.context as GameObject); + // Register the creation in the undo system + Undo.RegisterCreatedObjectUndo(go, "Create " + go.name); + Selection.activeObject = go; + + go.AddComponent(); + go.AddComponent(); + go.AddComponent(); + +#if UNITY_2021_2_OR_NEWER + var icon = AssetDatabase.LoadAssetAtPath("Packages/systems.speckle.speckle-unity/Editor/Gizmos/logo128.png"); + EditorGUIUtility.SetIconForObject(go, icon); +#endif + } + } +} diff --git a/Packages/systems.speckle.speckle-unity/SpeckleProperties.cs.meta b/Packages/systems.speckle.speckle-unity/Editor/Components/SpeckleReceiverEditor.cs.meta similarity index 83% rename from Packages/systems.speckle.speckle-unity/SpeckleProperties.cs.meta rename to Packages/systems.speckle.speckle-unity/Editor/Components/SpeckleReceiverEditor.cs.meta index 23a8d1b..90a5874 100644 --- a/Packages/systems.speckle.speckle-unity/SpeckleProperties.cs.meta +++ b/Packages/systems.speckle.speckle-unity/Editor/Components/SpeckleReceiverEditor.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 2cb1817d5a3fda645aa9b1b658ad3003 +guid: 80d601c080f0bd84d98b91058b593996 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Packages/systems.speckle.speckle-unity/Editor/Components/SpeckleSendEditor.cs b/Packages/systems.speckle.speckle-unity/Editor/Components/SpeckleSendEditor.cs new file mode 100644 index 0000000..1fb2af0 --- /dev/null +++ b/Packages/systems.speckle.speckle-unity/Editor/Components/SpeckleSendEditor.cs @@ -0,0 +1,117 @@ +using System.Collections; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.ComponentModel; +using System.Threading.Tasks; +using Speckle.Core.Models; +using UnityEditor; +using UnityEngine; +using UnityEngine.SceneManagement; +using Component = UnityEngine.Component; + +#nullable enable +namespace Speckle.ConnectorUnity.Components.Editor +{ + + public enum SelectionFilter + { + [Tooltip("Convert all children of this GameObject")] + Children, + [Tooltip("Convert GameObjects currently selected in the hierarchy (consider padlocking this inspector)")] + Selection, + [InspectorName("All (excl. disabled)")] + [Tooltip("Convert all GameObjects (excluding disabled) in the active scene")] + Enabled, + [Tooltip("Convert all GameObjects (including disabled) in the active scene")] + [InspectorName("All (incl. disabled)")] + All, + } + + [CustomEditor(typeof(SpeckleSender))] + [CanEditMultipleObjects] + public class SpeckleSendEditor : UnityEditor.Editor + { + + private SelectionFilter selectedFilter = SelectionFilter.Children; + + public override async void OnInspectorGUI() + { + //Draw events in a collapsed region + DrawDefaultInspector(); + + bool shouldSend = GUILayout.Button("Send!"); + selectedFilter = (SelectionFilter)EditorGUILayout.EnumPopup("Selection", selectedFilter); + + if (shouldSend) + { + await ConvertAndSend(); + } + } + + public async Task ConvertAndSend() + { + var speckleSender = (SpeckleSender) target; + + if (!speckleSender.GetSelection(out _, out _, out _, out string? error)) + { + Debug.LogWarning($"Not ready to send: {error}", speckleSender); + return null; + } + + RecursiveConverter converter = speckleSender.Converter; + Base data = selectedFilter switch + { + SelectionFilter.All => ConvertAll(converter), + SelectionFilter.Enabled => ConvertEnabled(converter), + SelectionFilter.Children => ConvertChildren(converter), + SelectionFilter.Selection => ConvertSelection(converter), + _ => throw new InvalidEnumArgumentException(nameof(selectedFilter), (int) selectedFilter, selectedFilter.GetType()), + }; + + //TODO onError action? + if (data["@objects"] is IList l && l.Count == 0) + { + Debug.LogWarning($"Nothing to send", speckleSender); + return null; + } + + return await speckleSender.SendDataAsync(data, true); + } + + private Base ConvertChildren(RecursiveConverter converter) + { + return converter.RecursivelyConvertToSpeckle( + new []{((Component)target).gameObject}, + _ => true); + } + + private Base ConvertSelection(RecursiveConverter converter) + { + ISet selection = Selection.GetFiltered(SelectionMode.Deep).ToImmutableHashSet(); + return converter.RecursivelyConvertToSpeckle( + SceneManager.GetActiveScene().GetRootGameObjects(), + go => selection.Contains(go)); + } + + private Base ConvertAll(RecursiveConverter converter) + { + return converter.RecursivelyConvertToSpeckle( + SceneManager.GetActiveScene().GetRootGameObjects(), + _ => true); + } + + private Base ConvertEnabled(RecursiveConverter converter) + { + return converter.RecursivelyConvertToSpeckle( + SceneManager.GetActiveScene().GetRootGameObjects(), + go => go.activeInHierarchy); + } + + private void CancelSend() + { + ((SpeckleReceiver)target).CancellationTokenSource?.Cancel(); + EditorApplication.delayCall += EditorUtility.ClearProgressBar; + } + + } +} diff --git a/Packages/systems.speckle.speckle-unity/RecursiveConverter.cs.meta b/Packages/systems.speckle.speckle-unity/Editor/Components/SpeckleSendEditor.cs.meta similarity index 83% rename from Packages/systems.speckle.speckle-unity/RecursiveConverter.cs.meta rename to Packages/systems.speckle.speckle-unity/Editor/Components/SpeckleSendEditor.cs.meta index 1f027df..2f183f6 100644 --- a/Packages/systems.speckle.speckle-unity/RecursiveConverter.cs.meta +++ b/Packages/systems.speckle.speckle-unity/Editor/Components/SpeckleSendEditor.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: ed6cbf9ce4dca0349997d163ec9bce7e +guid: 9924a7d67cb7de24ea0c7f60ef1e0bdf MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Packages/systems.speckle.speckle-unity/Editor/StreamManagerEditor.cs b/Packages/systems.speckle.speckle-unity/Editor/Components/StreamManagerEditor.cs similarity index 99% rename from Packages/systems.speckle.speckle-unity/Editor/StreamManagerEditor.cs rename to Packages/systems.speckle.speckle-unity/Editor/Components/StreamManagerEditor.cs index 780984e..c070163 100644 --- a/Packages/systems.speckle.speckle-unity/Editor/StreamManagerEditor.cs +++ b/Packages/systems.speckle.speckle-unity/Editor/Components/StreamManagerEditor.cs @@ -12,8 +12,9 @@ using Speckle.Core.Transports; using UnityEditor; using UnityEngine; -namespace Speckle.ConnectorUnity.Editor +namespace Speckle.ConnectorUnity.Components.Editor { + [Obsolete] [CustomEditor(typeof(StreamManager))] [CanEditMultipleObjects] public class StreamManagerEditor : UnityEditor.Editor diff --git a/Packages/systems.speckle.speckle-unity/Editor/StreamManagerEditor.cs.meta b/Packages/systems.speckle.speckle-unity/Editor/Components/StreamManagerEditor.cs.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/Editor/StreamManagerEditor.cs.meta rename to Packages/systems.speckle.speckle-unity/Editor/Components/StreamManagerEditor.cs.meta diff --git a/Packages/systems.speckle.speckle-unity/Objects/Objects.pdb.meta b/Packages/systems.speckle.speckle-unity/Editor/Gizmos.meta similarity index 67% rename from Packages/systems.speckle.speckle-unity/Objects/Objects.pdb.meta rename to Packages/systems.speckle.speckle-unity/Editor/Gizmos.meta index 166dbd5..fc68698 100644 --- a/Packages/systems.speckle.speckle-unity/Objects/Objects.pdb.meta +++ b/Packages/systems.speckle.speckle-unity/Editor/Gizmos.meta @@ -1,5 +1,6 @@ fileFormatVersion: 2 -guid: abbe34a21da4311498aec86f93fb7ac9 +guid: 37a8e1a00bd8afb44b1296830afb15c6 +folderAsset: yes DefaultImporter: externalObjects: {} userData: diff --git a/Packages/systems.speckle.speckle-unity/Editor/Gizmos/AccountDetails@128.png b/Packages/systems.speckle.speckle-unity/Editor/Gizmos/AccountDetails@128.png new file mode 100644 index 0000000..eb90e52 Binary files /dev/null and b/Packages/systems.speckle.speckle-unity/Editor/Gizmos/AccountDetails@128.png differ diff --git a/Packages/systems.speckle.speckle-unity/Editor/Gizmos/AccountDetails@128.png.meta b/Packages/systems.speckle.speckle-unity/Editor/Gizmos/AccountDetails@128.png.meta new file mode 100644 index 0000000..503afac --- /dev/null +++ b/Packages/systems.speckle.speckle-unity/Editor/Gizmos/AccountDetails@128.png.meta @@ -0,0 +1,147 @@ +fileFormatVersion: 2 +guid: 755e507925f2db74eb9ea72fbd49e714 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/systems.speckle.speckle-unity/Editor/Gizmos/Accounts@128.png b/Packages/systems.speckle.speckle-unity/Editor/Gizmos/Accounts@128.png new file mode 100644 index 0000000..9fb7b9f Binary files /dev/null and b/Packages/systems.speckle.speckle-unity/Editor/Gizmos/Accounts@128.png differ diff --git a/Packages/systems.speckle.speckle-unity/Editor/Gizmos/Accounts@128.png.meta b/Packages/systems.speckle.speckle-unity/Editor/Gizmos/Accounts@128.png.meta new file mode 100644 index 0000000..3f5bb16 --- /dev/null +++ b/Packages/systems.speckle.speckle-unity/Editor/Gizmos/Accounts@128.png.meta @@ -0,0 +1,147 @@ +fileFormatVersion: 2 +guid: 5286636522bb039479b99feb130fb0e7 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/systems.speckle.speckle-unity/Editor/Gizmos/GetObjectValueByKey@128.png b/Packages/systems.speckle.speckle-unity/Editor/Gizmos/GetObjectValueByKey@128.png new file mode 100644 index 0000000..4ce959c Binary files /dev/null and b/Packages/systems.speckle.speckle-unity/Editor/Gizmos/GetObjectValueByKey@128.png differ diff --git a/Packages/systems.speckle.speckle-unity/Editor/Gizmos/GetObjectValueByKey@128.png.meta b/Packages/systems.speckle.speckle-unity/Editor/Gizmos/GetObjectValueByKey@128.png.meta new file mode 100644 index 0000000..6f7abe5 --- /dev/null +++ b/Packages/systems.speckle.speckle-unity/Editor/Gizmos/GetObjectValueByKey@128.png.meta @@ -0,0 +1,159 @@ +fileFormatVersion: 2 +guid: fca1a9810bab51c4fbb3028f1ab6e637 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Windows Store Apps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/systems.speckle.speckle-unity/Editor/Gizmos/Receiver@128.png b/Packages/systems.speckle.speckle-unity/Editor/Gizmos/Receiver@128.png new file mode 100644 index 0000000..b3c6d0c Binary files /dev/null and b/Packages/systems.speckle.speckle-unity/Editor/Gizmos/Receiver@128.png differ diff --git a/Packages/systems.speckle.speckle-unity/Editor/Gizmos/Receiver@128.png.meta b/Packages/systems.speckle.speckle-unity/Editor/Gizmos/Receiver@128.png.meta new file mode 100644 index 0000000..f8aa48e --- /dev/null +++ b/Packages/systems.speckle.speckle-unity/Editor/Gizmos/Receiver@128.png.meta @@ -0,0 +1,159 @@ +fileFormatVersion: 2 +guid: 4e64a121cf44e1846907649ee8b15dd3 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Windows Store Apps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/systems.speckle.speckle-unity/Editor/Gizmos/Sender@128.png b/Packages/systems.speckle.speckle-unity/Editor/Gizmos/Sender@128.png new file mode 100644 index 0000000..9fa94f2 Binary files /dev/null and b/Packages/systems.speckle.speckle-unity/Editor/Gizmos/Sender@128.png differ diff --git a/Packages/systems.speckle.speckle-unity/Editor/Gizmos/Sender@128.png.meta b/Packages/systems.speckle.speckle-unity/Editor/Gizmos/Sender@128.png.meta new file mode 100644 index 0000000..a370631 --- /dev/null +++ b/Packages/systems.speckle.speckle-unity/Editor/Gizmos/Sender@128.png.meta @@ -0,0 +1,159 @@ +fileFormatVersion: 2 +guid: 165f717696d10fb4e82b83c3d7bc9e7c +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Windows Store Apps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/systems.speckle.speckle-unity/Editor/Gizmos/StreamDetails@128.png b/Packages/systems.speckle.speckle-unity/Editor/Gizmos/StreamDetails@128.png new file mode 100644 index 0000000..2ac066c Binary files /dev/null and b/Packages/systems.speckle.speckle-unity/Editor/Gizmos/StreamDetails@128.png differ diff --git a/Packages/systems.speckle.speckle-unity/Editor/Gizmos/StreamDetails@128.png.meta b/Packages/systems.speckle.speckle-unity/Editor/Gizmos/StreamDetails@128.png.meta new file mode 100644 index 0000000..7562860 --- /dev/null +++ b/Packages/systems.speckle.speckle-unity/Editor/Gizmos/StreamDetails@128.png.meta @@ -0,0 +1,147 @@ +fileFormatVersion: 2 +guid: 2a6580bbc30b00f42b9acb33e5e77e5a +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/systems.speckle.speckle-unity/Editor/Gizmos/StreamList@128.png b/Packages/systems.speckle.speckle-unity/Editor/Gizmos/StreamList@128.png new file mode 100644 index 0000000..a63c252 Binary files /dev/null and b/Packages/systems.speckle.speckle-unity/Editor/Gizmos/StreamList@128.png differ diff --git a/Packages/systems.speckle.speckle-unity/Editor/Gizmos/StreamList@128.png.meta b/Packages/systems.speckle.speckle-unity/Editor/Gizmos/StreamList@128.png.meta new file mode 100644 index 0000000..0c30638 --- /dev/null +++ b/Packages/systems.speckle.speckle-unity/Editor/Gizmos/StreamList@128.png.meta @@ -0,0 +1,159 @@ +fileFormatVersion: 2 +guid: cba6754a3d1fe2641a32900f83ebe259 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Windows Store Apps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/systems.speckle.speckle-unity/Editor/Gizmos/ToNative@128.png b/Packages/systems.speckle.speckle-unity/Editor/Gizmos/ToNative@128.png new file mode 100644 index 0000000..7174d22 Binary files /dev/null and b/Packages/systems.speckle.speckle-unity/Editor/Gizmos/ToNative@128.png differ diff --git a/Packages/systems.speckle.speckle-unity/Editor/Gizmos/ToNative@128.png.meta b/Packages/systems.speckle.speckle-unity/Editor/Gizmos/ToNative@128.png.meta new file mode 100644 index 0000000..0f86406 --- /dev/null +++ b/Packages/systems.speckle.speckle-unity/Editor/Gizmos/ToNative@128.png.meta @@ -0,0 +1,159 @@ +fileFormatVersion: 2 +guid: 5dd4c01168f890c49859afd36640b0a9 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Windows Store Apps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/systems.speckle.speckle-unity/Editor/Gizmos/ToSpeckle@128.png b/Packages/systems.speckle.speckle-unity/Editor/Gizmos/ToSpeckle@128.png new file mode 100644 index 0000000..25dfaeb Binary files /dev/null and b/Packages/systems.speckle.speckle-unity/Editor/Gizmos/ToSpeckle@128.png differ diff --git a/Packages/systems.speckle.speckle-unity/Editor/Gizmos/ToSpeckle@128.png.meta b/Packages/systems.speckle.speckle-unity/Editor/Gizmos/ToSpeckle@128.png.meta new file mode 100644 index 0000000..b13c478 --- /dev/null +++ b/Packages/systems.speckle.speckle-unity/Editor/Gizmos/ToSpeckle@128.png.meta @@ -0,0 +1,159 @@ +fileFormatVersion: 2 +guid: d2285c86b3793dc40ab7105e71fa0f98 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Windows Store Apps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/systems.speckle.speckle-unity/Editor/Gizmos/logo128.png b/Packages/systems.speckle.speckle-unity/Editor/Gizmos/logo128.png new file mode 100644 index 0000000..5ddbe76 Binary files /dev/null and b/Packages/systems.speckle.speckle-unity/Editor/Gizmos/logo128.png differ diff --git a/Packages/systems.speckle.speckle-unity/Editor/Gizmos/logo128.png.meta b/Packages/systems.speckle.speckle-unity/Editor/Gizmos/logo128.png.meta new file mode 100644 index 0000000..261265b --- /dev/null +++ b/Packages/systems.speckle.speckle-unity/Editor/Gizmos/logo128.png.meta @@ -0,0 +1,159 @@ +fileFormatVersion: 2 +guid: ee2ed9d8fff3a1d4db5590491978062e +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Windows Store Apps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/systems.speckle.speckle-unity/Core/SpeckleCore2.pdb.meta b/Packages/systems.speckle.speckle-unity/Editor/NativeCache.meta similarity index 67% rename from Packages/systems.speckle.speckle-unity/Core/SpeckleCore2.pdb.meta rename to Packages/systems.speckle.speckle-unity/Editor/NativeCache.meta index e1c537c..81688b2 100644 --- a/Packages/systems.speckle.speckle-unity/Core/SpeckleCore2.pdb.meta +++ b/Packages/systems.speckle.speckle-unity/Editor/NativeCache.meta @@ -1,5 +1,6 @@ fileFormatVersion: 2 -guid: 7904119b19d26704992c8ae655b75335 +guid: 254dd1112a6cc5f42bbcd30cec59e189 +folderAsset: yes DefaultImporter: externalObjects: {} userData: diff --git a/Packages/systems.speckle.speckle-unity/NativeCache/Editor/AssetDBNativeCache.cs b/Packages/systems.speckle.speckle-unity/Editor/NativeCache/AssetDBNativeCache.cs similarity index 100% rename from Packages/systems.speckle.speckle-unity/NativeCache/Editor/AssetDBNativeCache.cs rename to Packages/systems.speckle.speckle-unity/Editor/NativeCache/AssetDBNativeCache.cs diff --git a/Packages/systems.speckle.speckle-unity/NativeCache/Editor/AssetDBNativeCache.cs.meta b/Packages/systems.speckle.speckle-unity/Editor/NativeCache/AssetDBNativeCache.cs.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/NativeCache/Editor/AssetDBNativeCache.cs.meta rename to Packages/systems.speckle.speckle-unity/Editor/NativeCache/AssetDBNativeCache.cs.meta diff --git a/Packages/systems.speckle.speckle-unity/Editor/Speckle.Connector.Editor.asmdef b/Packages/systems.speckle.speckle-unity/Editor/NativeCache/Speckle.ConnectorUnity.NativeCaches.Editor.asmdef similarity index 72% rename from Packages/systems.speckle.speckle-unity/Editor/Speckle.Connector.Editor.asmdef rename to Packages/systems.speckle.speckle-unity/Editor/NativeCache/Speckle.ConnectorUnity.NativeCaches.Editor.asmdef index 0f58715..3c6b219 100644 --- a/Packages/systems.speckle.speckle-unity/Editor/Speckle.Connector.Editor.asmdef +++ b/Packages/systems.speckle.speckle-unity/Editor/NativeCache/Speckle.ConnectorUnity.NativeCaches.Editor.asmdef @@ -1,8 +1,7 @@ { - "name": "Speckle.Connector.Editor", - "rootNamespace": "Speckle.ConnectorUnity", + "name": "Speckle.ConnectorUnity.NativeCaches.Editor", + "rootNamespace": "Speckle.ConnectorUnity.NativeCaches", "references": [ - "GUID:eed1b8b83e2c0074d9e5de2348e3ff72", "GUID:05078f9b6da40444fbd72ec600449925" ], "includePlatforms": [ diff --git a/Packages/systems.speckle.speckle-unity/NativeCache/Editor/EditorCaches.asmdef.meta b/Packages/systems.speckle.speckle-unity/Editor/NativeCache/Speckle.ConnectorUnity.NativeCaches.Editor.asmdef.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/NativeCache/Editor/EditorCaches.asmdef.meta rename to Packages/systems.speckle.speckle-unity/Editor/NativeCache/Speckle.ConnectorUnity.NativeCaches.Editor.asmdef.meta diff --git a/Packages/systems.speckle.speckle-unity/Editor/Wrappers.meta b/Packages/systems.speckle.speckle-unity/Editor/Wrappers.meta new file mode 100644 index 0000000..523999c --- /dev/null +++ b/Packages/systems.speckle.speckle-unity/Editor/Wrappers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1c7021551a0cb904a99a6d1006a46ac0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/systems.speckle.speckle-unity/Editor/Wrappers/Selection.meta b/Packages/systems.speckle.speckle-unity/Editor/Wrappers/Selection.meta new file mode 100644 index 0000000..b111cda --- /dev/null +++ b/Packages/systems.speckle.speckle-unity/Editor/Wrappers/Selection.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 64cbde278ee784249ba9f6dcf4ddd4b3 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/systems.speckle.speckle-unity/Editor/Wrappers/Selection/StreamSelectionEditor.cs b/Packages/systems.speckle.speckle-unity/Editor/Wrappers/Selection/StreamSelectionEditor.cs new file mode 100644 index 0000000..971c987 --- /dev/null +++ b/Packages/systems.speckle.speckle-unity/Editor/Wrappers/Selection/StreamSelectionEditor.cs @@ -0,0 +1,254 @@ +#nullable enable +using System; +using System.Collections.Generic; +using Speckle.Core.Api; +using Speckle.Core.Credentials; +using UnityEditor; +using UnityEditor.Experimental.GraphView; +using UnityEngine; + +namespace Speckle.ConnectorUnity.Wrappers.Selection.Editor +{ + [CustomPropertyDrawer(typeof(AccountSelection))] + public sealed class AccountSelectionDrawer : OptionSelectionDrawer + { + protected override bool DisplayRefresh => true; + protected override string FormatOption(Account o) => $"{o.userInfo.email} | {o.serverInfo.name}"; + + public AccountSelectionDrawer() + { + details = new (string, Func)[] + { + ("Id", s => s.userInfo.id), + ("Name", s => s.userInfo.name), + ("Email", s => s.userInfo.email), + ("Company", s => s.userInfo.company), + ("Server", s => s.serverInfo.name), + ("URL", s => s.serverInfo.url), + ("Description", s => s.serverInfo.description), + }; + } + } + + [CustomPropertyDrawer(typeof(StreamSelection))] + public sealed class StreamSelectionDrawer : OptionSelectionDrawer + { + protected override bool DisplayRefresh => true; + protected override string FormatOption(Stream o) => $"{o.name}"; + + public StreamSelectionDrawer() + { + properties = new []{$"<{nameof(StreamSelection.StreamsLimit)}>k__BackingField"}; + + details = new (string, Func)[] + { + ("Stream id", s => s.id), + ("Description", s => s.description), + ("Is Public", s => s.isPublic.ToString()), + ("Role", s => s.role), + ("Created at", s => s.createdAt), + ("Updated at", s => s.updatedAt), + }; + } + } + + [CustomPropertyDrawer(typeof(BranchSelection))] + public sealed class BranchSelectionDrawer : OptionSelectionDrawer + { + protected override bool DisplayRefresh => true; + protected override string FormatOption(Branch o) => $"{o.name}"; + + public BranchSelectionDrawer() + { + properties = new [] + { + $"<{nameof(BranchSelection.BranchesLimit)}>k__BackingField", + $"<{nameof(BranchSelection.CommitsLimit)}>k__BackingField", + }; + + details = new (string, Func)[] + { + ("Description", s => s.description), + }; + } + } + + [CustomPropertyDrawer(typeof(CommitSelection))] + public sealed class CommitSelectionDrawer : OptionSelectionDrawer + { + protected override string FormatOption(Commit o) => $"{o.message} - {o.id}"; + + public CommitSelectionDrawer() + { + details = new (string, Func)[] + { + ("Commit Id", s => s.id), + ("Author Name", s => s.authorName), + ("Created At", s => s.createdAt), + ("Source Application", s => s.sourceApplication), + ("Reference Object Id", s => s.referencedObject), + }; + } + } + + + public abstract class OptionSelectionDrawer : PropertyDrawer where TOption : class + { + private const float RefreshButtonWidthScale = 0.2f; + private const float PrefixIndentation = 100f; + protected readonly float DetailsTextHeight = EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; + + protected virtual bool DisplayRefresh => false; + protected abstract string FormatOption(TOption o); + protected virtual int GUIDetailsPropertyCount => properties.Length + details.Length; + + protected string[] properties = { }; + + protected (string, Func)[] details = { }; + + private string[] GetFormattedOptions(TOption[] options) + { + int optionsCount = options.Length; + string[] choices = new string[optionsCount]; + for (int i = 0; i < optionsCount; i++) + { + choices[i] = FormatOption(options[i]); + } + + return choices; + } + + protected virtual void OnGUIDetails(Rect position, SerializedProperty property, GUIContent label, TOption? selection) + { + position.height = DetailsTextHeight; + + foreach (string subPropertyName in properties) + { + position.y += DetailsTextHeight; + var subProperty = property.FindPropertyRelative(subPropertyName); + EditorGUI.PropertyField(position, subProperty); + } + + EditorGUI.indentLevel++; + EditorGUI.BeginDisabledGroup(true); + + foreach (var (name, func) in details) + { + position.y += DetailsTextHeight; + string text = selection != null ? func(selection) : ""; + EditorGUI.TextField(position, name, text); + } + + EditorGUI.EndDisabledGroup(); + EditorGUI.indentLevel--; + } + + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + EditorGUI.BeginProperty(position, label, property); + var t = (OptionSelection)fieldInfo.GetValue(property.serializedObject.targetObject); + + var selectionRect = position; + selectionRect.x += PrefixIndentation + 5; + selectionRect.width -= PrefixIndentation + 5; + + TOption? selectedOption = t.Selected; + + // Options selection + { + + var popupSize = DisplayRefresh + ? new Rect(selectionRect.x, selectionRect.y, selectionRect.width * (1-RefreshButtonWidthScale), DetailsTextHeight) + : selectionRect; + + string selectedChoice = selectedOption != null ? FormatOption(selectedOption) : ""; + + if (GUI.Button(popupSize, selectedChoice, EditorStyles.popup)) + { + var windowPos = GUIUtility.GUIToScreenPoint(Event.current.mousePosition); + var provider = ScriptableObject.CreateInstance(); + provider.Title = typeof(TOption).Name; + provider.listItems = GetFormattedOptions(t.Options);; + provider.onSetIndexCallback = o => { t.SelectedIndex = o;}; + SearchWindow.Open(new SearchWindowContext(windowPos), provider); + } + + // Optional refresh + if (DisplayRefresh) + { + var buttonSize = new Rect(selectionRect.x + popupSize.width , selectionRect.y, selectionRect.width * RefreshButtonWidthScale, DetailsTextHeight); + if (GUI.Button(buttonSize, "Refresh")) + { + EditorApplication.delayCall += t.RefreshOptions; + } + } + } + + // Collapsable details + { + int visiblePropCount = property.isExpanded ? GUIDetailsPropertyCount : 0; + var detailsHeight = new Vector2(PrefixIndentation, DetailsTextHeight + visiblePropCount * DetailsTextHeight); + var foldoutRect = new Rect(position.position, detailsHeight); + property.isExpanded = EditorGUI.BeginFoldoutHeaderGroup(foldoutRect, property.isExpanded, label); + if (property.isExpanded) + { + OnGUIDetails(position, property, label, selectedOption); + } + EditorGUI.EndFoldoutHeaderGroup(); + } + + + EditorGUI.EndProperty(); + //EditorUtility.SetDirty(property.serializedObject.targetObject); + + } + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) + { + var standardHeight = EditorGUIUtility.singleLineHeight; + + if (!property.isExpanded) return standardHeight + EditorGUIUtility.standardVerticalSpacing; + + var detailsHeight = GUIDetailsPropertyCount * (standardHeight + EditorGUIUtility.standardVerticalSpacing); + + return standardHeight + detailsHeight + EditorGUIUtility.standardVerticalSpacing + EditorGUIUtility.standardVerticalSpacing; + } + + } + + #nullable disable + + public sealed class StringListSearchProvider : ScriptableObject, ISearchWindowProvider + { + public string Title { get; set; } + public string[] listItems; + + public Action onSetIndexCallback; + + public List CreateSearchTree(SearchWindowContext context) + { + List searchList = new(listItems.Length + 1) {new SearchTreeGroupEntry(new GUIContent(Title), 0)}; + + for(int i = 0; i < listItems.Length; i++) + { + SearchTreeEntry entry = new SearchTreeEntry(new GUIContent(listItems[i])) + { + level = 1, + userData = i + }; + searchList.Add(entry); + } + + return searchList; + } + + public bool OnSelectEntry(SearchTreeEntry SearchTreeEntry, SearchWindowContext context) + { + onSetIndexCallback?.Invoke((int)SearchTreeEntry.userData); + + return true; + } + } + + + +} diff --git a/Packages/systems.speckle.speckle-unity/Editor/Wrappers/Selection/StreamSelectionEditor.cs.meta b/Packages/systems.speckle.speckle-unity/Editor/Wrappers/Selection/StreamSelectionEditor.cs.meta new file mode 100644 index 0000000..9f14be3 --- /dev/null +++ b/Packages/systems.speckle.speckle-unity/Editor/Wrappers/Selection/StreamSelectionEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fc44e364c0d7b8a4c95f87d0210054be +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/systems.speckle.speckle-unity/NativeCache/Editor/EditorCaches.asmdef b/Packages/systems.speckle.speckle-unity/Editor/Wrappers/Speckle.ConnectorUnity.Wrappers.Editor.asmdef similarity index 72% rename from Packages/systems.speckle.speckle-unity/NativeCache/Editor/EditorCaches.asmdef rename to Packages/systems.speckle.speckle-unity/Editor/Wrappers/Speckle.ConnectorUnity.Wrappers.Editor.asmdef index 2127985..9df99e3 100644 --- a/Packages/systems.speckle.speckle-unity/NativeCache/Editor/EditorCaches.asmdef +++ b/Packages/systems.speckle.speckle-unity/Editor/Wrappers/Speckle.ConnectorUnity.Wrappers.Editor.asmdef @@ -1,7 +1,9 @@ { - "name": "EditorCaches", + "name": "Speckle.ConnectorUnity.Wrappers.Editor", "rootNamespace": "Speckle.ConnectorUnity", - "references": ["GUID:05078f9b6da40444fbd72ec600449925"], + "references": [ + "GUID:d274441ecc3eb3f43b093eec1503d681" + ], "includePlatforms": [ "Editor" ], diff --git a/Packages/systems.speckle.speckle-unity/Editor/Wrappers/Speckle.ConnectorUnity.Wrappers.Editor.asmdef.meta b/Packages/systems.speckle.speckle-unity/Editor/Wrappers/Speckle.ConnectorUnity.Wrappers.Editor.asmdef.meta new file mode 100644 index 0000000..63d707b --- /dev/null +++ b/Packages/systems.speckle.speckle-unity/Editor/Wrappers/Speckle.ConnectorUnity.Wrappers.Editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 5a59c53feb35b8942935c8c5ee0ea4c1 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/systems.speckle.speckle-unity/Editor/SpecklePropertiesEditor.cs b/Packages/systems.speckle.speckle-unity/Editor/Wrappers/SpecklePropertiesEditor.cs similarity index 99% rename from Packages/systems.speckle.speckle-unity/Editor/SpecklePropertiesEditor.cs rename to Packages/systems.speckle.speckle-unity/Editor/Wrappers/SpecklePropertiesEditor.cs index a77dd0a..f908f2a 100644 --- a/Packages/systems.speckle.speckle-unity/Editor/SpecklePropertiesEditor.cs +++ b/Packages/systems.speckle.speckle-unity/Editor/Wrappers/SpecklePropertiesEditor.cs @@ -11,7 +11,7 @@ using Mesh = Objects.Geometry.Mesh; using Object = UnityEngine.Object; #nullable enable -namespace Speckle.ConnectorUnity.Editor +namespace Speckle.ConnectorUnity.Wrappers.Editor { [CustomEditor(typeof(SpeckleProperties))] public class SpecklePropertiesEditor : UnityEditor.Editor diff --git a/Packages/systems.speckle.speckle-unity/Editor/SpecklePropertiesEditor.cs.meta b/Packages/systems.speckle.speckle-unity/Editor/Wrappers/SpecklePropertiesEditor.cs.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/Editor/SpecklePropertiesEditor.cs.meta rename to Packages/systems.speckle.speckle-unity/Editor/Wrappers/SpecklePropertiesEditor.cs.meta diff --git a/Packages/systems.speckle.speckle-unity/Objects/Objects.pdb b/Packages/systems.speckle.speckle-unity/Objects/Objects.pdb deleted file mode 100644 index 2a319a7..0000000 Binary files a/Packages/systems.speckle.speckle-unity/Objects/Objects.pdb and /dev/null differ diff --git a/Packages/systems.speckle.speckle-unity/Runtime.meta b/Packages/systems.speckle.speckle-unity/Runtime.meta new file mode 100644 index 0000000..f2397ff --- /dev/null +++ b/Packages/systems.speckle.speckle-unity/Runtime.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0da4f7853d174fc49ace43f3d3e5c97e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/systems.speckle.speckle-unity/Runtime/Components.meta b/Packages/systems.speckle.speckle-unity/Runtime/Components.meta new file mode 100644 index 0000000..e3c26b0 --- /dev/null +++ b/Packages/systems.speckle.speckle-unity/Runtime/Components.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 45c80e079d3d1e94e89ab9bc9b323574 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/systems.speckle.speckle-unity/Runtime/Components/Deprecated.meta b/Packages/systems.speckle.speckle-unity/Runtime/Components/Deprecated.meta new file mode 100644 index 0000000..10bb01f --- /dev/null +++ b/Packages/systems.speckle.speckle-unity/Runtime/Components/Deprecated.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 95b5ba60f7efe0046bb5639def6b3965 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/systems.speckle.speckle-unity/Receiver.cs b/Packages/systems.speckle.speckle-unity/Runtime/Components/Deprecated/Receiver.cs similarity index 97% rename from Packages/systems.speckle.speckle-unity/Receiver.cs rename to Packages/systems.speckle.speckle-unity/Runtime/Components/Deprecated/Receiver.cs index 4b98f96..f9fbbf6 100644 --- a/Packages/systems.speckle.speckle-unity/Receiver.cs +++ b/Packages/systems.speckle.speckle-unity/Runtime/Components/Deprecated/Receiver.cs @@ -1,18 +1,14 @@ -using Objects.Converter.Unity; -using Speckle.Core.Api; +using Speckle.Core.Api; using Speckle.Core.Api.SubscriptionModels; using Speckle.Core.Credentials; using Speckle.Core.Logging; -using Speckle.Core.Models; using Speckle.Core.Transports; using System; -using System.Collections; using System.Collections.Concurrent; -using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Sentry; -using Sentry.Protocol; +using Speckle.ConnectorUnity.Components; using Speckle.Core.Kits; using UnityEngine; diff --git a/Packages/systems.speckle.speckle-unity/Receiver.cs.meta b/Packages/systems.speckle.speckle-unity/Runtime/Components/Deprecated/Receiver.cs.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/Receiver.cs.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Components/Deprecated/Receiver.cs.meta diff --git a/Packages/systems.speckle.speckle-unity/Sender.cs b/Packages/systems.speckle.speckle-unity/Runtime/Components/Deprecated/Sender.cs similarity index 99% rename from Packages/systems.speckle.speckle-unity/Sender.cs rename to Packages/systems.speckle.speckle-unity/Runtime/Components/Deprecated/Sender.cs index c1a7184..5b25a84 100644 --- a/Packages/systems.speckle.speckle-unity/Sender.cs +++ b/Packages/systems.speckle.speckle-unity/Runtime/Components/Deprecated/Sender.cs @@ -9,6 +9,7 @@ using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using Sentry; +using Speckle.ConnectorUnity.Components; using Speckle.Core.Kits; using UnityEngine; using UnityEngine.SceneManagement; diff --git a/Packages/systems.speckle.speckle-unity/Sender.cs.meta b/Packages/systems.speckle.speckle-unity/Runtime/Components/Deprecated/Sender.cs.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/Sender.cs.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Components/Deprecated/Sender.cs.meta diff --git a/Packages/systems.speckle.speckle-unity/StreamManager.cs b/Packages/systems.speckle.speckle-unity/Runtime/Components/Deprecated/StreamManager.cs similarity index 94% rename from Packages/systems.speckle.speckle-unity/StreamManager.cs rename to Packages/systems.speckle.speckle-unity/Runtime/Components/Deprecated/StreamManager.cs index 49c4ea1..c886960 100644 --- a/Packages/systems.speckle.speckle-unity/StreamManager.cs +++ b/Packages/systems.speckle.speckle-unity/Runtime/Components/Deprecated/StreamManager.cs @@ -5,10 +5,11 @@ using System.Collections.Generic; using Speckle.Core.Models; using UnityEngine; -namespace Speckle.ConnectorUnity +namespace Speckle.ConnectorUnity.Components { + [Obsolete("Replaced by new " + nameof(SpeckleReceiver))] [ExecuteAlways] - [AddComponentMenu("Speckle/Stream Manager")] + [AddComponentMenu("Speckle/Obsolete/Stream Manager")] [RequireComponent(typeof(RecursiveConverter))] public class StreamManager : MonoBehaviour { diff --git a/Packages/systems.speckle.speckle-unity/StreamManager.cs.meta b/Packages/systems.speckle.speckle-unity/Runtime/Components/Deprecated/StreamManager.cs.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/StreamManager.cs.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Components/Deprecated/StreamManager.cs.meta diff --git a/Packages/systems.speckle.speckle-unity/RecursiveConverter.ToNative.cs b/Packages/systems.speckle.speckle-unity/Runtime/Components/RecursiveConverter.ToNative.cs similarity index 85% rename from Packages/systems.speckle.speckle-unity/RecursiveConverter.ToNative.cs rename to Packages/systems.speckle.speckle-unity/Runtime/Components/RecursiveConverter.ToNative.cs index bcccc3d..d83cee1 100644 --- a/Packages/systems.speckle.speckle-unity/RecursiveConverter.ToNative.cs +++ b/Packages/systems.speckle.speckle-unity/Runtime/Components/RecursiveConverter.ToNative.cs @@ -6,10 +6,21 @@ using System.Linq; using Speckle.Core.Models; using UnityEngine; -namespace Speckle.ConnectorUnity +namespace Speckle.ConnectorUnity.Components { public partial class RecursiveConverter { + public IEnumerator ConvertCoroutine(Base rootObject, Transform? parent, List outCreatedObjects) + => ConvertCoroutine(rootObject, parent, outCreatedObjects,b => ConverterInstance.CanConvertToNative(b)); + + public IEnumerator ConvertCoroutine(Base rootObject, Transform? parent, List outCreatedObjects, Func predicate) + { + foreach (string propertyName in GetPotentialChildren(rootObject)) + { + ConvertChild(rootObject[propertyName], parent, predicate, outCreatedObjects); + yield return null; + } + } /// /// Given , @@ -43,7 +54,7 @@ namespace Speckle.ConnectorUnity AssetCache.FinishWrite(); } - //TODO track event + //TODO track event? return createdGameObjects; @@ -96,9 +107,7 @@ namespace Speckle.ConnectorUnity } // For geometry, only traverse `elements` prop, otherwise, try and convert everything - IEnumerable potentialChildren = ConverterInstance.CanConvertToNative(baseObject) - ? new []{"elements"} - : baseObject.GetMembers().Keys; + IEnumerable potentialChildren = GetPotentialChildren(baseObject); // Convert Children foreach (string propertyName in potentialChildren) @@ -108,6 +117,13 @@ namespace Speckle.ConnectorUnity } + private IEnumerable GetPotentialChildren(Base baseObject) + { + return ConverterInstance.CanConvertToNative(baseObject) + ? new []{"elements"} + : baseObject.GetMembers().Keys; + } + protected virtual void ConvertChild(object? value, Transform? parent, Func predicate, IList outCreatedObjects) { diff --git a/Packages/systems.speckle.speckle-unity/RecursiveConverter.ToNative.cs.meta b/Packages/systems.speckle.speckle-unity/Runtime/Components/RecursiveConverter.ToNative.cs.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/RecursiveConverter.ToNative.cs.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Components/RecursiveConverter.ToNative.cs.meta diff --git a/Packages/systems.speckle.speckle-unity/RecursiveConverter.ToSpeckle.cs b/Packages/systems.speckle.speckle-unity/Runtime/Components/RecursiveConverter.ToSpeckle.cs similarity index 96% rename from Packages/systems.speckle.speckle-unity/RecursiveConverter.ToSpeckle.cs rename to Packages/systems.speckle.speckle-unity/Runtime/Components/RecursiveConverter.ToSpeckle.cs index dce3b1c..cc36d36 100644 --- a/Packages/systems.speckle.speckle-unity/RecursiveConverter.ToSpeckle.cs +++ b/Packages/systems.speckle.speckle-unity/Runtime/Components/RecursiveConverter.ToSpeckle.cs @@ -2,10 +2,11 @@ using System; using System.Collections.Generic; +using Speckle.ConnectorUnity.Utils; using Speckle.Core.Models; using UnityEngine; -namespace Speckle.ConnectorUnity +namespace Speckle.ConnectorUnity.Components { public partial class RecursiveConverter @@ -24,7 +25,7 @@ namespace Speckle.ConnectorUnity /// /// GameObject parent = ... /// ISet selection = ... - /// Base b = RecursivelyConvertToSpeckle(parent, o => selection.contains(o)); + /// Base b = RecursivelyConvertToSpeckle(parent, o => selection.Contains(o)); /// /// /// Root objects of a tree diff --git a/Packages/systems.speckle.speckle-unity/RecursiveConverter.ToSpeckle.cs.meta b/Packages/systems.speckle.speckle-unity/Runtime/Components/RecursiveConverter.ToSpeckle.cs.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/RecursiveConverter.ToSpeckle.cs.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Components/RecursiveConverter.ToSpeckle.cs.meta diff --git a/Packages/systems.speckle.speckle-unity/RecursiveConverter.cs b/Packages/systems.speckle.speckle-unity/Runtime/Components/RecursiveConverter.cs similarity index 89% rename from Packages/systems.speckle.speckle-unity/RecursiveConverter.cs rename to Packages/systems.speckle.speckle-unity/Runtime/Components/RecursiveConverter.cs index 307f605..176e801 100644 --- a/Packages/systems.speckle.speckle-unity/RecursiveConverter.cs +++ b/Packages/systems.speckle.speckle-unity/Runtime/Components/RecursiveConverter.cs @@ -1,10 +1,10 @@ -using Objects.Converter.Unity; +using Speckle.ConnectorUnity.Factories; using Speckle.ConnectorUnity.NativeCache; using Speckle.Core.Kits; using Speckle.Core.Logging; using UnityEngine; -namespace Speckle.ConnectorUnity +namespace Speckle.ConnectorUnity.Components { /// /// for recursive conversion of Speckle Objects to Native, and Native Objects to Speckle @@ -13,7 +13,7 @@ namespace Speckle.ConnectorUnity [ExecuteAlways, DisallowMultipleComponent] public partial class RecursiveConverter : MonoBehaviour { - public ISpeckleConverter ConverterInstance { get; set; } = new ConverterUnity(); + public ISpeckleConverter ConverterInstance { get; set; } = ConverterFactory.GetDefaultConverter(); [field: SerializeField] public AggregateNativeCache AssetCache { get; set; } diff --git a/Packages/systems.speckle.speckle-unity/Runtime/Components/RecursiveConverter.cs.meta b/Packages/systems.speckle.speckle-unity/Runtime/Components/RecursiveConverter.cs.meta new file mode 100644 index 0000000..6ddf98c --- /dev/null +++ b/Packages/systems.speckle.speckle-unity/Runtime/Components/RecursiveConverter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ed6cbf9ce4dca0349997d163ec9bce7e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 5dd4c01168f890c49859afd36640b0a9, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/systems.speckle.speckle-unity/Runtime/Components/Speckle.ConnectorUnity.Components.asmdef b/Packages/systems.speckle.speckle-unity/Runtime/Components/Speckle.ConnectorUnity.Components.asmdef new file mode 100644 index 0000000..920e120 --- /dev/null +++ b/Packages/systems.speckle.speckle-unity/Runtime/Components/Speckle.ConnectorUnity.Components.asmdef @@ -0,0 +1,20 @@ +{ + "name": "Speckle.ConnectorUnity.Components", + "rootNamespace": "Speckle.ConnectorUnity", + "references": [ + "GUID:05078f9b6da40444fbd72ec600449925", + "GUID:eed1b8b83e2c0074d9e5de2348e3ff72", + "GUID:13aec21e8e96f864bafd00df49f225fc", + "GUID:d274441ecc3eb3f43b093eec1503d681", + "GUID:50d889142fdf9de4b8501c6eaa4b3225" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Packages/systems.speckle.speckle-unity/Runtime/Components/Speckle.ConnectorUnity.Components.asmdef.meta b/Packages/systems.speckle.speckle-unity/Runtime/Components/Speckle.ConnectorUnity.Components.asmdef.meta new file mode 100644 index 0000000..0af9ffc --- /dev/null +++ b/Packages/systems.speckle.speckle-unity/Runtime/Components/Speckle.ConnectorUnity.Components.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: e6adfdc4e436206479f48eafc82f32b5 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/systems.speckle.speckle-unity/Runtime/Components/SpeckleReceiver.cs b/Packages/systems.speckle.speckle-unity/Runtime/Components/SpeckleReceiver.cs new file mode 100644 index 0000000..159e248 --- /dev/null +++ b/Packages/systems.speckle.speckle-unity/Runtime/Components/SpeckleReceiver.cs @@ -0,0 +1,338 @@ +using System; +using System.Collections; +using System.Collections.Concurrent; +using System.Diagnostics.CodeAnalysis; +using System.Runtime.CompilerServices; +using System.Threading; +using System.Threading.Tasks; +using Speckle.ConnectorUnity.Wrappers.Selection; +using Speckle.Core.Api; +using Speckle.Core.Credentials; +using Speckle.Core.Kits; +using Speckle.Core.Logging; +using Speckle.Core.Models; +using Speckle.Core.Transports; +using UnityEngine; +using UnityEngine.Events; + +[assembly: InternalsVisibleTo("Speckle.ConnectorUnity.Components.Editor")] +namespace Speckle.ConnectorUnity.Components +{ + [ExecuteAlways] + [AddComponentMenu("Speckle/Speckle Receiver")] + [RequireComponent(typeof(RecursiveConverter))] + public class SpeckleReceiver : MonoBehaviour, ISerializationCallbackReceiver + { + [field: SerializeReference] + public AccountSelection Account { get; private set; } + + [field: SerializeReference] + public StreamSelection Stream { get; private set; } + + [field: SerializeReference] + public BranchSelection Branch { get; private set; } + + [field: SerializeReference] + public CommitSelection Commit { get; private set; } + + public RecursiveConverter Converter { get; private set; } + + [Header("Events")] + [HideInInspector] + public CommitSelectionEvent OnCommitSelectionChange; + [HideInInspector] + public OperationProgressEvent OnReceiveProgressAction; + [HideInInspector] + public ErrorActionEvent OnErrorAction; + [HideInInspector] + public ChildrenCountHandler OnTotalChildrenCountKnown; + [HideInInspector] + public ReceiveCompleteHandler OnComplete; + +#nullable enable + protected internal CancellationTokenSource? CancellationTokenSource { get; private set; } + + //TODO runtime receiving + public IEnumerator ReceiveAndConvertRoutine(SpeckleReceiver speckleReceiver, string rootObjectName, Action? beforeConvertCallback = null) + { + Task receiveOperation = Task.Run(ReceiveAsync); + + yield return new WaitUntil(() => receiveOperation.IsCompleted); + + Base? b = receiveOperation.Result; + if (b == null) yield break; + + //TODO make routine break for each catergory/object + GameObject go = ConvertToNativeWithCategories(b, rootObjectName, beforeConvertCallback); + OnComplete.Invoke(go); + } + + + /// + /// Receives the selected commit object using async Task + /// + /// Awaitable commit object + /// thrown when selection is incomplete + public async Task ReceiveAsync() + { + CancellationTokenSource?.Cancel(); + CancellationTokenSource?.Dispose(); + CancellationTokenSource = new CancellationTokenSource(); + if(!GetSelection(out Client? client, out Stream? stream, out Commit? commit, out string? error)) + throw new SpeckleException(error); + + return await ReceiveAsync( + token: CancellationTokenSource.Token, + client: client, + streamId: stream.id, + objectId: commit.referencedObject, + commitId: commit.id, + onProgressAction: dict => OnReceiveProgressAction.Invoke(dict), + onErrorAction: (m, e) => OnErrorAction.Invoke(m, e), + onTotalChildrenCountKnown: c => OnTotalChildrenCountKnown.Invoke(c) + ); + } + + /// + /// Receives the requested using async Task + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public static async Task ReceiveAsync(CancellationToken token, + Client client, + string streamId, + string objectId, + string? commitId, + Action>? onProgressAction = null, + Action? onErrorAction = null, + Action? onTotalChildrenCountKnown = null) + { + ServerTransport transport = new ServerTransport(client.Account, streamId); + transport.CancellationToken = token; + + Base? ret = null; + try + { + Analytics.TrackEvent(client.Account, Analytics.Events.Receive); + + token.ThrowIfCancellationRequested(); + + ret = await Operations.Receive( + objectId: objectId, + cancellationToken: token, + remoteTransport: transport, + onProgressAction: onProgressAction, + onErrorAction: onErrorAction, + onTotalChildrenCountKnown: onTotalChildrenCountKnown, + disposeTransports: true + ); + + token.ThrowIfCancellationRequested(); + + //Read receipt + try + { + await client.CommitReceived(token, new CommitReceivedInput + { + streamId = streamId, + commitId = commitId, + message = $"received commit from {Application.unityVersion}", + sourceApplication = HostApplications.Unity.GetVersion(CoreUtils.GetHostAppVersion()) + }); + } + catch (Exception e) + { + // Do nothing! + Debug.LogWarning($"Failed to send read receipt\n{e}"); + } + } + catch (Exception e) + { + onErrorAction?.Invoke(e.Message, e); + } + finally + { + transport?.Dispose(); + } + + return ret; + } + + /// + /// Helper method for using . + /// Creates blank GameObjects for each property/category of the root object. + /// + /// The commitObject to convert + /// The name of the parent to create + /// Callback for each object converted + /// The created parent + public GameObject ConvertToNativeWithCategories(Base @base, string rootObjectName, + Action? beforeConvertCallback) + { + var rootObject = new GameObject(rootObjectName); + + bool Predicate(Base o) + { + beforeConvertCallback?.Invoke(o); + return Converter.ConverterInstance.CanConvertToNative(o) //Accept geometry + || o.speckle_type == nameof(Base) && o.totalChildrenCount > 0; // Or Base objects that have children + } + + + // For the rootObject only, we will create property GameObjects + // i.e. revit categories + foreach (var prop in @base.GetMembers()) + { + var converted = Converter.RecursivelyConvertToNative(prop.Value, null, Predicate); + + //Skip empties + if (converted.Count <= 0) continue; + + var propertyObject = new GameObject(prop.Key); + propertyObject.transform.SetParent(rootObject.transform); + foreach (var o in converted) + { + if (o.transform.parent == null) o.transform.SetParent(propertyObject.transform); + } + } + + return rootObject; + } + + /// + /// + /// + /// + /// + /// + /// error messages for + /// true if selection is complete, as we are ready to receive + public bool GetSelection( + [NotNullWhen(true)] out Client? client, + [NotNullWhen(true)] out Stream? stream, + [NotNullWhen(true)] out Commit? commit, + [NotNullWhen(false)] out string? error) + { + Account? account = Account.Selected; + stream = Stream.Selected; + commit = Commit.Selected; + + if (account == null) + { + error = "Selected Account is null"; + client = null; + return false; + } + client = Account.Client ?? new Client(account); + + if (stream == null) + { + error = "Selected Stream is null"; + return false; + } + + if (commit == null) + { + error = "Selected Commit is null"; + return false; + } + error = null; + return true; + } + + /// + /// Fetches the commit preview for the currently selected commit + /// + /// when , will fetch 360 degree preview image + /// Callback function to be called when the web request completes + /// if , , or was + public bool GetPreviewImage(/*bool allAngles,*/ Action callback) + { + Account? account = Account.Selected; + if (account == null) return false; + string? streamId = Stream.Selected?.id; + if (streamId == null) return false; + string? commitId = Commit.Selected?.id; + if (commitId == null) return false; + + string angles = /*allAngles ? "all" :*/ ""; + string url = $"{account.serverInfo.url}/preview/{streamId}/commits/{commitId}/{angles}"; + string authToken = account.token; + + StartCoroutine(Utils.Utils.GetImageRoutine(url, authToken, callback)); + return true; + } + +#if UNITY_EDITOR + [ContextMenu("Open Speckle Stream in Browser")] + protected void OpenUrlInBrowser() + { + string url = GetSelectedUrl(); + Application.OpenURL(url); + } +#endif + public string GetSelectedUrl() + { + string serverUrl = Account.Selected!.serverInfo.url; + string? streamId = Stream.Selected?.id; + string? branchName = Branch.Selected?.name; + string? commitId = Commit.Selected?.id; + + if (string.IsNullOrEmpty(streamId)) return serverUrl; + if (!string.IsNullOrEmpty(commitId)) return $"{serverUrl}/streams/{streamId}/commits/{commitId}"; + if (!string.IsNullOrEmpty(branchName)) return $"{serverUrl}/streams/{streamId}/branches/{branchName}"; + return $"{serverUrl}/streams/{streamId}"; + } + + public void Awake() + { + CoreUtils.SetupInit(); + Converter = GetComponent(); + Initialise(true); + } + + protected void Initialise(bool forceRefresh = false) + { + Account ??= new AccountSelection(); + Stream ??= new StreamSelection(Account); + Branch ??= new BranchSelection(Stream); + Commit ??= new CommitSelection(Branch); + Stream.Initialise(); + Branch.Initialise(); + Commit.Initialise(); + Commit.OnSelectionChange = + () => OnCommitSelectionChange?.Invoke(Commit.Selected); + if(Account.Options is not {Length: > 0} || forceRefresh) + Account.RefreshOptions(); + } + + public void OnDestroy() + { + CancellationTokenSource?.Cancel(); + CancellationTokenSource?.Dispose(); + } + + public void OnBeforeSerialize() + { + //pass + } + public void OnAfterDeserialize() + { + Initialise(); + } + } + + [Serializable] public sealed class CommitSelectionEvent : UnityEvent { } + [Serializable] public sealed class BranchSelectionEvent : UnityEvent { } + [Serializable] public sealed class ErrorActionEvent : UnityEvent { } + [Serializable] public sealed class OperationProgressEvent : UnityEvent> { } + [Serializable] public sealed class ReceiveCompleteHandler : UnityEvent { } + [Serializable] public sealed class ChildrenCountHandler : UnityEvent { } +} diff --git a/Packages/systems.speckle.speckle-unity/Runtime/Components/SpeckleReceiver.cs.meta b/Packages/systems.speckle.speckle-unity/Runtime/Components/SpeckleReceiver.cs.meta new file mode 100644 index 0000000..3ece3da --- /dev/null +++ b/Packages/systems.speckle.speckle-unity/Runtime/Components/SpeckleReceiver.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0bc895f6cb37b674995dc13b79783c55 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 4e64a121cf44e1846907649ee8b15dd3, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/systems.speckle.speckle-unity/Runtime/Components/SpeckleSender.cs b/Packages/systems.speckle.speckle-unity/Runtime/Components/SpeckleSender.cs new file mode 100644 index 0000000..667d986 --- /dev/null +++ b/Packages/systems.speckle.speckle-unity/Runtime/Components/SpeckleSender.cs @@ -0,0 +1,216 @@ +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Threading; +using System.Threading.Tasks; +using Speckle.ConnectorUnity.Wrappers.Selection; +using Speckle.Core.Api; +using Speckle.Core.Credentials; +using Speckle.Core.Kits; +using Speckle.Core.Logging; +using Speckle.Core.Models; +using Speckle.Core.Transports; +using UnityEngine; + +namespace Speckle.ConnectorUnity.Components +{ + [ExecuteAlways] + [AddComponentMenu("Speckle/Speckle Sender")] + [RequireComponent(typeof(RecursiveConverter))] + public class SpeckleSender : MonoBehaviour, ISerializationCallbackReceiver + { + [field: SerializeReference] + public AccountSelection Account { get; private set; } + + [field: SerializeReference] + public StreamSelection Stream { get; private set; } + + [field: SerializeReference] + public BranchSelection Branch { get; private set; } + + public RecursiveConverter Converter { get; private set; } + + [Header("Events")] + [HideInInspector] + public BranchSelectionEvent OnBranchSelectionChange; + [HideInInspector] + public ErrorActionEvent OnErrorAction; + [HideInInspector] + public OperationProgressEvent OnSendProgressAction; +#nullable enable + protected internal CancellationTokenSource? CancellationTokenSource { get; private set; } + + //TODO runtime sending + + public async Task SendDataAsync(Base data, bool createCommit) + { + CancellationTokenSource?.Cancel(); + CancellationTokenSource?.Dispose(); + CancellationTokenSource = new CancellationTokenSource(); + if(!GetSelection(out Client? client, out Stream? stream, out Branch? branch, out string? error)) + throw new SpeckleException(error); + + ServerTransport transport = new ServerTransport(client.Account, stream.id); + transport.CancellationToken = CancellationTokenSource.Token; + + return await SendDataAsync(CancellationTokenSource.Token, + remoteTransport: transport, + data: data, + client: client, + branchName: branch.name, + createCommit: createCommit, + onProgressAction: dict => OnSendProgressAction.Invoke(dict), + onErrorAction: (m, e) => OnErrorAction.Invoke(m, e) + ); + } + + public static async Task SendDataAsync(CancellationToken cancellationToken, + ServerTransport remoteTransport, + Base data, + Client client, + string branchName, + bool createCommit, + Action>? onProgressAction = null, + Action? onErrorAction = null) + { + string res = await Operations.Send( + data, + cancellationToken: cancellationToken, + new List{remoteTransport}, + useDefaultCache: true, + disposeTransports: true, + onProgressAction: onProgressAction, + onErrorAction: onErrorAction + ); + + Analytics.TrackEvent(client.Account, Analytics.Events.Send); + + if (createCommit && !cancellationToken.IsCancellationRequested) + { + string streamId = remoteTransport.StreamId; + string unityVer = $"Unity {Application.unityVersion.Substring(0,6)}"; + data.totalChildrenCount = data.GetTotalChildrenCount(); + string commitMessage = $"Sent {data.totalChildrenCount} objects from {unityVer}"; + + string commitId = await CreateCommit(cancellationToken, data, client, streamId, branchName, res, commitMessage); + string url = $"{client.ServerUrl}/streams/{streamId}/commits/{commitId}"; + Debug.Log($"Data successfully sent to {url}"); + } + + return res; + } + + public static async Task CreateCommit(CancellationToken cancellationToken, + Base data, + Client client, + string streamId, + string branchName, + string objectId, + string message) + { + string commitId = await client.CommitCreate(cancellationToken, + new CommitCreateInput + { + streamId = streamId, + branchName = branchName, + objectId = objectId, + message = message, + sourceApplication = HostApplications.Unity.GetVersion(CoreUtils.GetHostAppVersion()), + totalChildrenCount = (int)data.totalChildrenCount, + }); + + return commitId; + } + + public bool GetSelection( + [NotNullWhen(true)] out Client? client, + [NotNullWhen(true)] out Stream? stream, + [NotNullWhen(true)] out Branch? branch, + [NotNullWhen(false)] out string? error) + { + Account? account = Account.Selected; + stream = Stream.Selected; + branch = Branch.Selected; + + if (account == null) + { + error = "Selected Account is null"; + client = null; + return false; + } + client = Account.Client ?? new Client(account); + + if (stream == null) + { + error = "Selected Stream is null"; + return false; + } + + if (branch == null) + { + error = "Selected Branch is null"; + return false; + } + error = null; + return true; + } + + +#if UNITY_EDITOR + [ContextMenu("Open Speckle Stream in Browser")] + protected void OpenUrlInBrowser() + { + string url = GetSelectedUrl(); + Application.OpenURL(url); + } +#endif + public string GetSelectedUrl() + { + string serverUrl = Account.Selected!.serverInfo.url; + string? streamId = Stream.Selected?.id; + string? branchName = Branch.Selected?.name; + + if (string.IsNullOrEmpty(streamId)) return serverUrl; + if (!string.IsNullOrEmpty(branchName)) return $"{serverUrl}/streams/{streamId}/branches/{branchName}"; + return $"{serverUrl}/streams/{streamId}"; + } + + + public void Awake() + { + CoreUtils.SetupInit(); + Initialise(true); + Converter = GetComponent(); + } + + protected void Initialise(bool forceRefresh = false) + { + Account ??= new AccountSelection(); + Stream ??= new StreamSelection(Account); + Branch ??= new BranchSelection(Stream); + Branch.CommitsLimit = 0; + Stream.Initialise(); + Branch.Initialise(); + Branch.OnSelectionChange = () => OnBranchSelectionChange?.Invoke(Branch.Selected); + if(Account.Options is not {Length: > 0} || forceRefresh) + Account.RefreshOptions(); + } + + public void OnDestroy() + { + CancellationTokenSource?.Cancel(); + CancellationTokenSource?.Dispose(); + } + + public void OnBeforeSerialize() + { + //pass + } + public void OnAfterDeserialize() + { + Initialise(); + } + + } +} diff --git a/Packages/systems.speckle.speckle-unity/Runtime/Components/SpeckleSender.cs.meta b/Packages/systems.speckle.speckle-unity/Runtime/Components/SpeckleSender.cs.meta new file mode 100644 index 0000000..c376e45 --- /dev/null +++ b/Packages/systems.speckle.speckle-unity/Runtime/Components/SpeckleSender.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b95e704835cc48444b81e33c978f6f7f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 165f717696d10fb4e82b83c3d7bc9e7c, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/systems.speckle.speckle-unity/Runtime/Converter.meta b/Packages/systems.speckle.speckle-unity/Runtime/Converter.meta new file mode 100644 index 0000000..a2e8d05 --- /dev/null +++ b/Packages/systems.speckle.speckle-unity/Runtime/Converter.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0c217e30ac070cd40aebb71976cace11 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/systems.speckle.speckle-unity/Runtime/Converter/Unity.meta b/Packages/systems.speckle.speckle-unity/Runtime/Converter/Unity.meta new file mode 100644 index 0000000..dbe7bc6 --- /dev/null +++ b/Packages/systems.speckle.speckle-unity/Runtime/Converter/Unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b80ae365e844a2e4a943d96b25654c35 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/systems.speckle.speckle-unity/Runtime/Converter/Unity/Converter.asmdef b/Packages/systems.speckle.speckle-unity/Runtime/Converter/Unity/Converter.asmdef new file mode 100644 index 0000000..57eb706 --- /dev/null +++ b/Packages/systems.speckle.speckle-unity/Runtime/Converter/Unity/Converter.asmdef @@ -0,0 +1,18 @@ +{ + "name": "Objects.Converter", + "rootNamespace": "Objects", + "references": [ + "GUID:05078f9b6da40444fbd72ec600449925", + "GUID:d274441ecc3eb3f43b093eec1503d681", + "GUID:50d889142fdf9de4b8501c6eaa4b3225" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Packages/systems.speckle.speckle-unity/Runtime/Converter/Unity/Converter.asmdef.meta b/Packages/systems.speckle.speckle-unity/Runtime/Converter/Unity/Converter.asmdef.meta new file mode 100644 index 0000000..3583fb1 --- /dev/null +++ b/Packages/systems.speckle.speckle-unity/Runtime/Converter/Unity/Converter.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 7383cd71541a2aa48a7baf23f74b4d5f +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/systems.speckle.speckle-unity/ConverterUnity.BuiltElements.cs b/Packages/systems.speckle.speckle-unity/Runtime/Converter/Unity/ConverterUnity.BuiltElements.cs similarity index 100% rename from Packages/systems.speckle.speckle-unity/ConverterUnity.BuiltElements.cs rename to Packages/systems.speckle.speckle-unity/Runtime/Converter/Unity/ConverterUnity.BuiltElements.cs diff --git a/Packages/systems.speckle.speckle-unity/ConverterUnity.BuiltElements.cs.meta b/Packages/systems.speckle.speckle-unity/Runtime/Converter/Unity/ConverterUnity.BuiltElements.cs.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/ConverterUnity.BuiltElements.cs.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Converter/Unity/ConverterUnity.BuiltElements.cs.meta diff --git a/Packages/systems.speckle.speckle-unity/ConverterUnity.Geometry.cs b/Packages/systems.speckle.speckle-unity/Runtime/Converter/Unity/ConverterUnity.Geometry.cs similarity index 99% rename from Packages/systems.speckle.speckle-unity/ConverterUnity.Geometry.cs rename to Packages/systems.speckle.speckle-unity/Runtime/Converter/Unity/ConverterUnity.Geometry.cs index 471b4f9..0c6f6ba 100644 --- a/Packages/systems.speckle.speckle-unity/ConverterUnity.Geometry.cs +++ b/Packages/systems.speckle.speckle-unity/Runtime/Converter/Unity/ConverterUnity.Geometry.cs @@ -1,12 +1,12 @@ using System; using Objects.Geometry; using System.Collections.Generic; -using System.IO; using System.Linq; using System.Reflection; using Objects.Other; -using Speckle.ConnectorUnity; using Speckle.ConnectorUnity.NativeCache; +using Speckle.ConnectorUnity.Utils; +using Speckle.ConnectorUnity.Wrappers; using Speckle.Core.Logging; using Speckle.Core.Models; using UnityEditor; diff --git a/Packages/systems.speckle.speckle-unity/ConverterUnity.Geometry.cs.meta b/Packages/systems.speckle.speckle-unity/Runtime/Converter/Unity/ConverterUnity.Geometry.cs.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/ConverterUnity.Geometry.cs.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Converter/Unity/ConverterUnity.Geometry.cs.meta diff --git a/Packages/systems.speckle.speckle-unity/ConverterUnity.Mesh.cs b/Packages/systems.speckle.speckle-unity/Runtime/Converter/Unity/ConverterUnity.Mesh.cs similarity index 98% rename from Packages/systems.speckle.speckle-unity/ConverterUnity.Mesh.cs rename to Packages/systems.speckle.speckle-unity/Runtime/Converter/Unity/ConverterUnity.Mesh.cs index 244d6a3..f4f60fe 100644 --- a/Packages/systems.speckle.speckle-unity/ConverterUnity.Mesh.cs +++ b/Packages/systems.speckle.speckle-unity/Runtime/Converter/Unity/ConverterUnity.Mesh.cs @@ -2,9 +2,9 @@ using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Linq; +using Speckle.ConnectorUnity.Utils; using Objects.Other; using Objects.Utils; -using Speckle.ConnectorUnity; using Speckle.ConnectorUnity.NativeCache; using Speckle.Core.Models; using UnityEngine; @@ -30,10 +30,11 @@ namespace Objects.Converter.Unity public virtual List? MeshToSpeckle(MeshFilter meshFilter) { - Material[]? materials = meshFilter.GetComponent()?.materials; #if UNITY_EDITOR + Material[]? materials = meshFilter.GetComponent()?.sharedMaterials; var nativeMesh = meshFilter.sharedMesh; #else + Material[]? materials = meshFilter.GetComponent()?.materials; var nativeMesh = meshFilter.mesh; #endif if (nativeMesh == null) return null; @@ -285,7 +286,7 @@ namespace Objects.Converter.Unity => MeshToNativeMesh(meshes, out nativeMesh, out _, false); - /// + /// /// when true, will recenter vertices /// Center position for the mesh public void MeshToNativeMesh(IReadOnlyCollection meshes, diff --git a/Packages/systems.speckle.speckle-unity/ConverterUnity.Mesh.cs.meta b/Packages/systems.speckle.speckle-unity/Runtime/Converter/Unity/ConverterUnity.Mesh.cs.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/ConverterUnity.Mesh.cs.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Converter/Unity/ConverterUnity.Mesh.cs.meta diff --git a/Packages/systems.speckle.speckle-unity/ConverterUnity.Units.cs b/Packages/systems.speckle.speckle-unity/Runtime/Converter/Unity/ConverterUnity.Units.cs similarity index 100% rename from Packages/systems.speckle.speckle-unity/ConverterUnity.Units.cs rename to Packages/systems.speckle.speckle-unity/Runtime/Converter/Unity/ConverterUnity.Units.cs diff --git a/Packages/systems.speckle.speckle-unity/ConverterUnity.Units.cs.meta b/Packages/systems.speckle.speckle-unity/Runtime/Converter/Unity/ConverterUnity.Units.cs.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/ConverterUnity.Units.cs.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Converter/Unity/ConverterUnity.Units.cs.meta diff --git a/Packages/systems.speckle.speckle-unity/ConverterUnity.cs b/Packages/systems.speckle.speckle-unity/Runtime/Converter/Unity/ConverterUnity.cs similarity index 99% rename from Packages/systems.speckle.speckle-unity/ConverterUnity.cs rename to Packages/systems.speckle.speckle-unity/Runtime/Converter/Unity/ConverterUnity.cs index e8a2577..a5436fd 100644 --- a/Packages/systems.speckle.speckle-unity/ConverterUnity.cs +++ b/Packages/systems.speckle.speckle-unity/Runtime/Converter/Unity/ConverterUnity.cs @@ -6,8 +6,9 @@ using System.Collections.Generic; using System.Linq; using Objects.BuiltElements; using Objects.Other; -using Speckle.ConnectorUnity; +using Speckle.ConnectorUnity.Utils; using Speckle.ConnectorUnity.NativeCache; +using Speckle.ConnectorUnity.Wrappers; using UnityEngine; using Mesh = Objects.Geometry.Mesh; using Object = UnityEngine.Object; diff --git a/Packages/systems.speckle.speckle-unity/ConverterUnity.cs.meta b/Packages/systems.speckle.speckle-unity/Runtime/Converter/Unity/ConverterUnity.cs.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/ConverterUnity.cs.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Converter/Unity/ConverterUnity.cs.meta diff --git a/Packages/systems.speckle.speckle-unity/Core.meta b/Packages/systems.speckle.speckle-unity/Runtime/Core.meta similarity index 77% rename from Packages/systems.speckle.speckle-unity/Core.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Core.meta index cd91442..f64570e 100644 --- a/Packages/systems.speckle.speckle-unity/Core.meta +++ b/Packages/systems.speckle.speckle-unity/Runtime/Core.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 20fa550ba5944159a7676339936db5dd +guid: f434d359a9ac0f342be2b2f2128af995 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Packages/systems.speckle.speckle-unity/Core/GraphQL.Client.Abstractions.Websocket.dll b/Packages/systems.speckle.speckle-unity/Runtime/Core/GraphQL.Client.Abstractions.Websocket.dll similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/GraphQL.Client.Abstractions.Websocket.dll rename to Packages/systems.speckle.speckle-unity/Runtime/Core/GraphQL.Client.Abstractions.Websocket.dll diff --git a/Packages/systems.speckle.speckle-unity/Core/GraphQL.Client.Abstractions.Websocket.dll.meta b/Packages/systems.speckle.speckle-unity/Runtime/Core/GraphQL.Client.Abstractions.Websocket.dll.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/GraphQL.Client.Abstractions.Websocket.dll.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Core/GraphQL.Client.Abstractions.Websocket.dll.meta diff --git a/Packages/systems.speckle.speckle-unity/Core/GraphQL.Client.Abstractions.dll b/Packages/systems.speckle.speckle-unity/Runtime/Core/GraphQL.Client.Abstractions.dll similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/GraphQL.Client.Abstractions.dll rename to Packages/systems.speckle.speckle-unity/Runtime/Core/GraphQL.Client.Abstractions.dll diff --git a/Packages/systems.speckle.speckle-unity/Core/GraphQL.Client.Abstractions.dll.meta b/Packages/systems.speckle.speckle-unity/Runtime/Core/GraphQL.Client.Abstractions.dll.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/GraphQL.Client.Abstractions.dll.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Core/GraphQL.Client.Abstractions.dll.meta diff --git a/Packages/systems.speckle.speckle-unity/Core/GraphQL.Client.dll b/Packages/systems.speckle.speckle-unity/Runtime/Core/GraphQL.Client.dll similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/GraphQL.Client.dll rename to Packages/systems.speckle.speckle-unity/Runtime/Core/GraphQL.Client.dll diff --git a/Packages/systems.speckle.speckle-unity/Core/GraphQL.Client.dll.meta b/Packages/systems.speckle.speckle-unity/Runtime/Core/GraphQL.Client.dll.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/GraphQL.Client.dll.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Core/GraphQL.Client.dll.meta diff --git a/Packages/systems.speckle.speckle-unity/Core/GraphQL.Primitives.dll b/Packages/systems.speckle.speckle-unity/Runtime/Core/GraphQL.Primitives.dll similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/GraphQL.Primitives.dll rename to Packages/systems.speckle.speckle-unity/Runtime/Core/GraphQL.Primitives.dll diff --git a/Packages/systems.speckle.speckle-unity/Core/GraphQL.Primitives.dll.meta b/Packages/systems.speckle.speckle-unity/Runtime/Core/GraphQL.Primitives.dll.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/GraphQL.Primitives.dll.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Core/GraphQL.Primitives.dll.meta diff --git a/Packages/systems.speckle.speckle-unity/Core/Microsoft.Bcl.AsyncInterfaces.dll b/Packages/systems.speckle.speckle-unity/Runtime/Core/Microsoft.Bcl.AsyncInterfaces.dll similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/Microsoft.Bcl.AsyncInterfaces.dll rename to Packages/systems.speckle.speckle-unity/Runtime/Core/Microsoft.Bcl.AsyncInterfaces.dll diff --git a/Packages/systems.speckle.speckle-unity/Core/Microsoft.Bcl.AsyncInterfaces.dll.meta b/Packages/systems.speckle.speckle-unity/Runtime/Core/Microsoft.Bcl.AsyncInterfaces.dll.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/Microsoft.Bcl.AsyncInterfaces.dll.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Core/Microsoft.Bcl.AsyncInterfaces.dll.meta diff --git a/Packages/systems.speckle.speckle-unity/Core/Microsoft.Data.Sqlite.dll b/Packages/systems.speckle.speckle-unity/Runtime/Core/Microsoft.Data.Sqlite.dll similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/Microsoft.Data.Sqlite.dll rename to Packages/systems.speckle.speckle-unity/Runtime/Core/Microsoft.Data.Sqlite.dll diff --git a/Packages/systems.speckle.speckle-unity/Core/Microsoft.Data.Sqlite.dll.meta b/Packages/systems.speckle.speckle-unity/Runtime/Core/Microsoft.Data.Sqlite.dll.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/Microsoft.Data.Sqlite.dll.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Core/Microsoft.Data.Sqlite.dll.meta diff --git a/Packages/systems.speckle.speckle-unity/Core/SQLitePCLRaw.batteries_v2.dll b/Packages/systems.speckle.speckle-unity/Runtime/Core/SQLitePCLRaw.batteries_v2.dll similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/SQLitePCLRaw.batteries_v2.dll rename to Packages/systems.speckle.speckle-unity/Runtime/Core/SQLitePCLRaw.batteries_v2.dll diff --git a/Packages/systems.speckle.speckle-unity/Core/SQLitePCLRaw.batteries_v2.dll.meta b/Packages/systems.speckle.speckle-unity/Runtime/Core/SQLitePCLRaw.batteries_v2.dll.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/SQLitePCLRaw.batteries_v2.dll.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Core/SQLitePCLRaw.batteries_v2.dll.meta diff --git a/Packages/systems.speckle.speckle-unity/Core/SQLitePCLRaw.core.dll b/Packages/systems.speckle.speckle-unity/Runtime/Core/SQLitePCLRaw.core.dll similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/SQLitePCLRaw.core.dll rename to Packages/systems.speckle.speckle-unity/Runtime/Core/SQLitePCLRaw.core.dll diff --git a/Packages/systems.speckle.speckle-unity/Core/SQLitePCLRaw.core.dll.meta b/Packages/systems.speckle.speckle-unity/Runtime/Core/SQLitePCLRaw.core.dll.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/SQLitePCLRaw.core.dll.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Core/SQLitePCLRaw.core.dll.meta diff --git a/Packages/systems.speckle.speckle-unity/Core/SQLitePCLRaw.provider.e_sqlite3.dll b/Packages/systems.speckle.speckle-unity/Runtime/Core/SQLitePCLRaw.provider.e_sqlite3.dll similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/SQLitePCLRaw.provider.e_sqlite3.dll rename to Packages/systems.speckle.speckle-unity/Runtime/Core/SQLitePCLRaw.provider.e_sqlite3.dll diff --git a/Packages/systems.speckle.speckle-unity/Core/SQLitePCLRaw.provider.e_sqlite3.dll.meta b/Packages/systems.speckle.speckle-unity/Runtime/Core/SQLitePCLRaw.provider.e_sqlite3.dll.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/SQLitePCLRaw.provider.e_sqlite3.dll.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Core/SQLitePCLRaw.provider.e_sqlite3.dll.meta diff --git a/Packages/systems.speckle.speckle-unity/Core/Sentry.dll b/Packages/systems.speckle.speckle-unity/Runtime/Core/Sentry.dll similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/Sentry.dll rename to Packages/systems.speckle.speckle-unity/Runtime/Core/Sentry.dll diff --git a/Packages/systems.speckle.speckle-unity/Core/Sentry.dll.meta b/Packages/systems.speckle.speckle-unity/Runtime/Core/Sentry.dll.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/Sentry.dll.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Core/Sentry.dll.meta diff --git a/Packages/systems.speckle.speckle-unity/Core/Speckle.Newtonsoft.Json.dll b/Packages/systems.speckle.speckle-unity/Runtime/Core/Speckle.Newtonsoft.Json.dll similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/Speckle.Newtonsoft.Json.dll rename to Packages/systems.speckle.speckle-unity/Runtime/Core/Speckle.Newtonsoft.Json.dll diff --git a/Packages/systems.speckle.speckle-unity/Core/Speckle.Newtonsoft.Json.dll.meta b/Packages/systems.speckle.speckle-unity/Runtime/Core/Speckle.Newtonsoft.Json.dll.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/Speckle.Newtonsoft.Json.dll.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Core/Speckle.Newtonsoft.Json.dll.meta diff --git a/Packages/systems.speckle.speckle-unity/Core/SpeckleCore2.deps.json b/Packages/systems.speckle.speckle-unity/Runtime/Core/SpeckleCore2.deps.json similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/SpeckleCore2.deps.json rename to Packages/systems.speckle.speckle-unity/Runtime/Core/SpeckleCore2.deps.json diff --git a/Packages/systems.speckle.speckle-unity/Core/SpeckleCore2.deps.json.meta b/Packages/systems.speckle.speckle-unity/Runtime/Core/SpeckleCore2.deps.json.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/SpeckleCore2.deps.json.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Core/SpeckleCore2.deps.json.meta diff --git a/Packages/systems.speckle.speckle-unity/Core/SpeckleCore2.dll b/Packages/systems.speckle.speckle-unity/Runtime/Core/SpeckleCore2.dll similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/SpeckleCore2.dll rename to Packages/systems.speckle.speckle-unity/Runtime/Core/SpeckleCore2.dll diff --git a/Packages/systems.speckle.speckle-unity/Core/SpeckleCore2.dll.meta b/Packages/systems.speckle.speckle-unity/Runtime/Core/SpeckleCore2.dll.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/SpeckleCore2.dll.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Core/SpeckleCore2.dll.meta diff --git a/Packages/systems.speckle.speckle-unity/Core/SpeckleCore2.xml b/Packages/systems.speckle.speckle-unity/Runtime/Core/SpeckleCore2.xml similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/SpeckleCore2.xml rename to Packages/systems.speckle.speckle-unity/Runtime/Core/SpeckleCore2.xml diff --git a/Packages/systems.speckle.speckle-unity/Core/SpeckleCore2.xml.meta b/Packages/systems.speckle.speckle-unity/Runtime/Core/SpeckleCore2.xml.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/SpeckleCore2.xml.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Core/SpeckleCore2.xml.meta diff --git a/Packages/systems.speckle.speckle-unity/Core/System.Buffers.dll b/Packages/systems.speckle.speckle-unity/Runtime/Core/System.Buffers.dll similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/System.Buffers.dll rename to Packages/systems.speckle.speckle-unity/Runtime/Core/System.Buffers.dll diff --git a/Packages/systems.speckle.speckle-unity/Core/System.Buffers.dll.meta b/Packages/systems.speckle.speckle-unity/Runtime/Core/System.Buffers.dll.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/System.Buffers.dll.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Core/System.Buffers.dll.meta diff --git a/Packages/systems.speckle.speckle-unity/Core/System.Collections.Immutable.dll b/Packages/systems.speckle.speckle-unity/Runtime/Core/System.Collections.Immutable.dll similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/System.Collections.Immutable.dll rename to Packages/systems.speckle.speckle-unity/Runtime/Core/System.Collections.Immutable.dll diff --git a/Packages/systems.speckle.speckle-unity/Core/System.Collections.Immutable.dll.meta b/Packages/systems.speckle.speckle-unity/Runtime/Core/System.Collections.Immutable.dll.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/System.Collections.Immutable.dll.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Core/System.Collections.Immutable.dll.meta diff --git a/Packages/systems.speckle.speckle-unity/Core/System.Memory.dll b/Packages/systems.speckle.speckle-unity/Runtime/Core/System.Memory.dll similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/System.Memory.dll rename to Packages/systems.speckle.speckle-unity/Runtime/Core/System.Memory.dll diff --git a/Packages/systems.speckle.speckle-unity/Core/System.Memory.dll.meta b/Packages/systems.speckle.speckle-unity/Runtime/Core/System.Memory.dll.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/System.Memory.dll.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Core/System.Memory.dll.meta diff --git a/Packages/systems.speckle.speckle-unity/Core/System.Numerics.Vectors.dll b/Packages/systems.speckle.speckle-unity/Runtime/Core/System.Numerics.Vectors.dll similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/System.Numerics.Vectors.dll rename to Packages/systems.speckle.speckle-unity/Runtime/Core/System.Numerics.Vectors.dll diff --git a/Packages/systems.speckle.speckle-unity/Core/System.Numerics.Vectors.dll.meta b/Packages/systems.speckle.speckle-unity/Runtime/Core/System.Numerics.Vectors.dll.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/System.Numerics.Vectors.dll.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Core/System.Numerics.Vectors.dll.meta diff --git a/Packages/systems.speckle.speckle-unity/Core/System.Reactive.dll b/Packages/systems.speckle.speckle-unity/Runtime/Core/System.Reactive.dll similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/System.Reactive.dll rename to Packages/systems.speckle.speckle-unity/Runtime/Core/System.Reactive.dll diff --git a/Packages/systems.speckle.speckle-unity/Core/System.Reactive.dll.meta b/Packages/systems.speckle.speckle-unity/Runtime/Core/System.Reactive.dll.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/System.Reactive.dll.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Core/System.Reactive.dll.meta diff --git a/Packages/systems.speckle.speckle-unity/Core/System.Reflection.Metadata.dll b/Packages/systems.speckle.speckle-unity/Runtime/Core/System.Reflection.Metadata.dll similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/System.Reflection.Metadata.dll rename to Packages/systems.speckle.speckle-unity/Runtime/Core/System.Reflection.Metadata.dll diff --git a/Packages/systems.speckle.speckle-unity/Core/System.Reflection.Metadata.dll.meta b/Packages/systems.speckle.speckle-unity/Runtime/Core/System.Reflection.Metadata.dll.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/System.Reflection.Metadata.dll.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Core/System.Reflection.Metadata.dll.meta diff --git a/Packages/systems.speckle.speckle-unity/Core/System.Runtime.CompilerServices.Unsafe.dll b/Packages/systems.speckle.speckle-unity/Runtime/Core/System.Runtime.CompilerServices.Unsafe.dll similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/System.Runtime.CompilerServices.Unsafe.dll rename to Packages/systems.speckle.speckle-unity/Runtime/Core/System.Runtime.CompilerServices.Unsafe.dll diff --git a/Packages/systems.speckle.speckle-unity/Core/System.Runtime.CompilerServices.Unsafe.dll.meta b/Packages/systems.speckle.speckle-unity/Runtime/Core/System.Runtime.CompilerServices.Unsafe.dll.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/System.Runtime.CompilerServices.Unsafe.dll.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Core/System.Runtime.CompilerServices.Unsafe.dll.meta diff --git a/Packages/systems.speckle.speckle-unity/Core/System.Text.Encodings.Web.dll b/Packages/systems.speckle.speckle-unity/Runtime/Core/System.Text.Encodings.Web.dll similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/System.Text.Encodings.Web.dll rename to Packages/systems.speckle.speckle-unity/Runtime/Core/System.Text.Encodings.Web.dll diff --git a/Packages/systems.speckle.speckle-unity/Core/System.Text.Encodings.Web.dll.meta b/Packages/systems.speckle.speckle-unity/Runtime/Core/System.Text.Encodings.Web.dll.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/System.Text.Encodings.Web.dll.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Core/System.Text.Encodings.Web.dll.meta diff --git a/Packages/systems.speckle.speckle-unity/Core/System.Text.Json.dll b/Packages/systems.speckle.speckle-unity/Runtime/Core/System.Text.Json.dll similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/System.Text.Json.dll rename to Packages/systems.speckle.speckle-unity/Runtime/Core/System.Text.Json.dll diff --git a/Packages/systems.speckle.speckle-unity/Core/System.Text.Json.dll.meta b/Packages/systems.speckle.speckle-unity/Runtime/Core/System.Text.Json.dll.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/System.Text.Json.dll.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Core/System.Text.Json.dll.meta diff --git a/Packages/systems.speckle.speckle-unity/Core/System.Threading.Tasks.Extensions.dll b/Packages/systems.speckle.speckle-unity/Runtime/Core/System.Threading.Tasks.Extensions.dll similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/System.Threading.Tasks.Extensions.dll rename to Packages/systems.speckle.speckle-unity/Runtime/Core/System.Threading.Tasks.Extensions.dll diff --git a/Packages/systems.speckle.speckle-unity/Core/System.Threading.Tasks.Extensions.dll.meta b/Packages/systems.speckle.speckle-unity/Runtime/Core/System.Threading.Tasks.Extensions.dll.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/System.Threading.Tasks.Extensions.dll.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Core/System.Threading.Tasks.Extensions.dll.meta diff --git a/Packages/systems.speckle.speckle-unity/Core/linux-arm.meta b/Packages/systems.speckle.speckle-unity/Runtime/Core/linux-arm.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/linux-arm.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Core/linux-arm.meta diff --git a/Packages/systems.speckle.speckle-unity/Core/linux-arm/native.meta b/Packages/systems.speckle.speckle-unity/Runtime/Core/linux-arm/native.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/linux-arm/native.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Core/linux-arm/native.meta diff --git a/Packages/systems.speckle.speckle-unity/Core/linux-arm/native/libe_sqlite3.so b/Packages/systems.speckle.speckle-unity/Runtime/Core/linux-arm/native/libe_sqlite3.so similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/linux-arm/native/libe_sqlite3.so rename to Packages/systems.speckle.speckle-unity/Runtime/Core/linux-arm/native/libe_sqlite3.so diff --git a/Packages/systems.speckle.speckle-unity/Core/linux-arm/native/libe_sqlite3.so.meta b/Packages/systems.speckle.speckle-unity/Runtime/Core/linux-arm/native/libe_sqlite3.so.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/linux-arm/native/libe_sqlite3.so.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Core/linux-arm/native/libe_sqlite3.so.meta diff --git a/Packages/systems.speckle.speckle-unity/Core/linux-arm64.meta b/Packages/systems.speckle.speckle-unity/Runtime/Core/linux-arm64.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/linux-arm64.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Core/linux-arm64.meta diff --git a/Packages/systems.speckle.speckle-unity/Core/linux-arm64/native.meta b/Packages/systems.speckle.speckle-unity/Runtime/Core/linux-arm64/native.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/linux-arm64/native.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Core/linux-arm64/native.meta diff --git a/Packages/systems.speckle.speckle-unity/Core/linux-arm64/native/libe_sqlite3.so b/Packages/systems.speckle.speckle-unity/Runtime/Core/linux-arm64/native/libe_sqlite3.so similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/linux-arm64/native/libe_sqlite3.so rename to Packages/systems.speckle.speckle-unity/Runtime/Core/linux-arm64/native/libe_sqlite3.so diff --git a/Packages/systems.speckle.speckle-unity/Core/linux-arm64/native/libe_sqlite3.so.meta b/Packages/systems.speckle.speckle-unity/Runtime/Core/linux-arm64/native/libe_sqlite3.so.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/linux-arm64/native/libe_sqlite3.so.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Core/linux-arm64/native/libe_sqlite3.so.meta diff --git a/Packages/systems.speckle.speckle-unity/Core/linux-x64.meta b/Packages/systems.speckle.speckle-unity/Runtime/Core/linux-x64.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/linux-x64.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Core/linux-x64.meta diff --git a/Packages/systems.speckle.speckle-unity/Core/linux-x64/native.meta b/Packages/systems.speckle.speckle-unity/Runtime/Core/linux-x64/native.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/linux-x64/native.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Core/linux-x64/native.meta diff --git a/Packages/systems.speckle.speckle-unity/Core/linux-x64/native/libe_sqlite3.so b/Packages/systems.speckle.speckle-unity/Runtime/Core/linux-x64/native/libe_sqlite3.so similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/linux-x64/native/libe_sqlite3.so rename to Packages/systems.speckle.speckle-unity/Runtime/Core/linux-x64/native/libe_sqlite3.so diff --git a/Packages/systems.speckle.speckle-unity/Core/linux-x64/native/libe_sqlite3.so.meta b/Packages/systems.speckle.speckle-unity/Runtime/Core/linux-x64/native/libe_sqlite3.so.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/linux-x64/native/libe_sqlite3.so.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Core/linux-x64/native/libe_sqlite3.so.meta diff --git a/Packages/systems.speckle.speckle-unity/Core/osx-arm64.meta b/Packages/systems.speckle.speckle-unity/Runtime/Core/osx-arm64.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/osx-arm64.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Core/osx-arm64.meta diff --git a/Packages/systems.speckle.speckle-unity/Core/osx-arm64/native.meta b/Packages/systems.speckle.speckle-unity/Runtime/Core/osx-arm64/native.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/osx-arm64/native.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Core/osx-arm64/native.meta diff --git a/Packages/systems.speckle.speckle-unity/Core/osx-arm64/native/libe_sqlite3.dylib b/Packages/systems.speckle.speckle-unity/Runtime/Core/osx-arm64/native/libe_sqlite3.dylib similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/osx-arm64/native/libe_sqlite3.dylib rename to Packages/systems.speckle.speckle-unity/Runtime/Core/osx-arm64/native/libe_sqlite3.dylib diff --git a/Packages/systems.speckle.speckle-unity/Core/osx-arm64/native/libe_sqlite3.dylib.meta b/Packages/systems.speckle.speckle-unity/Runtime/Core/osx-arm64/native/libe_sqlite3.dylib.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/osx-arm64/native/libe_sqlite3.dylib.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Core/osx-arm64/native/libe_sqlite3.dylib.meta diff --git a/Packages/systems.speckle.speckle-unity/Core/osx-x64.meta b/Packages/systems.speckle.speckle-unity/Runtime/Core/osx-x64.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/osx-x64.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Core/osx-x64.meta diff --git a/Packages/systems.speckle.speckle-unity/Core/osx-x64/native.meta b/Packages/systems.speckle.speckle-unity/Runtime/Core/osx-x64/native.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/osx-x64/native.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Core/osx-x64/native.meta diff --git a/Packages/systems.speckle.speckle-unity/Core/osx-x64/native/libe_sqlite3.dylib b/Packages/systems.speckle.speckle-unity/Runtime/Core/osx-x64/native/libe_sqlite3.dylib similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/osx-x64/native/libe_sqlite3.dylib rename to Packages/systems.speckle.speckle-unity/Runtime/Core/osx-x64/native/libe_sqlite3.dylib diff --git a/Packages/systems.speckle.speckle-unity/Core/osx-x64/native/libe_sqlite3.dylib.meta b/Packages/systems.speckle.speckle-unity/Runtime/Core/osx-x64/native/libe_sqlite3.dylib.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/osx-x64/native/libe_sqlite3.dylib.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Core/osx-x64/native/libe_sqlite3.dylib.meta diff --git a/Packages/systems.speckle.speckle-unity/Core/win-x64.meta b/Packages/systems.speckle.speckle-unity/Runtime/Core/win-x64.meta similarity index 77% rename from Packages/systems.speckle.speckle-unity/Core/win-x64.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Core/win-x64.meta index 27d9330..3186b9b 100644 --- a/Packages/systems.speckle.speckle-unity/Core/win-x64.meta +++ b/Packages/systems.speckle.speckle-unity/Runtime/Core/win-x64.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 4ae18d75b910f114f9d122331578c2c3 +guid: 4b590a2d83586294c9ddbf5d2675da5d folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Packages/systems.speckle.speckle-unity/Core/win-x64/native.meta b/Packages/systems.speckle.speckle-unity/Runtime/Core/win-x64/native.meta similarity index 77% rename from Packages/systems.speckle.speckle-unity/Core/win-x64/native.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Core/win-x64/native.meta index 76f5939..9da9f29 100644 --- a/Packages/systems.speckle.speckle-unity/Core/win-x64/native.meta +++ b/Packages/systems.speckle.speckle-unity/Runtime/Core/win-x64/native.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 565c271f9c1f3b844998d6e6d926f1a9 +guid: 01a05be9c4839ce458393a2ec888764a folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Packages/systems.speckle.speckle-unity/Core/win-x64/native/e_sqlite3.dll b/Packages/systems.speckle.speckle-unity/Runtime/Core/win-x64/native/e_sqlite3.dll similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/win-x64/native/e_sqlite3.dll rename to Packages/systems.speckle.speckle-unity/Runtime/Core/win-x64/native/e_sqlite3.dll diff --git a/Packages/systems.speckle.speckle-unity/Core/win-x64/native/e_sqlite3.dll.meta b/Packages/systems.speckle.speckle-unity/Runtime/Core/win-x64/native/e_sqlite3.dll.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/win-x64/native/e_sqlite3.dll.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Core/win-x64/native/e_sqlite3.dll.meta diff --git a/Packages/systems.speckle.speckle-unity/Core/win-x86.meta b/Packages/systems.speckle.speckle-unity/Runtime/Core/win-x86.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/win-x86.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Core/win-x86.meta diff --git a/Packages/systems.speckle.speckle-unity/Core/win-x86/native.meta b/Packages/systems.speckle.speckle-unity/Runtime/Core/win-x86/native.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/win-x86/native.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Core/win-x86/native.meta diff --git a/Packages/systems.speckle.speckle-unity/Core/win-x86/native/e_sqlite3.dll b/Packages/systems.speckle.speckle-unity/Runtime/Core/win-x86/native/e_sqlite3.dll similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/win-x86/native/e_sqlite3.dll rename to Packages/systems.speckle.speckle-unity/Runtime/Core/win-x86/native/e_sqlite3.dll diff --git a/Packages/systems.speckle.speckle-unity/Core/win-x86/native/e_sqlite3.dll.meta b/Packages/systems.speckle.speckle-unity/Runtime/Core/win-x86/native/e_sqlite3.dll.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/Core/win-x86/native/e_sqlite3.dll.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Core/win-x86/native/e_sqlite3.dll.meta diff --git a/Packages/systems.speckle.speckle-unity/Dispatcher.cs b/Packages/systems.speckle.speckle-unity/Runtime/Dispatcher.cs similarity index 100% rename from Packages/systems.speckle.speckle-unity/Dispatcher.cs rename to Packages/systems.speckle.speckle-unity/Runtime/Dispatcher.cs diff --git a/Packages/systems.speckle.speckle-unity/Dispatcher.cs.meta b/Packages/systems.speckle.speckle-unity/Runtime/Dispatcher.cs.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/Dispatcher.cs.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Dispatcher.cs.meta diff --git a/Packages/systems.speckle.speckle-unity/Runtime/Factories.meta b/Packages/systems.speckle.speckle-unity/Runtime/Factories.meta new file mode 100644 index 0000000..166f79d --- /dev/null +++ b/Packages/systems.speckle.speckle-unity/Runtime/Factories.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7eb57c561faa0df43947fdc6214d0592 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/systems.speckle.speckle-unity/Runtime/Factories/ConverterFactory.cs b/Packages/systems.speckle.speckle-unity/Runtime/Factories/ConverterFactory.cs new file mode 100644 index 0000000..2425ed9 --- /dev/null +++ b/Packages/systems.speckle.speckle-unity/Runtime/Factories/ConverterFactory.cs @@ -0,0 +1,14 @@ +using Objects.Converter.Unity; +using Speckle.Core.Kits; + +namespace Speckle.ConnectorUnity.Factories +{ + + public static class ConverterFactory + { + public static ISpeckleConverter GetDefaultConverter() + { + return new ConverterUnity(); + } + } +} diff --git a/Packages/systems.speckle.speckle-unity/Runtime/Factories/ConverterFactory.cs.meta b/Packages/systems.speckle.speckle-unity/Runtime/Factories/ConverterFactory.cs.meta new file mode 100644 index 0000000..cce0f38 --- /dev/null +++ b/Packages/systems.speckle.speckle-unity/Runtime/Factories/ConverterFactory.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4831f0baf7fb4be45a4219c1acd23ee5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/systems.speckle.speckle-unity/Runtime/Factories/Speckle.ConnectorUnity.Factories.asmdef b/Packages/systems.speckle.speckle-unity/Runtime/Factories/Speckle.ConnectorUnity.Factories.asmdef new file mode 100644 index 0000000..89fb098 --- /dev/null +++ b/Packages/systems.speckle.speckle-unity/Runtime/Factories/Speckle.ConnectorUnity.Factories.asmdef @@ -0,0 +1,16 @@ +{ + "name": "Speckle.ConnectorUnity.Factories", + "rootNamespace": "Speckle.ConnectorUnity", + "references": [ + "GUID:7383cd71541a2aa48a7baf23f74b4d5f" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Packages/systems.speckle.speckle-unity/Runtime/Factories/Speckle.ConnectorUnity.Factories.asmdef.meta b/Packages/systems.speckle.speckle-unity/Runtime/Factories/Speckle.ConnectorUnity.Factories.asmdef.meta new file mode 100644 index 0000000..bca654a --- /dev/null +++ b/Packages/systems.speckle.speckle-unity/Runtime/Factories/Speckle.ConnectorUnity.Factories.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 13aec21e8e96f864bafd00df49f225fc +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/systems.speckle.speckle-unity/NativeCache.meta b/Packages/systems.speckle.speckle-unity/Runtime/NativeCache.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/NativeCache.meta rename to Packages/systems.speckle.speckle-unity/Runtime/NativeCache.meta diff --git a/Packages/systems.speckle.speckle-unity/NativeCache/AbstractNativeCache.cs b/Packages/systems.speckle.speckle-unity/Runtime/NativeCache/AbstractNativeCache.cs similarity index 100% rename from Packages/systems.speckle.speckle-unity/NativeCache/AbstractNativeCache.cs rename to Packages/systems.speckle.speckle-unity/Runtime/NativeCache/AbstractNativeCache.cs diff --git a/Packages/systems.speckle.speckle-unity/NativeCache/AbstractNativeCache.cs.meta b/Packages/systems.speckle.speckle-unity/Runtime/NativeCache/AbstractNativeCache.cs.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/NativeCache/AbstractNativeCache.cs.meta rename to Packages/systems.speckle.speckle-unity/Runtime/NativeCache/AbstractNativeCache.cs.meta diff --git a/Packages/systems.speckle.speckle-unity/NativeCache/AggregateNativeCache.cs b/Packages/systems.speckle.speckle-unity/Runtime/NativeCache/AggregateNativeCache.cs similarity index 100% rename from Packages/systems.speckle.speckle-unity/NativeCache/AggregateNativeCache.cs rename to Packages/systems.speckle.speckle-unity/Runtime/NativeCache/AggregateNativeCache.cs diff --git a/Packages/systems.speckle.speckle-unity/NativeCache/AggregateNativeCache.cs.meta b/Packages/systems.speckle.speckle-unity/Runtime/NativeCache/AggregateNativeCache.cs.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/NativeCache/AggregateNativeCache.cs.meta rename to Packages/systems.speckle.speckle-unity/Runtime/NativeCache/AggregateNativeCache.cs.meta diff --git a/Packages/systems.speckle.speckle-unity/NativeCache/MemoryNativeCache.cs b/Packages/systems.speckle.speckle-unity/Runtime/NativeCache/MemoryNativeCache.cs similarity index 100% rename from Packages/systems.speckle.speckle-unity/NativeCache/MemoryNativeCache.cs rename to Packages/systems.speckle.speckle-unity/Runtime/NativeCache/MemoryNativeCache.cs diff --git a/Packages/systems.speckle.speckle-unity/NativeCache/MemoryNativeCache.cs.meta b/Packages/systems.speckle.speckle-unity/Runtime/NativeCache/MemoryNativeCache.cs.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/NativeCache/MemoryNativeCache.cs.meta rename to Packages/systems.speckle.speckle-unity/Runtime/NativeCache/MemoryNativeCache.cs.meta diff --git a/Packages/systems.speckle.speckle-unity/NativeCache/ResourcesNativeCache.cs b/Packages/systems.speckle.speckle-unity/Runtime/NativeCache/ResourcesNativeCache.cs similarity index 100% rename from Packages/systems.speckle.speckle-unity/NativeCache/ResourcesNativeCache.cs rename to Packages/systems.speckle.speckle-unity/Runtime/NativeCache/ResourcesNativeCache.cs diff --git a/Packages/systems.speckle.speckle-unity/NativeCache/ResourcesNativeCache.cs.meta b/Packages/systems.speckle.speckle-unity/Runtime/NativeCache/ResourcesNativeCache.cs.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/NativeCache/ResourcesNativeCache.cs.meta rename to Packages/systems.speckle.speckle-unity/Runtime/NativeCache/ResourcesNativeCache.cs.meta diff --git a/Packages/systems.speckle.speckle-unity/NativeCache/NativeCaches.asmdef b/Packages/systems.speckle.speckle-unity/Runtime/NativeCache/Speckle.ConnectorUnity.NativeCaches.asmdef similarity index 88% rename from Packages/systems.speckle.speckle-unity/NativeCache/NativeCaches.asmdef rename to Packages/systems.speckle.speckle-unity/Runtime/NativeCache/Speckle.ConnectorUnity.NativeCaches.asmdef index a1c0368..4cc6dc8 100644 --- a/Packages/systems.speckle.speckle-unity/NativeCache/NativeCaches.asmdef +++ b/Packages/systems.speckle.speckle-unity/Runtime/NativeCache/Speckle.ConnectorUnity.NativeCaches.asmdef @@ -1,5 +1,5 @@ { - "name": "NativeCaches", + "name": "Speckle.ConnectorUnity.NativeCache", "rootNamespace": "Speckle.ConnectorUnity", "references": [], "includePlatforms": [], diff --git a/Packages/systems.speckle.speckle-unity/NativeCache/NativeCaches.asmdef.meta b/Packages/systems.speckle.speckle-unity/Runtime/NativeCache/Speckle.ConnectorUnity.NativeCaches.asmdef.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/NativeCache/NativeCaches.asmdef.meta rename to Packages/systems.speckle.speckle-unity/Runtime/NativeCache/Speckle.ConnectorUnity.NativeCaches.asmdef.meta diff --git a/Packages/systems.speckle.speckle-unity/NativeCacheFactory.cs b/Packages/systems.speckle.speckle-unity/Runtime/NativeCacheFactory.cs similarity index 100% rename from Packages/systems.speckle.speckle-unity/NativeCacheFactory.cs rename to Packages/systems.speckle.speckle-unity/Runtime/NativeCacheFactory.cs diff --git a/Packages/systems.speckle.speckle-unity/NativeCacheFactory.cs.meta b/Packages/systems.speckle.speckle-unity/Runtime/NativeCacheFactory.cs.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/NativeCacheFactory.cs.meta rename to Packages/systems.speckle.speckle-unity/Runtime/NativeCacheFactory.cs.meta diff --git a/Packages/systems.speckle.speckle-unity/Objects.meta b/Packages/systems.speckle.speckle-unity/Runtime/Objects.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/Objects.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Objects.meta diff --git a/Packages/systems.speckle.speckle-unity/Objects/Objects.deps.json b/Packages/systems.speckle.speckle-unity/Runtime/Objects/Objects.deps.json similarity index 100% rename from Packages/systems.speckle.speckle-unity/Objects/Objects.deps.json rename to Packages/systems.speckle.speckle-unity/Runtime/Objects/Objects.deps.json diff --git a/Packages/systems.speckle.speckle-unity/Objects/Objects.deps.json.meta b/Packages/systems.speckle.speckle-unity/Runtime/Objects/Objects.deps.json.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/Objects/Objects.deps.json.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Objects/Objects.deps.json.meta diff --git a/Packages/systems.speckle.speckle-unity/Objects/Objects.dll b/Packages/systems.speckle.speckle-unity/Runtime/Objects/Objects.dll similarity index 100% rename from Packages/systems.speckle.speckle-unity/Objects/Objects.dll rename to Packages/systems.speckle.speckle-unity/Runtime/Objects/Objects.dll diff --git a/Packages/systems.speckle.speckle-unity/Objects/Objects.dll.meta b/Packages/systems.speckle.speckle-unity/Runtime/Objects/Objects.dll.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/Objects/Objects.dll.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Objects/Objects.dll.meta diff --git a/Packages/systems.speckle.speckle-unity/Objects/Objects.xml b/Packages/systems.speckle.speckle-unity/Runtime/Objects/Objects.xml similarity index 100% rename from Packages/systems.speckle.speckle-unity/Objects/Objects.xml rename to Packages/systems.speckle.speckle-unity/Runtime/Objects/Objects.xml diff --git a/Packages/systems.speckle.speckle-unity/Objects/Objects.xml.meta b/Packages/systems.speckle.speckle-unity/Runtime/Objects/Objects.xml.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/Objects/Objects.xml.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Objects/Objects.xml.meta diff --git a/Packages/systems.speckle.speckle-unity/Parallel Extensions.meta b/Packages/systems.speckle.speckle-unity/Runtime/Parallel Extensions.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/Parallel Extensions.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Parallel Extensions.meta diff --git a/Packages/systems.speckle.speckle-unity/Parallel Extensions/CoordinationDataStructures.meta b/Packages/systems.speckle.speckle-unity/Runtime/Parallel Extensions/CoordinationDataStructures.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/Parallel Extensions/CoordinationDataStructures.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Parallel Extensions/CoordinationDataStructures.meta diff --git a/Packages/systems.speckle.speckle-unity/Parallel Extensions/CoordinationDataStructures/ObservableConcurrentDictionary.cs b/Packages/systems.speckle.speckle-unity/Runtime/Parallel Extensions/CoordinationDataStructures/ObservableConcurrentDictionary.cs similarity index 100% rename from Packages/systems.speckle.speckle-unity/Parallel Extensions/CoordinationDataStructures/ObservableConcurrentDictionary.cs rename to Packages/systems.speckle.speckle-unity/Runtime/Parallel Extensions/CoordinationDataStructures/ObservableConcurrentDictionary.cs diff --git a/Packages/systems.speckle.speckle-unity/Parallel Extensions/CoordinationDataStructures/ObservableConcurrentDictionary.cs.meta b/Packages/systems.speckle.speckle-unity/Runtime/Parallel Extensions/CoordinationDataStructures/ObservableConcurrentDictionary.cs.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/Parallel Extensions/CoordinationDataStructures/ObservableConcurrentDictionary.cs.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Parallel Extensions/CoordinationDataStructures/ObservableConcurrentDictionary.cs.meta diff --git a/Packages/systems.speckle.speckle-unity/Runtime/Parallel Extensions/LICENSE.txt b/Packages/systems.speckle.speckle-unity/Runtime/Parallel Extensions/LICENSE.txt new file mode 100644 index 0000000..33beecb --- /dev/null +++ b/Packages/systems.speckle.speckle-unity/Runtime/Parallel Extensions/LICENSE.txt @@ -0,0 +1,20 @@ +MICROSOFT LIMITED PUBLIC LICENSE version 1.1 +This license governs use of code marked as “sample” or “example” available on this web site without a license agreement, as provided under the section above titled “NOTICE SPECIFIC TO SOFTWARE AVAILABLE ON THIS WEB SITE.” If you use such code (the “software”), you accept this license. If you do not accept the license, do not use the software. + +1. Definitions +The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. +A “contribution” is the original software, or any additions or changes to the software. +A “contributor” is any person that distributes its contribution under this license. +“Licensed patents” are a contributor’s patent claims that read directly on its contribution. + +2. Grant of Rights +(A) Copyright Grant - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. +(B) Patent Grant - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. Conditions and Limitations +(A) No Trademark License- This license does not grant you rights to use any contributors’ name, logo, or trademarks. +(B) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. +(C) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. +(D) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. +(E) The software is licensed “as-is.” You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. +(F) Platform Limitation - The licenses granted in sections 2(A) and 2(B) extend only to the software or derivative works that you create that run directly on a Microsoft Windows operating system product, Microsoft run-time technology (such as the .NET Framework or Silverlight), or Microsoft application platform (such as Microsoft Office or Microsoft Dynamics). \ No newline at end of file diff --git a/Packages/systems.speckle.speckle-unity/Runtime/Parallel Extensions/LICENSE.txt.meta b/Packages/systems.speckle.speckle-unity/Runtime/Parallel Extensions/LICENSE.txt.meta new file mode 100644 index 0000000..ac428f2 --- /dev/null +++ b/Packages/systems.speckle.speckle-unity/Runtime/Parallel Extensions/LICENSE.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: e24af2f79449e8e47ada647e43854f87 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/systems.speckle.speckle-unity/Parallel Extensions/ParallelExtensionsExtras.asmdef b/Packages/systems.speckle.speckle-unity/Runtime/Parallel Extensions/ParallelExtensionsExtras.asmdef similarity index 100% rename from Packages/systems.speckle.speckle-unity/Parallel Extensions/ParallelExtensionsExtras.asmdef rename to Packages/systems.speckle.speckle-unity/Runtime/Parallel Extensions/ParallelExtensionsExtras.asmdef diff --git a/Packages/systems.speckle.speckle-unity/Parallel Extensions/ParallelExtensionsExtras.asmdef.meta b/Packages/systems.speckle.speckle-unity/Runtime/Parallel Extensions/ParallelExtensionsExtras.asmdef.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/Parallel Extensions/ParallelExtensionsExtras.asmdef.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Parallel Extensions/ParallelExtensionsExtras.asmdef.meta diff --git a/Packages/systems.speckle.speckle-unity/Speckle.Connector.asmdef b/Packages/systems.speckle.speckle-unity/Runtime/Speckle.Connector.asmdef similarity index 83% rename from Packages/systems.speckle.speckle-unity/Speckle.Connector.asmdef rename to Packages/systems.speckle.speckle-unity/Runtime/Speckle.Connector.asmdef index 5dcce05..6f5e93a 100644 --- a/Packages/systems.speckle.speckle-unity/Speckle.Connector.asmdef +++ b/Packages/systems.speckle.speckle-unity/Runtime/Speckle.Connector.asmdef @@ -4,7 +4,8 @@ "references": [ "GUID:24f666972ea7e9149abddaae766b9c1d", "GUID:05078f9b6da40444fbd72ec600449925", - "GUID:a97f36292d600f8459146719f68d6bb2" + "GUID:a97f36292d600f8459146719f68d6bb2", + "GUID:50d889142fdf9de4b8501c6eaa4b3225" ], "includePlatforms": [], "excludePlatforms": [], diff --git a/Packages/systems.speckle.speckle-unity/Speckle.Connector.asmdef.meta b/Packages/systems.speckle.speckle-unity/Runtime/Speckle.Connector.asmdef.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/Speckle.Connector.asmdef.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Speckle.Connector.asmdef.meta diff --git a/Packages/systems.speckle.speckle-unity/Streams.cs b/Packages/systems.speckle.speckle-unity/Runtime/Streams.cs similarity index 100% rename from Packages/systems.speckle.speckle-unity/Streams.cs rename to Packages/systems.speckle.speckle-unity/Runtime/Streams.cs diff --git a/Packages/systems.speckle.speckle-unity/Streams.cs.meta b/Packages/systems.speckle.speckle-unity/Runtime/Streams.cs.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/Streams.cs.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Streams.cs.meta diff --git a/Packages/systems.speckle.speckle-unity/Runtime/Utils.meta b/Packages/systems.speckle.speckle-unity/Runtime/Utils.meta new file mode 100644 index 0000000..2ae3122 --- /dev/null +++ b/Packages/systems.speckle.speckle-unity/Runtime/Utils.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 29458c1909cf0d946af3e931fec1df0b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/systems.speckle.speckle-unity/CoreUtils.cs b/Packages/systems.speckle.speckle-unity/Runtime/Utils/CoreUtils.cs similarity index 77% rename from Packages/systems.speckle.speckle-unity/CoreUtils.cs rename to Packages/systems.speckle.speckle-unity/Runtime/Utils/CoreUtils.cs index be1447c..5705ad9 100644 --- a/Packages/systems.speckle.speckle-unity/CoreUtils.cs +++ b/Packages/systems.speckle.speckle-unity/Runtime/Utils/CoreUtils.cs @@ -1,10 +1,15 @@ using Speckle.Core.Kits; +using Speckle.Core.Logging; namespace Speckle.ConnectorUnity { public static class CoreUtils { - + public static void SetupInit() + { + Setup.Init(HostApplications.Unity.GetVersion(CoreUtils.GetHostAppVersion()), HostApplications.Unity.Slug); + } + public static HostAppVersion GetHostAppVersion() { #if UNITY_2019 diff --git a/Packages/systems.speckle.speckle-unity/CoreUtils.cs.meta b/Packages/systems.speckle.speckle-unity/Runtime/Utils/CoreUtils.cs.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/CoreUtils.cs.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Utils/CoreUtils.cs.meta diff --git a/Packages/systems.speckle.speckle-unity/ObjectExtensions.cs b/Packages/systems.speckle.speckle-unity/Runtime/Utils/ObjectExtensions.cs similarity index 95% rename from Packages/systems.speckle.speckle-unity/ObjectExtensions.cs rename to Packages/systems.speckle.speckle-unity/Runtime/Utils/ObjectExtensions.cs index 9769522..a9a4320 100644 --- a/Packages/systems.speckle.speckle-unity/ObjectExtensions.cs +++ b/Packages/systems.speckle.speckle-unity/Runtime/Utils/ObjectExtensions.cs @@ -2,7 +2,7 @@ using System.Linq; using Speckle.Core.Models; #nullable enable -namespace Speckle.ConnectorUnity +namespace Speckle.ConnectorUnity.Utils { /// /// Extension methods for object models diff --git a/Packages/systems.speckle.speckle-unity/ObjectExtensions.cs.meta b/Packages/systems.speckle.speckle-unity/Runtime/Utils/ObjectExtensions.cs.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/ObjectExtensions.cs.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Utils/ObjectExtensions.cs.meta diff --git a/Packages/systems.speckle.speckle-unity/Runtime/Utils/Utils.asmdef b/Packages/systems.speckle.speckle-unity/Runtime/Utils/Utils.asmdef new file mode 100644 index 0000000..887ffc3 --- /dev/null +++ b/Packages/systems.speckle.speckle-unity/Runtime/Utils/Utils.asmdef @@ -0,0 +1,14 @@ +{ + "name": "Utils", + "rootNamespace": "Speckle.ConnectorUnity", + "references": [], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Packages/systems.speckle.speckle-unity/Runtime/Utils/Utils.asmdef.meta b/Packages/systems.speckle.speckle-unity/Runtime/Utils/Utils.asmdef.meta new file mode 100644 index 0000000..9f34143 --- /dev/null +++ b/Packages/systems.speckle.speckle-unity/Runtime/Utils/Utils.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 50d889142fdf9de4b8501c6eaa4b3225 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/systems.speckle.speckle-unity/Utils.cs b/Packages/systems.speckle.speckle-unity/Runtime/Utils/Utils.cs similarity index 63% rename from Packages/systems.speckle.speckle-unity/Utils.cs rename to Packages/systems.speckle.speckle-unity/Runtime/Utils/Utils.cs index 80b8ee2..d9f7d41 100644 --- a/Packages/systems.speckle.speckle-unity/Utils.cs +++ b/Packages/systems.speckle.speckle-unity/Runtime/Utils/Utils.cs @@ -1,8 +1,12 @@ using System; +using System.Collections; +using System.Threading; +using System.Threading.Tasks; using UnityEngine; +using UnityEngine.Networking; #nullable enable -namespace Speckle.ConnectorUnity +namespace Speckle.ConnectorUnity.Utils { public static class Utils { @@ -69,5 +73,27 @@ namespace Speckle.ConnectorUnity return new Color(argb.R / 255f, argb.G / 255f, argb.B / 255f); } + + public static IEnumerator GetImageRoutine(string url, string authToken, Action callback) + { + using UnityWebRequest www = UnityWebRequestTexture.GetTexture(url); + www.SetRequestHeader("Authorization", $"Bearer {authToken}"); + UnityWebRequestAsyncOperation request = www.SendWebRequest(); + + yield return request; + + if(www.result != UnityWebRequest.Result.Success ) + { + bool isDataError = www.result == UnityWebRequest.Result.DataProcessingError; + string error = isDataError + ? $"{www.result}: {www.downloadHandler.error}" + : www.error; + + Debug.LogWarning( $"Error fetching image from {www.url}: {error}" ); + yield break; + } + Texture2D? texture = DownloadHandlerTexture.GetContent(www); + callback.Invoke(texture); + } } } \ No newline at end of file diff --git a/Packages/systems.speckle.speckle-unity/Utils.cs.meta b/Packages/systems.speckle.speckle-unity/Runtime/Utils/Utils.cs.meta similarity index 100% rename from Packages/systems.speckle.speckle-unity/Utils.cs.meta rename to Packages/systems.speckle.speckle-unity/Runtime/Utils/Utils.cs.meta diff --git a/Packages/systems.speckle.speckle-unity/Runtime/Wrappers.meta b/Packages/systems.speckle.speckle-unity/Runtime/Wrappers.meta new file mode 100644 index 0000000..c34a0fc --- /dev/null +++ b/Packages/systems.speckle.speckle-unity/Runtime/Wrappers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b9f1c7d8bea27bd42943bbefbca89af1 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/systems.speckle.speckle-unity/Runtime/Wrappers/Selection.meta b/Packages/systems.speckle.speckle-unity/Runtime/Wrappers/Selection.meta new file mode 100644 index 0000000..a7d0244 --- /dev/null +++ b/Packages/systems.speckle.speckle-unity/Runtime/Wrappers/Selection.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b2d8faa20c5c31b4da3a60946cf3e451 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/systems.speckle.speckle-unity/Runtime/Wrappers/Selection/AccountSelection.cs b/Packages/systems.speckle.speckle-unity/Runtime/Wrappers/Selection/AccountSelection.cs new file mode 100644 index 0000000..fadd2e1 --- /dev/null +++ b/Packages/systems.speckle.speckle-unity/Runtime/Wrappers/Selection/AccountSelection.cs @@ -0,0 +1,50 @@ +using System; +using System.Collections; +using System.Linq; +using Speckle.Core.Api; +using Speckle.Core.Credentials; +using UnityEngine; + +#nullable enable +namespace Speckle.ConnectorUnity.Wrappers.Selection +{ + [Serializable] + public sealed class AccountSelection : OptionSelection, IDisposable + { + private Client? client; + public override Client? Client + { + get + { + Account? account = Selected; + if (account == null) return client = null; + if (client == null || !client.Account.Equals(account)) return client = new Client(Selected); + return client; + } + } + + protected override string? KeyFunction(Account? value) => value?.id; + + public override void RefreshOptions() + { + Account[] accounts; + try + { + accounts = AccountManager.GetAccounts().ToArray(); + if(accounts.Length == 0) + Debug.LogWarning("No Accounts found, please login in Manager"); + } + catch(Exception e) + { + accounts = Array.Empty(); + Debug.LogWarning($"Unable to refresh {this}\n{e}"); + } + GenerateOptions(accounts, isDefault: (a, i) => a.isDefault || i == 0); + } + + public void Dispose() + { + client?.Dispose(); + } + } +} diff --git a/Packages/systems.speckle.speckle-unity/Runtime/Wrappers/Selection/AccountSelection.cs.meta b/Packages/systems.speckle.speckle-unity/Runtime/Wrappers/Selection/AccountSelection.cs.meta new file mode 100644 index 0000000..7632b25 --- /dev/null +++ b/Packages/systems.speckle.speckle-unity/Runtime/Wrappers/Selection/AccountSelection.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b42ba90e10f1d484c97adf9f3fde1a13 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/systems.speckle.speckle-unity/Runtime/Wrappers/Selection/BranchSelection.cs b/Packages/systems.speckle.speckle-unity/Runtime/Wrappers/Selection/BranchSelection.cs new file mode 100644 index 0000000..2b70aa2 --- /dev/null +++ b/Packages/systems.speckle.speckle-unity/Runtime/Wrappers/Selection/BranchSelection.cs @@ -0,0 +1,51 @@ +using System; +using System.Collections.Generic; +using Speckle.Core.Api; +using UnityEngine; + +#nullable enable +namespace Speckle.ConnectorUnity.Wrappers.Selection +{ + [Serializable] + public sealed class BranchSelection : OptionSelection + { + [field: SerializeField, Range(1,100), Tooltip("Number of branches to request")] + public int BranchesLimit { get; set; } = 30; + [field: SerializeField, Range(1,100), Tooltip("Number of commits to request")] + public int CommitsLimit { get; set; } = 15; + + [field: SerializeReference] + public StreamSelection StreamSelection { get; private set; } + public override Client? Client => StreamSelection.Client; + + public BranchSelection(StreamSelection streamSelection) + { + StreamSelection = streamSelection; + Initialise(); + } + + public void Initialise() + { + StreamSelection.OnSelectionChange = RefreshOptions; + } + + protected override string? KeyFunction(Branch? value) => value?.name; + + public override void RefreshOptions() + { + Stream? stream = StreamSelection.Selected; + if (stream == null) return; + IList branches; + try + { + branches = Client!.StreamGetBranches(stream.id, BranchesLimit, CommitsLimit).GetAwaiter().GetResult(); + } + catch(Exception e) + { + Debug.LogWarning($"Unable to refresh {this}\n{e}"); + branches = Array.Empty(); + } + GenerateOptions(branches, (b, _) => b.name == "main"); + } + } +} diff --git a/Packages/systems.speckle.speckle-unity/Runtime/Wrappers/Selection/BranchSelection.cs.meta b/Packages/systems.speckle.speckle-unity/Runtime/Wrappers/Selection/BranchSelection.cs.meta new file mode 100644 index 0000000..72af9ad --- /dev/null +++ b/Packages/systems.speckle.speckle-unity/Runtime/Wrappers/Selection/BranchSelection.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 666adc9a98cfadc46a3bd907b9dc5bda +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/systems.speckle.speckle-unity/Runtime/Wrappers/Selection/CommitSelection.cs b/Packages/systems.speckle.speckle-unity/Runtime/Wrappers/Selection/CommitSelection.cs new file mode 100644 index 0000000..07105c8 --- /dev/null +++ b/Packages/systems.speckle.speckle-unity/Runtime/Wrappers/Selection/CommitSelection.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; +using Speckle.Core.Api; +using UnityEngine; + +#nullable enable +namespace Speckle.ConnectorUnity.Wrappers.Selection +{ + + [Serializable] + public sealed class CommitSelection : OptionSelection + { + + [field: SerializeReference] + public BranchSelection BranchSelection { get; private set; } + + public override Client? Client => BranchSelection.Client; + + public CommitSelection(BranchSelection branchSelection) + { + BranchSelection = branchSelection; + Initialise(); + + } + + public void Initialise() + { + BranchSelection.OnSelectionChange = RefreshOptions; + } + + + protected override string? KeyFunction(Commit? value) => value?.id; + + public override void RefreshOptions() + { + Branch? branch = BranchSelection!.Selected; + if (branch == null) return; + List commits = branch.commits.items; + GenerateOptions(commits, (_, i) => i == 0); + } + } +} diff --git a/Packages/systems.speckle.speckle-unity/Runtime/Wrappers/Selection/CommitSelection.cs.meta b/Packages/systems.speckle.speckle-unity/Runtime/Wrappers/Selection/CommitSelection.cs.meta new file mode 100644 index 0000000..fbb11e9 --- /dev/null +++ b/Packages/systems.speckle.speckle-unity/Runtime/Wrappers/Selection/CommitSelection.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 91a60a3a0e5293d499e746c08d071b28 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/systems.speckle.speckle-unity/Runtime/Wrappers/Selection/OptionSelection.cs b/Packages/systems.speckle.speckle-unity/Runtime/Wrappers/Selection/OptionSelection.cs new file mode 100644 index 0000000..2e4e273 --- /dev/null +++ b/Packages/systems.speckle.speckle-unity/Runtime/Wrappers/Selection/OptionSelection.cs @@ -0,0 +1,80 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using Speckle.Core.Api; +using UnityEngine; + +#nullable enable +namespace Speckle.ConnectorUnity.Wrappers.Selection +{ + /// + /// Reusable serializable type that abstracts + /// the fetching of objects. + /// And exposes an of + /// with serialised selection. + /// + /// + [Serializable] + public abstract class OptionSelection + where TOption : class + { + [SerializeField] private int selectedIndex = -1; + + public int SelectedIndex + { + get => selectedIndex; + set + { + selectedIndex = value; + OnSelectionChange?.Invoke(); + } + } + + public TOption? Selected + { + get + { + if (Options == null) return null; + if (SelectedIndex < 0 || SelectedIndex >= Options.Length) return null; + return Options[SelectedIndex]; + } + } + + public TOption[] Options { get; protected set; } = Array.Empty(); + public Action? OnSelectionChange { get; set; } + + public abstract Client? Client { get; } + + [return: NotNullIfNotNull("value")] + protected abstract string? KeyFunction(TOption? value); + + public abstract void RefreshOptions(); + + protected void GenerateOptions(IList source, Func isDefault) + { + List optionsToAdd = new List(source.Count); + int defaultOption = -1; + int index = 0; + foreach (TOption? a in source) + { + if (a == null) continue; + optionsToAdd.Add(a); + if (isDefault(a, index)) defaultOption = index; + index++; + } + + TOption? currentSelected = Selected; + bool selectionOutOfRange = SelectedIndex < 0 || SelectedIndex >= optionsToAdd.Count; + if (selectionOutOfRange + || (currentSelected != null + && KeyFunction(currentSelected) != KeyFunction(optionsToAdd[SelectedIndex]))) + { + selectedIndex = defaultOption; + } + + Options = optionsToAdd.ToArray(); + //Debug.Log($"{this.GetType()} updated"); + OnSelectionChange?.Invoke(); + } + } +} \ No newline at end of file diff --git a/Packages/systems.speckle.speckle-unity/Runtime/Wrappers/Selection/OptionSelection.cs.meta b/Packages/systems.speckle.speckle-unity/Runtime/Wrappers/Selection/OptionSelection.cs.meta new file mode 100644 index 0000000..2f3ebb4 --- /dev/null +++ b/Packages/systems.speckle.speckle-unity/Runtime/Wrappers/Selection/OptionSelection.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f73f6a062bde10a4b902533e53b3c3be +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/systems.speckle.speckle-unity/Runtime/Wrappers/Selection/StreamSelection.cs b/Packages/systems.speckle.speckle-unity/Runtime/Wrappers/Selection/StreamSelection.cs new file mode 100644 index 0000000..01ec1b9 --- /dev/null +++ b/Packages/systems.speckle.speckle-unity/Runtime/Wrappers/Selection/StreamSelection.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; +using Speckle.Core.Api; +using UnityEngine; + +#nullable enable +namespace Speckle.ConnectorUnity.Wrappers.Selection +{ + [Serializable] + public sealed class StreamSelection : OptionSelection + { + private const int DEFAULT_REQUEST_LIMIT = 50; + [field: SerializeField, Range(1,100), Tooltip("Number of streams to request")] + public int StreamsLimit { get; set; } = DEFAULT_REQUEST_LIMIT; + [field: SerializeReference] + public AccountSelection AccountSelection { get; private set; } + + public StreamSelection(AccountSelection accountSelection) + { + AccountSelection = accountSelection; + Initialise(); + } + public void Initialise() + { + AccountSelection.OnSelectionChange = RefreshOptions; + } + + public override Client? Client => AccountSelection.Client; + + protected override string? KeyFunction(Stream? value) => value?.id; + public override void RefreshOptions() + { + if (Client == null) return; + IList streams; + try + { + streams = Client.StreamsGet(StreamsLimit).GetAwaiter().GetResult(); + } + catch(Exception e) + { + Debug.LogWarning($"Unable to refresh {this}\n{e}"); + streams = Array.Empty(); + } + GenerateOptions(streams, (_, i) => i == 0); + } + } +} diff --git a/Packages/systems.speckle.speckle-unity/Runtime/Wrappers/Selection/StreamSelection.cs.meta b/Packages/systems.speckle.speckle-unity/Runtime/Wrappers/Selection/StreamSelection.cs.meta new file mode 100644 index 0000000..f2fb5fa --- /dev/null +++ b/Packages/systems.speckle.speckle-unity/Runtime/Wrappers/Selection/StreamSelection.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0a363ef51d6b42f45882cffefb981975 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/systems.speckle.speckle-unity/Runtime/Wrappers/Speckle.ConnectorUnity.Wrappers.asmdef b/Packages/systems.speckle.speckle-unity/Runtime/Wrappers/Speckle.ConnectorUnity.Wrappers.asmdef new file mode 100644 index 0000000..4ba7255 --- /dev/null +++ b/Packages/systems.speckle.speckle-unity/Runtime/Wrappers/Speckle.ConnectorUnity.Wrappers.asmdef @@ -0,0 +1,16 @@ +{ + "name": "Speckle.ConnectorUnity.Wrappers", + "rootNamespace": "Speckle.ConnectorUnity", + "references": [ + "GUID:24f666972ea7e9149abddaae766b9c1d" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Packages/systems.speckle.speckle-unity/Runtime/Wrappers/Speckle.ConnectorUnity.Wrappers.asmdef.meta b/Packages/systems.speckle.speckle-unity/Runtime/Wrappers/Speckle.ConnectorUnity.Wrappers.asmdef.meta new file mode 100644 index 0000000..f5fb161 --- /dev/null +++ b/Packages/systems.speckle.speckle-unity/Runtime/Wrappers/Speckle.ConnectorUnity.Wrappers.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d274441ecc3eb3f43b093eec1503d681 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/systems.speckle.speckle-unity/SpeckleProperties.cs b/Packages/systems.speckle.speckle-unity/Runtime/Wrappers/SpeckleProperties.cs similarity index 98% rename from Packages/systems.speckle.speckle-unity/SpeckleProperties.cs rename to Packages/systems.speckle.speckle-unity/Runtime/Wrappers/SpeckleProperties.cs index 70cf564..259ab85 100644 --- a/Packages/systems.speckle.speckle-unity/SpeckleProperties.cs +++ b/Packages/systems.speckle.speckle-unity/Runtime/Wrappers/SpeckleProperties.cs @@ -6,7 +6,7 @@ using Speckle.Core.Api; using Speckle.Core.Models; using UnityEngine; -namespace Speckle.ConnectorUnity +namespace Speckle.ConnectorUnity.Wrappers { /// /// This class gets attached to GOs and is used to store Speckle's metadata when sending / receiving diff --git a/Packages/systems.speckle.speckle-unity/Runtime/Wrappers/SpeckleProperties.cs.meta b/Packages/systems.speckle.speckle-unity/Runtime/Wrappers/SpeckleProperties.cs.meta new file mode 100644 index 0000000..e2dea90 --- /dev/null +++ b/Packages/systems.speckle.speckle-unity/Runtime/Wrappers/SpeckleProperties.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2cb1817d5a3fda645aa9b1b658ad3003 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: fca1a9810bab51c4fbb3028f1ab6e637, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/systems.speckle.speckle-unity/package.json b/Packages/systems.speckle.speckle-unity/package.json index c9ab8b6..a868f98 100644 --- a/Packages/systems.speckle.speckle-unity/package.json +++ b/Packages/systems.speckle.speckle-unity/package.json @@ -1,6 +1,6 @@ { "name": "systems.speckle.speckle-unity", - "version": "2.9.0", + "version": "2.10.0", "displayName": "Speckle Unity Connector", "description": "AEC Interoperability for Unity through Speckle", "unity": "2018.4", diff --git a/ProjectSettings/ProjectVersion.txt b/ProjectSettings/ProjectVersion.txt index 8ea1b85..6a95707 100644 --- a/ProjectSettings/ProjectVersion.txt +++ b/ProjectSettings/ProjectVersion.txt @@ -1,2 +1,2 @@ -m_EditorVersion: 2021.3.11f1 -m_EditorVersionWithRevision: 2021.3.11f1 (0a5ca18544bf) +m_EditorVersion: 2021.3.14f1 +m_EditorVersionWithRevision: 2021.3.14f1 (eee1884e7226) diff --git a/ProjectSettings/TimelineSettings.asset b/ProjectSettings/TimelineSettings.asset index b4fbdb0..cfaebd7 100644 --- a/ProjectSettings/TimelineSettings.asset +++ b/ProjectSettings/TimelineSettings.asset @@ -13,3 +13,4 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: assetDefaultFramerate: 60 + m_DefaultFrameRate: 60