From 63e2d5d8c8c91fd55655399b4bea398a047ce059 Mon Sep 17 00:00:00 2001
From: Sylvain Renault <sylvain.renault@hhi.fraunhofer.de>
Date: Thu, 8 Aug 2024 18:03:00 +0200
Subject: [PATCH] Integration of NSwag interface in the package. Exemple scene
 for websocket and pose update.

---
 Assets/HHI.meta                               |   8 +
 Assets/HHI/HHI_ARFWorldAnalysisUser.asset     |  17 +
 .../HHI/HHI_ARFWorldAnalysisUser.asset.meta   |   8 +
 Assets/HHI/HHI_Analysis Local.asset           |  19 +
 Assets/HHI/HHI_Analysis Local.asset.meta      |   8 +
 Assets/HHI/HHI_Analysis.asset                 |  19 +
 Assets/HHI/HHI_Analysis.asset.meta            |   8 +
 Assets/HHI/Scripts.meta                       |   8 +
 Assets/HHI/Scripts/TestAPIWebSocketsClient.cs | 132 +++++
 .../Scripts/TestAPIWebSocketsClient.cs.meta   |  11 +
 Assets/HHI/Scripts/WAClientTest.unity         | 484 ++++++++++++++++++
 Assets/HHI/Scripts/WAClientTest.unity.meta    |   7 +
 Assets/NuGet.config                           |  18 +
 Assets/NuGet.config.meta                      |  23 +
 Assets/Packages.meta                          |   8 +
 .../websocket-sharp-latest.1.0.2.meta         |   8 +
 .../.signature.p7s                            | Bin 0 -> 11515 bytes
 .../websocket-sharp-latest.1.0.2/lib.meta     |   8 +
 .../lib/netstandard2.0.meta                   |   8 +
 .../websocket-sharp-latest.dll.meta           |  23 +
 .../websocket-sharp-latest.nuspec             |  17 +
 .../websocket-sharp-latest.nuspec.meta        |   7 +
 .../websocket-sharp_icon.png                  | Bin 0 -> 911 bytes
 .../websocket-sharp_icon.png.meta             | 153 ++++++
 Assets/Resources/HHI.asset                    |   2 +-
 Assets/Resources/HHIServer.asset              |   2 +-
 Assets/packages.config                        |   4 +
 Assets/packages.config.meta                   |  23 +
 Packages/manifest.json                        |   3 +-
 Packages/packages-lock.json                   |   7 +
 Packages/unity-world-analysis-package         |   2 +-
 Packages/unity-world-storage-package          |   2 +-
 32 files changed, 1042 insertions(+), 5 deletions(-)
 create mode 100644 Assets/HHI.meta
 create mode 100644 Assets/HHI/HHI_ARFWorldAnalysisUser.asset
 create mode 100644 Assets/HHI/HHI_ARFWorldAnalysisUser.asset.meta
 create mode 100644 Assets/HHI/HHI_Analysis Local.asset
 create mode 100644 Assets/HHI/HHI_Analysis Local.asset.meta
 create mode 100644 Assets/HHI/HHI_Analysis.asset
 create mode 100644 Assets/HHI/HHI_Analysis.asset.meta
 create mode 100644 Assets/HHI/Scripts.meta
 create mode 100644 Assets/HHI/Scripts/TestAPIWebSocketsClient.cs
 create mode 100644 Assets/HHI/Scripts/TestAPIWebSocketsClient.cs.meta
 create mode 100644 Assets/HHI/Scripts/WAClientTest.unity
 create mode 100644 Assets/HHI/Scripts/WAClientTest.unity.meta
 create mode 100644 Assets/NuGet.config
 create mode 100644 Assets/NuGet.config.meta
 create mode 100644 Assets/Packages.meta
 create mode 100644 Assets/Packages/websocket-sharp-latest.1.0.2.meta
 create mode 100644 Assets/Packages/websocket-sharp-latest.1.0.2/.signature.p7s
 create mode 100644 Assets/Packages/websocket-sharp-latest.1.0.2/lib.meta
 create mode 100644 Assets/Packages/websocket-sharp-latest.1.0.2/lib/netstandard2.0.meta
 create mode 100644 Assets/Packages/websocket-sharp-latest.1.0.2/lib/netstandard2.0/websocket-sharp-latest.dll.meta
 create mode 100644 Assets/Packages/websocket-sharp-latest.1.0.2/websocket-sharp-latest.nuspec
 create mode 100644 Assets/Packages/websocket-sharp-latest.1.0.2/websocket-sharp-latest.nuspec.meta
 create mode 100644 Assets/Packages/websocket-sharp-latest.1.0.2/websocket-sharp_icon.png
 create mode 100644 Assets/Packages/websocket-sharp-latest.1.0.2/websocket-sharp_icon.png.meta
 create mode 100644 Assets/packages.config
 create mode 100644 Assets/packages.config.meta

