diff --git a/.gitignore b/.gitignore
index 9a8f469c8..ffb77ca05 100644
--- a/.gitignore
+++ b/.gitignore
@@ -76,4 +76,3 @@ Economy.Shared/obj/
# JetBrains Rider .idea folder
.idea/
-AetherDB.msgpack
diff --git a/.idea/.idea.Aetheria-Economy/.idea/contentModel.xml b/.idea/.idea.Aetheria-Economy/.idea/contentModel.xml
index dd3baa66b..61d5712d6 100644
--- a/.idea/.idea.Aetheria-Economy/.idea/contentModel.xml
+++ b/.idea/.idea.Aetheria-Economy/.idea/contentModel.xml
@@ -1531,7 +1531,7 @@
-
+
@@ -2028,6 +2028,7 @@
+
@@ -2107,6 +2108,7 @@
+
diff --git a/Assembly-CSharp.csproj b/Assembly-CSharp.csproj
index 8399bb3b2..81b735da5 100644
--- a/Assembly-CSharp.csproj
+++ b/Assembly-CSharp.csproj
@@ -425,6 +425,7 @@
+
diff --git a/Assets/Materials/Brushes/Fog Tint.mat b/Assets/Materials/Brushes/Fog Tint.mat
index 3df0db1a7..06bd02ee6 100644
--- a/Assets/Materials/Brushes/Fog Tint.mat
+++ b/Assets/Materials/Brushes/Fog Tint.mat
@@ -78,6 +78,6 @@ Material:
- _UVSec: 0
- _ZWrite: 1
m_Colors:
- - _Color: {r: 0.1764706, g: 0.31764707, b: 0.1254902, a: 1}
+ - _Color: {r: 0.65882355, g: 0.39265883, b: 0.5376236, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
m_BuildTextureStacks: []
diff --git a/Assets/Materials/Brushes/Wormhole Gravity 1.mat b/Assets/Materials/Brushes/Wormhole Gravity 1.mat
new file mode 100644
index 000000000..da07be3e0
--- /dev/null
+++ b/Assets/Materials/Brushes/Wormhole Gravity 1.mat
@@ -0,0 +1,80 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+ serializedVersion: 6
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: Wormhole Gravity 1
+ m_Shader: {fileID: 4800000, guid: 268da230635cfb34ab4ed6ad39503fa0, type: 3}
+ m_ShaderKeywords:
+ m_LightmapFlags: 4
+ m_EnableInstancingVariants: 0
+ m_DoubleSidedGI: 0
+ m_CustomRenderQueue: -1
+ stringTagMap: {}
+ disabledShaderPasses: []
+ m_SavedProperties:
+ serializedVersion: 3
+ m_TexEnvs:
+ - _BumpMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailAlbedoMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailMask:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailNormalMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _EmissionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MainTex:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MetallicGlossMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _OcclusionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _ParallaxMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ m_Floats:
+ - _BumpScale: 1
+ - _Cutoff: 0.5
+ - _Depth: 54
+ - _DetailNormalMapScale: 1
+ - _DstBlend: 0
+ - _GlossMapScale: 1
+ - _Glossiness: 0.5
+ - _GlossyReflections: 1
+ - _Metallic: 0
+ - _Mode: 0
+ - _OcclusionStrength: 1
+ - _Parallax: 0.02
+ - _Power: 4
+ - _SmoothnessTextureChannel: 0
+ - _SpecularHighlights: 1
+ - _SrcBlend: 1
+ - _UVSec: 0
+ - _ZWrite: 1
+ m_Colors:
+ - _Color: {r: 1, g: 1, b: 1, a: 1}
+ - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
+ m_BuildTextureStacks: []
diff --git a/Assets/Materials/Brushes/Wormhole Gravity 1.mat.meta b/Assets/Materials/Brushes/Wormhole Gravity 1.mat.meta
new file mode 100644
index 000000000..7d40d0332
--- /dev/null
+++ b/Assets/Materials/Brushes/Wormhole Gravity 1.mat.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 244f3e4c0c030a24b8d7aa944895bdcf
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 2100000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Materials/Brushes/Wormhole Gravity.mat b/Assets/Materials/Brushes/Wormhole Gravity.mat
new file mode 100644
index 000000000..9e2773c0f
--- /dev/null
+++ b/Assets/Materials/Brushes/Wormhole Gravity.mat
@@ -0,0 +1,80 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+ serializedVersion: 6
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: Wormhole Gravity
+ m_Shader: {fileID: 4800000, guid: 268da230635cfb34ab4ed6ad39503fa0, type: 3}
+ m_ShaderKeywords:
+ m_LightmapFlags: 4
+ m_EnableInstancingVariants: 0
+ m_DoubleSidedGI: 0
+ m_CustomRenderQueue: -1
+ stringTagMap: {}
+ disabledShaderPasses: []
+ m_SavedProperties:
+ serializedVersion: 3
+ m_TexEnvs:
+ - _BumpMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailAlbedoMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailMask:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailNormalMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _EmissionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MainTex:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MetallicGlossMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _OcclusionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _ParallaxMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ m_Floats:
+ - _BumpScale: 1
+ - _Cutoff: 0.5
+ - _Depth: 2000
+ - _DetailNormalMapScale: 1
+ - _DstBlend: 0
+ - _GlossMapScale: 1
+ - _Glossiness: 0.5
+ - _GlossyReflections: 1
+ - _Metallic: 0
+ - _Mode: 0
+ - _OcclusionStrength: 1
+ - _Parallax: 0.02
+ - _Power: 64
+ - _SmoothnessTextureChannel: 0
+ - _SpecularHighlights: 1
+ - _SrcBlend: 1
+ - _UVSec: 0
+ - _ZWrite: 1
+ m_Colors:
+ - _Color: {r: 1, g: 1, b: 1, a: 1}
+ - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
+ m_BuildTextureStacks: []
diff --git a/Assets/Materials/Brushes/Wormhole Gravity.mat.meta b/Assets/Materials/Brushes/Wormhole Gravity.mat.meta
new file mode 100644
index 000000000..30ec9b01d
--- /dev/null
+++ b/Assets/Materials/Brushes/Wormhole Gravity.mat.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: a9ef17c902709ce41a837c54b809184b
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 2100000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Materials/Brushes/Wormhole Lighting.mat b/Assets/Materials/Brushes/Wormhole Lighting.mat
new file mode 100644
index 000000000..c9129a099
--- /dev/null
+++ b/Assets/Materials/Brushes/Wormhole Lighting.mat
@@ -0,0 +1,83 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+ serializedVersion: 6
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: Wormhole Lighting
+ m_Shader: {fileID: 4800000, guid: 268da230635cfb34ab4ed6ad39503fa0, type: 3}
+ m_ShaderKeywords:
+ m_LightmapFlags: 4
+ m_EnableInstancingVariants: 0
+ m_DoubleSidedGI: 0
+ m_CustomRenderQueue: -1
+ stringTagMap: {}
+ disabledShaderPasses: []
+ m_SavedProperties:
+ serializedVersion: 3
+ m_TexEnvs:
+ - _BumpMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailAlbedoMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailMask:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailNormalMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _EmissionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MainTex:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MetallicGlossMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _OcclusionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _ParallaxMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ m_Floats:
+ - _BumpScale: 1
+ - _Cutoff: 0.5
+ - _Depth: 4
+ - _DetailNormalMapScale: 1
+ - _DstBlend: 0
+ - _Frequency: 6.2832
+ - _GlossMapScale: 1
+ - _Glossiness: 0.5
+ - _GlossyReflections: 1
+ - _Metallic: 0
+ - _Mode: 0
+ - _OcclusionStrength: 1
+ - _Parallax: 0.02
+ - _Phase: 0
+ - _Power: 12
+ - _SinePower: 1.25
+ - _SmoothnessTextureChannel: 0
+ - _SpecularHighlights: 1
+ - _SrcBlend: 1
+ - _UVSec: 0
+ - _ZWrite: 1
+ m_Colors:
+ - _Color: {r: 1, g: 0.5058824, b: 0.86, a: 1}
+ - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
+ m_BuildTextureStacks: []
diff --git a/Assets/Materials/Brushes/Wormhole Lighting.mat.meta b/Assets/Materials/Brushes/Wormhole Lighting.mat.meta
new file mode 100644
index 000000000..942e2e70d
--- /dev/null
+++ b/Assets/Materials/Brushes/Wormhole Lighting.mat.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 8d101bf8c1287cb49a4bd68fe8824246
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 2100000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Materials/Brushes/Wormhole Waves.mat b/Assets/Materials/Brushes/Wormhole Waves.mat
new file mode 100644
index 000000000..cbe3e86e7
--- /dev/null
+++ b/Assets/Materials/Brushes/Wormhole Waves.mat
@@ -0,0 +1,84 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+ serializedVersion: 6
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: Wormhole Waves
+ m_Shader: {fileID: 4800000, guid: 8681ac064d59d15458d16cc9b884262c, type: 3}
+ m_ShaderKeywords:
+ m_LightmapFlags: 4
+ m_EnableInstancingVariants: 0
+ m_DoubleSidedGI: 0
+ m_CustomRenderQueue: -1
+ stringTagMap: {}
+ disabledShaderPasses: []
+ m_SavedProperties:
+ serializedVersion: 3
+ m_TexEnvs:
+ - _BumpMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailAlbedoMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailMask:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailNormalMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _EmissionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MainTex:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MetallicGlossMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _OcclusionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _ParallaxMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ m_Floats:
+ - _BumpScale: 1
+ - _Cutoff: 0.5
+ - _Depth: 24
+ - _DetailNormalMapScale: 1
+ - _DstBlend: 0
+ - _Frequency: 2
+ - _FrequencyDist: 60
+ - _GlossMapScale: 1
+ - _Glossiness: 0.5
+ - _GlossyReflections: 1
+ - _Metallic: 0
+ - _Mode: 0
+ - _OcclusionStrength: 1
+ - _Parallax: 0.02
+ - _Power: 2
+ - _SinePower: 1.25
+ - _SmoothnessTextureChannel: 0
+ - _SpecularHighlights: 1
+ - _Speed: 10
+ - _SrcBlend: 1
+ - _UVSec: 0
+ - _ZWrite: 1
+ m_Colors:
+ - _Color: {r: 1, g: 1, b: 1, a: 1}
+ - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
+ m_BuildTextureStacks: []
diff --git a/Assets/Materials/Brushes/Wormhole Waves.mat.meta b/Assets/Materials/Brushes/Wormhole Waves.mat.meta
new file mode 100644
index 000000000..1e5f35dd3
--- /dev/null
+++ b/Assets/Materials/Brushes/Wormhole Waves.mat.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: ef2f6090d5cc14a4e9ce38def3bed9ac
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 2100000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Materials/UI/Map Gravity Lines.mat b/Assets/Materials/UI/Map Gravity Lines.mat
index 48c6efff5..4701ebcc6 100644
--- a/Assets/Materials/UI/Map Gravity Lines.mat
+++ b/Assets/Materials/UI/Map Gravity Lines.mat
@@ -86,7 +86,7 @@ Material:
- _Mode: 0
- _OcclusionStrength: 1
- _Parallax: 0.02
- - _Scale: 5.4972186
+ - _Scale: 5.9919047
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1
- _SrcBlend: 1
diff --git a/Assets/Prefabs/RPG/Wormhole 1.prefab b/Assets/Prefabs/RPG/Wormhole 1.prefab
new file mode 100644
index 000000000..b03d01009
--- /dev/null
+++ b/Assets/Prefabs/RPG/Wormhole 1.prefab
@@ -0,0 +1,360 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &1826894967093516808
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1030590306481442051}
+ - component: {fileID: 3216580199816124320}
+ - component: {fileID: 3211969211988968959}
+ m_Layer: 9
+ m_Name: Gravity Well
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &1030590306481442051
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1826894967093516808}
+ m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1024, y: 1024, z: 1024}
+ m_Children: []
+ m_Father: {fileID: 463084220523011477}
+ m_RootOrder: 1
+ m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0}
+--- !u!33 &3216580199816124320
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1826894967093516808}
+ m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!23 &3211969211988968959
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1826894967093516808}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RayTraceProcedural: 0
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 2100000, guid: 244f3e4c0c030a24b8d7aa944895bdcf, type: 2}
+ 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!1 &3908760799087214860
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 581261949390603689}
+ - component: {fileID: 987447324816385543}
+ - component: {fileID: 3959510878930752720}
+ m_Layer: 9
+ m_Name: Gravity Waves
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &581261949390603689
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 3908760799087214860}
+ m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 512, y: 512, z: 512}
+ m_Children: []
+ m_Father: {fileID: 463084220523011477}
+ m_RootOrder: 2
+ m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0}
+--- !u!33 &987447324816385543
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 3908760799087214860}
+ m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!23 &3959510878930752720
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 3908760799087214860}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RayTraceProcedural: 0
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 2100000, guid: ef2f6090d5cc14a4e9ce38def3bed9ac, type: 2}
+ 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!1 &4837153162502999620
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 463084220523011477}
+ m_Layer: 0
+ m_Name: Wormhole 1
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &463084220523011477
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4837153162502999620}
+ 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_Children:
+ - {fileID: 8222188360457572195}
+ - {fileID: 1030590306481442051}
+ - {fileID: 581261949390603689}
+ - {fileID: 8249320701965103923}
+ m_Father: {fileID: 0}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &5989754434710127254
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 8249320701965103923}
+ - component: {fileID: 1358808915677722173}
+ - component: {fileID: 6450194732864552839}
+ m_Layer: 13
+ m_Name: Fog Tint
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &8249320701965103923
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 5989754434710127254}
+ m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1024, y: 1024, z: 1}
+ m_Children: []
+ m_Father: {fileID: 463084220523011477}
+ m_RootOrder: 3
+ m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0}
+--- !u!33 &1358808915677722173
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 5989754434710127254}
+ m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!23 &6450194732864552839
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 5989754434710127254}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RayTraceProcedural: 0
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 2100000, guid: 8d101bf8c1287cb49a4bd68fe8824246, type: 2}
+ 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!1 &7647029665738834910
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 8222188360457572195}
+ - component: {fileID: 2468954688819198096}
+ - component: {fileID: 8290522694236574882}
+ m_Layer: 9
+ m_Name: Gravity Pit
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &8222188360457572195
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 7647029665738834910}
+ m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 512, y: 512, z: 512}
+ m_Children: []
+ m_Father: {fileID: 463084220523011477}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0}
+--- !u!33 &2468954688819198096
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 7647029665738834910}
+ m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!23 &8290522694236574882
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 7647029665738834910}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RayTraceProcedural: 0
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 2100000, guid: a9ef17c902709ce41a837c54b809184b, type: 2}
+ 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}
diff --git a/Assets/Prefabs/RPG/Wormhole 1.prefab.meta b/Assets/Prefabs/RPG/Wormhole 1.prefab.meta
new file mode 100644
index 000000000..be5e7b3fa
--- /dev/null
+++ b/Assets/Prefabs/RPG/Wormhole 1.prefab.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 4a77c480b4bb2a148954bd57dfe91d0b
+PrefabImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/Aetheria.inputactions b/Assets/Resources/Aetheria.inputactions
index e1de4fff5..69c58c533 100644
--- a/Assets/Resources/Aetheria.inputactions
+++ b/Assets/Resources/Aetheria.inputactions
@@ -156,6 +156,14 @@
"expectedControlType": "Button",
"processors": "",
"interactions": ""
+ },
+ {
+ "name": "EnterWormhole",
+ "type": "Button",
+ "id": "c918ac22-b029-4805-9c85-e615a52641f2",
+ "expectedControlType": "Button",
+ "processors": "",
+ "interactions": ""
}
],
"bindings": [
@@ -554,6 +562,17 @@
"action": "Toggle Heatsinks",
"isComposite": false,
"isPartOfComposite": false
+ },
+ {
+ "name": "",
+ "id": "95817d40-4c8d-4660-bd68-a93afe74b6e1",
+ "path": "/#(V)",
+ "interactions": "",
+ "processors": "",
+ "groups": "Keyboard&Mouse",
+ "action": "EnterWormhole",
+ "isComposite": false,
+ "isPartOfComposite": false
}
]
},
diff --git a/Assets/Resources/Settings.asset b/Assets/Resources/Settings.asset
index e1b23fafe..5a0bd17e7 100644
--- a/Assets/Resources/Settings.asset
+++ b/Assets/Resources/Settings.asset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:203a866610401607644a06056190ce969e9914e852f09d6b2bbe70e11c6262d6
-size 7648
+oid sha256:caa407a313b4aca849d2e92d32552c3202bb09e790e4dcadf813102cb37a39bf
+size 7879
diff --git a/Assets/Scenes/ARPG.unity b/Assets/Scenes/ARPG.unity
index e4b323457..edc4e04e5 100644
--- a/Assets/Scenes/ARPG.unity
+++ b/Assets/Scenes/ARPG.unity
@@ -4553,7 +4553,7 @@ MonoBehaviour:
EnergyLabel: {fileID: 0}
CockpitTemperatureLabel: {fileID: 0}
RadiatorTemperatureLabel: {fileID: 0}
- HeatsinkTemperatureLabel: {fileID: 0}
+ HeatStorageTemperatureLabel: {fileID: 0}
CargoTemperatureLabel: {fileID: 517688448}
VisibilityLabel: {fileID: 858665366}
HullDurabilityLabel: {fileID: 2101419019}
@@ -13046,6 +13046,8 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: bed3b49fe74863340b2a75f3d0517e86, type: 3}
m_Name:
m_EditorClassIdentifier:
+ WormholePrefab: {fileID: 463084220523011477, guid: 4a77c480b4bb2a148954bd57dfe91d0b,
+ type: 3}
EntityFadeTime: 3
EffectManagerParent: {fileID: 134113271}
FogCameraParent: {fileID: 1547889399}
@@ -29475,7 +29477,7 @@ MonoBehaviour:
EnergyLabel: {fileID: 804489113}
CockpitTemperatureLabel: {fileID: 212527384}
RadiatorTemperatureLabel: {fileID: 1752418078}
- HeatsinkTemperatureLabel: {fileID: 1060591360}
+ HeatStorageTemperatureLabel: {fileID: 1060591360}
CargoTemperatureLabel: {fileID: 388927456}
VisibilityLabel: {fileID: 2122035461}
HullDurabilityLabel: {fileID: 697075017}
diff --git a/Assets/Scripts/AetheriaInput.cs b/Assets/Scripts/AetheriaInput.cs
index b3117ec87..6538fc5dc 100644
--- a/Assets/Scripts/AetheriaInput.cs
+++ b/Assets/Scripts/AetheriaInput.cs
@@ -169,6 +169,14 @@ public class @AetheriaInput : IInputActionCollection, IDisposable
""expectedControlType"": ""Button"",
""processors"": """",
""interactions"": """"
+ },
+ {
+ ""name"": ""EnterWormhole"",
+ ""type"": ""Button"",
+ ""id"": ""c918ac22-b029-4805-9c85-e615a52641f2"",
+ ""expectedControlType"": ""Button"",
+ ""processors"": """",
+ ""interactions"": """"
}
],
""bindings"": [
@@ -567,6 +575,17 @@ public class @AetheriaInput : IInputActionCollection, IDisposable
""action"": ""Toggle Heatsinks"",
""isComposite"": false,
""isPartOfComposite"": false
+ },
+ {
+ ""name"": """",
+ ""id"": ""95817d40-4c8d-4660-bd68-a93afe74b6e1"",
+ ""path"": ""/#(V)"",
+ ""interactions"": """",
+ ""processors"": """",
+ ""groups"": ""Keyboard&Mouse"",
+ ""action"": ""EnterWormhole"",
+ ""isComposite"": false,
+ ""isPartOfComposite"": false
}
]
},
@@ -1152,6 +1171,7 @@ public class @AetheriaInput : IInputActionCollection, IDisposable
m_Player_TargetNext = m_Player.FindAction("Target Next", throwIfNotFound: true);
m_Player_TargetNearest = m_Player.FindAction("Target Nearest", throwIfNotFound: true);
m_Player_ToggleHeatsinks = m_Player.FindAction("Toggle Heatsinks", throwIfNotFound: true);
+ m_Player_EnterWormhole = m_Player.FindAction("EnterWormhole", throwIfNotFound: true);
// UI
m_UI = asset.FindActionMap("UI", throwIfNotFound: true);
m_UI_Navigate = m_UI.FindAction("Navigate", throwIfNotFound: true);
@@ -1236,6 +1256,7 @@ public class @AetheriaInput : IInputActionCollection, IDisposable
private readonly InputAction m_Player_TargetNext;
private readonly InputAction m_Player_TargetNearest;
private readonly InputAction m_Player_ToggleHeatsinks;
+ private readonly InputAction m_Player_EnterWormhole;
public struct PlayerActions
{
private @AetheriaInput m_Wrapper;
@@ -1259,6 +1280,7 @@ public class @AetheriaInput : IInputActionCollection, IDisposable
public InputAction @TargetNext => m_Wrapper.m_Player_TargetNext;
public InputAction @TargetNearest => m_Wrapper.m_Player_TargetNearest;
public InputAction @ToggleHeatsinks => m_Wrapper.m_Player_ToggleHeatsinks;
+ public InputAction @EnterWormhole => m_Wrapper.m_Player_EnterWormhole;
public InputActionMap Get() { return m_Wrapper.m_Player; }
public void Enable() { Get().Enable(); }
public void Disable() { Get().Disable(); }
@@ -1325,6 +1347,9 @@ public class @AetheriaInput : IInputActionCollection, IDisposable
@ToggleHeatsinks.started -= m_Wrapper.m_PlayerActionsCallbackInterface.OnToggleHeatsinks;
@ToggleHeatsinks.performed -= m_Wrapper.m_PlayerActionsCallbackInterface.OnToggleHeatsinks;
@ToggleHeatsinks.canceled -= m_Wrapper.m_PlayerActionsCallbackInterface.OnToggleHeatsinks;
+ @EnterWormhole.started -= m_Wrapper.m_PlayerActionsCallbackInterface.OnEnterWormhole;
+ @EnterWormhole.performed -= m_Wrapper.m_PlayerActionsCallbackInterface.OnEnterWormhole;
+ @EnterWormhole.canceled -= m_Wrapper.m_PlayerActionsCallbackInterface.OnEnterWormhole;
}
m_Wrapper.m_PlayerActionsCallbackInterface = instance;
if (instance != null)
@@ -1386,6 +1411,9 @@ public class @AetheriaInput : IInputActionCollection, IDisposable
@ToggleHeatsinks.started += instance.OnToggleHeatsinks;
@ToggleHeatsinks.performed += instance.OnToggleHeatsinks;
@ToggleHeatsinks.canceled += instance.OnToggleHeatsinks;
+ @EnterWormhole.started += instance.OnEnterWormhole;
+ @EnterWormhole.performed += instance.OnEnterWormhole;
+ @EnterWormhole.canceled += instance.OnEnterWormhole;
}
}
}
@@ -1584,6 +1612,7 @@ public class @AetheriaInput : IInputActionCollection, IDisposable
void OnTargetNext(InputAction.CallbackContext context);
void OnTargetNearest(InputAction.CallbackContext context);
void OnToggleHeatsinks(InputAction.CallbackContext context);
+ void OnEnterWormhole(InputAction.CallbackContext context);
}
public interface IUIActions
{
diff --git a/Assets/Scripts/Gameplay/ActionGameManager.cs b/Assets/Scripts/Gameplay/ActionGameManager.cs
index aa2af1aaa..f8a9c982e 100644
--- a/Assets/Scripts/Gameplay/ActionGameManager.cs
+++ b/Assets/Scripts/Gameplay/ActionGameManager.cs
@@ -17,6 +17,7 @@ using UnityEngine.InputSystem;
using UnityEngine.UI;
using static Unity.Mathematics.math;
using float2 = Unity.Mathematics.float2;
+using quaternion = Unity.Mathematics.quaternion;
using Random = UnityEngine.Random;
public class ActionGameManager : MonoBehaviour
@@ -85,6 +86,21 @@ public class ActionGameManager : MonoBehaviour
File.WriteAllBytes(Path.Combine(_loadoutPath.FullName, $"{pack.Name}.preset"), MessagePackSerializer.Serialize(pack));
}
+ public void GenerateLevel()
+ {
+ var zonePack = ZoneGenerator.GenerateZone(
+ settings: Settings.ZoneSettings,
+ // mapLayers: Context.MapLayers,
+ // resources: Context.Resources,
+ mass: Settings.DefaultZoneMass,
+ radius: Settings.DefaultZoneRadius
+ );
+
+ Zone = new Zone(Settings.PlanetSettings, zonePack);
+ Zone.Log = s => Debug.Log($"Zone: {s}");
+ SectorRenderer.LoadZone(Zone);
+ }
+
void Start()
{
AkSoundEngine.RegisterGameObj(gameObject);
@@ -95,27 +111,14 @@ public class ActionGameManager : MonoBehaviour
ItemData = new DatabaseCache();
ItemData.Load(_filePath.FullName);
ItemManager = new ItemManager(ItemData, Settings.GameplaySettings, Debug.Log);
+ SectorRenderer.ItemManager = ItemManager;
Loadouts.AddRange(_loadoutPath.EnumerateFiles("*.preset")
.Select(fi => MessagePackSerializer.Deserialize(File.ReadAllBytes(fi.FullName))));
- var zoneFile = Path.Combine(_filePath.FullName, "Home.zone");
+ //var zoneFile = Path.Combine(_filePath.FullName, "Home.zone");
- // If the game has already been run, there will be a Home file containing a ZonePack; if not, generate one
- var zonePack = File.Exists(zoneFile) ?
- MessagePackSerializer.Deserialize(File.ReadAllBytes(zoneFile)):
- ZoneGenerator.GenerateZone(
- settings: Settings.ZoneSettings,
- // mapLayers: Context.MapLayers,
- // resources: Context.Resources,
- mass: Settings.DefaultZoneMass,
- radius: Settings.DefaultZoneRadius
- );
-
- Zone = new Zone(Settings.PlanetSettings, zonePack);
- Zone.Log = s => Debug.Log($"Zone: {s}");
- SectorRenderer.ItemManager = ItemManager;
- SectorRenderer.LoadZone(Zone);
+ GenerateLevel();
_input = new AetheriaInput();
_input.Global.Enable();
@@ -189,6 +192,23 @@ public class ActionGameManager : MonoBehaviour
else Undock();
};
+ _input.Player.EnterWormhole.performed += context =>
+ {
+ foreach (var wormhole in SectorRenderer.WormholeInstances.Keys)
+ {
+ if (length(wormhole.Position - CurrentShip.Position.xz) < Settings.GameplaySettings.WormholeExitRadius)
+ {
+ CurrentShip.EnterWormhole(wormhole.Position);
+ CurrentShip.OnEnteredWormhole += () =>
+ {
+ GenerateLevel();
+ CurrentShip.ExitWormhole(SectorRenderer.WormholeInstances.Keys.First().Position,
+ Settings.GameplaySettings.WormholeExitVelocity * ItemManager.Random.NextFloat2Direction());
+ };
+ }
+ }
+ };
+
_input.Player.ToggleHeatsinks.performed += context =>
{
CurrentShip.HeatsinksEnabled = !CurrentShip.HeatsinksEnabled;
@@ -197,13 +217,15 @@ public class ActionGameManager : MonoBehaviour
_input.Player.TargetReticle.performed += context =>
{
- var underReticle = Zone.Entities.Where(x => x != CurrentShip).MaxBy(x => dot(normalize(x.Position - CurrentShip.Position), CurrentShip.LookDirection));
+ var underReticle = Zone.Entities.Where(x => x != CurrentShip)
+ .MaxBy(x => dot(normalize(x.Position - CurrentShip.Position), CurrentShip.LookDirection));
CurrentShip.Target.Value = CurrentShip.Target.Value == underReticle ? null : underReticle;
};
_input.Player.TargetNearest.performed += context =>
{
- CurrentShip.Target.Value = Zone.Entities.Where(x=>x!=CurrentShip).MaxBy(x => length(x.Position - CurrentShip.Position));
+ CurrentShip.Target.Value = Zone.Entities.Where(x=>x!=CurrentShip)
+ .MaxBy(x => length(x.Position - CurrentShip.Position));
};
_input.Player.TargetNext.performed += context =>
@@ -599,7 +621,7 @@ public class ActionGameManager : MonoBehaviour
foreach(var agent in _shipAgents)
agent.Update(Time.deltaTime);
Zone.Update(_time, Time.deltaTime);
- SectorRenderer.Time = _time;
+ SectorRenderer.GameTime = _time;
}
private void LateUpdate()
diff --git a/Assets/Scripts/Gameplay/GameSettings.cs b/Assets/Scripts/Gameplay/GameSettings.cs
index 4052f92b6..df6dfc311 100644
--- a/Assets/Scripts/Gameplay/GameSettings.cs
+++ b/Assets/Scripts/Gameplay/GameSettings.cs
@@ -10,6 +10,7 @@ using UnityEngine;
[CreateAssetMenu(fileName = "Sector Display Properties", menuName = "Aetheria/Sector Display Properties")]
public class GameSettings : ScriptableObject
{
+ public float WormholeDistanceRatio;
public float DefaultZoneRadius;
public float DefaultZoneMass;
public float DefaultViewDistance;
diff --git a/Assets/Scripts/Sector Display/SectorRenderer.cs b/Assets/Scripts/Sector Display/SectorRenderer.cs
index d6f5e6aa6..dc5af1c9d 100644
--- a/Assets/Scripts/Sector Display/SectorRenderer.cs
+++ b/Assets/Scripts/Sector Display/SectorRenderer.cs
@@ -18,6 +18,7 @@ using float2 = Unity.Mathematics.float2;
public class SectorRenderer : MonoBehaviour
{
+ public Transform WormholePrefab;
public float EntityFadeTime;
public Transform EffectManagerParent;
public Transform FogCameraParent;
@@ -76,6 +77,8 @@ public class SectorRenderer : MonoBehaviour
private Entity _perspectiveEntity;
private IDisposable[] _perspectiveSubscriptions = new IDisposable[2];
+ public Dictionary WormholeInstances = new Dictionary();
+
public Zone Zone { get; private set; }
public ItemManager ItemManager { get; set; }
@@ -108,7 +111,7 @@ public class SectorRenderer : MonoBehaviour
}
}
- public float Time { get; set; }
+ public float GameTime { get; set; }
public float ViewDistance
{
@@ -176,7 +179,7 @@ public class SectorRenderer : MonoBehaviour
Debug.Log("WTF!");
}
}
- _tourPlanets.Add((x.Value.Body.transform, parent.Body.transform));
+ //_tourPlanets.Add((x.Value.Body.transform, parent.Body.transform));
}
}
@@ -184,10 +187,26 @@ public class SectorRenderer : MonoBehaviour
LoadEntity(entity);
zone.Entities.ObserveAdd().Subscribe(e => LoadEntity(e.Value));
zone.Entities.ObserveRemove().Subscribe(e => UnloadEntity(e.Value));
+
+ var southernWormhole = new Wormhole {Position = float2(0, -Settings.DefaultZoneRadius * Settings.WormholeDistanceRatio)};
+ AddWormhole(southernWormhole);
+
+ var northernWormhole = new Wormhole {Position = float2(0, Settings.DefaultZoneRadius * Settings.WormholeDistanceRatio)};
+ AddWormhole(northernWormhole);
+ }
+
+ public void AddWormhole(Wormhole wormhole)
+ {
+ var instance = Instantiate(WormholePrefab);
+ instance.position = new Vector3(wormhole.Position.x, 0, wormhole.Position.y);
+ WormholeInstances.Add(wormhole, instance.gameObject);
}
public void ClearZone()
{
+ foreach (var wormhole in WormholeInstances.Values) Destroy(wormhole);
+ WormholeInstances.Clear();
+
if (Planets.Count > 0)
{
foreach (var planet in Planets.Values)
@@ -195,6 +214,11 @@ public class SectorRenderer : MonoBehaviour
DestroyImmediate(planet.gameObject);
}
Planets.Clear();
+ // foreach (var beltObject in _beltObjects.Values)
+ // {
+ // beltObject.
+ // }
+ _beltObjects.Clear();
_beltMeshes.Clear();
_beltMatrices.Clear();
_tourPlanets.Clear();
@@ -386,7 +410,7 @@ public class SectorRenderer : MonoBehaviour
planet.Value.Body.transform.localPosition = new Vector3(0, Zone.GetHeight(p) + planetInstance.BodyRadius.Value * 2, 0);
if(planet.Value is GasGiantObject gasGiantObject)
{
- gasGiantObject.GravityWaves.material.SetFloat("_Phase", Time * ((GasGiant) Zone.PlanetInstances[planet.Key]).GravityWavesSpeed.Value);
+ gasGiantObject.GravityWaves.material.SetFloat("_Phase", GameTime * ((GasGiant) Zone.PlanetInstances[planet.Key]).GravityWavesSpeed.Value);
if(!(planet.Value is SunObject))
{
var toParent = normalize(Zone.GetOrbitPosition(Zone.Orbits[planetInstance.BodyData.Orbit].Data.Parent) - p);
diff --git a/Assets/Scripts/ServerShared/Behaviors/Behaviors.cs b/Assets/Scripts/ServerShared/Behaviors/Behaviors.cs
index bf3e2e8cb..bd20e3520 100644
--- a/Assets/Scripts/ServerShared/Behaviors/Behaviors.cs
+++ b/Assets/Scripts/ServerShared/Behaviors/Behaviors.cs
@@ -89,7 +89,7 @@ public abstract class PersistentBehaviorData
Union(6, typeof(ReflectorData)),
Union(7, typeof(ShieldData)),
Union(8, typeof(ThrusterData)),
- // Union(9, typeof(TurningData)),
+ Union(9, typeof(WearData)),
Union(10, typeof(VelocityConversionData)),
Union(11, typeof(VelocityLimitData)),
Union(12, typeof(FactoryData)),
@@ -113,7 +113,7 @@ public abstract class PersistentBehaviorData
// Union(30, typeof(HaulingControllerData)),
Union(31, typeof(CapacitorData)),
Union(32, typeof(CockpitData)),
- Union(33, typeof(HeatsinkData)),
+ Union(33, typeof(HeatStorageData)),
Union(34, typeof(TurretControllerData)),
Union(35, typeof(InstantWeaponData)),
Union(36, typeof(ConstantWeaponData)),
diff --git a/Assets/Scripts/ServerShared/Behaviors/Heatsink.cs b/Assets/Scripts/ServerShared/Behaviors/HeatStorage.cs
similarity index 75%
rename from Assets/Scripts/ServerShared/Behaviors/Heatsink.cs
rename to Assets/Scripts/ServerShared/Behaviors/HeatStorage.cs
index af0242977..7bd52b7cc 100644
--- a/Assets/Scripts/ServerShared/Behaviors/Heatsink.cs
+++ b/Assets/Scripts/ServerShared/Behaviors/HeatStorage.cs
@@ -9,17 +9,17 @@ using Unity.Mathematics;
using static Unity.Mathematics.math;
[MessagePackObject, JsonObject(MemberSerialization.OptIn), RuntimeInspectable]
-public class HeatsinkData : BehaviorData
+public class HeatStorageData : BehaviorData
{
public override IBehavior CreateInstance(ItemManager context, Entity entity, EquippedItem item)
{
- return new Heatsink(context, this, entity, item);
+ return new HeatStorage(context, this, entity, item);
}
}
-public class Heatsink : IBehavior
+public class HeatStorage : IBehavior
{
- private HeatsinkData _data;
+ private HeatStorageData _data;
public Entity Entity { get; }
public EquippedItem Item { get; }
@@ -27,7 +27,7 @@ public class Heatsink : IBehavior
public BehaviorData Data => _data;
- public Heatsink(ItemManager context, HeatsinkData data, Entity entity, EquippedItem item)
+ public HeatStorage(ItemManager context, HeatStorageData data, Entity entity, EquippedItem item)
{
Context = context;
_data = data;
diff --git a/Assets/Scripts/ServerShared/Behaviors/Heatsink.cs.meta b/Assets/Scripts/ServerShared/Behaviors/HeatStorage.cs.meta
similarity index 100%
rename from Assets/Scripts/ServerShared/Behaviors/Heatsink.cs.meta
rename to Assets/Scripts/ServerShared/Behaviors/HeatStorage.cs.meta
diff --git a/Assets/Scripts/ServerShared/Behaviors/Thruster.cs b/Assets/Scripts/ServerShared/Behaviors/Thruster.cs
index b7e59a5be..2cf70147b 100644
--- a/Assets/Scripts/ServerShared/Behaviors/Thruster.cs
+++ b/Assets/Scripts/ServerShared/Behaviors/Thruster.cs
@@ -73,6 +73,6 @@ public class Thruster : IAnalogBehavior
var vis = _input * Context.Evaluate(_data.Visibility, Item);
if(!Entity.VisibilitySources.ContainsKey(this) || vis > Entity.VisibilitySources[this])
Entity.VisibilitySources[this] = vis;
- return true;
+ return _input > .01f;
}
}
\ No newline at end of file
diff --git a/Assets/Scripts/ServerShared/Behaviors/Weapon.cs b/Assets/Scripts/ServerShared/Behaviors/Weapon.cs
index fb124377d..3762e3672 100644
--- a/Assets/Scripts/ServerShared/Behaviors/Weapon.cs
+++ b/Assets/Scripts/ServerShared/Behaviors/Weapon.cs
@@ -8,6 +8,7 @@ using System.Linq;
using MessagePack;
using Newtonsoft.Json;
using Unity.Mathematics;
+using static Unity.Mathematics.math;
[Union(0, typeof(InstantWeaponData)),
Union(1, typeof(LauncherData)),
@@ -123,7 +124,10 @@ public abstract class Weapon : IActivatedBehavior
Visibility = Context.Evaluate(_data.Visibility, Item);
Spread = Context.Evaluate(_data.Spread, Item);
Velocity = Context.Evaluate(_data.Velocity, Item);
- Wear = Context.Evaluate(_itemData.WearDamage, Item);
+ Wear = (1 - pow(_itemData.Performance(Item.Temperature),
+ (1 - pow(Item.EquippableItem.Quality, Context.GameplaySettings.QualityWearExponent)) *
+ Context.GameplaySettings.ThermalWearExponent)
+ ) * _itemData.Durability;
}
public virtual bool Execute(float delta)
diff --git a/Assets/Scripts/ServerShared/Behaviors/Wear.cs b/Assets/Scripts/ServerShared/Behaviors/Wear.cs
index 272709473..8b6e68567 100644
--- a/Assets/Scripts/ServerShared/Behaviors/Wear.cs
+++ b/Assets/Scripts/ServerShared/Behaviors/Wear.cs
@@ -12,7 +12,7 @@ using static Unity.Mathematics.math;
public class WearData : BehaviorData
{
[TemperatureInspectable, JsonProperty("perSecond"), Key(1)]
- public bool PerSecond;
+ public bool PerSecond = true;
public override IBehavior CreateInstance(ItemManager context, Entity entity, EquippedItem item)
{
@@ -42,7 +42,10 @@ public class Wear : IBehavior
public bool Execute(float delta)
{
- var wear = Context.Evaluate(_itemData.WearDamage, Item);
+ var wear = (1 - pow(_itemData.Performance(Item.Temperature),
+ (1 - pow(Item.EquippableItem.Quality, Context.GameplaySettings.QualityWearExponent)) *
+ Context.GameplaySettings.ThermalWearExponent)
+ ) * _itemData.Durability / _itemData.ThermalResilience;
if (_data.PerSecond) wear *= delta;
Item.EquippableItem.Durability -= wear;
return true;
diff --git a/Assets/Scripts/ServerShared/ItemData.cs b/Assets/Scripts/ServerShared/ItemData.cs
index e866c3d33..dfc66915c 100644
--- a/Assets/Scripts/ServerShared/ItemData.cs
+++ b/Assets/Scripts/ServerShared/ItemData.cs
@@ -297,8 +297,8 @@ public abstract class EquippableItemData : CraftedItemData
[InspectableAnimationCurve, JsonProperty("performanceCurve"), Key(17)]
public float4[] HeatPerformanceCurve;
- [InspectableField, JsonProperty("wearDamage"), Key(18)]
- public PerformanceStat WearDamage = new PerformanceStat();
+ [InspectableField, JsonProperty("resilience"), Key(18)]
+ public float ThermalResilience = 1;
[IgnoreMember]
public abstract HardpointType HardpointType { get; }
diff --git a/Assets/Scripts/ServerShared/Settings.cs b/Assets/Scripts/ServerShared/Settings.cs
index a8e9fb7c8..9af5d9b5b 100644
--- a/Assets/Scripts/ServerShared/Settings.cs
+++ b/Assets/Scripts/ServerShared/Settings.cs
@@ -88,6 +88,13 @@ public class ZoneGenerationSettings
[Serializable, MessagePackObject(keyAsPropertyName: true), JsonObject]
public class GameplaySettings
{
+ public float WormholeDepth = 1000;
+ public float WormholeExitVelocity = 20;
+ public float WormholeExitRadius = 50;
+ public float WormholeAnimationDuration = 4;
+ public float WormholeExitCurveStart = .8f;
+ public float ThermalWearExponent = .01f;
+ public float QualityWearExponent = 2;
public int TriggerGroupCount = 6;
public float WarpDistance = 25;
public float DockingDistance = 25;
diff --git a/Assets/Scripts/ServerShared/Ship.cs b/Assets/Scripts/ServerShared/Ship.cs
index 9369a5a74..80793afa4 100644
--- a/Assets/Scripts/ServerShared/Ship.cs
+++ b/Assets/Scripts/ServerShared/Ship.cs
@@ -34,7 +34,15 @@ public class Ship : Entity
private HashSet _leftThrusters;
private HashSet _clockwiseThrusters;
private HashSet _counterClockwiseThrusters;
-
+
+ private bool _exitingWormhole = false;
+ private bool _enteringWormhole = false;
+ private float _wormholeAnimationProgress;
+ private float2 _wormholeEntryPosition;
+ private float2 _wormholeEntryDirection;
+ private float2 _wormholePosition;
+ private float2 _wormholeExitVelocity;
+
public float ForwardThrust { get; private set; }
public float ReverseThrust { get; private set; }
public float LeftStrafeThrust { get; private set; }
@@ -52,9 +60,30 @@ public class Ship : Entity
var clockwise = dot(direction, Direction.Rotate(ItemRotation.Clockwise)) > 0;
return angleDiff / ((clockwise ? ClockwiseTorque : CounterClockwiseTorque) / Mass);
}
+
+ public event Action OnExitedWormhole;
+ public event Action OnEnteredWormhole;
public quaternion Rotation { get; private set; }
+ public void ExitWormhole(float2 wormholePosition, float2 exitVelocity)
+ {
+ _exitingWormhole = true;
+ _wormholeAnimationProgress = 0;
+ _wormholePosition = wormholePosition;
+ _wormholeExitVelocity = exitVelocity;
+ Direction = normalize(exitVelocity);
+ }
+
+ public void EnterWormhole(float2 wormholePosition)
+ {
+ _wormholeAnimationProgress = 0;
+ _enteringWormhole = true;
+ _wormholeEntryPosition = Position.xz;
+ _wormholeEntryDirection = normalize(_wormholeEntryPosition-wormholePosition);
+ _wormholePosition = wormholePosition;
+ }
+
public override void Activate()
{
base.Activate();
@@ -113,6 +142,8 @@ public class Ship : Entity
ItemOnline.Subscribe(CheckForThruster);
}
+ #region ThrustCalculation
+
private void RecalculateForwardThrust()
{
ForwardThrust = 0;
@@ -187,10 +218,11 @@ public class Ship : Entity
}
}
+ #endregion
+
public override void Update(float delta)
{
- Position.xz += Velocity * delta;
- if (_active)
+ if (_active && !_exitingWormhole)
{
foreach (var thruster in _allThrusters) thruster.Axis = 0;
var rightThrusterTorqueCompensation = abs(RightStrafeTotalTorque) / RightStrafeTorqueThrusters.Length;
@@ -226,6 +258,9 @@ public class Ship : Entity
foreach (var thruster in _clockwiseThrusters) thruster.Axis += deltaRot;
foreach (var thruster in _counterClockwiseThrusters) thruster.Axis += -deltaRot;
}
+
+ Position.xz += Velocity * delta;
+
var normal = Zone.GetNormal(Position.xz);
var force = new float2(normal.x, normal.z);
var forceMagnitude = lengthsq(force);
@@ -239,6 +274,69 @@ public class Ship : Entity
Rotation = quaternion.LookRotation(forward, normal);
base.Update(delta);
+
+ if (_exitingWormhole)
+ {
+ _wormholeAnimationProgress += delta / ItemManager.GameplaySettings.WormholeAnimationDuration;
+ if(_wormholeAnimationProgress < 1)
+ {
+ if (_wormholeAnimationProgress < ItemManager.GameplaySettings.WormholeExitCurveStart)
+ {
+ Position.xz = _wormholePosition;
+ Rotation = quaternion.LookRotation(float3(0, 1, 0), float3(-Direction.x, 0, -Direction.y));
+ }
+ else
+ {
+ var exitLerp = _wormholeAnimationProgress - ItemManager.GameplaySettings.WormholeExitCurveStart /
+ (1 - ItemManager.GameplaySettings.WormholeExitCurveStart);
+ exitLerp *= exitLerp; // Square the interpolation variable to produce curve with zero slope at start
+ Position.xz = _wormholePosition + normalize(_wormholeExitVelocity) * exitLerp * ItemManager.GameplaySettings.WormholeExitRadius;
+ Rotation = quaternion.LookRotation(
+ lerp(float3(0, 1, 0), forward, exitLerp),
+ lerp(float3(-Direction.x, 0, -Direction.y), normal, exitLerp));
+ }
+
+ Position.y = Position.y - lerp(ItemManager.GameplaySettings.WormholeDepth, 0, _wormholeAnimationProgress);
+ }
+ else
+ {
+ _exitingWormhole = false;
+ OnExitedWormhole?.Invoke();
+ OnExitedWormhole = null;
+ Velocity = _wormholeExitVelocity;
+ }
+ }
+
+ if (_enteringWormhole)
+ {
+ _wormholeAnimationProgress += delta / ItemManager.GameplaySettings.WormholeAnimationDuration;
+ if(_wormholeAnimationProgress < 1)
+ {
+ if (_wormholeAnimationProgress < 1 - ItemManager.GameplaySettings.WormholeExitCurveStart)
+ {
+ var enterLerp = _wormholeAnimationProgress / (1 - ItemManager.GameplaySettings.WormholeExitCurveStart);
+ enterLerp *= enterLerp; // Square the interpolation variable to produce curve with zero slope at vertical
+ Position.xz = lerp(_wormholeEntryPosition, _wormholePosition, enterLerp);
+ Rotation = quaternion.LookRotation(
+ lerp(forward, float3(0, -1, 0), enterLerp),
+ lerp(normal, float3(-_wormholeEntryDirection.x, 0, -_wormholeEntryDirection.y), enterLerp));
+ }
+ else
+ {
+ Position.xz = _wormholePosition;
+ Rotation = quaternion.LookRotation(float3(0, -1, 0),
+ float3(-_wormholeEntryDirection.x, 0, -_wormholeEntryDirection.y));
+ }
+
+ Position.y = Position.y - lerp(0, ItemManager.GameplaySettings.WormholeDepth, _wormholeAnimationProgress);
+ }
+ else
+ {
+ _enteringWormhole = false;
+ OnEnteredWormhole?.Invoke();
+ OnEnteredWormhole = null;
+ }
+ }
}
}
diff --git a/Assets/Scripts/ServerShared/Wormhole.cs b/Assets/Scripts/ServerShared/Wormhole.cs
new file mode 100644
index 000000000..e1446c07b
--- /dev/null
+++ b/Assets/Scripts/ServerShared/Wormhole.cs
@@ -0,0 +1,6 @@
+using Unity.Mathematics;
+
+public class Wormhole
+{
+ public float2 Position;
+}
\ No newline at end of file
diff --git a/Assets/Scripts/ServerShared/Wormhole.cs.meta b/Assets/Scripts/ServerShared/Wormhole.cs.meta
new file mode 100644
index 000000000..538a13036
--- /dev/null
+++ b/Assets/Scripts/ServerShared/Wormhole.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: b5a943b5358a47a199ad5e7271c14032
+timeCreated: 1614907192
\ No newline at end of file
diff --git a/Assets/Scripts/UI/SchematicDisplay.cs b/Assets/Scripts/UI/SchematicDisplay.cs
index 989964c57..1e819e905 100644
--- a/Assets/Scripts/UI/SchematicDisplay.cs
+++ b/Assets/Scripts/UI/SchematicDisplay.cs
@@ -6,6 +6,7 @@ using TMPro;
using UnityEngine;
using UnityEngine.UI;
using Unity.Mathematics;
+using UnityEngine.Serialization;
using static Unity.Mathematics.math;
public class SchematicDisplay : MonoBehaviour
@@ -22,7 +23,7 @@ public class SchematicDisplay : MonoBehaviour
public TextMeshProUGUI EnergyLabel;
public TextMeshProUGUI CockpitTemperatureLabel;
public TextMeshProUGUI RadiatorTemperatureLabel;
- public TextMeshProUGUI HeatsinkTemperatureLabel;
+ [FormerlySerializedAs("HeatsinkTemperatureLabel")] public TextMeshProUGUI HeatStorageTemperatureLabel;
public TextMeshProUGUI CargoTemperatureLabel;
public TextMeshProUGUI VisibilityLabel;
public TextMeshProUGUI HullDurabilityLabel;
@@ -45,7 +46,7 @@ public class SchematicDisplay : MonoBehaviour
private Cockpit _cockpit;
private Reactor _reactor;
private Capacitor[] _capacitors;
- private Heatsink[] _heatsinks;
+ private HeatStorage[] _heatStorages;
private EquippedCargoBay[] _cargoBays;
private SchematicDisplayItem[] _schematicItems;
private Graphic[] _groupGraphics;
@@ -115,9 +116,9 @@ public class SchematicDisplay : MonoBehaviour
if (_radiators.Length == 0)
RadiatorTemperatureLabel.text = "N/A";
- _heatsinks = entity.GetBehaviors().ToArray();
- if (_heatsinks.Length == 0)
- HeatsinkTemperatureLabel.text = "N/A";
+ _heatStorages = entity.GetBehaviors().ToArray();
+ if (_heatStorages.Length == 0)
+ HeatStorageTemperatureLabel.text = "N/A";
_cargoBays = entity.CargoBays.ToArray();
if (_cargoBays.Length == 0)
@@ -222,12 +223,12 @@ public class SchematicDisplay : MonoBehaviour
$"{((int)(_radiators.Max(r => r.Temperature) - 273.15f)).ToString()}°C";
HeatsinkBackground.color = _entity.HeatsinksEnabled ? HeaderElementEnabledColor : HeaderElementDisabledColor;
- if (_heatsinks.Length == 1)
- HeatsinkTemperatureLabel.text = $"{((int)(_heatsinks[0].Item.Temperature - 273.15f)).ToString()}°C";
- else if (_heatsinks.Length > 1)
- HeatsinkTemperatureLabel.text =
- $"{((int)(_heatsinks.Min(r => r.Item.Temperature) - 273.15f)).ToString()}-" +
- $"{((int)(_heatsinks.Max(r => r.Item.Temperature) - 273.15f)).ToString()}°C";
+ if (_heatStorages.Length == 1)
+ HeatStorageTemperatureLabel.text = $"{((int)(_heatStorages[0].Item.Temperature - 273.15f)).ToString()}°C";
+ else if (_heatStorages.Length > 1)
+ HeatStorageTemperatureLabel.text =
+ $"{((int)(_heatStorages.Min(r => r.Item.Temperature) - 273.15f)).ToString()}-" +
+ $"{((int)(_heatStorages.Max(r => r.Item.Temperature) - 273.15f)).ToString()}°C";
if (_cargoBays.Length == 1)
CargoTemperatureLabel.text = $"{((int)(_cargoBays[0].Temperature - 273.15f)).ToString()}°C";
diff --git a/Assets/Shaders/Brushes/WormholeBrush.shader b/Assets/Shaders/Brushes/WormholeBrush.shader
new file mode 100644
index 000000000..c57627f90
--- /dev/null
+++ b/Assets/Shaders/Brushes/WormholeBrush.shader
@@ -0,0 +1,85 @@
+Shader "Brushes/Wormhole Brush" {
+Properties {
+ _Depth ("Depth", Float) = 0.5
+ _Power("Envelope Power", Float) = 1.25
+ _Frequency("Frequency", Float) = 6.2832
+ _FrequencyDist("Distance Frequency", Float) = 6.2832
+ _Speed("Speed", Float) = 0
+ _SinePower("Sine Power", Float) = 1.25
+}
+
+Category {
+ Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" "PreviewType"="Plane" }
+ Blend One One
+ ColorMask RGB
+ Cull Off Lighting Off ZWrite Off
+
+ SubShader {
+ Pass {
+
+ CGPROGRAM
+ #pragma vertex vert
+ #pragma fragment frag
+ #pragma target 2.0
+
+ #include "UnityCG.cginc"
+
+ float _Depth;
+ float _Power;
+ float _Frequency;
+ float _FrequencyDist;
+ float _Speed;
+ float _SinePower;
+
+ struct appdata_t {
+ float4 vertex : POSITION;
+ fixed4 color : COLOR;
+ float2 texcoord : TEXCOORD0;
+ };
+
+ struct v2f {
+ float4 vertex : SV_POSITION;
+ fixed4 color : COLOR;
+ float2 texcoord : TEXCOORD0;
+ };
+
+ float4 _MainTex_ST;
+
+ v2f vert (appdata_t v)
+ {
+ v2f o;
+ o.vertex = UnityObjectToClipPos(v.vertex);
+ o.color = v.color;
+ o.texcoord = v.texcoord;
+ return o;
+ }
+
+ float almostIdentity(float x, float m, float n)
+ {
+ if (x>m) return x;
+
+ const float a = 2.0f*n - m;
+ const float b = 2.0f*m - 3.0f*n;
+ const float t = x / m;
+
+ return (a*t + b)*t*t + n;
+ }
+
+ float powerPulse( float x, float power )
+ {
+ x = saturate(abs(x));
+ return pow((x + 1.0f) * (1.0f - x), power);
+ }
+
+ fixed4 frag (v2f i) : SV_Target
+ {
+ float2 uv2 = i.texcoord - float2(.5,.5);
+ float dist = length(uv2);
+ float ang = atan2(uv2.y,uv2.x);
+ return _Depth * powerPulse(dist * 2,_Power) * (cos(ang*_Frequency+dist*_FrequencyDist+_Time.x*_Speed)+1);
+ }
+ ENDCG
+ }
+ }
+}
+}
diff --git a/Assets/Shaders/Brushes/WormholeBrush.shader.meta b/Assets/Shaders/Brushes/WormholeBrush.shader.meta
new file mode 100644
index 000000000..6bccf4a95
--- /dev/null
+++ b/Assets/Shaders/Brushes/WormholeBrush.shader.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 8681ac064d59d15458d16cc9b884262c
+ShaderImporter:
+ externalObjects: {}
+ defaultTextures: []
+ nonModifiableTextures: []
+ preprocessorOverride: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Economy.Shared.Unity.csproj b/Economy.Shared.Unity.csproj
index 2e941db4b..fa7f1787d 100644
--- a/Economy.Shared.Unity.csproj
+++ b/Economy.Shared.Unity.csproj
@@ -483,7 +483,7 @@
-
+
@@ -517,13 +517,14 @@
+
-
+
diff --git a/GameData/AetherDB.msgpack b/GameData/AetherDB.msgpack
new file mode 100644
index 000000000..d9f22ffe9
Binary files /dev/null and b/GameData/AetherDB.msgpack differ