diff --git a/Assets/Rivet/Editor/Images/FontAwesome/circle-0.svg b/Assets/Rivet/Editor/Images/FontAwesome/circle-0.svg
new file mode 100644
index 0000000..f8eaddc
--- /dev/null
+++ b/Assets/Rivet/Editor/Images/FontAwesome/circle-0.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Assets/Rivet/Editor/Images/FontAwesome/circle-0.svg.meta b/Assets/Rivet/Editor/Images/FontAwesome/circle-0.svg.meta
new file mode 100644
index 0000000..045b456
--- /dev/null
+++ b/Assets/Rivet/Editor/Images/FontAwesome/circle-0.svg.meta
@@ -0,0 +1,54 @@
+fileFormatVersion: 2
+guid: 35cfbdf39cad74dd28aa230f145a1d13
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 11500000, guid: a57477913897c46af95d590f580878bd, type: 3}
+ svgType: 3
+ texturedSpriteMeshType: 0
+ svgPixelsPerUnit: 100
+ gradientResolution: 64
+ alignment: 0
+ customPivot: {x: 0, y: 0}
+ generatePhysicsShape: 0
+ viewportOptions: 0
+ preserveViewport: 0
+ advancedMode: 0
+ predefinedResolutionIndex: 1
+ targetResolution: 1080
+ resolutionMultiplier: 1
+ stepDistance: 10
+ samplingStepDistance: 100
+ maxCordDeviationEnabled: 0
+ maxCordDeviation: 1
+ maxTangentAngleEnabled: 0
+ maxTangentAngle: 5
+ keepTextureAspectRatio: 1
+ textureSize: 256
+ textureWidth: 256
+ textureHeight: 256
+ wrapMode: 0
+ filterMode: 1
+ sampleCount: 4
+ preserveSVGImageAspect: 0
+ useSVGPixelsPerUnit: 0
+ spriteData:
+ TessellationDetail: 0
+ SpriteRect:
+ name:
+ originalName:
+ pivot: {x: 0, y: 0}
+ alignment: 0
+ border: {x: 0, y: 0, z: 0, w: 0}
+ rect:
+ serializedVersion: 2
+ x: 0
+ y: 0
+ width: 0
+ height: 0
+ spriteID: da83954075e45466a9590f94882469aa
+ PhysicsOutlines: []
diff --git a/Assets/Rivet/Editor/Images/FontAwesome/circle-1.svg b/Assets/Rivet/Editor/Images/FontAwesome/circle-1.svg
new file mode 100644
index 0000000..0852650
--- /dev/null
+++ b/Assets/Rivet/Editor/Images/FontAwesome/circle-1.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Assets/Rivet/Editor/Images/FontAwesome/circle-1.svg.meta b/Assets/Rivet/Editor/Images/FontAwesome/circle-1.svg.meta
new file mode 100644
index 0000000..aec26d9
--- /dev/null
+++ b/Assets/Rivet/Editor/Images/FontAwesome/circle-1.svg.meta
@@ -0,0 +1,54 @@
+fileFormatVersion: 2
+guid: dade10c615d554a2c8425dca4c1a4356
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 11500000, guid: a57477913897c46af95d590f580878bd, type: 3}
+ svgType: 3
+ texturedSpriteMeshType: 0
+ svgPixelsPerUnit: 100
+ gradientResolution: 64
+ alignment: 0
+ customPivot: {x: 0, y: 0}
+ generatePhysicsShape: 0
+ viewportOptions: 0
+ preserveViewport: 0
+ advancedMode: 0
+ predefinedResolutionIndex: 1
+ targetResolution: 1080
+ resolutionMultiplier: 1
+ stepDistance: 10
+ samplingStepDistance: 100
+ maxCordDeviationEnabled: 0
+ maxCordDeviation: 1
+ maxTangentAngleEnabled: 0
+ maxTangentAngle: 5
+ keepTextureAspectRatio: 1
+ textureSize: 256
+ textureWidth: 256
+ textureHeight: 256
+ wrapMode: 0
+ filterMode: 1
+ sampleCount: 4
+ preserveSVGImageAspect: 0
+ useSVGPixelsPerUnit: 0
+ spriteData:
+ TessellationDetail: 0
+ SpriteRect:
+ name:
+ originalName:
+ pivot: {x: 0, y: 0}
+ alignment: 0
+ border: {x: 0, y: 0, z: 0, w: 0}
+ rect:
+ serializedVersion: 2
+ x: 0
+ y: 0
+ width: 0
+ height: 0
+ spriteID: ed3d2494b72ed4e3882ee89d4129a849
+ PhysicsOutlines: []
diff --git a/Assets/Rivet/Editor/Images/FontAwesome/circle-2.svg b/Assets/Rivet/Editor/Images/FontAwesome/circle-2.svg
new file mode 100644
index 0000000..a859e8c
--- /dev/null
+++ b/Assets/Rivet/Editor/Images/FontAwesome/circle-2.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Assets/Rivet/Editor/Images/FontAwesome/circle-2.svg.meta b/Assets/Rivet/Editor/Images/FontAwesome/circle-2.svg.meta
new file mode 100644
index 0000000..1254074
--- /dev/null
+++ b/Assets/Rivet/Editor/Images/FontAwesome/circle-2.svg.meta
@@ -0,0 +1,54 @@
+fileFormatVersion: 2
+guid: 955a5cb55b73b48c58232eef577778fa
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 11500000, guid: a57477913897c46af95d590f580878bd, type: 3}
+ svgType: 3
+ texturedSpriteMeshType: 0
+ svgPixelsPerUnit: 100
+ gradientResolution: 64
+ alignment: 0
+ customPivot: {x: 0, y: 0}
+ generatePhysicsShape: 0
+ viewportOptions: 0
+ preserveViewport: 0
+ advancedMode: 0
+ predefinedResolutionIndex: 1
+ targetResolution: 1080
+ resolutionMultiplier: 1
+ stepDistance: 10
+ samplingStepDistance: 100
+ maxCordDeviationEnabled: 0
+ maxCordDeviation: 1
+ maxTangentAngleEnabled: 0
+ maxTangentAngle: 5
+ keepTextureAspectRatio: 1
+ textureSize: 256
+ textureWidth: 256
+ textureHeight: 256
+ wrapMode: 0
+ filterMode: 1
+ sampleCount: 4
+ preserveSVGImageAspect: 0
+ useSVGPixelsPerUnit: 0
+ spriteData:
+ TessellationDetail: 0
+ SpriteRect:
+ name:
+ originalName:
+ pivot: {x: 0, y: 0}
+ alignment: 0
+ border: {x: 0, y: 0, z: 0, w: 0}
+ rect:
+ serializedVersion: 2
+ x: 0
+ y: 0
+ width: 0
+ height: 0
+ spriteID: e08cb283fc22e4fea9c66e5b6647cf6c
+ PhysicsOutlines: []
diff --git a/Assets/Rivet/Editor/Images/FontAwesome/circle-3.svg b/Assets/Rivet/Editor/Images/FontAwesome/circle-3.svg
new file mode 100644
index 0000000..c64a90b
--- /dev/null
+++ b/Assets/Rivet/Editor/Images/FontAwesome/circle-3.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Assets/Rivet/Editor/Images/FontAwesome/circle-3.svg.meta b/Assets/Rivet/Editor/Images/FontAwesome/circle-3.svg.meta
new file mode 100644
index 0000000..64811d7
--- /dev/null
+++ b/Assets/Rivet/Editor/Images/FontAwesome/circle-3.svg.meta
@@ -0,0 +1,54 @@
+fileFormatVersion: 2
+guid: f624928e5e5d74e03be39e8324c0732e
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 11500000, guid: a57477913897c46af95d590f580878bd, type: 3}
+ svgType: 3
+ texturedSpriteMeshType: 0
+ svgPixelsPerUnit: 100
+ gradientResolution: 64
+ alignment: 0
+ customPivot: {x: 0, y: 0}
+ generatePhysicsShape: 0
+ viewportOptions: 0
+ preserveViewport: 0
+ advancedMode: 0
+ predefinedResolutionIndex: 1
+ targetResolution: 1080
+ resolutionMultiplier: 1
+ stepDistance: 10
+ samplingStepDistance: 100
+ maxCordDeviationEnabled: 0
+ maxCordDeviation: 1
+ maxTangentAngleEnabled: 0
+ maxTangentAngle: 5
+ keepTextureAspectRatio: 1
+ textureSize: 256
+ textureWidth: 256
+ textureHeight: 256
+ wrapMode: 0
+ filterMode: 1
+ sampleCount: 4
+ preserveSVGImageAspect: 0
+ useSVGPixelsPerUnit: 0
+ spriteData:
+ TessellationDetail: 0
+ SpriteRect:
+ name:
+ originalName:
+ pivot: {x: 0, y: 0}
+ alignment: 0
+ border: {x: 0, y: 0, z: 0, w: 0}
+ rect:
+ serializedVersion: 2
+ x: 0
+ y: 0
+ width: 0
+ height: 0
+ spriteID: f114cc39082614730b01ec9977031361
+ PhysicsOutlines: []
diff --git a/Assets/Rivet/Editor/Images/FontAwesome/circle-4.svg b/Assets/Rivet/Editor/Images/FontAwesome/circle-4.svg
new file mode 100644
index 0000000..e50ba48
--- /dev/null
+++ b/Assets/Rivet/Editor/Images/FontAwesome/circle-4.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Assets/Rivet/Editor/Images/FontAwesome/circle-4.svg.meta b/Assets/Rivet/Editor/Images/FontAwesome/circle-4.svg.meta
new file mode 100644
index 0000000..4d57d42
--- /dev/null
+++ b/Assets/Rivet/Editor/Images/FontAwesome/circle-4.svg.meta
@@ -0,0 +1,54 @@
+fileFormatVersion: 2
+guid: e5862bb3ef67046278cbb86f01d89f43
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 11500000, guid: a57477913897c46af95d590f580878bd, type: 3}
+ svgType: 3
+ texturedSpriteMeshType: 0
+ svgPixelsPerUnit: 100
+ gradientResolution: 64
+ alignment: 0
+ customPivot: {x: 0, y: 0}
+ generatePhysicsShape: 0
+ viewportOptions: 0
+ preserveViewport: 0
+ advancedMode: 0
+ predefinedResolutionIndex: 1
+ targetResolution: 1080
+ resolutionMultiplier: 1
+ stepDistance: 10
+ samplingStepDistance: 100
+ maxCordDeviationEnabled: 0
+ maxCordDeviation: 1
+ maxTangentAngleEnabled: 0
+ maxTangentAngle: 5
+ keepTextureAspectRatio: 1
+ textureSize: 256
+ textureWidth: 256
+ textureHeight: 256
+ wrapMode: 0
+ filterMode: 1
+ sampleCount: 4
+ preserveSVGImageAspect: 0
+ useSVGPixelsPerUnit: 0
+ spriteData:
+ TessellationDetail: 0
+ SpriteRect:
+ name:
+ originalName:
+ pivot: {x: 0, y: 0}
+ alignment: 0
+ border: {x: 0, y: 0, z: 0, w: 0}
+ rect:
+ serializedVersion: 2
+ x: 0
+ y: 0
+ width: 0
+ height: 0
+ spriteID: 4e2946d677b1a42f99772f520469392b
+ PhysicsOutlines: []
diff --git a/Assets/Rivet/Editor/Images/FontAwesome/circle-5.svg b/Assets/Rivet/Editor/Images/FontAwesome/circle-5.svg
new file mode 100644
index 0000000..1335ed2
--- /dev/null
+++ b/Assets/Rivet/Editor/Images/FontAwesome/circle-5.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Assets/Rivet/Editor/Images/FontAwesome/circle-5.svg.meta b/Assets/Rivet/Editor/Images/FontAwesome/circle-5.svg.meta
new file mode 100644
index 0000000..0cd113d
--- /dev/null
+++ b/Assets/Rivet/Editor/Images/FontAwesome/circle-5.svg.meta
@@ -0,0 +1,54 @@
+fileFormatVersion: 2
+guid: b948f05245dc14b4fba7a1012fdefa36
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 11500000, guid: a57477913897c46af95d590f580878bd, type: 3}
+ svgType: 3
+ texturedSpriteMeshType: 0
+ svgPixelsPerUnit: 100
+ gradientResolution: 64
+ alignment: 0
+ customPivot: {x: 0, y: 0}
+ generatePhysicsShape: 0
+ viewportOptions: 0
+ preserveViewport: 0
+ advancedMode: 0
+ predefinedResolutionIndex: 1
+ targetResolution: 1080
+ resolutionMultiplier: 1
+ stepDistance: 10
+ samplingStepDistance: 100
+ maxCordDeviationEnabled: 0
+ maxCordDeviation: 1
+ maxTangentAngleEnabled: 0
+ maxTangentAngle: 5
+ keepTextureAspectRatio: 1
+ textureSize: 256
+ textureWidth: 256
+ textureHeight: 256
+ wrapMode: 0
+ filterMode: 1
+ sampleCount: 4
+ preserveSVGImageAspect: 0
+ useSVGPixelsPerUnit: 0
+ spriteData:
+ TessellationDetail: 0
+ SpriteRect:
+ name:
+ originalName:
+ pivot: {x: 0, y: 0}
+ alignment: 0
+ border: {x: 0, y: 0, z: 0, w: 0}
+ rect:
+ serializedVersion: 2
+ x: 0
+ y: 0
+ width: 0
+ height: 0
+ spriteID: 47e259954aaa442fe8d6b7189603cf86
+ PhysicsOutlines: []
diff --git a/Assets/Rivet/Editor/Images/FontAwesome/circle-6.svg b/Assets/Rivet/Editor/Images/FontAwesome/circle-6.svg
new file mode 100644
index 0000000..30b9a77
--- /dev/null
+++ b/Assets/Rivet/Editor/Images/FontAwesome/circle-6.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Assets/Rivet/Editor/Images/FontAwesome/circle-6.svg.meta b/Assets/Rivet/Editor/Images/FontAwesome/circle-6.svg.meta
new file mode 100644
index 0000000..ce28456
--- /dev/null
+++ b/Assets/Rivet/Editor/Images/FontAwesome/circle-6.svg.meta
@@ -0,0 +1,54 @@
+fileFormatVersion: 2
+guid: 6a56c2af70b78489daa92f2d356ed407
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 11500000, guid: a57477913897c46af95d590f580878bd, type: 3}
+ svgType: 3
+ texturedSpriteMeshType: 0
+ svgPixelsPerUnit: 100
+ gradientResolution: 64
+ alignment: 0
+ customPivot: {x: 0, y: 0}
+ generatePhysicsShape: 0
+ viewportOptions: 0
+ preserveViewport: 0
+ advancedMode: 0
+ predefinedResolutionIndex: 1
+ targetResolution: 1080
+ resolutionMultiplier: 1
+ stepDistance: 10
+ samplingStepDistance: 100
+ maxCordDeviationEnabled: 0
+ maxCordDeviation: 1
+ maxTangentAngleEnabled: 0
+ maxTangentAngle: 5
+ keepTextureAspectRatio: 1
+ textureSize: 256
+ textureWidth: 256
+ textureHeight: 256
+ wrapMode: 0
+ filterMode: 1
+ sampleCount: 4
+ preserveSVGImageAspect: 0
+ useSVGPixelsPerUnit: 0
+ spriteData:
+ TessellationDetail: 0
+ SpriteRect:
+ name:
+ originalName:
+ pivot: {x: 0, y: 0}
+ alignment: 0
+ border: {x: 0, y: 0, z: 0, w: 0}
+ rect:
+ serializedVersion: 2
+ x: 0
+ y: 0
+ width: 0
+ height: 0
+ spriteID: b7f286505604c4f60bc9b97ad6b22aef
+ PhysicsOutlines: []
diff --git a/Assets/Rivet/Editor/Images/FontAwesome/circle-7.svg b/Assets/Rivet/Editor/Images/FontAwesome/circle-7.svg
new file mode 100644
index 0000000..acc9d86
--- /dev/null
+++ b/Assets/Rivet/Editor/Images/FontAwesome/circle-7.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Assets/Rivet/Editor/Images/FontAwesome/circle-7.svg.meta b/Assets/Rivet/Editor/Images/FontAwesome/circle-7.svg.meta
new file mode 100644
index 0000000..e3f35b3
--- /dev/null
+++ b/Assets/Rivet/Editor/Images/FontAwesome/circle-7.svg.meta
@@ -0,0 +1,54 @@
+fileFormatVersion: 2
+guid: a9c6e8c4b6af242329ad2b784748f53d
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 11500000, guid: a57477913897c46af95d590f580878bd, type: 3}
+ svgType: 3
+ texturedSpriteMeshType: 0
+ svgPixelsPerUnit: 100
+ gradientResolution: 64
+ alignment: 0
+ customPivot: {x: 0, y: 0}
+ generatePhysicsShape: 0
+ viewportOptions: 0
+ preserveViewport: 0
+ advancedMode: 0
+ predefinedResolutionIndex: 1
+ targetResolution: 1080
+ resolutionMultiplier: 1
+ stepDistance: 10
+ samplingStepDistance: 100
+ maxCordDeviationEnabled: 0
+ maxCordDeviation: 1
+ maxTangentAngleEnabled: 0
+ maxTangentAngle: 5
+ keepTextureAspectRatio: 1
+ textureSize: 256
+ textureWidth: 256
+ textureHeight: 256
+ wrapMode: 0
+ filterMode: 1
+ sampleCount: 4
+ preserveSVGImageAspect: 0
+ useSVGPixelsPerUnit: 0
+ spriteData:
+ TessellationDetail: 0
+ SpriteRect:
+ name:
+ originalName:
+ pivot: {x: 0, y: 0}
+ alignment: 0
+ border: {x: 0, y: 0, z: 0, w: 0}
+ rect:
+ serializedVersion: 2
+ x: 0
+ y: 0
+ width: 0
+ height: 0
+ spriteID: e94659057dd654c36961e8ed098c0d15
+ PhysicsOutlines: []
diff --git a/Assets/Rivet/Editor/Images/FontAwesome/circle-8.svg b/Assets/Rivet/Editor/Images/FontAwesome/circle-8.svg
new file mode 100644
index 0000000..963d6f0
--- /dev/null
+++ b/Assets/Rivet/Editor/Images/FontAwesome/circle-8.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Assets/Rivet/Editor/Images/FontAwesome/circle-8.svg.meta b/Assets/Rivet/Editor/Images/FontAwesome/circle-8.svg.meta
new file mode 100644
index 0000000..6a50f26
--- /dev/null
+++ b/Assets/Rivet/Editor/Images/FontAwesome/circle-8.svg.meta
@@ -0,0 +1,54 @@
+fileFormatVersion: 2
+guid: 51b46f1e0b3c74c13bd3dbdf432811e7
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 11500000, guid: a57477913897c46af95d590f580878bd, type: 3}
+ svgType: 3
+ texturedSpriteMeshType: 0
+ svgPixelsPerUnit: 100
+ gradientResolution: 64
+ alignment: 0
+ customPivot: {x: 0, y: 0}
+ generatePhysicsShape: 0
+ viewportOptions: 0
+ preserveViewport: 0
+ advancedMode: 0
+ predefinedResolutionIndex: 1
+ targetResolution: 1080
+ resolutionMultiplier: 1
+ stepDistance: 10
+ samplingStepDistance: 100
+ maxCordDeviationEnabled: 0
+ maxCordDeviation: 1
+ maxTangentAngleEnabled: 0
+ maxTangentAngle: 5
+ keepTextureAspectRatio: 1
+ textureSize: 256
+ textureWidth: 256
+ textureHeight: 256
+ wrapMode: 0
+ filterMode: 1
+ sampleCount: 4
+ preserveSVGImageAspect: 0
+ useSVGPixelsPerUnit: 0
+ spriteData:
+ TessellationDetail: 0
+ SpriteRect:
+ name:
+ originalName:
+ pivot: {x: 0, y: 0}
+ alignment: 0
+ border: {x: 0, y: 0, z: 0, w: 0}
+ rect:
+ serializedVersion: 2
+ x: 0
+ y: 0
+ width: 0
+ height: 0
+ spriteID: 93fa3d117ffab4e9689b206bce563d62
+ PhysicsOutlines: []
diff --git a/Assets/Rivet/Editor/Images/FontAwesome/circle-9.svg b/Assets/Rivet/Editor/Images/FontAwesome/circle-9.svg
new file mode 100644
index 0000000..25396a6
--- /dev/null
+++ b/Assets/Rivet/Editor/Images/FontAwesome/circle-9.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Assets/Rivet/Editor/Images/FontAwesome/circle-9.svg.meta b/Assets/Rivet/Editor/Images/FontAwesome/circle-9.svg.meta
new file mode 100644
index 0000000..d037eef
--- /dev/null
+++ b/Assets/Rivet/Editor/Images/FontAwesome/circle-9.svg.meta
@@ -0,0 +1,54 @@
+fileFormatVersion: 2
+guid: b1ca9a4222f254376bc138a6cea3b0cb
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 11500000, guid: a57477913897c46af95d590f580878bd, type: 3}
+ svgType: 3
+ texturedSpriteMeshType: 0
+ svgPixelsPerUnit: 100
+ gradientResolution: 64
+ alignment: 0
+ customPivot: {x: 0, y: 0}
+ generatePhysicsShape: 0
+ viewportOptions: 0
+ preserveViewport: 0
+ advancedMode: 0
+ predefinedResolutionIndex: 1
+ targetResolution: 1080
+ resolutionMultiplier: 1
+ stepDistance: 10
+ samplingStepDistance: 100
+ maxCordDeviationEnabled: 0
+ maxCordDeviation: 1
+ maxTangentAngleEnabled: 0
+ maxTangentAngle: 5
+ keepTextureAspectRatio: 1
+ textureSize: 256
+ textureWidth: 256
+ textureHeight: 256
+ wrapMode: 0
+ filterMode: 1
+ sampleCount: 4
+ preserveSVGImageAspect: 0
+ useSVGPixelsPerUnit: 0
+ spriteData:
+ TessellationDetail: 0
+ SpriteRect:
+ name:
+ originalName:
+ pivot: {x: 0, y: 0}
+ alignment: 0
+ border: {x: 0, y: 0, z: 0, w: 0}
+ rect:
+ serializedVersion: 2
+ x: 0
+ y: 0
+ width: 0
+ height: 0
+ spriteID: 2f9cbfc3d4efb4410b8a2537f97eb440
+ PhysicsOutlines: []
diff --git a/Assets/Rivet/Editor/PluginSettings.cs b/Assets/Rivet/Editor/PluginSettings.cs
index 8dd82a2..5deeef8 100644
--- a/Assets/Rivet/Editor/PluginSettings.cs
+++ b/Assets/Rivet/Editor/PluginSettings.cs
@@ -3,7 +3,7 @@
using UnityEngine;
using UnityEditor;
using Rivet.Editor.UI;
-using Rivet.UI.Screens;
+using Rivet.Editor.UI.Dock;
namespace Rivet.Editor
{
@@ -169,12 +169,12 @@ private static void SetAndSave(ref string field, string value, string prefKey)
///
public static void UpdateFromPlugin()
{
- if (RivetPlugin.Singleton is { } plugin)
+ if (Dock.Singleton is { } plugin)
{
- BackendEndpoint = plugin.MainController.EnvironmentType switch
+ BackendEndpoint = plugin.EnvironmentType switch
{
- Rivet.UI.Screens.EnvironmentType.Local => $"http://localhost:{plugin.LocalBackendPort}",
- Rivet.UI.Screens.EnvironmentType.Remote => plugin.MainController.RemoteEnvironmentBackend?.Endpoint ?? "http://localhost:6420",
+ EnvironmentType.Local => $"http://localhost:{plugin.LocalBackendPort}",
+ EnvironmentType.Remote => plugin.RemoteEnvironmentBackend?.Endpoint ?? "http://localhost:6420",
_ => throw new System.NotImplementedException(),
};
diff --git a/Assets/Rivet/Editor/UI/Screens.meta b/Assets/Rivet/Editor/UI/Dock.meta
similarity index 77%
rename from Assets/Rivet/Editor/UI/Screens.meta
rename to Assets/Rivet/Editor/UI/Dock.meta
index a3314c0..a04aa19 100644
--- a/Assets/Rivet/Editor/UI/Screens.meta
+++ b/Assets/Rivet/Editor/UI/Dock.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: 1ad51a974ce3f4d979ad6b27d2e252ba
+guid: 0fe103fde1ac7413bb049f863687eba0
folderAsset: yes
DefaultImporter:
externalObjects: {}
diff --git a/Assets/Rivet/Editor/UI/Dock/Dock.cs b/Assets/Rivet/Editor/UI/Dock/Dock.cs
new file mode 100644
index 0000000..ec1e787
--- /dev/null
+++ b/Assets/Rivet/Editor/UI/Dock/Dock.cs
@@ -0,0 +1,341 @@
+using System.Threading.Tasks;
+using UnityEditor;
+using UnityEngine;
+using UnityEngine.UIElements;
+using Newtonsoft.Json.Linq;
+using Newtonsoft.Json;
+using System.Collections.Generic;
+using Rivet.Editor.Types;
+using Rivet.Editor.UI.Dock.Tabs;
+using Rivet.Editor.UI.TaskPanel;
+using Rivet.Editor.Util;
+
+namespace Rivet.Editor.UI.Dock
+{
+ public enum MainTab
+ {
+ Setup, Develop, Modules, Settings,
+ }
+
+ public enum EnvironmentType
+ {
+ Local = 0, Remote = 1,
+ }
+
+
+ public class Dock : EditorWindow
+ {
+ public static Dock? Singleton;
+
+ [SerializeField]
+ private VisualTreeAsset m_VisualTreeAsset;
+
+ private VisualElement _root {
+ get {
+ return rootVisualElement;
+ }
+ }
+
+ public string ApiEndpoint = "https://api.rivet.gg";
+
+ // MARK: Local Game Server
+ public string? LocalGameServerExecutablePath;
+
+ // MARK: Backend
+ // private int _localBackendPort = 6420;
+ // public int LocalBackendPort {
+ // get { return _localBackendPort; }
+ // set {
+ // _localBackendPort = value;
+ // SharedSettings.UpdateFromPlugin();
+ // }
+ // }
+ public int LocalBackendPort
+ {
+ get { return PluginSettings.TEMPBackendLocalPort; }
+ set
+ {
+ PluginSettings.TEMPBackendLocalPort = value;
+ SharedSettings.UpdateFromPlugin();
+ }
+ }
+
+ // MARK: Deployed Game Version
+ public string? GameVersion;
+
+ // MARK: Bootstrap
+ public BootstrapData? BootstrapData;
+
+ // MARK: Tabs
+ private MainTab _tab = MainTab.Setup;
+
+ private VisualElement _setupTabButton;
+ private VisualElement _setupTabBody;
+ private SetupController _setupController;
+
+ private VisualElement _developTabButton;
+ private VisualElement _developTabBody;
+ private DevelopController _developController;
+
+ private VisualElement _modulesTabButton;
+ private VisualElement _modulesTabBody;
+ private ModulesController _modulesController;
+
+ private VisualElement _settingsTabButton;
+ private VisualElement _settingsTabBody;
+ private SettingsController _settingsController;
+
+ // MARK: Environment
+ public EnvironmentType EnvironmentType
+ {
+ get { return PluginSettings.EnvironmentType; }
+ set
+ {
+ PluginSettings.EnvironmentType = value;
+ SharedSettings.UpdateFromPlugin();
+ }
+ }
+ public string? RemoteEnvironmentId
+ {
+ get { return PluginSettings.RemoteEnvironmentId; }
+ set
+ {
+ PluginSettings.RemoteEnvironmentId = value;
+ SharedSettings.UpdateFromPlugin();
+ }
+ }
+ public RivetEnvironment? RemoteEnvironment
+ {
+ get
+ {
+ return RemoteEnvironmentIndex != null ? BootstrapData?.Environments[RemoteEnvironmentIndex.Value] : null;
+ }
+ }
+ public int? RemoteEnvironmentIndex
+ {
+ get
+ {
+ if (BootstrapData is { } data)
+ {
+ var idx = data.Environments.FindIndex(x => x.Id == RemoteEnvironmentId);
+ return idx >= 0 ? idx : 0;
+ }
+ else
+ {
+ return 0;
+ }
+ }
+ set
+ {
+ if (value != null && value >= 0 && value < BootstrapData?.Environments.Count)
+ {
+ RemoteEnvironmentId = BootstrapData?.Environments[value.Value].Id;
+ }
+ }
+ }
+
+ public EnvironmentBackend? RemoteEnvironmentBackend
+ {
+ get
+ {
+ var remoteEnv = RemoteEnvironment;
+ return remoteEnv != null ? BootstrapData?.Backends[remoteEnv.Value.Id] : null;
+ }
+ }
+
+ // MARK: Tasks
+ public TaskManager LocalGameServerManager;
+ public TaskManager BackendManager;
+
+
+ [MenuItem("Window/Rivet/Rivet", false, 20)]
+ public static void ShowPlugin()
+ {
+ Dock dock = GetWindow();
+ dock.titleContent = new GUIContent("Rivet");
+ }
+
+ public void CreateGUI()
+ {
+ m_VisualTreeAsset.CloneTree(rootVisualElement);
+
+ // Bind links
+ var links = rootVisualElement.Q(name: "Header").Q(name: "Links");
+ links.Q(name: "SignInButton").RegisterCallback((ev) => Application.OpenURL("https://rivet.gg/learn/unity"));
+ links.Q(name: "HubButton").RegisterCallback((ev) => Application.OpenURL("https://rivet.gg/learn/unity"));
+ links.Q(name: "DocsButton").RegisterCallback((ev) => Application.OpenURL("https://rivet.gg/learn/unity"));
+ links.Q(name: "FeedbackButton").RegisterCallback((ev) => Application.OpenURL("https://hub.rivet.gg/?modal=feedback&utm=unity"));
+
+ var tabBar = _root.Q(name: "TabBar");
+ var tabBody = _root.Q(name: "TabBody");
+
+ _setupTabButton = tabBar.Q(name: "Setup");
+ _setupTabBody = tabBody.Q(name: "Setup");
+ _setupTabButton.RegisterCallback(ev => SetTab(MainTab.Setup));
+ _setupController = new SetupController(this, _setupTabBody);
+
+ _developTabButton = tabBar.Q(name: "Develop");
+ _developTabBody = tabBody.Q(name: "Develop");
+ _developTabButton.RegisterCallback(ev => SetTab(MainTab.Develop));
+ _developController = new DevelopController(this, _developTabBody);
+
+ _modulesTabButton = tabBar.Q(name: "Modules");
+ _modulesTabBody = tabBody.Q(name: "Modules");
+ _modulesTabButton.RegisterCallback(ev => SetTab(MainTab.Modules));
+ _modulesController = new ModulesController(this, _modulesTabBody);
+
+ _settingsTabButton = tabBar.Q(name: "Settings");
+ _settingsTabBody = tabBody.Q(name: "Settings");
+ _settingsTabButton.RegisterCallback(ev => SetTab(MainTab.Settings));
+ _settingsController = new SettingsController(this, _settingsTabBody);
+
+ SetTab(MainTab.Setup);
+ }
+
+ public void OnEnable()
+ {
+ RivetLogger.Log("On Enable");
+
+ Singleton = this;
+
+ PluginSettings.LoadSettings();
+ SharedSettings.LoadSettings();
+
+ // Task managers
+ LocalGameServerManager = new(
+ initMessage: "Open \"Develop\" and press \"Start\" to start game server.",
+ getTaskConfig: async () =>
+ {
+ if (LocalGameServerExecutablePath != null)
+ {
+ return new TaskConfig
+ {
+ Name = "exec_command",
+ Input = new JObject
+ {
+ ["cwd"] = Builder.ProjectRoot(),
+ ["cmd"] = LocalGameServerExecutablePath,
+ ["args"] = new JArray { "-batchmode", "-nographics", "-server" },
+ }
+ };
+ }
+ else
+ {
+ return null;
+ }
+ },
+ getTaskPanel: () => GameServerWindow.GetWindowIfExists()
+ );
+
+ BackendManager = new(
+ initMessage: "Auto-started by Rivet plugin.",
+ getTaskConfig: async () =>
+ {
+ // Choose port to run on. This is to avoid potential conflicts with
+ // multiple projects running at the same time.
+ var chooseRes = await new RivetTask("backend_choose_local_port", new JObject()).RunAsync();
+ int port;
+ switch (chooseRes)
+ {
+ case ResultOk ok:
+ port = (int)ok.Data["port"];
+ LocalBackendPort = port;
+ break;
+ case ResultErr err:
+ RivetLogger.Error($"Failed to choose port: {err}");
+ return null;
+ default:
+ return null;
+ }
+
+
+ return new TaskConfig
+ {
+ Name = "backend_dev",
+ Input = new JObject
+ {
+ ["port"] = port,
+ ["cwd"] = Builder.ProjectRoot(),
+ }
+ };
+ },
+ getTaskPanel: () => BackendWindow.GetWindowIfExists(),
+ autoRestart: true
+ );
+
+ // Shut down on reload
+ AssemblyReloadEvents.beforeAssemblyReload += () => {
+ RivetLogger.Log("Before Assembly Reload");
+ ShutdownPlugin();
+ };
+
+ // // Start backend
+ // _ = BackendManager.StartTask();
+
+
+ }
+
+ public void OnDisable()
+ {
+ RivetLogger.Log("On Disable");
+ ShutdownPlugin();
+ }
+
+ ///
+ /// Shuts down any tasks that might be running in the plugin.
+ ///
+ private void ShutdownPlugin()
+ {
+
+ RivetLogger.Log("Shutdown Plugin");
+ LocalGameServerManager.StopTask();
+ BackendManager.StopTask();
+ }
+
+ public void OnShow() {
+ // Fetch data
+ _ = GetBootstrapData();
+ }
+
+ void SetTab(MainTab tab)
+ {
+ _tab = tab;
+
+ _setupTabButton.EnableInClassList("active", tab == MainTab.Setup);
+ _setupTabBody.style.display = tab == MainTab.Setup ? DisplayStyle.Flex : DisplayStyle.None;
+
+ _developTabButton.EnableInClassList("active", tab == MainTab.Develop);
+ _developTabBody.style.display = tab == MainTab.Develop ? DisplayStyle.Flex : DisplayStyle.None;
+
+ _modulesTabButton.EnableInClassList("active", tab == MainTab.Modules);
+ _modulesTabBody.style.display = tab == MainTab.Modules ? DisplayStyle.Flex : DisplayStyle.None;
+
+ _settingsTabButton.EnableInClassList("active", tab == MainTab.Settings);
+ _settingsTabBody.style.display = tab == MainTab.Settings ? DisplayStyle.Flex : DisplayStyle.None;
+ }
+
+ public async Task GetBootstrapData()
+ {
+ var result = await new RivetTask("get_bootstrap_data", new JObject()).RunAsync();
+ if (result is ResultErr err)
+ {
+ return;
+ }
+
+ var data = result.Data.ToObject(); ;
+ BootstrapData = data;
+
+ _developController.OnBootstrap(data);
+
+ SharedSettings.UpdateFromPlugin();
+ }
+
+ ///
+ /// Called when the selected environment changes.
+ ///
+ public void OnSelectedEnvironmentChange()
+ {
+ _developController.OnSelectedEnvironmentChange();
+ }
+ }
+}
diff --git a/Assets/Rivet/Editor/UI/RivetPlugin.cs.meta b/Assets/Rivet/Editor/UI/Dock/Dock.cs.meta
similarity index 100%
rename from Assets/Rivet/Editor/UI/RivetPlugin.cs.meta
rename to Assets/Rivet/Editor/UI/Dock/Dock.cs.meta
diff --git a/Assets/Rivet/Editor/UI/Dock/Dock.unity b/Assets/Rivet/Editor/UI/Dock/Dock.unity
new file mode 100644
index 0000000..ed813af
--- /dev/null
+++ b/Assets/Rivet/Editor/UI/Dock/Dock.unity
@@ -0,0 +1,316 @@
+%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_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 &93849972
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 93849974}
+ - component: {fileID: 93849973}
+ 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 &93849973
+Light:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 93849972}
+ 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 &93849974
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 93849972}
+ 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 &1619145530
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1619145533}
+ - component: {fileID: 1619145532}
+ - component: {fileID: 1619145531}
+ 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 &1619145531
+AudioListener:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1619145530}
+ m_Enabled: 1
+--- !u!20 &1619145532
+Camera:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1619145530}
+ 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 &1619145533
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1619145530}
+ 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: 1619145533}
+ - {fileID: 93849974}
diff --git a/Assets/Rivet/Editor/UI/Dock/Dock.unity.meta b/Assets/Rivet/Editor/UI/Dock/Dock.unity.meta
new file mode 100644
index 0000000..da989a0
--- /dev/null
+++ b/Assets/Rivet/Editor/UI/Dock/Dock.unity.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 04e1230a9fe144f74a6f7af15018088b
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Rivet/Editor/UI/Screens/Main.uss b/Assets/Rivet/Editor/UI/Dock/Dock.uss
similarity index 65%
rename from Assets/Rivet/Editor/UI/Screens/Main.uss
rename to Assets/Rivet/Editor/UI/Dock/Dock.uss
index 5e5ebbd..8c908b0 100644
--- a/Assets/Rivet/Editor/UI/Screens/Main.uss
+++ b/Assets/Rivet/Editor/UI/Dock/Dock.uss
@@ -1,3 +1,31 @@
+.custom-label {
+ font-size: 20px;
+ -unity-font-style: bold;
+ color: rgb(68, 138, 255);
+}
+
+.header-button {
+ background-image: url("project://database/Assets/Rivet/Editor/Images/FontAwesome/bug.svg?fileID=7388822144124034973&guid=b156156de32b04827b7eb6b334ccaf0d&type=3#bug");
+ border-top-width: 0;
+ border-right-width: 0;
+ border-bottom-width: 0;
+ border-left-width: 0;
+ padding-top: 8px;
+ padding-right: 8px;
+ padding-bottom: 8px;
+ padding-left: 8px;
+ margin-top: 0;
+ margin-right: 0;
+ margin-bottom: 0;
+ margin-left: 0;
+ width: 26px;
+ height: 26px;
+}
+
+#Logo {
+ -unity-background-image-tint-color: var(--unity-colors-default-text);
+}
+
.unity-group-box {
}
@@ -45,3 +73,7 @@ DropdownField {
#TabBodyScrollView {
background-color: var(--unity-colors-popup-background);
}
+
+#Links > * {
+ margin-left: 4px;
+}
diff --git a/Assets/Rivet/Editor/UI/RivetPlugin.uss.meta b/Assets/Rivet/Editor/UI/Dock/Dock.uss.meta
similarity index 100%
rename from Assets/Rivet/Editor/UI/RivetPlugin.uss.meta
rename to Assets/Rivet/Editor/UI/Dock/Dock.uss.meta
diff --git a/Assets/Rivet/Editor/UI/Dock/Dock.uxml b/Assets/Rivet/Editor/UI/Dock/Dock.uxml
new file mode 100644
index 0000000..635f502
--- /dev/null
+++ b/Assets/Rivet/Editor/UI/Dock/Dock.uxml
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Rivet/Editor/UI/RivetPlugin.uxml.meta b/Assets/Rivet/Editor/UI/Dock/Dock.uxml.meta
similarity index 100%
rename from Assets/Rivet/Editor/UI/RivetPlugin.uxml.meta
rename to Assets/Rivet/Editor/UI/Dock/Dock.uxml.meta
diff --git a/Assets/Rivet/Editor/UI/Tabs.meta b/Assets/Rivet/Editor/UI/Dock/Tabs.meta
similarity index 100%
rename from Assets/Rivet/Editor/UI/Tabs.meta
rename to Assets/Rivet/Editor/UI/Dock/Tabs.meta
diff --git a/Assets/Rivet/Editor/UI/Tabs/Develop.uss b/Assets/Rivet/Editor/UI/Dock/Tabs/Develop.uss
similarity index 69%
rename from Assets/Rivet/Editor/UI/Tabs/Develop.uss
rename to Assets/Rivet/Editor/UI/Dock/Tabs/Develop.uss
index 37cbcbc..1e22d16 100644
--- a/Assets/Rivet/Editor/UI/Tabs/Develop.uss
+++ b/Assets/Rivet/Editor/UI/Dock/Tabs/Develop.uss
@@ -23,7 +23,16 @@
background-image: url("project://database/Assets/Rivet/Editor/Images/FontAwesome/square-sliders.svg?fileID=7388822144124034973&guid=071bfd08c297a4f43886df844a2cb2d7&type=3#square-sliders");
}
-#PlayHeader .icon {
- background-image: url("project://database/Assets/Rivet/Editor/Images/FontAwesome/joystick%201.svg?fileID=7388822144124034973&guid=e2339b8045892476da1e39eceaabfbd4&type=3#joystick 1");
+#RunHeader .icon {
+ background-image: url("project://database/Assets/Rivet/Editor/Images/FontAwesome/joystick.svg?fileID=7388822144124034973&guid=28a593339ccd245d1b638ff8b6dc58eb&type=3#joystick");
display: flex;
}
+
+#DeployHeader .icon {
+ background-image: url("project://database/Assets/Rivet/Editor/Images/FontAwesome/cloud-arrow-up.svg?fileID=7388822144124034973&guid=44dad88c1451c446d807e891e2bad2d8&type=3#cloud-arrow-up");
+ display: flex;
+}
+
+#BuildDeployButton .icon {
+ background-image: url("project://database/Assets/Rivet/Editor/Images/FontAwesome/hammer.svg?fileID=7388822144124034973&guid=57861a0f5a3f5403995884fd2bd0639b&type=3#hammer");
+}
diff --git a/Assets/Rivet/Editor/UI/Tabs/Develop.uss.meta b/Assets/Rivet/Editor/UI/Dock/Tabs/Develop.uss.meta
similarity index 100%
rename from Assets/Rivet/Editor/UI/Tabs/Develop.uss.meta
rename to Assets/Rivet/Editor/UI/Dock/Tabs/Develop.uss.meta
diff --git a/Assets/Rivet/Editor/UI/Tabs/Develop.uxml b/Assets/Rivet/Editor/UI/Dock/Tabs/Develop.uxml
similarity index 62%
rename from Assets/Rivet/Editor/UI/Tabs/Develop.uxml
rename to Assets/Rivet/Editor/UI/Dock/Tabs/Develop.uxml
index d50bd69..18c611a 100644
--- a/Assets/Rivet/Editor/UI/Tabs/Develop.uxml
+++ b/Assets/Rivet/Editor/UI/Dock/Tabs/Develop.uxml
@@ -2,21 +2,21 @@
-
+
-
+
-
-
+
+
-
+
@@ -32,4 +32,14 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Rivet/Editor/UI/Tabs/Develop.uxml.meta b/Assets/Rivet/Editor/UI/Dock/Tabs/Develop.uxml.meta
similarity index 100%
rename from Assets/Rivet/Editor/UI/Tabs/Develop.uxml.meta
rename to Assets/Rivet/Editor/UI/Dock/Tabs/Develop.uxml.meta
diff --git a/Assets/Rivet/Editor/UI/Tabs/DevelopController.cs b/Assets/Rivet/Editor/UI/Dock/Tabs/DevelopController.cs
similarity index 57%
rename from Assets/Rivet/Editor/UI/Tabs/DevelopController.cs
rename to Assets/Rivet/Editor/UI/Dock/Tabs/DevelopController.cs
index 14d2e8f..45f96d2 100644
--- a/Assets/Rivet/Editor/UI/Tabs/DevelopController.cs
+++ b/Assets/Rivet/Editor/UI/Dock/Tabs/DevelopController.cs
@@ -12,20 +12,18 @@
using Rivet.Editor.UI.TaskPanel;
using Rivet.Editor.UI.TaskPopup;
using Rivet.Editor.Util;
-using Rivet.UI.Screens;
using Unity.VisualScripting.YamlDotNet.Core.Tokens;
using UnityEditor;
using UnityEngine;
using UnityEngine.UIElements;
-namespace Rivet.UI.Tabs
+namespace Rivet.Editor.UI.Dock.Tabs
{
public delegate void EnvironmentChangeDelegate(EnvironmentType type, string? remoteEnvironmentId);
public class DevelopController
{
- private readonly RivetPlugin _pluginWindow;
- private readonly MainController _mainController;
+ private readonly Dock _dock;
private readonly VisualElement _root;
private VisualElement _refreshButton;
@@ -40,13 +38,12 @@ public class DevelopController
private SliderInt _playerCount;
private Button _playerStart;
- private VisualElement _backendGenerateSdk;
- private VisualElement _backendEditConfig;
+ private Button _buildDeployButton;
+ private DropdownField _stepsDropdown;
- public DevelopController(RivetPlugin window, MainController mainController, VisualElement root)
+ public DevelopController(Dock dock, VisualElement root)
{
- _pluginWindow = window;
- _mainController = mainController;
+ _dock = dock;
_root = root;
InitUI();
@@ -54,6 +51,7 @@ public DevelopController(RivetPlugin window, MainController mainController, Visu
void InitUI()
{
+ return;
// Query
_refreshButton = _root.Q("EnvironmentHeader").Q("Header").Q("Action");
_environmentTypeDropdown = _root.Q("EnvironmentBody").Q("TypeDropdown");
@@ -67,46 +65,44 @@ void InitUI()
_playerCount = _root.Q("PlayerBody").Q("PlayerCountSlider");
_playerStart = _root.Q("PlayerBody").Q("StartButton").Q