diff --git a/Assets/HHI.meta b/Assets/HHI.meta
new file mode 100644
index 0000000..5ab1506
--- /dev/null
+++ b/Assets/HHI.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 31baf714eb2add046993d3682b6cd8f1
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/HHI/HHI_ARFWorldAnalysisUser.asset b/Assets/HHI/HHI_ARFWorldAnalysisUser.asset
new file mode 100644
index 0000000..aed5691
--- /dev/null
+++ b/Assets/HHI/HHI_ARFWorldAnalysisUser.asset
@@ -0,0 +1,17 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+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: 01f9889f0a04026429aa8459e181e973, type: 3}
+  m_Name: HHI_ARFWorldAnalysisUser
+  m_EditorClassIdentifier: 
+  userName: HHI
+  company: Fraunhofer HHI
+  UUID: 75189aef-0fa8-4a37-b1cb-ff246bf99828
diff --git a/Assets/HHI/HHI_ARFWorldAnalysisUser.asset.meta b/Assets/HHI/HHI_ARFWorldAnalysisUser.asset.meta
new file mode 100644
index 0000000..3b69312
--- /dev/null
+++ b/Assets/HHI/HHI_ARFWorldAnalysisUser.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 568321977f2db614d9bdb32281524601
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 11400000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/HHI/HHI_Analysis Local.asset b/Assets/HHI/HHI_Analysis Local.asset
new file mode 100644
index 0000000..8f2fccd
--- /dev/null
+++ b/Assets/HHI/HHI_Analysis Local.asset	
@@ -0,0 +1,19 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+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: 4571d019d0609224aa4a14ed18de30cd, type: 3}
+  m_Name: HHI_Analysis Local
+  m_EditorClassIdentifier: 
+  serverName: HHI Local (DEV)
+  company: Fraunhofer HHI
+  basePath: http://localhost
+  port: 61788
+  currentUser: {fileID: 11400000, guid: 568321977f2db614d9bdb32281524601, type: 2}
diff --git a/Assets/HHI/HHI_Analysis Local.asset.meta b/Assets/HHI/HHI_Analysis Local.asset.meta
new file mode 100644
index 0000000..8e9f2ac
--- /dev/null
+++ b/Assets/HHI/HHI_Analysis Local.asset.meta	
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: c5edacbb89cfeb54da3475ea5561a4ac
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 11400000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/HHI/HHI_Analysis.asset b/Assets/HHI/HHI_Analysis.asset
new file mode 100644
index 0000000..6ffa8ea
--- /dev/null
+++ b/Assets/HHI/HHI_Analysis.asset
@@ -0,0 +1,19 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+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: 4571d019d0609224aa4a14ed18de30cd, type: 3}
+  m_Name: HHI_Analysis
+  m_EditorClassIdentifier: 
+  serverName: HHI
+  company: Fraunhofer HHI
+  basePath: https://
+  port: 8080
+  currentUser: {fileID: 11400000, guid: 568321977f2db614d9bdb32281524601, type: 2}
diff --git a/Assets/HHI/HHI_Analysis.asset.meta b/Assets/HHI/HHI_Analysis.asset.meta
new file mode 100644
index 0000000..d344d51
--- /dev/null
+++ b/Assets/HHI/HHI_Analysis.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: e1cf0a2f6e95ec449bc971f00bffe9df
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 11400000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/HHI/Scripts.meta b/Assets/HHI/Scripts.meta
new file mode 100644
index 0000000..5cf908b
--- /dev/null
+++ b/Assets/HHI/Scripts.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 099fe9f81070c9345820718eb8b98412
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/HHI/Scripts/TestAPIWebSocketsClient.cs b/Assets/HHI/Scripts/TestAPIWebSocketsClient.cs
new file mode 100644
index 0000000..0396f02
--- /dev/null
+++ b/Assets/HHI/Scripts/TestAPIWebSocketsClient.cs
@@ -0,0 +1,132 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+using WebSocketSharp;
+
+using ETSI.ARF.WorldAnalysis;
+using ETSI.ARF.WorldAnalysis.REST;
+using ETSI.ARF.OpenAPI.WorldAnalysis;
+using Pose = ETSI.ARF.OpenAPI.WorldAnalysis.Pose;
+using UnityEngine.InputSystem;
+
+public class TestWebSocketsClient : MonoBehaviour
+{
+    public WorldAnalysisREST rest;
+    public GameObject asset1;
+
+    private WebSocketSharp.WebSocket webSocket;
+    string websocketServer;
+    bool websocketConnected = false;
+
+    // Start is called before the first frame update
+    void Start()
+    {
+        if (asset1 != null) asset1.GetComponent<Renderer>().material.color = Color.red;
+
+        rest.CheckServer();
+        rest.PrintCapabilities();
+
+        //websocketServer = rest.GetWebSocketEndpoint();
+        websocketServer = "ws://localhost:61788/ws";
+
+        WebSocketConnect();
+    }
+
+    // Update is called once per frame
+    bool updateAsset1 = false;
+    Color asset1Color = Color.grey;
+    void Update()
+    {
+        if (Keyboard.current.spaceKey.wasPressedThisFrame)
+        {
+            webSocket.Send("StartSendingPose:10");
+        }
+
+        if (updateAsset1)
+        {
+            updateAsset1 = false;
+            asset1.GetComponent<Renderer>().material.color = asset1Color;
+        }
+    }
+
+    void SetColor(Color c)
+    {
+        updateAsset1 = true;
+        asset1Color = c;
+    }
+
+    private void OnDestroy()
+    {
+        if (websocketConnected) WebSocketClose();
+    }
+
+    //
+    // WebSocket methods
+    //
+    public void WebSocketClose()
+    {
+        webSocket.Send("unregister");
+        webSocket.Close();
+    }
+
+    public void WebSocketConnect()
+    {
+        webSocket = new WebSocketSharp.WebSocket(websocketServer.ToString());
+
+        webSocket.OnOpen += (sender, e) =>
+        {
+            websocketConnected = true;
+            Debug.Log("[WS] Connected");
+            webSocket.Send("client:UnitySceneManagement");
+        };
+        webSocket.OnClose += (sender, e) =>
+        {
+            websocketConnected = false;
+            SetColor(Color.red);
+            Debug.Log("[WS] Disconnected");
+        };
+        webSocket.OnError += (sender, e) => Debug.Log("[WS] Error!");
+        webSocket.OnMessage += (sender, e) => WebSocketHandleMessage(e.Data);
+        webSocket.Connect();
+    }
+
+    bool ok = false;
+    public void WebSocketHandleMessage(string data)
+    {
+        Debug.Log("[WS] Receiving: " + data);
+
+        if (data.Contains("You are now registered"))
+        {
+            ok = true;
+            SetColor(Color.yellow);
+            webSocket.Send("StartSendingPose:10");
+        }
+        else if (data == "Stop")
+        {
+            SetColor(Color.yellow);
+            //ok = false;
+        }
+        else if (ok)
+        {
+            if (data.Contains("estimationState"))
+            {
+                // Handle pose
+                Pose p = JsonUtility.FromJson<Pose>(data);
+                Debug.Log("[WS][Pose] State: " + p.EstimationState.ToString());
+                if (p.EstimationState == PoseEstimationState.OK)
+                {
+                    if (asset1 != null)
+                    {
+                        SetColor(Color.green);
+                        //asset1.transform.rotation = WorldAnalysisUnityHelper.ConvertETSIARFQuaternionToUnity(p.Value.ro)
+                    }
+                }
+                else
+                {
+                    SetColor(Color.yellow);
+                }
+            }
+        }
+    }
+}
diff --git a/Assets/HHI/Scripts/TestAPIWebSocketsClient.cs.meta b/Assets/HHI/Scripts/TestAPIWebSocketsClient.cs.meta
new file mode 100644
index 0000000..6ff2c8c
--- /dev/null
+++ b/Assets/HHI/Scripts/TestAPIWebSocketsClient.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 88970364eded81345a2d1f1fce3fe155
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/HHI/Scripts/WAClientTest.unity b/Assets/HHI/Scripts/WAClientTest.unity
new file mode 100644
index 0000000..f1aac87
--- /dev/null
+++ b/Assets/HHI/Scripts/WAClientTest.unity
@@ -0,0 +1,484 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!29 &1
+OcclusionCullingSettings:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_OcclusionBakeSettings:
+    smallestOccluder: 5
+    smallestHole: 0.25
+    backfaceThreshold: 100
+  m_SceneGUID: 00000000000000000000000000000000
+  m_OcclusionCullingData: {fileID: 0}
+--- !u!104 &2
+RenderSettings:
+  m_ObjectHideFlags: 0
+  serializedVersion: 9
+  m_Fog: 0
+  m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
+  m_FogMode: 3
+  m_FogDensity: 0.01
+  m_LinearFogStart: 0
+  m_LinearFogEnd: 300
+  m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}
+  m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
+  m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
+  m_AmbientIntensity: 1
+  m_AmbientMode: 0
+  m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
+  m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0}
+  m_HaloStrength: 0.5
+  m_FlareStrength: 1
+  m_FlareFadeSpeed: 3
+  m_HaloTexture: {fileID: 0}
+  m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
+  m_DefaultReflectionMode: 0
+  m_DefaultReflectionResolution: 128
+  m_ReflectionBounces: 1
+  m_ReflectionIntensity: 1
+  m_CustomReflection: {fileID: 0}
+  m_Sun: {fileID: 0}
+  m_IndirectSpecularColor: {r: 0.44402242, g: 0.49316543, b: 0.5722324, a: 1}
+  m_UseRadianceAmbientProbe: 0
+--- !u!157 &3
+LightmapSettings:
+  m_ObjectHideFlags: 0
+  serializedVersion: 12
+  m_GIWorkflowMode: 1
+  m_GISettings:
+    serializedVersion: 2
+    m_BounceScale: 1
+    m_IndirectOutputScale: 1
+    m_AlbedoBoost: 1
+    m_EnvironmentLightingMode: 0
+    m_EnableBakedLightmaps: 1
+    m_EnableRealtimeLightmaps: 0
+  m_LightmapEditorSettings:
+    serializedVersion: 12
+    m_Resolution: 2
+    m_BakeResolution: 40
+    m_AtlasSize: 1024
+    m_AO: 0
+    m_AOMaxDistance: 1
+    m_CompAOExponent: 1
+    m_CompAOExponentDirect: 0
+    m_ExtractAmbientOcclusion: 0
+    m_Padding: 2
+    m_LightmapParameters: {fileID: 0}
+    m_LightmapsBakeMode: 1
+    m_TextureCompression: 1
+    m_FinalGather: 0
+    m_FinalGatherFiltering: 1
+    m_FinalGatherRayCount: 256
+    m_ReflectionCompression: 2
+    m_MixedBakeMode: 2
+    m_BakeBackend: 1
+    m_PVRSampling: 1
+    m_PVRDirectSampleCount: 32
+    m_PVRSampleCount: 512
+    m_PVRBounces: 2
+    m_PVREnvironmentSampleCount: 256
+    m_PVREnvironmentReferencePointCount: 2048
+    m_PVRFilteringMode: 1
+    m_PVRDenoiserTypeDirect: 1
+    m_PVRDenoiserTypeIndirect: 1
+    m_PVRDenoiserTypeAO: 1
+    m_PVRFilterTypeDirect: 0
+    m_PVRFilterTypeIndirect: 0
+    m_PVRFilterTypeAO: 0
+    m_PVREnvironmentMIS: 1
+    m_PVRCulling: 1
+    m_PVRFilteringGaussRadiusDirect: 1
+    m_PVRFilteringGaussRadiusIndirect: 5
+    m_PVRFilteringGaussRadiusAO: 2
+    m_PVRFilteringAtrousPositionSigmaDirect: 0.5
+    m_PVRFilteringAtrousPositionSigmaIndirect: 2
+    m_PVRFilteringAtrousPositionSigmaAO: 1
+    m_ExportTrainingData: 0
+    m_TrainingDataDestination: TrainingData
+    m_LightProbeSampleCountMultiplier: 4
+  m_LightingDataAsset: {fileID: 0}
+  m_LightingSettings: {fileID: 0}
+--- !u!196 &4
+NavMeshSettings:
+  serializedVersion: 2
+  m_ObjectHideFlags: 0
+  m_BuildSettings:
+    serializedVersion: 3
+    agentTypeID: 0
+    agentRadius: 0.5
+    agentHeight: 2
+    agentSlope: 45
+    agentClimb: 0.4
+    ledgeDropHeight: 0
+    maxJumpAcrossDistance: 0
+    minRegionArea: 2
+    manualCellSize: 0
+    cellSize: 0.16666667
+    manualTileSize: 0
+    tileSize: 256
+    buildHeightMesh: 0
+    maxJobWorkers: 0
+    preserveTilesOutsideBounds: 0
+    debug:
+      m_Flags: 0
+  m_NavMeshData: {fileID: 0}
+--- !u!1 &347171821
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 347171823}
+  - component: {fileID: 347171822}
+  m_Layer: 0
+  m_Name: Directional Light
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!108 &347171822
+Light:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 347171821}
+  m_Enabled: 1
+  serializedVersion: 10
+  m_Type: 1
+  m_Shape: 0
+  m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1}
+  m_Intensity: 1
+  m_Range: 10
+  m_SpotAngle: 30
+  m_InnerSpotAngle: 21.80208
+  m_CookieSize: 10
+  m_Shadows:
+    m_Type: 2
+    m_Resolution: -1
+    m_CustomResolution: -1
+    m_Strength: 1
+    m_Bias: 0.05
+    m_NormalBias: 0.4
+    m_NearPlane: 0.2
+    m_CullingMatrixOverride:
+      e00: 1
+      e01: 0
+      e02: 0
+      e03: 0
+      e10: 0
+      e11: 1
+      e12: 0
+      e13: 0
+      e20: 0
+      e21: 0
+      e22: 1
+      e23: 0
+      e30: 0
+      e31: 0
+      e32: 0
+      e33: 1
+    m_UseCullingMatrixOverride: 0
+  m_Cookie: {fileID: 0}
+  m_DrawHalo: 0
+  m_Flare: {fileID: 0}
+  m_RenderMode: 0
+  m_CullingMask:
+    serializedVersion: 2
+    m_Bits: 4294967295
+  m_RenderingLayerMask: 1
+  m_Lightmapping: 4
+  m_LightShadowCasterMode: 0
+  m_AreaSize: {x: 1, y: 1}
+  m_BounceIntensity: 1
+  m_ColorTemperature: 6570
+  m_UseColorTemperature: 0
+  m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0}
+  m_UseBoundingSphereOverride: 0
+  m_UseViewFrustumForShadowCasterCull: 1
+  m_ShadowRadius: 0
+  m_ShadowAngle: 0
+--- !u!4 &347171823
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 347171821}
+  serializedVersion: 2
+  m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261}
+  m_LocalPosition: {x: 0, y: 3, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
+--- !u!1 &481779981
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 481779985}
+  - component: {fileID: 481779984}
+  - component: {fileID: 481779983}
+  - component: {fileID: 481779982}
+  m_Layer: 0
+  m_Name: Cube
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!65 &481779982
+BoxCollider:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 481779981}
+  m_Material: {fileID: 0}
+  m_IncludeLayers:
+    serializedVersion: 2
+    m_Bits: 0
+  m_ExcludeLayers:
+    serializedVersion: 2
+    m_Bits: 0
+  m_LayerOverridePriority: 0
+  m_IsTrigger: 0
+  m_ProvidesContacts: 0
+  m_Enabled: 1
+  serializedVersion: 3
+  m_Size: {x: 1, y: 1, z: 1}
+  m_Center: {x: 0, y: 0, z: 0}
+--- !u!23 &481779983
+MeshRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 481779981}
+  m_Enabled: 1
+  m_CastShadows: 1
+  m_ReceiveShadows: 1
+  m_DynamicOccludee: 1
+  m_StaticShadowCaster: 0
+  m_MotionVectors: 1
+  m_LightProbeUsage: 1
+  m_ReflectionProbeUsage: 1
+  m_RayTracingMode: 2
+  m_RayTraceProcedural: 0
+  m_RenderingLayerMask: 1
+  m_RendererPriority: 0
+  m_Materials:
+  - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0}
+  m_StaticBatchInfo:
+    firstSubMesh: 0
+    subMeshCount: 0
+  m_StaticBatchRoot: {fileID: 0}
+  m_ProbeAnchor: {fileID: 0}
+  m_LightProbeVolumeOverride: {fileID: 0}
+  m_ScaleInLightmap: 1
+  m_ReceiveGI: 1
+  m_PreserveUVs: 0
+  m_IgnoreNormalsForChartDetection: 0
+  m_ImportantGI: 0
+  m_StitchLightmapSeams: 1
+  m_SelectedEditorRenderState: 3
+  m_MinimumChartSize: 4
+  m_AutoUVMaxDistance: 0.5
+  m_AutoUVMaxAngle: 89
+  m_LightmapParameters: {fileID: 0}
+  m_SortingLayerID: 0
+  m_SortingLayer: 0
+  m_SortingOrder: 0
+  m_AdditionalVertexStreams: {fileID: 0}
+--- !u!33 &481779984
+MeshFilter:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 481779981}
+  m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!4 &481779985
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 481779981}
+  serializedVersion: 2
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0.80859965, y: 0.07700671, z: -4.212555}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &960712811
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 960712813}
+  - component: {fileID: 960712812}
+  - component: {fileID: 960712814}
+  m_Layer: 0
+  m_Name: WAClient
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!114 &960712812
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 960712811}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 88970364eded81345a2d1f1fce3fe155, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  rest: {fileID: 960712814}
+  asset1: {fileID: 481779981}
+--- !u!4 &960712813
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 960712811}
+  serializedVersion: 2
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0.80859965, y: 0.07700671, z: -4.212555}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &960712814
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 960712811}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: b0885b8471e62a34599778bb8e199c52, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  waServer: {fileID: 11400000, guid: c5edacbb89cfeb54da3475ea5561a4ac, type: 2}
+--- !u!1 &1526929762
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1526929765}
+  - component: {fileID: 1526929764}
+  - component: {fileID: 1526929763}
+  m_Layer: 0
+  m_Name: Main Camera
+  m_TagString: MainCamera
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!81 &1526929763
+AudioListener:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1526929762}
+  m_Enabled: 1
+--- !u!20 &1526929764
+Camera:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1526929762}
+  m_Enabled: 1
+  serializedVersion: 2
+  m_ClearFlags: 1
+  m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
+  m_projectionMatrixMode: 1
+  m_GateFitMode: 2
+  m_FOVAxisMode: 0
+  m_Iso: 200
+  m_ShutterSpeed: 0.005
+  m_Aperture: 16
+  m_FocusDistance: 10
+  m_FocalLength: 50
+  m_BladeCount: 5
+  m_Curvature: {x: 2, y: 11}
+  m_BarrelClipping: 0.25
+  m_Anamorphism: 0
+  m_SensorSize: {x: 36, y: 24}
+  m_LensShift: {x: 0, y: 0}
+  m_NormalizedViewPortRect:
+    serializedVersion: 2
+    x: 0
+    y: 0
+    width: 1
+    height: 1
+  near clip plane: 0.3
+  far clip plane: 1000
+  field of view: 60
+  orthographic: 0
+  orthographic size: 5
+  m_Depth: -1
+  m_CullingMask:
+    serializedVersion: 2
+    m_Bits: 4294967295
+  m_RenderingPath: -1
+  m_TargetTexture: {fileID: 0}
+  m_TargetDisplay: 0
+  m_TargetEye: 3
+  m_HDR: 1
+  m_AllowMSAA: 1
+  m_AllowDynamicResolution: 0
+  m_ForceIntoRT: 0
+  m_OcclusionCulling: 1
+  m_StereoConvergence: 10
+  m_StereoSeparation: 0.022
+--- !u!4 &1526929765
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1526929762}
+  serializedVersion: 2
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 1, z: -10}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1660057539 &9223372036854775807
+SceneRoots:
+  m_ObjectHideFlags: 0
+  m_Roots:
+  - {fileID: 1526929765}
+  - {fileID: 347171823}
+  - {fileID: 960712813}
+  - {fileID: 481779985}
diff --git a/Assets/HHI/Scripts/WAClientTest.unity.meta b/Assets/HHI/Scripts/WAClientTest.unity.meta
new file mode 100644
index 0000000..bfdb1c4
--- /dev/null
+++ b/Assets/HHI/Scripts/WAClientTest.unity.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 6c3dda3aaa09dbf46af61577b63883c1
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/NuGet.config b/Assets/NuGet.config
new file mode 100644
index 0000000..0c08388
--- /dev/null
+++ b/Assets/NuGet.config
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <packageSources>
+    <clear />
+    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
+  </packageSources>
+  <disabledPackageSources />
+  <activePackageSource>
+    <add key="All" value="(Aggregate source)" />
+  </activePackageSource>
+  <config>
+    <add key="packageInstallLocation" value="CustomWithinAssets" />
+    <add key="repositoryPath" value="./Packages" />
+    <add key="PackagesConfigDirectoryPath" value="." />
+    <add key="slimRestore" value="true" />
+    <add key="PreferNetStandardOverNetFramework" value="true" />
+  </config>
+</configuration>
\ No newline at end of file
diff --git a/Assets/NuGet.config.meta b/Assets/NuGet.config.meta
new file mode 100644
index 0000000..adc693c
--- /dev/null
+++ b/Assets/NuGet.config.meta
@@ -0,0 +1,23 @@
+fileFormatVersion: 2
+guid: e9446455be0109d44b5857ce18f10ec5
+labels:
+- NuGetForUnity
+PluginImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  iconMap: {}
+  executionOrder: {}
+  defineConstraints: []
+  isPreloaded: 0
+  isOverridable: 0
+  isExplicitlyReferenced: 0
+  validateReferences: 1
+  platformData:
+  - first:
+      Any: 
+    second:
+      enabled: 1
+      settings: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Packages.meta b/Assets/Packages.meta
new file mode 100644
index 0000000..b6c7aec
--- /dev/null
+++ b/Assets/Packages.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 953b8657509a139449794a24f2147730
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Packages/websocket-sharp-latest.1.0.2.meta b/Assets/Packages/websocket-sharp-latest.1.0.2.meta
new file mode 100644
index 0000000..15642e0
--- /dev/null
+++ b/Assets/Packages/websocket-sharp-latest.1.0.2.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 4af05175caa96bb43844e080f1d8701b
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Packages/websocket-sharp-latest.1.0.2/.signature.p7s b/Assets/Packages/websocket-sharp-latest.1.0.2/.signature.p7s
new file mode 100644
index 0000000000000000000000000000000000000000..29b82e384cd4bfbf60c118bfe30e6e30bd1d7699
GIT binary patch
literal 11515
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

