From f756c5fe6aeb52837d8a6035fe74f76634eeaa66 Mon Sep 17 00:00:00 2001 From: hyperion51 Date: Sun, 29 Mar 2020 04:19:24 +0100 Subject: [PATCH] Generating and Displaying Zones --- .../.idea/contentModel.xml | 37 +- .idea/.idea.Economy/.idea/contentModel.xml | 1 - Assembly-CSharp.csproj | 34 +- Assets/ClickRaycaster.cs | 18 - Assets/ClickableCollider.cs | 9 - Assets/Materials/Background 1.mat | 97 +++ Assets/Materials/Background 1.mat.meta | 8 + Assets/Materials/Background.mat | 21 +- Assets/Materials/Gravity Well.mat | 2 +- Assets/Materials/Zone.mat | 4 +- Assets/Prefabs/Planet.prefab | 438 +++++++++++ Assets/Prefabs/Planet.prefab.meta | 7 + .../Sprites/Icons/Stroked/Planet.png | 4 +- Assets/Scenes/Main.unity | 695 ++++++------------ Assets/Scripts/Orbit.cs | 70 -- Assets/Scripts/Orbit.cs.meta | 11 - Assets/Scripts/ServerShared/OrbitInstance.cs | 20 - .../ServerShared/OrbitInstance.cs.meta | 11 - Assets/Scripts/ServerShared/ZoneData.cs | 18 +- Assets/Scripts/ServerShared/ZoneGenerator.cs | 13 +- Assets/Scripts/StrategyGameManager.cs | 243 ++++++ .../{ => Scripts}/StrategyGameManager.cs.meta | 0 Assets/Scripts/UI.meta | 8 + Assets/Scripts/{ => UI}/BackgroundRenderer.cs | 10 +- .../{ => UI}/BackgroundRenderer.cs.meta | 0 Assets/Scripts/{ => UI}/ClickCatcher.cs | 36 +- Assets/Scripts/{ => UI}/ClickCatcher.cs.meta | 0 Assets/Scripts/UI/ClickRaycaster.cs | 25 + .../{ => Scripts/UI}/ClickRaycaster.cs.meta | 0 Assets/Scripts/UI/ClickableCollider.cs | 12 + .../UI}/ClickableCollider.cs.meta | 0 Assets/{ => Scripts/UI}/DragHandler.cs | 8 +- Assets/{ => Scripts/UI}/DragHandler.cs.meta | 0 Assets/Scripts/{ => UI}/FlatButton.cs | 0 Assets/Scripts/{ => UI}/FlatButton.cs.meta | 0 Assets/{ => Scripts/UI}/GalaxyZone.cs | 0 Assets/{ => Scripts/UI}/GalaxyZone.cs.meta | 0 Assets/Scripts/{ => UI}/Icons.cs | 0 Assets/Scripts/{ => UI}/Icons.cs.meta | 0 Assets/{ => Scripts/UI}/LoginScreen.cs | 24 +- Assets/{ => Scripts/UI}/LoginScreen.cs.meta | 0 Assets/Scripts/{ => UI}/PropertiesPanel.cs | 0 .../Scripts/{ => UI}/PropertiesPanel.cs.meta | 0 Assets/Scripts/{ => UI}/TabActivator.cs | 0 Assets/Scripts/{ => UI}/TabActivator.cs.meta | 0 Assets/Scripts/{ => UI}/TabButton.cs | 0 Assets/Scripts/{ => UI}/TabButton.cs.meta | 0 Assets/Scripts/{ => UI}/TabGroup.cs | 0 Assets/Scripts/{ => UI}/TabGroup.cs.meta | 0 Assets/{ => Scripts/UI}/ZoneObject.cs | 0 Assets/{ => Scripts/UI}/ZoneObject.cs.meta | 0 Assets/Scripts/{ => UI}/ZoneRenderer.cs | 10 +- Assets/Scripts/{ => UI}/ZoneRenderer.cs.meta | 0 Assets/Shaders/Clouds.shader | 92 +++ Assets/Shaders/Clouds.shader.meta | 9 + Assets/Shaders/Isolines.shader | 2 +- Assets/StrategyGameManager.cs | 109 --- Economy.Server/Program.cs | 28 +- Economy.Server/Server.cs | 16 +- .../Debug/netcoreapp3.1/Economy.Server.dll | 4 +- .../Debug/netcoreapp3.1/Economy.Shared.dll | 2 +- ...onomy.Server.csprojAssemblyReference.cache | Bin 104800 -> 118236 bytes .../Debug/netcoreapp3.1/Economy.Server.dll | 4 +- Economy.Shared.Unity.csproj | 1 - .../Debug/netstandard2.0/Economy.Shared.dll | 2 +- .../Debug/netstandard2.0/Economy.Shared.dll | 2 +- ProjectSettings/TagManager.asset | 4 +- 67 files changed, 1343 insertions(+), 826 deletions(-) delete mode 100644 Assets/ClickRaycaster.cs delete mode 100644 Assets/ClickableCollider.cs create mode 100644 Assets/Materials/Background 1.mat create mode 100644 Assets/Materials/Background 1.mat.meta create mode 100644 Assets/Prefabs/Planet.prefab create mode 100644 Assets/Prefabs/Planet.prefab.meta delete mode 100644 Assets/Scripts/Orbit.cs delete mode 100644 Assets/Scripts/Orbit.cs.meta delete mode 100644 Assets/Scripts/ServerShared/OrbitInstance.cs delete mode 100644 Assets/Scripts/ServerShared/OrbitInstance.cs.meta create mode 100644 Assets/Scripts/StrategyGameManager.cs rename Assets/{ => Scripts}/StrategyGameManager.cs.meta (100%) create mode 100644 Assets/Scripts/UI.meta rename Assets/Scripts/{ => UI}/BackgroundRenderer.cs (59%) rename Assets/Scripts/{ => UI}/BackgroundRenderer.cs.meta (100%) rename Assets/Scripts/{ => UI}/ClickCatcher.cs (57%) rename Assets/Scripts/{ => UI}/ClickCatcher.cs.meta (100%) create mode 100644 Assets/Scripts/UI/ClickRaycaster.cs rename Assets/{ => Scripts/UI}/ClickRaycaster.cs.meta (100%) create mode 100644 Assets/Scripts/UI/ClickableCollider.cs rename Assets/{ => Scripts/UI}/ClickableCollider.cs.meta (100%) rename Assets/{ => Scripts/UI}/DragHandler.cs (59%) rename Assets/{ => Scripts/UI}/DragHandler.cs.meta (100%) rename Assets/Scripts/{ => UI}/FlatButton.cs (100%) rename Assets/Scripts/{ => UI}/FlatButton.cs.meta (100%) rename Assets/{ => Scripts/UI}/GalaxyZone.cs (100%) rename Assets/{ => Scripts/UI}/GalaxyZone.cs.meta (100%) rename Assets/Scripts/{ => UI}/Icons.cs (100%) rename Assets/Scripts/{ => UI}/Icons.cs.meta (100%) rename Assets/{ => Scripts/UI}/LoginScreen.cs (73%) rename Assets/{ => Scripts/UI}/LoginScreen.cs.meta (100%) rename Assets/Scripts/{ => UI}/PropertiesPanel.cs (100%) rename Assets/Scripts/{ => UI}/PropertiesPanel.cs.meta (100%) rename Assets/Scripts/{ => UI}/TabActivator.cs (100%) rename Assets/Scripts/{ => UI}/TabActivator.cs.meta (100%) rename Assets/Scripts/{ => UI}/TabButton.cs (100%) rename Assets/Scripts/{ => UI}/TabButton.cs.meta (100%) rename Assets/Scripts/{ => UI}/TabGroup.cs (100%) rename Assets/Scripts/{ => UI}/TabGroup.cs.meta (100%) rename Assets/{ => Scripts/UI}/ZoneObject.cs (100%) rename Assets/{ => Scripts/UI}/ZoneObject.cs.meta (100%) rename Assets/Scripts/{ => UI}/ZoneRenderer.cs (83%) rename Assets/Scripts/{ => UI}/ZoneRenderer.cs.meta (100%) create mode 100644 Assets/Shaders/Clouds.shader create mode 100644 Assets/Shaders/Clouds.shader.meta delete mode 100644 Assets/StrategyGameManager.cs diff --git a/.idea/.idea.Aetheria-Economy/.idea/contentModel.xml b/.idea/.idea.Aetheria-Economy/.idea/contentModel.xml index b19ca72d2..5b149ec79 100644 --- a/.idea/.idea.Aetheria-Economy/.idea/contentModel.xml +++ b/.idea/.idea.Aetheria-Economy/.idea/contentModel.xml @@ -9,11 +9,6 @@ - - - - - @@ -56,8 +51,6 @@ - - @@ -66,9 +59,7 @@ - - @@ -665,8 +656,6 @@ - - @@ -1095,29 +1084,42 @@ - - - - + + + + + + + + + + + + + + + + + + - + - @@ -1146,7 +1148,6 @@ - diff --git a/.idea/.idea.Economy/.idea/contentModel.xml b/.idea/.idea.Economy/.idea/contentModel.xml index 62f3f6f2d..294ffd4c5 100644 --- a/.idea/.idea.Economy/.idea/contentModel.xml +++ b/.idea/.idea.Economy/.idea/contentModel.xml @@ -429,7 +429,6 @@ - diff --git a/Assembly-CSharp.csproj b/Assembly-CSharp.csproj index c271fc57d..b71238ae0 100644 --- a/Assembly-CSharp.csproj +++ b/Assembly-CSharp.csproj @@ -60,17 +60,8 @@ - - - - - - - - - @@ -391,18 +382,26 @@ - - - - - + + + + + + + + + + + + + + + + - - - @@ -419,6 +418,7 @@ + diff --git a/Assets/ClickRaycaster.cs b/Assets/ClickRaycaster.cs deleted file mode 100644 index fc72b7f05..000000000 --- a/Assets/ClickRaycaster.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -public class ClickRaycaster : MonoBehaviour -{ - // Start is called before the first frame update - void Start() - { - - } - - // Update is called once per frame - void Update() - { - - } -} diff --git a/Assets/ClickableCollider.cs b/Assets/ClickableCollider.cs deleted file mode 100644 index 2a19a8e6d..000000000 --- a/Assets/ClickableCollider.cs +++ /dev/null @@ -1,9 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -public class ClickableCollider : MonoBehaviour -{ - public event Action OnClick; -} diff --git a/Assets/Materials/Background 1.mat b/Assets/Materials/Background 1.mat new file mode 100644 index 000000000..4ed17f620 --- /dev/null +++ b/Assets/Materials/Background 1.mat @@ -0,0 +1,97 @@ +%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: Background 1 + m_Shader: {fileID: 4800000, guid: 118cb8aabcab89b4fbd939f5c9b71d91, 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: + - Distortion: 0.5 + - FadeDistance: 100 + - Gain: 0.1 + - Gather: -0.5 + - GatherWavelength: 1 + - NoiseAmplitude: 0.7 + - NoiseFrequency: 0.15 + - NoiseGain: 0.75 + - NoiseLacunarity: 3 + - NoiseOffset: 0 + - NoisePosition: 0 + - Parallax: -0.05 + - ParallaxLacunarity: 2 + - ScrollSpeed: 1 + - Speed: 2 + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _Frequency: 1 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - ParallaxDirection: {r: 0, g: 0, b: 0, a: 0} + - _Color: {r: 0.357, g: 0.15959999, b: 0.018199999, a: 1} + - _Color1: {r: 0, g: 0.2587719, b: 0.5, a: 1} + - _Color2: {r: 0.25, g: 0.11145834, b: 0.012500003, a: 1} + - _Color3: {r: 0.1, g: 0.099829406, b: 0.010000003, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/Materials/Background 1.mat.meta b/Assets/Materials/Background 1.mat.meta new file mode 100644 index 000000000..220d030a5 --- /dev/null +++ b/Assets/Materials/Background 1.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5b7dd00e8f1f14a41b62d3bd79204a91 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/Background.mat b/Assets/Materials/Background.mat index 743e29e70..b91756112 100644 --- a/Assets/Materials/Background.mat +++ b/Assets/Materials/Background.mat @@ -8,7 +8,7 @@ Material: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: Background - m_Shader: {fileID: 4800000, guid: 7a1e6fc0f6159b44eacd456c2a308968, type: 3} + m_Shader: {fileID: 4800000, guid: 118cb8aabcab89b4fbd939f5c9b71d91, type: 3} m_ShaderKeywords: m_LightmapFlags: 4 m_EnableInstancingVariants: 0 @@ -57,19 +57,20 @@ Material: m_Offset: {x: 0, y: 0} m_Floats: - Distortion: 0.5 + - FadeDistance: 100 - Gain: 0.1 - Gather: -0.5 - GatherWavelength: 1 - - NoiseAmplitude: 0.5 - - NoiseFrequency: 0.2 - - NoiseGain: 0.66 - - NoiseLacunarity: 2.75 - - NoiseOffset: 1 + - NoiseAmplitude: 0.8 + - NoiseFrequency: 0.1 + - NoiseGain: 0.75 + - NoiseLacunarity: 3 + - NoiseOffset: 0.28 - NoisePosition: 0 - - Parallax: 0 + - Parallax: -0.05 - ParallaxLacunarity: 2 - ScrollSpeed: 1 - - Speed: 5 + - Speed: 2 - _BumpScale: 1 - _Cutoff: 0.5 - _DetailNormalMapScale: 1 @@ -88,8 +89,8 @@ Material: - _UVSec: 0 - _ZWrite: 1 m_Colors: - - ParallaxDirection: {r: 0.3442049, g: -0.57971084, b: -10, a: 0} - - _Color: {r: 1, g: 1, b: 1, a: 1} + - ParallaxDirection: {r: 0, g: 0, b: 0, a: 0} + - _Color: {r: 0.07913792, g: 0.23741385, b: 0.315, a: 1} - _Color1: {r: 0, g: 0.2587719, b: 0.5, a: 1} - _Color2: {r: 0.25, g: 0.11145834, b: 0.012500003, a: 1} - _Color3: {r: 0.1, g: 0.099829406, b: 0.010000003, a: 1} diff --git a/Assets/Materials/Gravity Well.mat b/Assets/Materials/Gravity Well.mat index 9251bb922..fe65e0071 100644 --- a/Assets/Materials/Gravity Well.mat +++ b/Assets/Materials/Gravity Well.mat @@ -58,7 +58,7 @@ Material: m_Floats: - _BumpScale: 1 - _Cutoff: 0.5 - - _Depth: 91.9 + - _Depth: 32.69 - _DetailNormalMapScale: 1 - _DstBlend: 0 - _GlossMapScale: 1 diff --git a/Assets/Materials/Zone.mat b/Assets/Materials/Zone.mat index 26336d2c2..5648b1a21 100644 --- a/Assets/Materials/Zone.mat +++ b/Assets/Materials/Zone.mat @@ -60,13 +60,13 @@ Material: - _AngleWidth: 0.0001 - _BumpScale: 1 - _Cutoff: 0.5 - - _DangerSteepness: 1.5 + - _DangerSteepness: 0.02 - _DetailNormalMapScale: 1 - _DstBlend: 0 - _GlossMapScale: 1 - _Glossiness: 0.5 - _GlossyReflections: 1 - - _HeightRange: 150.2 + - _HeightRange: 37.3 - _LineFade: 30 - _LineWidth: 0.0001 - _Metallic: 0 diff --git a/Assets/Prefabs/Planet.prefab b/Assets/Prefabs/Planet.prefab new file mode 100644 index 000000000..53ffa64e5 --- /dev/null +++ b/Assets/Prefabs/Planet.prefab @@ -0,0 +1,438 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &5321404118521994134 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5321404118521994135} + - component: {fileID: 5321404118521994133} + m_Layer: 0 + m_Name: Planet + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5321404118521994135 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5321404118521994134} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 5.38, y: 0.81, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 5321404120083801960} + - {fileID: 5321404118931821940} + - {fileID: 5321404119494867799} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &5321404118521994133 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5321404118521994134} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 17a379c98cd100d4c8548e22c676d246, type: 3} + m_Name: + m_EditorClassIdentifier: + GravityMesh: {fileID: 5321404120083801962} + Icon: {fileID: 5321404118931821941} + Label: {fileID: 5321404119494867796} +--- !u!1 &5321404118931821943 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5321404118931821940} + - component: {fileID: 5321404118931821938} + - component: {fileID: 5321404118931821941} + - component: {fileID: 5321404118931821936} + - component: {fileID: 5321404118931821939} + m_Layer: 0 + m_Name: Icon + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5321404118931821940 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5321404118931821943} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0.05} + m_LocalScale: {x: 0.75, y: 0.75, z: 1} + m_Children: [] + m_Father: {fileID: 5321404118521994135} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &5321404118931821938 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5321404118931821943} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &5321404118931821941 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5321404118931821943} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 524c72939685743438cb17ce839664e7, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + 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 +--- !u!64 &5321404118931821936 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5321404118931821943} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Convex: 0 + m_CookingOptions: 14 + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!114 &5321404118931821939 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5321404118931821943} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 52538a3309c36fc4583c964a1c0b705f, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &5321404119494867798 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5321404119494867799} + - component: {fileID: 5321404119494867795} + - component: {fileID: 5321404119494867794} + - component: {fileID: 5321404119494867797} + - component: {fileID: 5321404119494867796} + m_Layer: 0 + m_Name: Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5321404119494867799 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5321404119494867798} + 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: [] + m_Father: {fileID: 5321404118521994135} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 1, y: 1} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!23 &5321404119494867795 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5321404119494867798} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 21677577810600300, guid: ef74c4c30ca5ced4489f28b914006aad, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + 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 +--- !u!33 &5321404119494867794 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5321404119494867798} + m_Mesh: {fileID: 0} +--- !u!222 &5321404119494867797 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5321404119494867798} + m_CullTransparentMesh: 0 +--- !u!114 &5321404119494867796 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5321404119494867798} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9541d86e2fd84c1d9990edf0852d74ab, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: 'Regular Name + +' + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: ef74c4c30ca5ced4489f28b914006aad, type: 2} + m_sharedMaterial: {fileID: 21677577810600300, guid: ef74c4c30ca5ced4489f28b914006aad, + type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_outlineColor: + serializedVersion: 2 + rgba: 4278190080 + m_fontSize: 2 + m_fontSizeBase: 2 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_textAlignment: 258 + m_characterSpacing: 1.38 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 0 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_firstOverflowCharacterIndex: -1 + m_linkedTextComponent: {fileID: 0} + m_isLinkedTextComponent: 0 + m_isTextTruncated: 0 + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 0 + m_isCullingEnabled: 0 + m_ignoreRectMaskCulling: 0 + m_ignoreCulling: 1 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_VertexBufferAutoSizeReduction: 1 + m_firstVisibleCharacter: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_textInfo: + textComponent: {fileID: 5321404119494867796} + characterCount: 13 + spriteCount: 0 + spaceCount: 2 + wordCount: 2 + linkCount: 0 + lineCount: 1 + pageCount: 1 + materialCount: 1 + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_spriteAnimator: {fileID: 0} + m_hasFontAssetChanged: 0 + m_renderer: {fileID: 5321404119494867795} + m_subTextObjects: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + m_maskType: 0 +--- !u!1 &5321404120083801964 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5321404120083801960} + - component: {fileID: 5321404120083801963} + - component: {fileID: 5321404120083801962} + m_Layer: 8 + m_Name: Gravity Well + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5321404120083801960 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5321404120083801964} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 10, y: 10, z: 1} + m_Children: [] + m_Father: {fileID: 5321404118521994135} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &5321404120083801963 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5321404120083801964} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &5321404120083801962 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5321404120083801964} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 44a8bbb89acb4e34c9f41a9da5842bb4, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + 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 diff --git a/Assets/Prefabs/Planet.prefab.meta b/Assets/Prefabs/Planet.prefab.meta new file mode 100644 index 000000000..f081a139c --- /dev/null +++ b/Assets/Prefabs/Planet.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f9521191d31952a42a76632d158de0d3 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Sprites/Icons/Stroked/Planet.png b/Assets/Resources/Sprites/Icons/Stroked/Planet.png index f9ed74f1d..7ea165262 100644 --- a/Assets/Resources/Sprites/Icons/Stroked/Planet.png +++ b/Assets/Resources/Sprites/Icons/Stroked/Planet.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ca1874c043164bf973be31d3f53392f864a5b41384ec5996a03962c013dea712 -size 20084 +oid sha256:89c7279d8a54aaeb70cd6ceb6a20a52f5eb5eac8837c2f7f283f13f710576f79 +size 27655 diff --git a/Assets/Scenes/Main.unity b/Assets/Scenes/Main.unity index 90be7aa99..ecfa857ad 100644 --- a/Assets/Scenes/Main.unity +++ b/Assets/Scenes/Main.unity @@ -3975,7 +3975,7 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 214380291} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.08, y: -0.027, z: 1} + m_LocalPosition: {x: -5.2, y: -3.6, z: 1} m_LocalScale: {x: 30, y: 30, z: 1} m_Children: [] m_Father: {fileID: 0} @@ -5354,7 +5354,7 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 462.6, y: -2.5999756} + m_AnchoredPosition: {x: 462.6, y: -2.5998535} m_SizeDelta: {x: 4, y: 48.7} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &262489563 @@ -5447,7 +5447,7 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 2.0001068, y: -2.5999756} + m_AnchoredPosition: {x: 2.0001068, y: -2.5998535} m_SizeDelta: {x: 4, y: 48.7} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &264974601 @@ -6236,7 +6236,7 @@ RectTransform: m_Children: - {fileID: 784574043} m_Father: {fileID: 0} - m_RootOrder: 5 + m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -6941,83 +6941,6 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 366836206} m_CullTransparentMesh: 0 ---- !u!1 &368096481 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 368096482} - - component: {fileID: 368096484} - - component: {fileID: 368096483} - m_Layer: 0 - m_Name: Icon - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &368096482 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 368096481} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 0.75, y: 0.75, z: 1} - m_Children: [] - m_Father: {fileID: 1007041025} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!23 &368096483 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 368096481} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 524c72939685743438cb17ce839664e7, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - 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 ---- !u!33 &368096484 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 368096481} - m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &369099758 GameObject: m_ObjectHideFlags: 0 @@ -7621,7 +7544,6 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: FollowCamera: {fileID: 519420031} - BackgroundMaterial: {fileID: 2100000, guid: 90cead50364300d47bb35194fb52c117, type: 2} GravityTexture: {fileID: 0} GravityRenderer: {fileID: 1956833085} --- !u!114 &408552539 @@ -7692,7 +7614,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 2 + m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &411438443 GameObject: @@ -8032,7 +7954,7 @@ Transform: - {fileID: 1007041025} - {fileID: 2031261069} m_Father: {fileID: 0} - m_RootOrder: 3 + m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &435654368 MonoBehaviour: @@ -9215,6 +9137,7 @@ GameObject: - component: {fileID: 515449813} - component: {fileID: 515449812} - component: {fileID: 515449811} + - component: {fileID: 515449814} m_Layer: 0 m_Name: Background m_TagString: Untagged @@ -9230,7 +9153,7 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 515449809} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalPosition: {x: 0, y: 0, z: 0.05} m_LocalScale: {x: 1.5, y: 1.5, z: 1} m_Children: [] m_Father: {fileID: 559120530} @@ -9295,6 +9218,18 @@ MeshFilter: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 515449809} m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!114 &515449814 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 515449809} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 52538a3309c36fc4583c964a1c0b705f, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!1 &515809179 GameObject: m_ObjectHideFlags: 0 @@ -9534,7 +9469,7 @@ Camera: width: 1 height: 1 near clip plane: 0.3 - far clip plane: 1000 + far clip plane: 20 field of view: 60 orthographic: 1 orthographic size: 5 @@ -9580,6 +9515,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: Background: {fileID: 214380294} + Background2: {fileID: 1671511697} --- !u!1 &523371071 GameObject: m_ObjectHideFlags: 0 @@ -10104,7 +10040,6 @@ GameObject: - component: {fileID: 559120530} - component: {fileID: 559120531} - component: {fileID: 559120532} - - component: {fileID: 559120533} m_Layer: 0 m_Name: Zone m_TagString: Untagged @@ -10156,18 +10091,6 @@ MonoBehaviour: Background: {fileID: 515449812} Icon: {fileID: 1873099343} Label: {fileID: 258993626} ---- !u!114 &559120533 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 559120529} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 52538a3309c36fc4583c964a1c0b705f, type: 3} - m_Name: - m_EditorClassIdentifier: --- !u!1 &565356060 GameObject: m_ObjectHideFlags: 0 @@ -10212,7 +10135,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 7 + m_RootOrder: 8 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &565356063 MonoBehaviour: @@ -11160,7 +11083,7 @@ Transform: - {fileID: 899487251} - {fileID: 559120530} m_Father: {fileID: 0} - m_RootOrder: 4 + m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &597171595 MonoBehaviour: @@ -13160,7 +13083,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 6 + m_RootOrder: 7 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &650710352 GameObject: @@ -15735,9 +15658,11 @@ GameObject: - component: {fileID: 784574044} - component: {fileID: 784574046} - component: {fileID: 784574045} + - component: {fileID: 784574048} + - component: {fileID: 784574047} m_Layer: 5 m_Name: Root - m_TagString: Untagged + m_TagString: UIBackground m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 @@ -15799,6 +15724,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: ba30ab714c5cf6943957d3e4ae549c84, type: 3} m_Name: m_EditorClassIdentifier: + RayCamera: {fileID: 519420031} --- !u!114 &784574046 MonoBehaviour: m_ObjectHideFlags: 0 @@ -15811,12 +15737,41 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 20fa7724865c6b04097615292a325dfe, type: 3} m_Name: m_EditorClassIdentifier: - OnEnter: - m_PersistentCalls: - m_Calls: [] - OnExit: +--- !u!114 &784574047 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 784574042} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0} + m_RaycastTarget: 1 + m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 +--- !u!222 &784574048 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 784574042} + m_CullTransparentMesh: 0 --- !u!1 &798747641 GameObject: m_ObjectHideFlags: 0 @@ -18479,7 +18434,7 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 477.6, y: -49.35} + m_AnchoredPosition: {x: 477.6, y: -49.350098} m_SizeDelta: {x: 4, y: -1.3000488} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &972057236 @@ -19086,68 +19041,12 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1001885219} m_CullTransparentMesh: 0 ---- !u!1 &1007041024 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1007041025} - - component: {fileID: 1007041027} - - component: {fileID: 1007041026} - m_Layer: 0 - m_Name: Planet - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1007041025 +--- !u!4 &1007041025 stripped Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 5321404118521994135, guid: f9521191d31952a42a76632d158de0d3, + type: 3} + m_PrefabInstance: {fileID: 5321404119125844374} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1007041024} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 5.38, y: 0.81, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 1496237822} - - {fileID: 368096482} - - {fileID: 2046909121} - m_Father: {fileID: 435654367} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1007041026 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1007041024} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1281fe44325f9b548aa42dc331b17266, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!114 &1007041027 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1007041024} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 17a379c98cd100d4c8548e22c676d246, type: 3} - m_Name: - m_EditorClassIdentifier: - GravityMesh: {fileID: 1496237820} - Icon: {fileID: 368096483} - Label: {fileID: 2046909122} --- !u!1 &1008092833 GameObject: m_ObjectHideFlags: 0 @@ -21747,11 +21646,12 @@ MonoBehaviour: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1126386499} - m_Enabled: 0 + m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 1c1faf0a46b9cf24498cd5ec93c34c71, type: 3} m_Name: m_EditorClassIdentifier: + Camera: {fileID: 519420031} PrimaryTabGroup: {fileID: 143833105} GalaxyTabButton: {fileID: 646091942} ZoneTabButton: {fileID: 618245060} @@ -21759,7 +21659,9 @@ MonoBehaviour: GalaxyZoneLinkPrototype: {fileID: 899487252} GalaxyBackground: {fileID: 1938745697} GalaxyScale: 100 - ZoneObjectPrototype: {fileID: 1007041026} + ZoneObjectPrefab: {fileID: 5321404118521994133, guid: f9521191d31952a42a76632d158de0d3, + type: 3} + ZoneRoot: {fileID: 435654367} PlanetSprite: {fileID: 2800000, guid: 0d2acbd593b7fd349b0b26b4844733ef, type: 3} GasGiantSprite: {fileID: 2800000, guid: 39505115515c61f4db3c5c5397a5ba49, type: 3} OrbitalSprite: {fileID: 2800000, guid: 97bce58bfe43bfa40870ca062cfb7ec1, type: 3} @@ -21767,6 +21669,11 @@ MonoBehaviour: WormholeSprite: {fileID: 2800000, guid: 6d0b27330fdcc8347b1e09a2d17a0673, type: 3} SelectedColor: {r: 1, g: 0.44583336, b: 0.050000012, a: 1} UnselectedColor: {r: 0.20084397, g: 0.5982815, b: 0.797, a: 1} + ZoneSizeScale: 0.01 + ZoneMassScale: 0.5 + ZoneMassPower: 0.333 + ZoneOrbitSpeed: 10 + ZoneBackground: {fileID: 1956833085} --- !u!4 &1126386501 Transform: m_ObjectHideFlags: 0 @@ -21779,7 +21686,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 8 + m_RootOrder: 9 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1142252850 GameObject: @@ -28181,83 +28088,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 4ec4ae0999e1b814cbb86e167df3c039, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!1 &1496237818 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1496237822} - - component: {fileID: 1496237821} - - component: {fileID: 1496237820} - m_Layer: 8 - m_Name: Gravity Well - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!23 &1496237820 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1496237818} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 44a8bbb89acb4e34c9f41a9da5842bb4, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - 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 ---- !u!33 &1496237821 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1496237818} - m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} ---- !u!4 &1496237822 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1496237818} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 10, y: 10, z: 1} - m_Children: [] - m_Father: {fileID: 1007041025} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1001 &1496468282 PrefabInstance: m_ObjectHideFlags: 0 @@ -31820,6 +31650,83 @@ MonoBehaviour: m_ChildForceExpandHeight: 1 m_ChildControlWidth: 1 m_ChildControlHeight: 1 +--- !u!1 &1671511694 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1671511697} + - component: {fileID: 1671511696} + - component: {fileID: 1671511695} + m_Layer: 0 + m_Name: Background (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &1671511695 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1671511694} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 5b7dd00e8f1f14a41b62d3bd79204a91, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + 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 +--- !u!33 &1671511696 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1671511694} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1671511697 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1671511694} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -5.2, y: -3.6, z: 0.5} + m_LocalScale: {x: 30, y: 30, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1688360938 GameObject: m_ObjectHideFlags: 0 @@ -35356,7 +35263,7 @@ GameObject: - component: {fileID: 1847575591} - component: {fileID: 1847575590} m_Layer: 5 - m_Name: Image + m_Name: Background m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -35815,7 +35722,7 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1873099340} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalPosition: {x: 0, y: 0, z: 0.025} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 559120530} @@ -37270,7 +37177,7 @@ Transform: m_GameObject: {fileID: 1938745695} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0.5} - m_LocalScale: {x: 20, y: 20, z: 1} + m_LocalScale: {x: 50, y: 50, z: 1} m_Children: [] m_Father: {fileID: 597171594} m_RootOrder: 0 @@ -39314,7 +39221,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 + m_IsActive: 0 --- !u!199 &2031261067 ParticleSystemRenderer: serializedVersion: 6 @@ -44195,211 +44102,6 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2041331255} m_CullTransparentMesh: 0 ---- !u!1 &2046909120 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2046909121} - - component: {fileID: 2046909125} - - component: {fileID: 2046909124} - - component: {fileID: 2046909123} - - component: {fileID: 2046909122} - m_Layer: 0 - m_Name: Label - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &2046909121 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2046909120} - 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: [] - m_Father: {fileID: 1007041025} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 1, y: 1} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &2046909122 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2046909120} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 9541d86e2fd84c1d9990edf0852d74ab, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_text: 'Regular Name - -' - m_isRightToLeft: 0 - m_fontAsset: {fileID: 11400000, guid: ef74c4c30ca5ced4489f28b914006aad, type: 2} - m_sharedMaterial: {fileID: 21677577810600300, guid: ef74c4c30ca5ced4489f28b914006aad, - type: 2} - m_fontSharedMaterials: [] - m_fontMaterial: {fileID: 0} - m_fontMaterials: [] - m_fontColor32: - serializedVersion: 2 - rgba: 4294967295 - m_fontColor: {r: 1, g: 1, b: 1, a: 1} - m_enableVertexGradient: 0 - m_colorMode: 3 - m_fontColorGradient: - topLeft: {r: 1, g: 1, b: 1, a: 1} - topRight: {r: 1, g: 1, b: 1, a: 1} - bottomLeft: {r: 1, g: 1, b: 1, a: 1} - bottomRight: {r: 1, g: 1, b: 1, a: 1} - m_fontColorGradientPreset: {fileID: 0} - m_spriteAsset: {fileID: 0} - m_tintAllSprites: 0 - m_overrideHtmlColors: 0 - m_faceColor: - serializedVersion: 2 - rgba: 4294967295 - m_outlineColor: - serializedVersion: 2 - rgba: 4278190080 - m_fontSize: 2 - m_fontSizeBase: 2 - m_fontWeight: 400 - m_enableAutoSizing: 0 - m_fontSizeMin: 18 - m_fontSizeMax: 72 - m_fontStyle: 0 - m_textAlignment: 258 - m_characterSpacing: 1.38 - m_wordSpacing: 0 - m_lineSpacing: 0 - m_lineSpacingMax: 0 - m_paragraphSpacing: 0 - m_charWidthMaxAdj: 0 - m_enableWordWrapping: 0 - m_wordWrappingRatios: 0.4 - m_overflowMode: 0 - m_firstOverflowCharacterIndex: -1 - m_linkedTextComponent: {fileID: 0} - m_isLinkedTextComponent: 0 - m_isTextTruncated: 0 - m_enableKerning: 1 - m_enableExtraPadding: 0 - checkPaddingRequired: 0 - m_isRichText: 1 - m_parseCtrlCharacters: 1 - m_isOrthographic: 0 - m_isCullingEnabled: 0 - m_ignoreRectMaskCulling: 0 - m_ignoreCulling: 1 - m_horizontalMapping: 0 - m_verticalMapping: 0 - m_uvLineOffset: 0 - m_geometrySortingOrder: 0 - m_VertexBufferAutoSizeReduction: 1 - m_firstVisibleCharacter: 0 - m_useMaxVisibleDescender: 1 - m_pageToDisplay: 1 - m_margin: {x: 0, y: 0, z: 0, w: 0} - m_textInfo: - textComponent: {fileID: 2046909122} - characterCount: 13 - spriteCount: 0 - spaceCount: 2 - wordCount: 2 - linkCount: 0 - lineCount: 1 - pageCount: 1 - materialCount: 1 - m_isUsingLegacyAnimationComponent: 0 - m_isVolumetricText: 0 - m_spriteAnimator: {fileID: 0} - m_hasFontAssetChanged: 0 - m_renderer: {fileID: 2046909125} - m_subTextObjects: - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - m_maskType: 0 ---- !u!222 &2046909123 -CanvasRenderer: - m_ObjectHideFlags: 2 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2046909120} - m_CullTransparentMesh: 0 ---- !u!33 &2046909124 -MeshFilter: - m_ObjectHideFlags: 2 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2046909120} - m_Mesh: {fileID: 0} ---- !u!23 &2046909125 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2046909120} - m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 21677577810600300, guid: ef74c4c30ca5ced4489f28b914006aad, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - 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 --- !u!1 &2051420756 GameObject: m_ObjectHideFlags: 0 @@ -45585,6 +45287,85 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2146497157} m_CullTransparentMesh: 0 +--- !u!1001 &5321404119125844374 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 435654367} + m_Modifications: + - target: {fileID: 5321404118521994134, guid: f9521191d31952a42a76632d158de0d3, + type: 3} + propertyPath: m_Name + value: Planet + objectReference: {fileID: 0} + - target: {fileID: 5321404118521994134, guid: f9521191d31952a42a76632d158de0d3, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5321404118521994135, guid: f9521191d31952a42a76632d158de0d3, + type: 3} + propertyPath: m_LocalPosition.x + value: 5.38 + objectReference: {fileID: 0} + - target: {fileID: 5321404118521994135, guid: f9521191d31952a42a76632d158de0d3, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.81 + objectReference: {fileID: 0} + - target: {fileID: 5321404118521994135, guid: f9521191d31952a42a76632d158de0d3, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5321404118521994135, guid: f9521191d31952a42a76632d158de0d3, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5321404118521994135, guid: f9521191d31952a42a76632d158de0d3, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5321404118521994135, guid: f9521191d31952a42a76632d158de0d3, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5321404118521994135, guid: f9521191d31952a42a76632d158de0d3, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 5321404118521994135, guid: f9521191d31952a42a76632d158de0d3, + type: 3} + propertyPath: m_RootOrder + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 5321404118521994135, guid: f9521191d31952a42a76632d158de0d3, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5321404118521994135, guid: f9521191d31952a42a76632d158de0d3, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5321404118521994135, guid: f9521191d31952a42a76632d158de0d3, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5321404119494867794, guid: f9521191d31952a42a76632d158de0d3, + type: 3} + propertyPath: m_Mesh + value: + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: f9521191d31952a42a76632d158de0d3, type: 3} --- !u!1001 &7785480703375542971 PrefabInstance: m_ObjectHideFlags: 0 diff --git a/Assets/Scripts/Orbit.cs b/Assets/Scripts/Orbit.cs deleted file mode 100644 index 68d38c2b5..000000000 --- a/Assets/Scripts/Orbit.cs +++ /dev/null @@ -1,70 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using Unity.Mathematics; -using UnityEngine; -// TODO: USE THIS EVERYWHERE -using static Unity.Mathematics.math; - -public class Orbit : MonoBehaviour -{ - public Transform Target; - public float Period; - public bool ApplyOrbitRotation = false; - public float Phase; - public float Distance; - public bool CalculatePosition; - - //private float _period; - - // Use this for initialization - void Start () - { - if (Target == null) - { - enabled = false; - return; - } - - var diff = Target.position - transform.position; - - Distance = !CalculatePosition ? Distance : diff.magnitude; - - Phase = !CalculatePosition ? Phase : Mathf.Atan2(-diff.x, -diff.z); - - if (Mathf.Approximately(Period,0)) - { - Period = diff.sqrMagnitude / 100; - } - } - - // Update is called once per frame - void Update () - { - if (Target == null) - { - enabled = false; - Debug.Log("Orbit script updating without target. HOW DOES THIS HAPPEN?!"); - return; - } - - var time = Time.time;//(GameManager.Instance!=null ? GameManager.Instance.ServerTime : Time.time); - -// var p = _phase + time / (Period / (Mathf.PI * 2)); - - var pos = OrbitInstance.Evaluate(Phase + time / Period); - - transform.position = new Vector3(Target.position.x + Distance * pos.x, - transform.position.y, - Target.position.z + Distance * pos.y); - var rot = transform.localRotation.eulerAngles; - - if(ApplyOrbitRotation) - transform.rotation = Quaternion.Euler(rot.x,(rot.y*Mathf.Deg2Rad-Time.fixedDeltaTime * Period) * Mathf.Rad2Deg,rot.z); - } - - void Parent(Transform parent) - { - Target = parent; - } -} diff --git a/Assets/Scripts/Orbit.cs.meta b/Assets/Scripts/Orbit.cs.meta deleted file mode 100644 index 5a1439829..000000000 --- a/Assets/Scripts/Orbit.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 9f1a6147e441c0847b784d31a9f6b315 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/ServerShared/OrbitInstance.cs b/Assets/Scripts/ServerShared/OrbitInstance.cs deleted file mode 100644 index 7cb6ea486..000000000 --- a/Assets/Scripts/ServerShared/OrbitInstance.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using Unity.Mathematics; -using static Unity.Mathematics.math; - -public class OrbitInstance -{ - private OrbitData _data; - - public OrbitInstance(OrbitData data) - { - _data = data; - } - - public static float2 Evaluate(float phase) - { - phase *= (PI * 2); - return new float2(sin(phase), cos(phase)); - } -} diff --git a/Assets/Scripts/ServerShared/OrbitInstance.cs.meta b/Assets/Scripts/ServerShared/OrbitInstance.cs.meta deleted file mode 100644 index e5b9a619e..000000000 --- a/Assets/Scripts/ServerShared/OrbitInstance.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: fc9a1d6d35b2ac14eb8c1092432ae217 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/ServerShared/ZoneData.cs b/Assets/Scripts/ServerShared/ZoneData.cs index cb5133512..e86c97e2e 100644 --- a/Assets/Scripts/ServerShared/ZoneData.cs +++ b/Assets/Scripts/ServerShared/ZoneData.cs @@ -4,6 +4,7 @@ using System.Collections.Generic; using MessagePack; using Newtonsoft.Json; using Unity.Mathematics; +using static Unity.Mathematics.math; [RethinkTable("Galaxy")] [MessagePackObject] @@ -28,6 +29,12 @@ public class ZoneData : DatabaseEntry, INamedEntry [JsonProperty("orbits")] [Key(6)] public List Orbits = new List(); + [JsonProperty("radius")] [Key(7)] + public float Radius = 2000; + + [JsonProperty("visited")] [Key(8)] + public bool Visited; + [IgnoreMember] public string EntryName { get => Name; @@ -86,6 +93,9 @@ public class PlanetData : DatabaseEntry, INamedEntry [JsonProperty("zone")] [Key(4)] public Guid Zone; + [JsonProperty("radius")] [Key(5)] + public float GravityRadius; + [IgnoreMember] public string EntryName { get => Name; @@ -99,7 +109,7 @@ public class PlanetData : DatabaseEntry, INamedEntry public class OrbitData : DatabaseEntry { [JsonProperty("parent")] [Key(1)] - public Guid? Parent; + public Guid Parent; [JsonProperty("distance")] [Key(2)] public float Distance; @@ -112,4 +122,10 @@ public class OrbitData : DatabaseEntry [JsonProperty("zone")] [Key(5)] public Guid Zone; + + public static float2 Evaluate(float phase) + { + phase *= (PI * 2); + return new float2(sin(phase), cos(phase)); + } } \ No newline at end of file diff --git a/Assets/Scripts/ServerShared/ZoneGenerator.cs b/Assets/Scripts/ServerShared/ZoneGenerator.cs index f128b81fb..7866f0312 100644 --- a/Assets/Scripts/ServerShared/ZoneGenerator.cs +++ b/Assets/Scripts/ServerShared/ZoneGenerator.cs @@ -159,7 +159,7 @@ public class Planet var p0 = new float2(0, dist); // Position of second child - var p1 = OrbitInstance.Evaluate(1.0f / vertices) * dist; + var p1 = OrbitData.Evaluate(1.0f / vertices) * dist; // Maximum child distance is half the distance to the neighbor minus the neighbor's radius var p0ChildDist = distance(p0, p1) * proportion - Context.PlanetRadius(sharedMass * (1 - proportion)); @@ -217,10 +217,13 @@ public class Planet masses[i] = masses[i] / massTotal * Mass * massFraction; // Map child distances to range between minimum and maximum - var oldDistances = (float[]) distances.Clone(); - for (var i = 0; i < count; i++) - distances[i] = lerp(ChildDistanceMinimum, ChildDistanceMaximum, - (oldDistances[i] - oldDistances[0]) / (oldDistances[count - 1] - oldDistances[0])) + Context.PlanetRadius(masses[i]); + if (count > 1) + { + var oldDistances = (float[]) distances.Clone(); + for (var i = 0; i < count; i++) + distances[i] = lerp(ChildDistanceMinimum, ChildDistanceMaximum, + (oldDistances[i] - oldDistances[0]) / (oldDistances[count - 1] - oldDistances[0])) + Context.PlanetRadius(masses[i]); + } for (var i = 0; i < count; i++) { diff --git a/Assets/Scripts/StrategyGameManager.cs b/Assets/Scripts/StrategyGameManager.cs new file mode 100644 index 000000000..07682dc6a --- /dev/null +++ b/Assets/Scripts/StrategyGameManager.cs @@ -0,0 +1,243 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; +using Unity.Mathematics; +using static Unity.Mathematics.math; +using float2 = Unity.Mathematics.float2; + +public class StrategyGameManager : MonoBehaviour +{ + public Camera Camera; + public TabGroup PrimaryTabGroup; + public TabButton GalaxyTabButton; + public TabButton ZoneTabButton; + public Prototype GalaxyZonePrototype; + public Prototype GalaxyZoneLinkPrototype; + public MeshRenderer GalaxyBackground; + public float GalaxyScale; + public ZoneObject ZoneObjectPrefab; + public Transform ZoneRoot; + public Texture2D PlanetSprite; + public Texture2D GasGiantSprite; + public Texture2D OrbitalSprite; + public Texture2D SunSprite; + public Texture2D WormholeSprite; + public Color SelectedColor; + public Color UnselectedColor; + public float ZoneSizeScale = .01f; + public float ZoneMassScale = .01f; + public float ZoneMassPower = .5f; + public float ZoneOrbitSpeed = 10; + public MeshRenderer ZoneBackground; + + private DatabaseCache _cache; + private GameContext _context; + private GalaxyResponseMessage _galaxy; + private TabButton _currentTab; + private bool _galaxyPopulated; + private Guid _populatedZone; + private Guid _selectedZone; + private GalaxyZone _selectedGalaxyZone; + private ZoneResponseMessage _zoneResponse; + private Dictionary _galaxyResponseZones; + private Dictionary _zoneObjects = new Dictionary(); + private List _wormholes = new List(); + private Dictionary _orbitPositions = new Dictionary(); + private Vector3 _galaxyCameraPos = -Vector3.forward; + private float _galaxyOrthoSize = 50; + + void Start() + { + _cache = new DatabaseCache(); + + // Request galaxy description from the server + CultClient.Send(new GalaxyRequestMessage()); + + // Listen for the server's galaxy description + CultClient.AddMessageListener(galaxy => + { + _galaxy = galaxy; + _galaxyResponseZones = _galaxy.Zones.ToDictionary(z => z.ZoneID); + _cache.Add(_galaxy.GlobalData, true); + _context = new GameContext(_cache); + if (_currentTab == GalaxyTabButton && !_galaxyPopulated) PopulateGalaxy(); + }); + + // Listen for zone descriptions from the server + CultClient.AddMessageListener(zone => + { + _zoneResponse = zone; + + // Cache zone data and contents + _cache.Add(zone.Zone); + foreach (var entry in zone.Contents) _cache.Add(entry); + + if (_currentTab == ZoneTabButton && _populatedZone != zone.Zone.ID) PopulateZone(); + }); + + PrimaryTabGroup.OnTabChange += button => + { + _currentTab = button; + if (_currentTab == GalaxyTabButton) + { + if (!_galaxyPopulated) PopulateGalaxy(); + Camera.transform.position = _galaxyCameraPos; + Camera.orthographicSize = _galaxyOrthoSize; + } + + if (_currentTab == ZoneTabButton) + { + if (_populatedZone != _selectedZone && _zoneResponse?.Zone.ID == _selectedZone) + PopulateZone(); + Camera.transform.position = -Vector3.forward; + } + }; + } + + private void Update() + { + if (_currentTab == GalaxyTabButton) + { + _galaxyCameraPos = Camera.transform.position; + _galaxyOrthoSize = Camera.orthographicSize; + } + if (_currentTab == ZoneTabButton && _populatedZone == _selectedZone) + { + _orbitPositions.Clear(); + foreach (var planet in _zoneObjects) + { + var planetData = _cache.Get(planet.Key); + + planet.Value.transform.position = (Vector2) GetOrbitPosition(planetData.Orbit) * ZoneSizeScale; + } + } + } + + // Determine orbital position recursively, caching parent positions to avoid repeated calculations + private float2 GetOrbitPosition(Guid orbit) + { + // Root orbit is fixed at center + if(orbit==Guid.Empty) + return float2.zero; + + if (!_orbitPositions.ContainsKey(orbit)) + { + var orbitData = _cache.Get(orbit); + _orbitPositions[orbit] = GetOrbitPosition(orbitData.Parent) + (orbitData.Period < .01f ? float2.zero : + OrbitData.Evaluate(Time.time * ZoneOrbitSpeed / orbitData.Period + orbitData.Phase) * + orbitData.Distance); + } + + var position = _orbitPositions[orbit]; + if (float.IsNaN(position.x)) + { + Debug.Log("Orbit position is NaN, something went very wrong!"); + return float2.zero; + } + return _orbitPositions[orbit]; + } + + void PopulateGalaxy() + { + _galaxyPopulated = true; + + GalaxyBackground.transform.localScale = Vector3.one * GalaxyScale; + + var galaxyMat = GalaxyBackground.material; + galaxyMat.SetFloat("Arms", _galaxy.GlobalData.Arms); + galaxyMat.SetFloat("Twist", _galaxy.GlobalData.Twist); + galaxyMat.SetFloat("TwistPower", _galaxy.GlobalData.TwistPower); + galaxyMat.SetFloat("SpokeOffset", _galaxy.StarDensity.SpokeOffset); + galaxyMat.SetFloat("SpokeScale", _galaxy.StarDensity.SpokeScale); + galaxyMat.SetFloat("CoreBoost", _galaxy.StarDensity.CoreBoost); + galaxyMat.SetFloat("CoreBoostOffset", _galaxy.StarDensity.CoreBoostOffset); + galaxyMat.SetFloat("CoreBoostPower", _galaxy.StarDensity.CoreBoostPower); + galaxyMat.SetFloat("EdgeReduction", _galaxy.StarDensity.EdgeReduction); + galaxyMat.SetFloat("NoisePosition", _galaxy.StarDensity.NoisePosition); + galaxyMat.SetFloat("NoiseAmplitude", _galaxy.StarDensity.NoiseAmplitude); + galaxyMat.SetFloat("NoiseOffset", _galaxy.StarDensity.NoiseOffset); + galaxyMat.SetFloat("NoiseGain", _galaxy.StarDensity.NoiseGain); + galaxyMat.SetFloat("NoiseLacunarity", _galaxy.StarDensity.NoiseLacunarity); + galaxyMat.SetFloat("NoiseFrequency", _galaxy.StarDensity.NoiseFrequency); + + var zones = _galaxy.Zones.ToDictionary(z=>z.ZoneID); + var linkedZones = new List(); + foreach (var zone in _galaxy.Zones) + { + linkedZones.Add(zone.ZoneID); + var instance = GalaxyZonePrototype.Instantiate(); + instance.position = float3((Vector2) zone.Position - Vector2.one * .5f,0) * GalaxyScale; + var instanceZone = instance.GetComponent(); + instanceZone.Label.text = zone.Name; + instanceZone.Background.GetComponent().OnClick += (_, pointer) => + { + if (_selectedGalaxyZone != null) + _selectedGalaxyZone.Background.material.SetColor("_TintColor", UnselectedColor); + if(_selectedZone != zone.ZoneID) + CultClient.Send(new ZoneRequestMessage{ZoneID = zone.ZoneID}); + _selectedZone = zone.ZoneID; + _selectedGalaxyZone = instanceZone; + _selectedGalaxyZone.Background.material.SetColor("_TintColor", SelectedColor); + _selectedZone = zone.ZoneID; + + // If the user double clicks on a zone, switch to the zone tab + if(pointer.clickCount == 2) ZoneTabButton.OnPointerClick(pointer); + }; + foreach (var linkedZone in zone.Links.Where(l=>!linkedZones.Contains(l))) + { + var link = GalaxyZoneLinkPrototype.Instantiate(); + var diff = zones[linkedZone].Position - zone.Position; + link.position = instance.position + Vector3.forward*.1f; + link.rotation = Quaternion.Euler(0,0,atan2(diff.y, diff.x) * Mathf.Rad2Deg); + link.localScale = new Vector3(length(diff) * GalaxyScale, 1, 1); + } + } + } + + void PopulateZone() + { + // Delete all the existing zone contents + foreach (var zoneObject in _zoneObjects.Values) Destroy(zoneObject.gameObject);//zoneObject.GetComponent().ReturnToPool(); + _zoneObjects.Clear(); + foreach (var zoneObject in _wormholes) Destroy(zoneObject.gameObject); //zoneObject.GetComponent().ReturnToPool(); + _wormholes.Clear(); + + _populatedZone = _selectedZone; + + float zoneDepth = 0; + foreach (var entry in _zoneResponse.Contents) + { + if (entry is PlanetData planet) + { + var planetObject = Instantiate(ZoneObjectPrefab, ZoneRoot); + _zoneObjects[planet.ID] = planetObject; + planetObject.Label.text = planet.Name; + planetObject.GravityMesh.gameObject.SetActive(true); + planetObject.GravityMesh.transform.localScale = Vector3.one * (planet.GravityRadius * 2 * ZoneSizeScale); + var depth = pow(planet.Mass, ZoneMassPower) * ZoneMassScale; + if (depth > zoneDepth) + zoneDepth = depth; + planetObject.GravityMesh.material.SetFloat("_Depth", depth); + planetObject.Icon.material.SetTexture("_MainTex", + planet.Mass > _context.GlobalData.SunMass ? SunSprite : + planet.Mass > _context.GlobalData.GasGiantMass ? GasGiantSprite : + PlanetSprite); + } + } + ZoneBackground.material.SetFloat("_HeightRange", zoneDepth); + + foreach (var wormhole in _zoneResponse.Zone.Wormholes) + { + var otherZone = _galaxyResponseZones[wormhole]; + var wormholeObject = Instantiate(ZoneObjectPrefab); + _wormholes.Add(wormholeObject); + var direction = otherZone.Position - _zoneResponse.Zone.Position; + wormholeObject.transform.position = (Vector2) (normalize(direction) * _zoneResponse.Zone.Radius * .95f * ZoneSizeScale); + wormholeObject.GravityMesh.gameObject.SetActive(false); + wormholeObject.Icon.material.SetTexture("_MainTex", WormholeSprite); + wormholeObject.Label.text = otherZone.Name; + } + } +} diff --git a/Assets/StrategyGameManager.cs.meta b/Assets/Scripts/StrategyGameManager.cs.meta similarity index 100% rename from Assets/StrategyGameManager.cs.meta rename to Assets/Scripts/StrategyGameManager.cs.meta diff --git a/Assets/Scripts/UI.meta b/Assets/Scripts/UI.meta new file mode 100644 index 000000000..157bbadd6 --- /dev/null +++ b/Assets/Scripts/UI.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: af274c1630940f246869637f44bc484e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/BackgroundRenderer.cs b/Assets/Scripts/UI/BackgroundRenderer.cs similarity index 59% rename from Assets/Scripts/BackgroundRenderer.cs rename to Assets/Scripts/UI/BackgroundRenderer.cs index 5470401b7..28d918d76 100644 --- a/Assets/Scripts/BackgroundRenderer.cs +++ b/Assets/Scripts/UI/BackgroundRenderer.cs @@ -6,11 +6,13 @@ using UnityEngine; public class BackgroundRenderer : MonoBehaviour { public Transform Background; + public Transform Background2; // public float RotationSpeed1 = 1; // public float RotationSpeed2 = 1; private Camera _camera; private float _ratio; private Material _material; + private Material _material2; private float _depth; private void Start() @@ -18,14 +20,16 @@ public class BackgroundRenderer : MonoBehaviour _camera = GetComponent(); _depth = Background.position.z; _material = Background.GetComponent().material; + _material2 = Background2.GetComponent().material; } private void OnPreRender() { _material.SetVector("ParallaxDirection", transform.position); - _ratio = (float) Screen.height / Screen.width; - Background.position = new Vector3(transform.position.x, transform.position.y, _depth); + _material2.SetVector("ParallaxDirection", transform.position); + _ratio = (float) Screen.width / Screen.height; + Background2.position = Background.position = new Vector3(transform.position.x, transform.position.y, _depth); var size = _camera.orthographicSize; - Background.localScale = new Vector3(size * 4, size * 4 * _ratio, 1); + Background2.localScale = Background.localScale = new Vector3(size * 2 * _ratio, size * 2, 1); } } diff --git a/Assets/Scripts/BackgroundRenderer.cs.meta b/Assets/Scripts/UI/BackgroundRenderer.cs.meta similarity index 100% rename from Assets/Scripts/BackgroundRenderer.cs.meta rename to Assets/Scripts/UI/BackgroundRenderer.cs.meta diff --git a/Assets/Scripts/ClickCatcher.cs b/Assets/Scripts/UI/ClickCatcher.cs similarity index 57% rename from Assets/Scripts/ClickCatcher.cs rename to Assets/Scripts/UI/ClickCatcher.cs index 77f6aaccd..0de024d59 100644 --- a/Assets/Scripts/ClickCatcher.cs +++ b/Assets/Scripts/UI/ClickCatcher.cs @@ -7,14 +7,12 @@ using UnityEngine.EventSystems; public class ClickCatcher : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler, IPointerClickHandler { - public bool EnableMouse => PointerIsInside && !_catching; + //public bool EnableMouse => PointerIsInside && !_catching; public bool PointerIsInside { get; private set; } - public PointerEnterEvent OnEnter = new PointerEnterEvent(); - public PointerExitEvent OnExit = new PointerExitEvent(); - - private bool _catching; - private UnityEvent _catchClick; + public event Action OnEnter; + public event Action OnExit; + public event Action OnClick; public static ClickCatcher Background { @@ -27,43 +25,23 @@ public class ClickCatcher : MonoBehaviour, IPointerEnterHandler, IPointerExitHan } private static ClickCatcher _background; - - public UnityEvent Catch() - { - _catching = true; - _catchClick = new UnityEvent(); - return _catchClick; - } - - public void Release() - { - _catching = false; - } public void OnPointerEnter(PointerEventData eventData) { //Debug.Log("Pointer Entered"); - OnEnter.Invoke(); + OnEnter?.Invoke(eventData); PointerIsInside = true; } public void OnPointerExit(PointerEventData eventData) { //Debug.Log("Pointer Exited"); - OnExit.Invoke(); + OnExit?.Invoke(eventData); PointerIsInside = false; } public void OnPointerClick(PointerEventData eventData) { - if (!_catching) return; - - _catchClick.Invoke(); - _catching = false; + OnClick?.Invoke(eventData); } - - [Serializable] - public class PointerEnterEvent : UnityEvent { } - [Serializable] - public class PointerExitEvent : UnityEvent { } } diff --git a/Assets/Scripts/ClickCatcher.cs.meta b/Assets/Scripts/UI/ClickCatcher.cs.meta similarity index 100% rename from Assets/Scripts/ClickCatcher.cs.meta rename to Assets/Scripts/UI/ClickCatcher.cs.meta diff --git a/Assets/Scripts/UI/ClickRaycaster.cs b/Assets/Scripts/UI/ClickRaycaster.cs new file mode 100644 index 000000000..6a6195974 --- /dev/null +++ b/Assets/Scripts/UI/ClickRaycaster.cs @@ -0,0 +1,25 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class ClickRaycaster : MonoBehaviour +{ + public Camera RayCamera; + private ClickCatcher _clickCatcher; + + void Start() + { + _clickCatcher = GetComponent(); + _clickCatcher.OnClick += pointer => + { + RaycastHit hit; + Physics.Raycast(RayCamera.ScreenPointToRay(pointer.position), out hit); + if (hit.collider != null) + { + var clickable = hit.collider.GetComponent(); + if (clickable != null) + clickable.Click(pointer); + } + }; + } +} diff --git a/Assets/ClickRaycaster.cs.meta b/Assets/Scripts/UI/ClickRaycaster.cs.meta similarity index 100% rename from Assets/ClickRaycaster.cs.meta rename to Assets/Scripts/UI/ClickRaycaster.cs.meta diff --git a/Assets/Scripts/UI/ClickableCollider.cs b/Assets/Scripts/UI/ClickableCollider.cs new file mode 100644 index 000000000..164b06463 --- /dev/null +++ b/Assets/Scripts/UI/ClickableCollider.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.EventSystems; + +public class ClickableCollider : MonoBehaviour +{ + public event Action OnClick; + + public void Click(PointerEventData eventData) => OnClick?.Invoke(this, eventData); +} diff --git a/Assets/ClickableCollider.cs.meta b/Assets/Scripts/UI/ClickableCollider.cs.meta similarity index 100% rename from Assets/ClickableCollider.cs.meta rename to Assets/Scripts/UI/ClickableCollider.cs.meta diff --git a/Assets/DragHandler.cs b/Assets/Scripts/UI/DragHandler.cs similarity index 59% rename from Assets/DragHandler.cs rename to Assets/Scripts/UI/DragHandler.cs index ea86ac68e..fccc9ad1f 100644 --- a/Assets/DragHandler.cs +++ b/Assets/Scripts/UI/DragHandler.cs @@ -1,6 +1,7 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; +using static Unity.Mathematics.math; public class DragHandler : MonoBehaviour { @@ -18,6 +19,11 @@ public class DragHandler : MonoBehaviour Camera.transform.position -= (Vector3)((Vector2) newPosition - _previousPosition); } - Camera.orthographicSize *= 1 + Input.mouseScrollDelta.y * Scaling; + if (abs(Input.mouseScrollDelta.y) > .01f) + { + var previousPosition = Camera.ScreenToWorldPoint(Input.mousePosition); + Camera.orthographicSize *= 1 + Input.mouseScrollDelta.y * Scaling; + Camera.transform.position -= Camera.ScreenToWorldPoint(Input.mousePosition) - previousPosition; + } } } diff --git a/Assets/DragHandler.cs.meta b/Assets/Scripts/UI/DragHandler.cs.meta similarity index 100% rename from Assets/DragHandler.cs.meta rename to Assets/Scripts/UI/DragHandler.cs.meta diff --git a/Assets/Scripts/FlatButton.cs b/Assets/Scripts/UI/FlatButton.cs similarity index 100% rename from Assets/Scripts/FlatButton.cs rename to Assets/Scripts/UI/FlatButton.cs diff --git a/Assets/Scripts/FlatButton.cs.meta b/Assets/Scripts/UI/FlatButton.cs.meta similarity index 100% rename from Assets/Scripts/FlatButton.cs.meta rename to Assets/Scripts/UI/FlatButton.cs.meta diff --git a/Assets/GalaxyZone.cs b/Assets/Scripts/UI/GalaxyZone.cs similarity index 100% rename from Assets/GalaxyZone.cs rename to Assets/Scripts/UI/GalaxyZone.cs diff --git a/Assets/GalaxyZone.cs.meta b/Assets/Scripts/UI/GalaxyZone.cs.meta similarity index 100% rename from Assets/GalaxyZone.cs.meta rename to Assets/Scripts/UI/GalaxyZone.cs.meta diff --git a/Assets/Scripts/Icons.cs b/Assets/Scripts/UI/Icons.cs similarity index 100% rename from Assets/Scripts/Icons.cs rename to Assets/Scripts/UI/Icons.cs diff --git a/Assets/Scripts/Icons.cs.meta b/Assets/Scripts/UI/Icons.cs.meta similarity index 100% rename from Assets/Scripts/Icons.cs.meta rename to Assets/Scripts/UI/Icons.cs.meta diff --git a/Assets/LoginScreen.cs b/Assets/Scripts/UI/LoginScreen.cs similarity index 73% rename from Assets/LoginScreen.cs rename to Assets/Scripts/UI/LoginScreen.cs index ed9b5914b..48ced5dc6 100644 --- a/Assets/LoginScreen.cs +++ b/Assets/Scripts/UI/LoginScreen.cs @@ -1,4 +1,5 @@ -using System.Collections; +using System; +using System.Collections; using System.Collections.Generic; using TMPro; using UnityEngine; @@ -60,4 +61,25 @@ public class LoginScreen : MonoBehaviour } }; } + + private void Update() + { + if (Input.GetKeyDown(KeyCode.Tab) || Input.GetKeyDown(KeyCode.Return)) + { + if (Server.isFocused) + { + if(_registering) + Email.Select(); + else EmailUsername.Select(); + } + else if (EmailUsername.isFocused) + Password.Select(); + else if (Email.isFocused) + Username.Select(); + else if (Username.isFocused) + Password.Select(); + else if (Password.isFocused && Input.GetKeyDown(KeyCode.Return)) + (_registering ? RegisterButton : LoginButton).OnPointerClick(null); + } + } } diff --git a/Assets/LoginScreen.cs.meta b/Assets/Scripts/UI/LoginScreen.cs.meta similarity index 100% rename from Assets/LoginScreen.cs.meta rename to Assets/Scripts/UI/LoginScreen.cs.meta diff --git a/Assets/Scripts/PropertiesPanel.cs b/Assets/Scripts/UI/PropertiesPanel.cs similarity index 100% rename from Assets/Scripts/PropertiesPanel.cs rename to Assets/Scripts/UI/PropertiesPanel.cs diff --git a/Assets/Scripts/PropertiesPanel.cs.meta b/Assets/Scripts/UI/PropertiesPanel.cs.meta similarity index 100% rename from Assets/Scripts/PropertiesPanel.cs.meta rename to Assets/Scripts/UI/PropertiesPanel.cs.meta diff --git a/Assets/Scripts/TabActivator.cs b/Assets/Scripts/UI/TabActivator.cs similarity index 100% rename from Assets/Scripts/TabActivator.cs rename to Assets/Scripts/UI/TabActivator.cs diff --git a/Assets/Scripts/TabActivator.cs.meta b/Assets/Scripts/UI/TabActivator.cs.meta similarity index 100% rename from Assets/Scripts/TabActivator.cs.meta rename to Assets/Scripts/UI/TabActivator.cs.meta diff --git a/Assets/Scripts/TabButton.cs b/Assets/Scripts/UI/TabButton.cs similarity index 100% rename from Assets/Scripts/TabButton.cs rename to Assets/Scripts/UI/TabButton.cs diff --git a/Assets/Scripts/TabButton.cs.meta b/Assets/Scripts/UI/TabButton.cs.meta similarity index 100% rename from Assets/Scripts/TabButton.cs.meta rename to Assets/Scripts/UI/TabButton.cs.meta diff --git a/Assets/Scripts/TabGroup.cs b/Assets/Scripts/UI/TabGroup.cs similarity index 100% rename from Assets/Scripts/TabGroup.cs rename to Assets/Scripts/UI/TabGroup.cs diff --git a/Assets/Scripts/TabGroup.cs.meta b/Assets/Scripts/UI/TabGroup.cs.meta similarity index 100% rename from Assets/Scripts/TabGroup.cs.meta rename to Assets/Scripts/UI/TabGroup.cs.meta diff --git a/Assets/ZoneObject.cs b/Assets/Scripts/UI/ZoneObject.cs similarity index 100% rename from Assets/ZoneObject.cs rename to Assets/Scripts/UI/ZoneObject.cs diff --git a/Assets/ZoneObject.cs.meta b/Assets/Scripts/UI/ZoneObject.cs.meta similarity index 100% rename from Assets/ZoneObject.cs.meta rename to Assets/Scripts/UI/ZoneObject.cs.meta diff --git a/Assets/Scripts/ZoneRenderer.cs b/Assets/Scripts/UI/ZoneRenderer.cs similarity index 83% rename from Assets/Scripts/ZoneRenderer.cs rename to Assets/Scripts/UI/ZoneRenderer.cs index 7ecc8aa58..67072dada 100644 --- a/Assets/Scripts/ZoneRenderer.cs +++ b/Assets/Scripts/UI/ZoneRenderer.cs @@ -6,7 +6,6 @@ using UnityEngine; public class ZoneRenderer : MonoBehaviour { public Camera FollowCamera; - public Material BackgroundMaterial; public RenderTexture GravityTexture; public MeshRenderer GravityRenderer; @@ -26,7 +25,7 @@ public class ZoneRenderer : MonoBehaviour { _resX = Screen.width; _resY = Screen.height; - _ratio = (float) _resY / _resX; + _ratio = (float) _resX / _resY; if (GravityTexture != null) { GravityTexture?.Release(); @@ -34,11 +33,12 @@ public class ZoneRenderer : MonoBehaviour GravityTexture = new RenderTexture(_resX, _resY, 0, RenderTextureFormat.RFloat); } - BackgroundMaterial.mainTexture = GravityTexture; + GravityRenderer.material.mainTexture = GravityTexture; + var size = _camera.orthographicSize = FollowCamera.orthographicSize; + GravityRenderer.transform.position = new Vector3(transform.position.x, transform.position.y, 0); - var size = _camera.orthographicSize; - GravityRenderer.transform.localScale = new Vector3(size * 4, size * 4 * _ratio, 1); + GravityRenderer.transform.localScale = new Vector3(size * 2 * _ratio, size * 2, 1); _camera.targetTexture = GravityTexture; } diff --git a/Assets/Scripts/ZoneRenderer.cs.meta b/Assets/Scripts/UI/ZoneRenderer.cs.meta similarity index 100% rename from Assets/Scripts/ZoneRenderer.cs.meta rename to Assets/Scripts/UI/ZoneRenderer.cs.meta diff --git a/Assets/Shaders/Clouds.shader b/Assets/Shaders/Clouds.shader new file mode 100644 index 000000000..24685dfbc --- /dev/null +++ b/Assets/Shaders/Clouds.shader @@ -0,0 +1,92 @@ +Shader "Unlit/Clouds" +{ + Properties + { + _Color ("Color", Color) = (1,1,1,1) + NoisePosition("NoisePosition", Float) = 0.5 + NoiseAmplitude("NoiseAmplitude", Float) = 0.5 + NoiseOffset("NoiseOffset", Float) = 0.5 + NoiseGain("NoiseGain", Float) = 1 + NoiseLacunarity("NoiseLacunarity", Float) = 2 + NoiseFrequency("NoiseFrequency", Float) = 1 + ParallaxLacunarity("ParallaxLacunarity", Float) = 2 + ParallaxDirection("ParallaxDirection", Vector) = (0,0,0,0) + Parallax("Parallax", Float) = 1 + Speed("Speed", Float) = 1 + FadeDistance("FadeDistance", Float) = 100 + } + SubShader + { + Tags { "RenderType"="Transparent" } + Cull Off Lighting Off ZWrite Off + Blend One One + LOD 100 + + Pass + { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + + #include "UnityCG.cginc" + #include "Assets/Scripts/NIH/GPU Noise/SimplexNoise3D.cginc" + + struct appdata + { + float4 vertex : POSITION; + float2 uv : TEXCOORD0; + }; + + struct v2f + { + float2 uv : TEXCOORD0; + float4 vertex : SV_POSITION; + }; + + half4 _Color; + float NoisePosition; + float NoiseAmplitude; + float NoiseOffset; + float NoiseGain; + float NoiseLacunarity; + float NoiseFrequency; + float ParallaxLacunarity; + float3 ParallaxDirection; + float Parallax; + float Speed; + float FadeDistance; + + // fractal sum, range -1.0 - 1.0 + float fbm(float3 p) + { + float freq = NoiseFrequency, amp = .5; + float parallax = Parallax; + float sum = 0; + for(int i = 0; i < 6; i++) + { + sum += snoise(p * freq + Parallax * ParallaxDirection) * amp; + parallax /= ParallaxLacunarity; + freq *= NoiseLacunarity; + amp *= NoiseGain; + } + return (sum + NoiseOffset)*NoiseAmplitude; + } + + v2f vert (appdata v) + { + v2f o; + o.vertex = UnityObjectToClipPos(v.vertex); + o.uv = mul (unity_ObjectToWorld, v.vertex).xy; + return o; + } + + fixed4 frag (v2f i) : SV_Target + { + float3 p = float3(i.uv,_Time.x*Speed); + float noise = saturate((1-abs(snoise(p*NoiseFrequency/2))) * fbm(p)); + return noise * _Color * (1-length(i.uv)/FadeDistance); + } + ENDCG + } + } +} diff --git a/Assets/Shaders/Clouds.shader.meta b/Assets/Shaders/Clouds.shader.meta new file mode 100644 index 000000000..e910cfb51 --- /dev/null +++ b/Assets/Shaders/Clouds.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 118cb8aabcab89b4fbd939f5c9b71d91 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Shaders/Isolines.shader b/Assets/Shaders/Isolines.shader index 165186360..9c04c532b 100644 --- a/Assets/Shaders/Isolines.shader +++ b/Assets/Shaders/Isolines.shader @@ -84,7 +84,7 @@ float planmag = length(plan); - float dangerblend = smoothstep(0,_DangerSteepness * 600, planmag * _ScreenParams.y); + float dangerblend = smoothstep(0,_DangerSteepness * 600, planmag * _ScreenParams.y / unity_OrthoParams.y); // Loop over isolines, computing a pseudo distance field for a number of height values float spacing = _HeightRange / 20; diff --git a/Assets/StrategyGameManager.cs b/Assets/StrategyGameManager.cs deleted file mode 100644 index 40263096c..000000000 --- a/Assets/StrategyGameManager.cs +++ /dev/null @@ -1,109 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Linq; -using UnityEngine; -using Unity.Mathematics; -using static Unity.Mathematics.math; - -public class StrategyGameManager : MonoBehaviour -{ - public TabGroup PrimaryTabGroup; - public TabButton GalaxyTabButton; - public TabButton ZoneTabButton; - public Prototype GalaxyZonePrototype; - public Prototype GalaxyZoneLinkPrototype; - public MeshRenderer GalaxyBackground; - public float GalaxyScale; - public Prototype ZoneObjectPrototype; - public Texture2D PlanetSprite; - public Texture2D GasGiantSprite; - public Texture2D OrbitalSprite; - public Texture2D SunSprite; - public Texture2D WormholeSprite; - public Color SelectedColor; - public Color UnselectedColor; - - private DatabaseCache _cache; - private GameContext _context; - private GalaxyResponseMessage _galaxy; - private TabButton _currentTab; - private bool _galaxyPopulated; - private Guid _selectedZone; - private GalaxyZone _selectedGalaxyZone; - private ZoneResponseMessage _zone; - private Dictionary _zoneObjects = new Dictionary(); - - void Start() - { - PrimaryTabGroup.OnTabChange += button => - { - _currentTab = button; - if (button == GalaxyTabButton && !_galaxyPopulated) - { - PopulateGalaxy(); - } - }; - CultClient.AddMessageListener(galaxy => - { - _galaxy = galaxy; - if (_currentTab == GalaxyTabButton && !_galaxyPopulated) - { - _context = new GameContext(); - PopulateGalaxy(); - } - }); - CultClient.Send(new GalaxyRequestMessage()); - } - - void PopulateGalaxy() - { - _galaxyPopulated = true; - - GalaxyBackground.transform.localScale = Vector3.one * GalaxyScale; - - var galaxyMat = GalaxyBackground.material; - galaxyMat.SetFloat("Arms", _galaxy.GlobalData.Arms); - galaxyMat.SetFloat("Twist", _galaxy.GlobalData.Twist); - galaxyMat.SetFloat("TwistPower", _galaxy.GlobalData.TwistPower); - galaxyMat.SetFloat("SpokeOffset", _galaxy.StarDensity.SpokeOffset); - galaxyMat.SetFloat("SpokeScale", _galaxy.StarDensity.SpokeScale); - galaxyMat.SetFloat("CoreBoost", _galaxy.StarDensity.CoreBoost); - galaxyMat.SetFloat("CoreBoostOffset", _galaxy.StarDensity.CoreBoostOffset); - galaxyMat.SetFloat("CoreBoostPower", _galaxy.StarDensity.CoreBoostPower); - galaxyMat.SetFloat("EdgeReduction", _galaxy.StarDensity.EdgeReduction); - galaxyMat.SetFloat("NoisePosition", _galaxy.StarDensity.NoisePosition); - galaxyMat.SetFloat("NoiseAmplitude", _galaxy.StarDensity.NoiseAmplitude); - galaxyMat.SetFloat("NoiseOffset", _galaxy.StarDensity.NoiseOffset); - galaxyMat.SetFloat("NoiseGain", _galaxy.StarDensity.NoiseGain); - galaxyMat.SetFloat("NoiseLacunarity", _galaxy.StarDensity.NoiseLacunarity); - galaxyMat.SetFloat("NoiseFrequency", _galaxy.StarDensity.NoiseFrequency); - - var zones = _galaxy.Zones.ToDictionary(z=>z.ZoneID); - var linkedZones = new List(); - foreach (var zone in _galaxy.Zones) - { - linkedZones.Add(zone.ZoneID); - var instance = GalaxyZonePrototype.Instantiate(); - instance.position = float3((Vector2) zone.Position - Vector2.one * .5f,0) * GalaxyScale; - var instanceZone = instance.GetComponent(); - instanceZone.Label.text = zone.Name; - instance.GetComponent().OnClick += _ => - { - if (_selectedGalaxyZone != null) - _selectedGalaxyZone.Background.material.SetColor("_TintColor", UnselectedColor); - _selectedGalaxyZone = instanceZone; - _selectedGalaxyZone.Background.material.SetColor("_TintColor", SelectedColor); - _selectedZone = zone.ZoneID; - }; - foreach (var linkedZone in zone.Links.Where(l=>!linkedZones.Contains(l))) - { - var link = GalaxyZoneLinkPrototype.Instantiate(); - var diff = zones[linkedZone].Position - zone.Position; - link.position = instance.position + Vector3.forward*.1f; - link.rotation = Quaternion.Euler(0,0,atan2(diff.y, diff.x) * Mathf.Rad2Deg); - link.localScale = new Vector3(length(diff) * GalaxyScale, 1, 1); - } - } - } -} diff --git a/Economy.Server/Program.cs b/Economy.Server/Program.cs index 3b8934f26..001ce5e35 100644 --- a/Economy.Server/Program.cs +++ b/Economy.Server/Program.cs @@ -77,8 +77,22 @@ namespace ChatApp.Server cache.OnDataInsertLocal += async entry => { var table = entry.GetType().GetCustomAttribute()?.TableName ?? "Other"; - var result = await R.Db("Aetheria").Table(table).Insert(entry).RunAsync(connection); - _logger.Log(LogLevel.Information, $"Inserted entry to RethinkDB: {entry.ID} result: {result}"); + var inserted = false; + for (int i = 0; i < 5 && !inserted; i++) + { + try + { + var result = await R.Db("Aetheria").Table(table).Insert(entry).RunAsync(connection); + _logger.Log(LogLevel.Information, $"Inserted entry to RethinkDB: {entry.ID} result: {result}"); + inserted = true; + } + catch (Exception e) + { + _logger.LogError(e,e.Message); + } + } + if(!inserted) + _logger.LogError("Failed to insert after 5 attempts!"); }; cache.OnDataDeleteLocal += async entry => @@ -126,9 +140,9 @@ namespace ChatApp.Server var zone = cache.Get(zoneRequest.ZoneID); // Zone has not been populated, generate the contents now! - if (!zone.Planets.Any()) + if (!zone.Visited) { - var planets = ZoneGenerator.GenerateEntities(context, zone, 100000, 2000); + var planets = ZoneGenerator.GenerateEntities(context, zone, 100000, zone.Radius); // Create collections to map between zone generator output and database entries var orbitMap = new Dictionary(); @@ -154,7 +168,7 @@ namespace ChatApp.Server foreach (var data in orbitData) data.Parent = orbitInverseMap[data].Parent != null ? orbitMap[orbitInverseMap[data].Parent].ID - : (Guid?) null; + : Guid.Empty; foreach (var data in orbitData) cache.Add(data); @@ -165,7 +179,8 @@ namespace ChatApp.Server Mass = planet.Mass, ID = Guid.NewGuid(), Orbit = orbitMap[planet].ID, - Zone = zone.ID + Zone = zone.ID, + GravityRadius = planet.ChildDistanceMaximum * 1.5f }; planetDatum.Name = planetDatum.ID.ToString().Substring(0, 8); return planetDatum; @@ -175,6 +190,7 @@ namespace ChatApp.Server zone.Planets = planetData.Select(pd => pd.ID).ToList(); zone.Orbits = orbitData.Select(od => od.ID).ToList(); + zone.Visited = true; cache.Add(zone); } zoneRequest.Peer.Send( diff --git a/Economy.Server/Server.cs b/Economy.Server/Server.cs index 0d7b2f9c6..e157defa9 100644 --- a/Economy.Server/Server.cs +++ b/Economy.Server/Server.cs @@ -202,14 +202,14 @@ using Microsoft.Extensions.Logging; _database.Add(SessionData(message.Peer)); }); - Observable.Timer(DateTimeOffset.Now, TimeSpan.FromSeconds(30)).Subscribe(_ => - { - foreach (var s in _sessions.ToArray()) - { - if (DateTime.Now.Subtract(s.Value.LastUpdate).TotalSeconds > s.Value.DurationSeconds) - _sessions.Remove(s.Key); - } - }); + // Observable.Timer(DateTimeOffset.Now, TimeSpan.FromSeconds(30)).Subscribe(_ => + // { + // foreach (var s in _sessions.ToArray()) + // { + // if (DateTime.Now.Subtract(s.Value.LastUpdate).TotalSeconds > s.Value.DurationSeconds) + // _sessions.Remove(s.Key); + // } + // }); Logger.LogInformation("LiteNetLib is now open to new connections. Please be gentle."); } diff --git a/Economy.Server/bin/Debug/netcoreapp3.1/Economy.Server.dll b/Economy.Server/bin/Debug/netcoreapp3.1/Economy.Server.dll index 0a856173d..101733837 100644 --- a/Economy.Server/bin/Debug/netcoreapp3.1/Economy.Server.dll +++ b/Economy.Server/bin/Debug/netcoreapp3.1/Economy.Server.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fcf17da4a3e82ec31ea8ea10b3272f72cfa92d835c898ca86dbc687e281ba64c -size 30720 +oid sha256:36b135848d9adc1b16c5558ddde765953a2a5855c003529f9a9300739b4563ce +size 30208 diff --git a/Economy.Server/bin/Debug/netcoreapp3.1/Economy.Shared.dll b/Economy.Server/bin/Debug/netcoreapp3.1/Economy.Shared.dll index c62afca7c..7d245bf64 100644 --- a/Economy.Server/bin/Debug/netcoreapp3.1/Economy.Shared.dll +++ b/Economy.Server/bin/Debug/netcoreapp3.1/Economy.Shared.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b30e9151b2ecaa703d07d170be115206007f2d2f865b0d839b5f733be300f032 +oid sha256:c2c12be4c0222ec2371a7772c208056fd4543f940240fc85d0b4ae38c2a73530 size 1391104 diff --git a/Economy.Server/obj/Debug/netcoreapp3.1/Economy.Server.csprojAssemblyReference.cache b/Economy.Server/obj/Debug/netcoreapp3.1/Economy.Server.csprojAssemblyReference.cache index a91fd901c9921ee6a9f5c401b17681063df13fff..9cdb8e63f7c32bbf437c1931f037c83dc692a83a 100644 GIT binary patch literal 118236 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

3IA(DYcDyq>6h2# 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 Nl7NFwhjv11|3Al%gogkC literal 104800 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 diff --git a/Economy.Server/obj/Debug/netcoreapp3.1/Economy.Server.dll b/Economy.Server/obj/Debug/netcoreapp3.1/Economy.Server.dll index 0a856173d..101733837 100644 --- a/Economy.Server/obj/Debug/netcoreapp3.1/Economy.Server.dll +++ b/Economy.Server/obj/Debug/netcoreapp3.1/Economy.Server.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fcf17da4a3e82ec31ea8ea10b3272f72cfa92d835c898ca86dbc687e281ba64c -size 30720 +oid sha256:36b135848d9adc1b16c5558ddde765953a2a5855c003529f9a9300739b4563ce +size 30208 diff --git a/Economy.Shared.Unity.csproj b/Economy.Shared.Unity.csproj index d05b613e4..6976fa0d6 100644 --- a/Economy.Shared.Unity.csproj +++ b/Economy.Shared.Unity.csproj @@ -435,7 +435,6 @@ - diff --git a/Economy.Shared/bin/Debug/netstandard2.0/Economy.Shared.dll b/Economy.Shared/bin/Debug/netstandard2.0/Economy.Shared.dll index c62afca7c..7d245bf64 100644 --- a/Economy.Shared/bin/Debug/netstandard2.0/Economy.Shared.dll +++ b/Economy.Shared/bin/Debug/netstandard2.0/Economy.Shared.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b30e9151b2ecaa703d07d170be115206007f2d2f865b0d839b5f733be300f032 +oid sha256:c2c12be4c0222ec2371a7772c208056fd4543f940240fc85d0b4ae38c2a73530 size 1391104 diff --git a/Economy.Shared/obj/Debug/netstandard2.0/Economy.Shared.dll b/Economy.Shared/obj/Debug/netstandard2.0/Economy.Shared.dll index c62afca7c..7d245bf64 100644 --- a/Economy.Shared/obj/Debug/netstandard2.0/Economy.Shared.dll +++ b/Economy.Shared/obj/Debug/netstandard2.0/Economy.Shared.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b30e9151b2ecaa703d07d170be115206007f2d2f865b0d839b5f733be300f032 +oid sha256:c2c12be4c0222ec2371a7772c208056fd4543f940240fc85d0b4ae38c2a73530 size 1391104 diff --git a/ProjectSettings/TagManager.asset b/ProjectSettings/TagManager.asset index 1560c8c1d..98d28318a 100644 --- a/ProjectSettings/TagManager.asset +++ b/ProjectSettings/TagManager.asset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c042bd4343f71e8f3c70ae64022b87188fb5c1eb78ef28dfa902163e1bd66bc9 -size 385 +oid sha256:4e77e7d52a56235bbda4953a1b302acd63b853fa1fc2cdea69647c962fdc154d +size 399