literal 0
HcmV?d00001

diff --git a/Assets/Packages/websocket-sharp-latest.1.0.2/lib.meta b/Assets/Packages/websocket-sharp-latest.1.0.2/lib.meta
new file mode 100644
index 0000000..b83a27a
--- /dev/null
+++ b/Assets/Packages/websocket-sharp-latest.1.0.2/lib.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 1494d109bc218c346ab7622ed734ea86
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Packages/websocket-sharp-latest.1.0.2/lib/netstandard2.0.meta b/Assets/Packages/websocket-sharp-latest.1.0.2/lib/netstandard2.0.meta
new file mode 100644
index 0000000..7d2e7f1
--- /dev/null
+++ b/Assets/Packages/websocket-sharp-latest.1.0.2/lib/netstandard2.0.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 9d5dbed810c34cc4db0fe224cda88d0b
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Packages/websocket-sharp-latest.1.0.2/lib/netstandard2.0/websocket-sharp-latest.dll.meta b/Assets/Packages/websocket-sharp-latest.1.0.2/lib/netstandard2.0/websocket-sharp-latest.dll.meta
new file mode 100644
index 0000000..9be2412
--- /dev/null
+++ b/Assets/Packages/websocket-sharp-latest.1.0.2/lib/netstandard2.0/websocket-sharp-latest.dll.meta
@@ -0,0 +1,23 @@
+fileFormatVersion: 2
+guid: bddbf4bf9ff11da4885638979b82efb2
+labels:
+- NuGetForUnity
+PluginImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  iconMap: {}
+  executionOrder: {}
+  defineConstraints: []
+  isPreloaded: 0
+  isOverridable: 0
+  isExplicitlyReferenced: 0
+  validateReferences: 1
+  platformData:
+  - first:
+      Any: 
+    second:
+      enabled: 1
+      settings: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Packages/websocket-sharp-latest.1.0.2/websocket-sharp-latest.nuspec b/Assets/Packages/websocket-sharp-latest.1.0.2/websocket-sharp-latest.nuspec
new file mode 100644
index 0000000..18e382a
--- /dev/null
+++ b/Assets/Packages/websocket-sharp-latest.1.0.2/websocket-sharp-latest.nuspec
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
+  <metadata>
+    <id>websocket-sharp-latest</id>
+    <version>1.0.2</version>
+    <authors>websocket-sharp-latest</authors>
+    <license type="expression">MIT</license>
+    <licenseUrl>https://licenses.nuget.org/MIT</licenseUrl>
+    <icon>websocket-sharp_icon.png</icon>
+    <description>Package Description</description>
+    <releaseNotes>https://github.com/garbles-labs/websocket-sharp/releases</releaseNotes>
+    <repository type="git" />
+    <dependencies>
+      <group targetFramework=".NETStandard2.0" />
+    </dependencies>
+  </metadata>
+</package>
\ No newline at end of file
diff --git a/Assets/Packages/websocket-sharp-latest.1.0.2/websocket-sharp-latest.nuspec.meta b/Assets/Packages/websocket-sharp-latest.1.0.2/websocket-sharp-latest.nuspec.meta
new file mode 100644
index 0000000..667b2c7
--- /dev/null
+++ b/Assets/Packages/websocket-sharp-latest.1.0.2/websocket-sharp-latest.nuspec.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: a9d61c123a66f5b4a8d236c2972a3609
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Packages/websocket-sharp-latest.1.0.2/websocket-sharp_icon.png b/Assets/Packages/websocket-sharp-latest.1.0.2/websocket-sharp_icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..a07c30eb38d729691b987ff3ae8597fe3256b999
GIT binary patch
literal 911
zcmeAS@N?(olHy`uVBq!ia0y~yU~~Xs4mP03*$GQm0V&P`kH}&M25w;xW@MN(M}mQY
z+0oO*F{I+w+iMp&4;u)$IBNIizKx#wNtR=V1W%VuaHHjXxpEnxX2QVVq^E&<S!^1+
zzA^)gfCB>~#RP^4KZ*}?Of!GWy91Zu6kGcvP2yntOZmCkyYI}IbR#vUfq{ub0Zt$>
z5rSl}fLi*EdlD)y-<t!rs3KmEl<*=cVDn7D(PDSKY^SB_$7iu1&rru7Oc^ZjkO2ik
zPKpGhb%u5L?`10YrgM`L6&MkXM{`3oukwTN+~-;MryS9H%!Cpaqy!=!D;O9VSqP_h
dkcx)6dl~1tNi#?;v3(2Td%F6$taD0e0s#I1gB<_>

literal 0
HcmV?d00001

diff --git a/Assets/Packages/websocket-sharp-latest.1.0.2/websocket-sharp_icon.png.meta b/Assets/Packages/websocket-sharp-latest.1.0.2/websocket-sharp_icon.png.meta
new file mode 100644
index 0000000..76b216b
--- /dev/null
+++ b/Assets/Packages/websocket-sharp-latest.1.0.2/websocket-sharp_icon.png.meta
@@ -0,0 +1,153 @@
+fileFormatVersion: 2
+guid: b3235afb951bf0a4f9e21db48a0937f6
+TextureImporter:
+  internalIDToNameTable: []
+  externalObjects: {}
+  serializedVersion: 13
+  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
+    flipGreenChannel: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  vTOnly: 0
+  ignoreMipmapLimit: 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: 0
+  spriteTessellationDetail: -1
+  textureType: 0
+  textureShape: 1
+  singleChannelComponent: 0
+  flipbookRows: 1
+  flipbookColumns: 1
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  ignorePngGamma: 0
+  applyGammaDecoding: 0
+  swizzle: 50462976
+  cookieLightType: 0
+  platformSettings:
+  - serializedVersion: 3
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 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
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: iPhone
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 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
+    ignorePlatformSupport: 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
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 
+    internalID: 0
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+    secondaryTextures: []
+    nameFileIdTable: {}
+  mipmapLimitGroupName: 
+  pSDRemoveMatte: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Resources/HHI.asset b/Assets/Resources/HHI.asset
index f3495a8..a7211eb 100644
--- a/Assets/Resources/HHI.asset
+++ b/Assets/Resources/HHI.asset
@@ -13,7 +13,7 @@ MonoBehaviour:
   m_Name: HHI
   m_EditorClassIdentifier: 
   serverName: HHI
-  company: HHI
+  company: Fraunhofer HHI
   basePath: https://etsi.hhi.fraunhofer.de/
   port: 443
   currentUser: {fileID: 11400000, guid: 220ed7f6ba8f6404e8bee0e9057e2ffd, type: 2}
diff --git a/Assets/Resources/HHIServer.asset b/Assets/Resources/HHIServer.asset
index d96fee2..68d185d 100644
--- a/Assets/Resources/HHIServer.asset
+++ b/Assets/Resources/HHIServer.asset
@@ -13,7 +13,7 @@ MonoBehaviour:
   m_Name: HHIServer
   m_EditorClassIdentifier: 
   serverName: HHI
-  company: HHI
+  company: Fraunhofer HHI
   basePath: https://etsi.hhi.fraunhofer.de
   port: 0
   currentUser: {fileID: 11400000, guid: 220ed7f6ba8f6404e8bee0e9057e2ffd, type: 2}
diff --git a/Assets/packages.config b/Assets/packages.config
new file mode 100644
index 0000000..bbe11da
--- /dev/null
+++ b/Assets/packages.config
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+  <package id="websocket-sharp-latest" version="1.0.2" manuallyInstalled="true" />
+</packages>
\ No newline at end of file
diff --git a/Assets/packages.config.meta b/Assets/packages.config.meta
new file mode 100644
index 0000000..0b3e2b4
--- /dev/null
+++ b/Assets/packages.config.meta
@@ -0,0 +1,23 @@
+fileFormatVersion: 2
+guid: 36f09c56c89e0a34f9ac77ac391dcd59
+labels:
+- NuGetForUnity
+PluginImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  iconMap: {}
+  executionOrder: {}
+  defineConstraints: []
+  isPreloaded: 0
+  isOverridable: 0
+  isExplicitlyReferenced: 0
+  validateReferences: 1
+  platformData:
+  - first:
+      Any: 
+    second:
+      enabled: 1
+      settings: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Packages/manifest.json b/Packages/manifest.json
index ae8e363..c8d77ea 100644
--- a/Packages/manifest.json
+++ b/Packages/manifest.json
@@ -1,6 +1,7 @@
 {
   "dependencies": {
-	"com.google.ar.core.arfoundation.extensions": "https://github.com/google-ar/arcore-unity-extensions.git",	
+    "com.github-glitchenzo.nugetforunity": "https://github.com/GlitchEnzo/NuGetForUnity.git?path=/src/NuGetForUnity",
+    "com.google.ar.core.arfoundation.extensions": "https://github.com/google-ar/arcore-unity-extensions.git",
     "com.unity.ai.navigation": "1.1.5",
     "com.unity.cloud.gltfast": "6.4.0",
     "com.unity.collab-proxy": "2.3.1",
diff --git a/Packages/packages-lock.json b/Packages/packages-lock.json
index eb67a36..10317c2 100644
--- a/Packages/packages-lock.json
+++ b/Packages/packages-lock.json
@@ -1,5 +1,12 @@
 {
   "dependencies": {
+    "com.github-glitchenzo.nugetforunity": {
+      "version": "https://github.com/GlitchEnzo/NuGetForUnity.git?path=/src/NuGetForUnity",
+      "depth": 0,
+      "source": "git",
+      "dependencies": {},
+      "hash": "90fa6db024148d466fe738f58fd4263c7267346b"
+    },
     "com.google.ar.core.arfoundation.extensions": {
       "version": "https://github.com/google-ar/arcore-unity-extensions.git",
       "depth": 0,
diff --git a/Packages/unity-world-analysis-package b/Packages/unity-world-analysis-package
index 7e30b84..cafd4e6 160000
--- a/Packages/unity-world-analysis-package
+++ b/Packages/unity-world-analysis-package
@@ -1 +1 @@
-Subproject commit 7e30b8448e183bbd8d0f3b38f7276fff6e788c20
+Subproject commit cafd4e6c5d163bd637415b09531f072fb38f1644
diff --git a/Packages/unity-world-storage-package b/Packages/unity-world-storage-package
index 63adf7f..3eb6aa6 160000
--- a/Packages/unity-world-storage-package
+++ b/Packages/unity-world-storage-package
@@ -1 +1 @@
-Subproject commit 63adf7f5487d843f031a15c4db1d493fefe95a31
+Subproject commit 3eb6aa6a08d1e96e15e32cfb69c64fc5bc2afc6e
-- 
GitLab