From 110ff883b87cbd10df972039f3dac8dd75bbbaea Mon Sep 17 00:00:00 2001 From: hyperion51 Date: Mon, 25 May 2020 03:05:30 +0100 Subject: [PATCH] Entity Spawning & Rendering Entity rendering now fully supports dynamic entities from game context Entity children now displayed underneath icon GameContext can spawn entities by loadout Selected corporation's initial fleet is spawned in parent corp's home sector Properties panel API is now unified with context menu API Properties panel labels now update dynamically --- .../.idea/contentModel.xml | 1 + Assembly-CSharp.csproj | 1 + Assets/Prefabs/Child.prefab | 107 +++++ Assets/Prefabs/Child.prefab.meta | 7 + Assets/Prefabs/Entity.prefab | 359 ++++++++++++++++ Assets/Prefabs/Entity.prefab.meta | 7 + Assets/Scenes/Main.unity | 11 +- Assets/Scripts/Editor/DatabaseInspector.cs | 2 +- Assets/Scripts/Galaxy.cs | 2 +- .../ServerShared/Behaviors/FactoryBehavior.cs | 4 - .../Behaviors/TowingController.cs | 15 +- Assets/Scripts/ServerShared/DatabaseItems.cs | 3 + Assets/Scripts/ServerShared/Entity.cs | 13 +- Assets/Scripts/ServerShared/GameContext.cs | 190 +++++++- Assets/Scripts/ServerShared/GlobalData.cs | 6 + Assets/Scripts/ServerShared/ZoneGenerator.cs | 4 +- Assets/Scripts/StrategyGameManager.cs | 405 ++++++++++++------ Assets/Scripts/TechTreeMsagl.cs | 8 +- Assets/Scripts/UI/PropertyLabel.cs | 9 +- Assets/Scripts/UI/ReadOnlyPropertiesPanel.cs | 4 +- Assets/Scripts/UI/ZoneGravityObject.cs | 9 + Assets/Scripts/UI/ZoneGravityObject.cs.meta | 11 + Assets/Scripts/UI/ZoneObject.cs | 5 +- Assets/Scripts/UI/ZoneObject.cs.meta | 2 +- Assets/Scripts/UI/ZoneShip.cs | 5 +- 25 files changed, 1022 insertions(+), 168 deletions(-) create mode 100644 Assets/Prefabs/Child.prefab create mode 100644 Assets/Prefabs/Child.prefab.meta create mode 100644 Assets/Prefabs/Entity.prefab create mode 100644 Assets/Prefabs/Entity.prefab.meta create mode 100644 Assets/Scripts/UI/ZoneGravityObject.cs create mode 100644 Assets/Scripts/UI/ZoneGravityObject.cs.meta diff --git a/.idea/.idea.Aetheria-Economy/.idea/contentModel.xml b/.idea/.idea.Aetheria-Economy/.idea/contentModel.xml index 39176016e..c98b5121b 100644 --- a/.idea/.idea.Aetheria-Economy/.idea/contentModel.xml +++ b/.idea/.idea.Aetheria-Economy/.idea/contentModel.xml @@ -1769,6 +1769,7 @@ + diff --git a/Assembly-CSharp.csproj b/Assembly-CSharp.csproj index c0ac61422..aaf570c39 100644 --- a/Assembly-CSharp.csproj +++ b/Assembly-CSharp.csproj @@ -890,6 +890,7 @@ + diff --git a/Assets/Prefabs/Child.prefab b/Assets/Prefabs/Child.prefab new file mode 100644 index 000000000..0369f7863 --- /dev/null +++ b/Assets/Prefabs/Child.prefab @@ -0,0 +1,107 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &7411673047664575939 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8582307304163871840} + - component: {fileID: 1433927532033689244} + - component: {fileID: 1757477368280699322} + - component: {fileID: 8954320188269079158} + - component: {fileID: 7783581834528059211} + m_Layer: 0 + m_Name: Child + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8582307304163871840 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7411673047664575939} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: -0.6599999, z: 0} + m_LocalScale: {x: 0.25000015, y: 0.25000015, z: 0} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &1433927532033689244 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7411673047664575939} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1757477368280699322 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7411673047664575939} + 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: 658219dea0cf83049b6ab46c2f3436ed, 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 &8954320188269079158 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7411673047664575939} + 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 &7783581834528059211 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7411673047664575939} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 52538a3309c36fc4583c964a1c0b705f, type: 3} + m_Name: + m_EditorClassIdentifier: diff --git a/Assets/Prefabs/Child.prefab.meta b/Assets/Prefabs/Child.prefab.meta new file mode 100644 index 000000000..5a0224bc7 --- /dev/null +++ b/Assets/Prefabs/Child.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: dfe057045c1f88945ae9256f34d7c8e6 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/Entity.prefab b/Assets/Prefabs/Entity.prefab new file mode 100644 index 000000000..222b543e9 --- /dev/null +++ b/Assets/Prefabs/Entity.prefab @@ -0,0 +1,359 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &7667578565016065614 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7667578565016065613} + - component: {fileID: 7667578565016065611} + - component: {fileID: 7667578565016065612} + - component: {fileID: 7667578565016065609} + - component: {fileID: 7667578565016065610} + m_Layer: 0 + m_Name: Icon + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7667578565016065613 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7667578565016065614} + 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: 7667578565413050542} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &7667578565016065611 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7667578565016065614} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &7667578565016065612 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7667578565016065614} + 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 &7667578565016065609 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7667578565016065614} + 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 &7667578565016065610 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7667578565016065614} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 52538a3309c36fc4583c964a1c0b705f, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &7667578565413050543 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7667578565413050542} + - component: {fileID: 5800314421439145179} + m_Layer: 0 + m_Name: Entity + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7667578565413050542 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7667578565413050543} + 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: 7667578565016065613} + - {fileID: 7667578566386612334} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &5800314421439145179 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7667578565413050543} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d8b39205d8cd404bae28355b1ed1596, type: 3} + m_Name: + m_EditorClassIdentifier: + Icon: {fileID: 7667578565016065612} + Label: {fileID: 7667578566386612333} +--- !u!1 &7667578566386612335 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7667578566386612334} + - component: {fileID: 7667578566386612330} + - component: {fileID: 7667578566386612331} + - component: {fileID: 7667578566386612332} + - component: {fileID: 7667578566386612333} + m_Layer: 0 + m_Name: Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7667578566386612334 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7667578566386612335} + 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: 7667578565413050542} + m_RootOrder: 1 + 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 &7667578566386612330 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7667578566386612335} + 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 &7667578566386612331 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7667578566386612335} + m_Mesh: {fileID: 0} +--- !u!222 &7667578566386612332 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7667578566386612335} + m_CullTransparentMesh: 0 +--- !u!114 &7667578566386612333 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7667578566386612335} + 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: 7667578566386612333} + 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: 7667578566386612330} + m_subTextObjects: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + m_maskType: 0 diff --git a/Assets/Prefabs/Entity.prefab.meta b/Assets/Prefabs/Entity.prefab.meta new file mode 100644 index 000000000..91900f482 --- /dev/null +++ b/Assets/Prefabs/Entity.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 6aa81281891c79e4dabe3be35be479cd +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/Main.unity b/Assets/Scenes/Main.unity index 41d150c3b..81fb9a72e 100644 --- a/Assets/Scenes/Main.unity +++ b/Assets/Scenes/Main.unity @@ -11186,16 +11186,22 @@ MonoBehaviour: TechTabButton: {fileID: 1250888060} GalaxyZonePrototype: {fileID: 559120531} GalaxyZoneLinkPrototype: {fileID: 899487252} - ZoneObjectPrefab: {fileID: 5321404118521994133, guid: f9521191d31952a42a76632d158de0d3, + ZoneGravityObjectPrefab: {fileID: 5321404118521994133, guid: f9521191d31952a42a76632d158de0d3, + type: 3} + ZoneObjectPrefab: {fileID: 5800314421439145179, guid: 6aa81281891c79e4dabe3be35be479cd, type: 3} ZoneShipPrefab: {fileID: 795352744099449573, guid: 7c1524f8ce57a9943920988eae00c86e, type: 3} BeltPrefab: {fileID: 349597964696402918, guid: 1f1bfa2175a13b647888e2949e0cb138, type: 3} + ChildEntityPrefab: {fileID: 1757477368280699322, guid: dfe057045c1f88945ae9256f34d7c8e6, + type: 3} PlanetoidSprite: {fileID: 2800000, guid: 823d8a1c4e071994087624c39f62b319, type: 3} PlanetSprite: {fileID: 2800000, guid: 0d2acbd593b7fd349b0b26b4844733ef, type: 3} GasGiantSprite: {fileID: 2800000, guid: 39505115515c61f4db3c5c5397a5ba49, type: 3} OrbitalSprite: {fileID: 2800000, guid: 97bce58bfe43bfa40870ca062cfb7ec1, type: 3} + ShipSprite: {fileID: 2800000, guid: 4eee2b60a0b77e248885aed0587c6329, type: 3} + TurretSprite: {fileID: 2800000, guid: 4eee2b60a0b77e248885aed0587c6329, type: 3} SunSprite: {fileID: 2800000, guid: 6ca81c82c86205648a1a243805aae5c9, type: 3} WormholeSprite: {fileID: 2800000, guid: 6d0b27330fdcc8347b1e09a2d17a0673, type: 3} SelectedColor: {r: 1, g: 0.44583336, b: 0.050000012, a: 1} @@ -11206,6 +11212,9 @@ MonoBehaviour: ZoneMassPower: 0.25 AsteroidSpritesheetWidth: 4 AsteroidSpritesheetHeight: 4 + ChildEntityDistance: 0.66 + ChildEntityScale: 0.25 + ChildEntityOffsetDegrees: 30 --- !u!4 &1126386501 Transform: m_ObjectHideFlags: 0 diff --git a/Assets/Scripts/Editor/DatabaseInspector.cs b/Assets/Scripts/Editor/DatabaseInspector.cs index 89fa37ffd..cad57e00f 100644 --- a/Assets/Scripts/Editor/DatabaseInspector.cs +++ b/Assets/Scripts/Editor/DatabaseInspector.cs @@ -1181,7 +1181,7 @@ public class DatabaseInspector : EditorWindow (currentEventType == EventType.DragUpdated || currentEventType == EventType.DragPerform)) { var guid = (Guid) DragAndDrop.GetGenericData("Item"); - var dragItem = DatabaseCache.Get(guid) as ItemData; + var dragItem = DatabaseCache.Get(guid) as CraftedItemData; if (currentEventType == EventType.DragUpdated) DragAndDrop.visualMode = dragItem != null ? DragAndDropVisualMode.Copy : DragAndDropVisualMode.Rejected; else if (currentEventType == EventType.DragPerform && dragItem != null) diff --git a/Assets/Scripts/Galaxy.cs b/Assets/Scripts/Galaxy.cs index 70b9aa9d5..d0a66d43e 100644 --- a/Assets/Scripts/Galaxy.cs +++ b/Assets/Scripts/Galaxy.cs @@ -21,7 +21,7 @@ public class Galaxy : ScriptableObject [Serializable] public class GalaxyMapData { - public GlobalData GlobalData = new GlobalData() {ID = Guid.NewGuid()}; + public GlobalData GlobalData = new GlobalData(); [HideInInspector] public GalaxyMapLayerData StarDensity; diff --git a/Assets/Scripts/ServerShared/Behaviors/FactoryBehavior.cs b/Assets/Scripts/ServerShared/Behaviors/FactoryBehavior.cs index f4e1830a9..6a5e06d89 100644 --- a/Assets/Scripts/ServerShared/Behaviors/FactoryBehavior.cs +++ b/Assets/Scripts/ServerShared/Behaviors/FactoryBehavior.cs @@ -84,7 +84,6 @@ public class Factory : IBehavior, IPersistentBehavior { Context = Context, Data = blueprintItemData.ID, - ID = Guid.NewGuid(), Ingredients = _reservedStock.Select(ii=>ii.ID).ToList(), Quality = quality, Blueprint = _blueprint @@ -98,7 +97,6 @@ public class Factory : IBehavior, IPersistentBehavior { Context = Context, Data = blueprintItemData.ID, - ID = Guid.NewGuid(), Ingredients = _reservedStock.Select(ii=>ii.ID).ToList(), Quality = quality, Blueprint = _blueprint @@ -118,7 +116,6 @@ public class Factory : IBehavior, IPersistentBehavior { Context = Context, Data = simpleCommodityData.ID, - ID = Guid.NewGuid(), Quantity = blueprint.Quantity }; Context.Cache.Add(newSimpleCommodity); @@ -181,7 +178,6 @@ public class Factory : IBehavior, IPersistentBehavior { Context = Context, Data = simpleCommodity.Data, - ID = Guid.NewGuid(), Quantity = blueprintQuantity }; simpleCommodity.Quantity -= blueprintQuantity; diff --git a/Assets/Scripts/ServerShared/Behaviors/TowingController.cs b/Assets/Scripts/ServerShared/Behaviors/TowingController.cs index 2861a00dc..d08b99ccd 100644 --- a/Assets/Scripts/ServerShared/Behaviors/TowingController.cs +++ b/Assets/Scripts/ServerShared/Behaviors/TowingController.cs @@ -50,6 +50,10 @@ public class TowingController : IBehavior, IPersistentBehavior, IController, IIn public bool Update(float delta) { + var towingTask = _context.Cache.Get(_towingTask); + if (towingTask == null) + return false; + if (_path.Any()) { _locomotion.Update(delta); @@ -64,7 +68,6 @@ public class TowingController : IBehavior, IPersistentBehavior, IController, IIn } else { - var towingTask = _context.Cache.Get(_towingTask); var destination = float2(0); var velocity = float2(0); if (_towingPhase == TowingPhase.Pickup) @@ -97,19 +100,17 @@ public class TowingController : IBehavior, IPersistentBehavior, IController, IIn _velocityMatch.OnMatch += () => { var target = _context.ZoneEntities[_entity.Zone][towingTask.Station]; - _entity.Children.Add(towingTask.Station); - target.Parent = _entity.ID; + _context.SetParent(target, _entity); _towingPhase = TowingPhase.Delivery; _movementPhase = MovementPhase.Locomotion; }; else _velocityMatch.OnMatch += () => { - var orbit = _context.CreateOrbit(towingTask.OrbitParent, _entity.Position); - var target = _context.ZoneEntities[_entity.Zone][towingTask.Station] as OrbitalEntity; - _entity.Children.Remove(towingTask.Station); - target.Parent = Guid.Empty; + _context.RemoveParent(target); + + var orbit = _context.CreateOrbit(towingTask.OrbitParent, _entity.Position); target.OrbitData = orbit.ID; }; } diff --git a/Assets/Scripts/ServerShared/DatabaseItems.cs b/Assets/Scripts/ServerShared/DatabaseItems.cs index 50595c87b..9ce26ce91 100644 --- a/Assets/Scripts/ServerShared/DatabaseItems.cs +++ b/Assets/Scripts/ServerShared/DatabaseItems.cs @@ -135,6 +135,9 @@ public class LoadoutData : DatabaseEntry, INamedEntry [JsonProperty("items"), Key(3)] public List Items = new List(); + [InspectableDatabaseLink(typeof(SimpleCommodityData)), JsonProperty("resourceRequirements"), Key(4)] + public Dictionary SimpleCargo = new Dictionary(); + [IgnoreMember] public string EntryName { get => Name; diff --git a/Assets/Scripts/ServerShared/Entity.cs b/Assets/Scripts/ServerShared/Entity.cs index 147dd6d4e..fded7b6d2 100644 --- a/Assets/Scripts/ServerShared/Entity.cs +++ b/Assets/Scripts/ServerShared/Entity.cs @@ -13,7 +13,7 @@ using static Unity.Mathematics.math; Union(0, typeof(Ship)), Union(1, typeof(OrbitalEntity)), JsonObject(MemberSerialization.OptIn), JsonConverter(typeof(JsonKnownTypesConverter))] -public abstract class Entity : DatabaseEntry, IMessagePackSerializationCallbackReceiver +public abstract class Entity : DatabaseEntry, IMessagePackSerializationCallbackReceiver, INamedEntry { [JsonProperty("temperature"), Key(1)] public float Temperature; [JsonProperty("energy"), Key(2)] public float Energy; @@ -27,6 +27,7 @@ public abstract class Entity : DatabaseEntry, IMessagePackSerializationCallbackR [JsonProperty("hull"), Key(10)] public Guid Hull; // Type: Gear [JsonProperty("persistedBehaviorData"), Key(11)] public Dictionary PersistedBehaviors; [JsonProperty("corporation"), Key(12)] public Guid Corporation; + [JsonProperty("name"), Key(13)] public string Name; // [IgnoreMember] protected List Behaviors; [IgnoreMember] public Guid Zone; @@ -44,10 +45,15 @@ public abstract class Entity : DatabaseEntry, IMessagePackSerializationCallbackR [IgnoreMember] public float SpecificHeat { get; private set; } [IgnoreMember] public float Visibility => VisibilitySources.Values.Sum(); + [IgnoreMember] public string EntryName + { + get => Name; + set => Name = value; + } + public Entity(GameContext context, Guid hull, IEnumerable items, IEnumerable cargo, Guid zone) { - ID = Guid.NewGuid(); Context = context; Zone = zone; @@ -120,7 +126,8 @@ public abstract class Entity : DatabaseEntry, IMessagePackSerializationCallbackR SpecificHeat = Context.Cache.Get(Hull).HeatCapacity + EquippedItems.Select(i => Context.Cache.Get(i)).Sum(i => i.HeatCapacity) + - Cargo.Select(i => Context.Cache.Get(i)).Sum(ii => ii.HeatCapacity); + Cargo.Select(i => Context.Cache.Get(i)).Sum(ii => ii.HeatCapacity) + + Children.Select(i => Context.Cache.Get(i)).Sum(c=>c.SpecificHeat); } public IEnumerable GetBehaviors() where T : class, IBehavior diff --git a/Assets/Scripts/ServerShared/GameContext.cs b/Assets/Scripts/ServerShared/GameContext.cs index 8e5715fdd..416e5102b 100644 --- a/Assets/Scripts/ServerShared/GameContext.cs +++ b/Assets/Scripts/ServerShared/GameContext.cs @@ -30,6 +30,8 @@ public class GameContext private Dictionary _orbitVelocities = new Dictionary(); private Dictionary _orbitPositions = new Dictionary(); private Dictionary _previousOrbitPositions = new Dictionary(); + private Dictionary _asteroidPositions = new Dictionary(); + private Dictionary _asteroidPositionsUpdated = new Dictionary(); private Guid _forceLoadZone; private Type[] _statObjects; @@ -102,6 +104,9 @@ public class GameContext : float2.zero; } + foreach (var asteroids in _asteroidPositions.Keys) + _asteroidPositionsUpdated[asteroids] = false; + foreach (var corporation in Cache.GetAll()) { foreach (var tasks in corporation.Tasks @@ -222,6 +227,28 @@ public class GameContext return _orbitVelocities.ContainsKey(orbit) ? _orbitVelocities[orbit] : float2.zero; } + public float3[] GetAsteroidTransforms(Guid planetDataID) + { + var planetData = Cache.Get(planetDataID); + if (!_asteroidPositions.ContainsKey(planetDataID)) + { + _asteroidPositions[planetDataID] = new float3[planetData.Asteroids.Length]; + _asteroidPositionsUpdated[planetDataID] = false; + } + + if (_asteroidPositionsUpdated[planetDataID]) + return _asteroidPositions[planetDataID]; + for (var i = 0; i < planetData.Asteroids.Length; i++) + { + _asteroidPositions[planetDataID][i] = float3( + OrbitData.Evaluate((float) frac(Time / -OrbitalPeriod(planetData.Asteroids[i].x) * GlobalData.OrbitSpeedMultiplier + + planetData.Asteroids[i].y)) * planetData.Asteroids[i].x, + (float) (Time * planetData.Asteroids[i].w % 360.0)); + } + + return _asteroidPositions[planetDataID]; + } + public OrbitData CreateOrbit(Guid parent, float2 position) { var parentOrbit = Cache.Get(parent); @@ -236,7 +263,6 @@ public class GameContext { Context = this, Distance = distance, - ID = Guid.NewGuid(), Parent = parent, Period = period, Phase = storedPhase, @@ -511,6 +537,138 @@ public class GameContext return stat.Min; return result; } + + public Entity CreateEntity(Guid zone, Guid corporation, Guid loadout) + { + if (!(Cache.Get(loadout) is LoadoutData loadoutData)) + { + _logger("Attempted to spawn invalid loadout ID"); + return null; + } + + if (!(Cache.Get(loadoutData.Hull) is HullData hullData)) + { + _logger("Attempted to spawn loadout with invalid hull ID"); + return null; + } + + if (!(Cache.Get(zone) is ZoneData zoneData)) + { + _logger("Attempted to spawn entity with invalid zone ID"); + return null; + } + + if (!(Cache.Get(corporation) is Corporation corpData)) + { + _logger("Attempted to spawn entity with invalid corporation ID"); + return null; + } + + var gearData = loadoutData.Items + .Take(hullData.Hardpoints.Count) + .Where(id => id != Guid.Empty) + .Select(id => Cache.Get(id)) + .ToArray(); + + if (gearData.Any(g=>g==null)) + { + _logger("Attempted to spawn loadout with invalid gear ID"); + return null; + } + + var cargoData = loadoutData.Items + .Skip(hullData.Hardpoints.Count) + .Where(id => id != Guid.Empty) + .Select(id => Cache.Get(id)) + .ToArray(); + + if (cargoData.Any(g=>g==null)) + { + _logger("Attempted to spawn loadout with invalid cargo ID"); + return null; + } + + var gear = gearData + .Select(gd => CreateInstance(gd.ID, GlobalData.StartingGearQualityMin, GlobalData.StartingGearQualityMax)) + .ToArray(); + + if (gear.Any(g=>g==null)) + return null; + + foreach(var g in gear) + Cache.Add(g); + + var cargo = cargoData + .Select(gd => CreateInstance(gd.ID, GlobalData.StartingGearQualityMin, GlobalData.StartingGearQualityMax)) + .ToArray(); + + if (cargo.Any(g=>g==null)) + return null; + + foreach(var c in cargo) + Cache.Add(c); + + var simpleCargo = loadoutData.SimpleCargo? + .Select(x => CreateInstance(x.Key, x.Value)) + .ToArray() ?? new SimpleCommodity[0]; + + if (simpleCargo.Any(g=>g==null)) + return null; + + foreach(var c in simpleCargo) + Cache.Add(c); + + var hull = CreateInstance(loadoutData.Hull, GlobalData.StartingGearQualityMin, GlobalData.StartingGearQualityMax); + + if(hull==null) + return null; + + // Load target zone if not yet loaded + if (!_loadedZones.Contains(zone)) + LoadZone(zone); + + if (hullData.HullType == HullType.Ship) + { + var entity = new Ship(this, hull.ID, gear.Select(g => g.ID), + cargo.Select(c => c.ID).Concat(simpleCargo.Select(c => c.ID)), zone) + { + Name = $"{loadoutData.Name} {Random.NextInt(1,255):X}" + }; + Cache.Add(entity); + + ZoneEntities[zone][entity.ID] = entity; + return entity; + } + + if (hullData.HullType == HullType.Station) + { + var distance = lerp(.2f, .8f, Random.NextFloat()) * zoneData.Radius; + var orbit = new OrbitData + { + Context = this, + Distance = distance, + Parent = _orbits + .Select(id => Cache.Get(id)) + .First(orbitData => orbitData.Zone == zone && orbitData.Parent == Guid.Empty).ID, + Period = OrbitalPeriod(distance), + Phase = Random.NextFloat(), + Zone = zone + }; + Cache.Add(orbit); + + var entity = new OrbitalEntity(this, hull.ID, gear.Select(g => g.ID), + cargo.Select(c => c.ID).Concat(simpleCargo.Select(c => c.ID)), orbit.ID, zone) + { + Name = $"{loadoutData.Name} {Random.NextInt(1,255):X}" + }; + Cache.Add(entity); + + ZoneEntities[zone][entity.ID] = entity; + return entity; + } + + return null; + } public SimpleCommodity CreateInstance(Guid data, int count) { @@ -519,15 +677,14 @@ public class GameContext return new SimpleCommodity { Data = data, - Quantity = count, - ID = Guid.NewGuid() + Quantity = count }; _logger("Attempted to create Simple Commodity instance using missing or incorrect item id"); return null; } - public CraftedItemInstance CreateInstance(Guid data, float quality) + public CraftedItemInstance CreateInstance(Guid data, float qualityMin, float qualityMax) { var item = Cache.Get(data); if (item == null) @@ -548,7 +705,7 @@ public class GameContext var ingredient = Cache.Get(ci.Key); return ingredient is SimpleCommodityData ? (IEnumerable) new[] {CreateInstance(ci.Key, ci.Value)} - : Enumerable.Range(0, ci.Value).Select(i => CreateInstance(ci.Key, quality)); + : Enumerable.Range(0, ci.Value).Select(i => CreateInstance(ci.Key, qualityMin, qualityMax)); }) .ToList(); @@ -560,9 +717,8 @@ public class GameContext { Context = this, Data = data, - ID = Guid.NewGuid(), Ingredients = ingredients.Select(i=>i.ID).ToList(), - Quality = quality, + Quality = Random.NextFloat(qualityMin, qualityMax), Blueprint = blueprint.ID }; newGear.Durability = Evaluate(equippableItemData.Durability, newGear); @@ -574,9 +730,8 @@ public class GameContext { Context = this, Data = data, - ID = Guid.NewGuid(), Ingredients = ingredients.Select(i=>i.ID).ToList(), - Quality = quality, + Quality = Random.NextFloat(qualityMin, qualityMax), Blueprint = blueprint.ID }; Cache.Add(newCommodity); @@ -615,4 +770,21 @@ public class GameContext searched.Add(s); } } + + public void SetParent(Entity child, Entity parent) + { + child.Parent = parent.ID; + parent.Children.Add(child.ID); + parent.RecalculateMass(); + } + + public void RemoveParent(Entity child) + { + if (child.Parent == Guid.Empty) + return; + + var parent = Cache.Get(child.Parent); + parent.Children.Remove(child.ID); + child.Parent = Guid.Empty; + } } \ No newline at end of file diff --git a/Assets/Scripts/ServerShared/GlobalData.cs b/Assets/Scripts/ServerShared/GlobalData.cs index 9ba8411c1..21589ec8e 100644 --- a/Assets/Scripts/ServerShared/GlobalData.cs +++ b/Assets/Scripts/ServerShared/GlobalData.cs @@ -133,6 +133,12 @@ public class GlobalData : DatabaseEntry [InspectableField, JsonProperty("resourceDensityMaximum"), Key(41)] public float ResourceDensityMaximum = 1.5f; + + [InspectableField, JsonProperty("startingGearQualityMin"), Key(42)] + public float StartingGearQualityMin = .1f; + + [InspectableField, JsonProperty("startingGearQualityMax"), Key(43)] + public float StartingGearQualityMax = .5f; public float PlanetRadius(float mass) { diff --git a/Assets/Scripts/ServerShared/ZoneGenerator.cs b/Assets/Scripts/ServerShared/ZoneGenerator.cs index 232d7592b..665fba7fe 100644 --- a/Assets/Scripts/ServerShared/ZoneGenerator.cs +++ b/Assets/Scripts/ServerShared/ZoneGenerator.cs @@ -54,9 +54,8 @@ public class ZoneGenerator // Create orbit database entries orbitData = planets.Select(planet => { - var data = new OrbitData() + var data = new OrbitData { - ID = Guid.NewGuid(), Distance = planet.Distance, Period = planet.Period, Phase = planet.Phase, @@ -95,7 +94,6 @@ public class ZoneGenerator var planetData = new PlanetData { Mass = planet.Mass, - ID = Guid.NewGuid(), Orbit = orbitMap[planet].ID, Zone = zone.ID, Belt = planet.Belt, diff --git a/Assets/Scripts/StrategyGameManager.cs b/Assets/Scripts/StrategyGameManager.cs index a0d40b6fb..4ef82bed1 100644 --- a/Assets/Scripts/StrategyGameManager.cs +++ b/Assets/Scripts/StrategyGameManager.cs @@ -43,15 +43,19 @@ public class StrategyGameManager : MonoBehaviour [Section("Prefabs & Prototypes")] public Prototype GalaxyZonePrototype; public Prototype GalaxyZoneLinkPrototype; + public ZoneGravityObject ZoneGravityObjectPrefab; public ZoneObject ZoneObjectPrefab; public ZoneShip ZoneShipPrefab; public MeshFilter BeltPrefab; + public MeshRenderer ChildEntityPrefab; [Section("Textures")] public Texture2D PlanetoidSprite; public Texture2D PlanetSprite; public Texture2D GasGiantSprite; public Texture2D OrbitalSprite; + public Texture2D ShipSprite; + public Texture2D TurretSprite; public Texture2D SunSprite; public Texture2D WormholeSprite; @@ -64,6 +68,9 @@ public class StrategyGameManager : MonoBehaviour public float ZoneMassPower = .5f; public int AsteroidSpritesheetWidth = 4; public int AsteroidSpritesheetHeight = 4; + public float ChildEntityDistance = .66f; + public float ChildEntityScale = .25f; + public float ChildEntityOffsetDegrees = 30f; private DatabaseCache _cache; private GameContext _context; @@ -74,10 +81,11 @@ public class StrategyGameManager : MonoBehaviour private Guid _selectedZone; private GalaxyZone _selectedGalaxyZone; private Dictionary _galaxyZoneObjects = new Dictionary(); - private Dictionary _zoneObjects = new Dictionary(); // Key is Orbit + private Dictionary _zoneGravityObjects = new Dictionary(); // Key is Orbit private Dictionary _zoneBelts = new Dictionary(); private Dictionary _zoneShips = new Dictionary(); - private List _wormholes = new List(); + private Dictionary _zoneOrbitals = new Dictionary(); + private List _wormholes = new List(); private Vector3 _galaxyCameraPos = -Vector3.forward; private float _galaxyOrthoSize = 50; private Material _boundaryMaterial; @@ -88,6 +96,7 @@ public class StrategyGameManager : MonoBehaviour private Guid _playerCorporation; private Dictionary _corpOptionMap = new Dictionary(); private CorporationMenuItem _selectedParent; + private Dictionary _childEntityPositions = new Dictionary(); void Start() { @@ -124,7 +133,6 @@ public class StrategyGameManager : MonoBehaviour player = new Player { Context = _context, - ID = Guid.NewGuid(), Username = Environment.UserName }; _cache.Add(player); @@ -171,7 +179,6 @@ public class StrategyGameManager : MonoBehaviour var newCorp = new Corporation { Context = _context, - ID = Guid.NewGuid(), Name = CorpNameInputField.text, Parent = _corpOptionMap[_selectedParent] }; @@ -181,8 +188,17 @@ public class StrategyGameManager : MonoBehaviour GameMenuRoot.gameObject.SetActive(true); CorpMenuRoot.gameObject.SetActive(false); - _selectedZone = _cache.Get(newCorp.Parent).HomeZone; + var parentCorp = _cache.Get(newCorp.Parent); + _selectedZone = parentCorp.HomeZone; ZoneTabButton.OnPointerClick(null); + + var entities = new List(); + foreach(var loadout in parentCorp.InitialFleet) + for(int i=0; i e is OrbitalEntity); + foreach (var ship in entities.Where(e => e is Ship)) + _context.SetParent(ship, colony); } }; } @@ -277,7 +293,7 @@ public class StrategyGameManager : MonoBehaviour PropertiesPanel.Clear(); PropertiesPanel.Title.text = _context.GlobalData.GalaxyName; PropertiesPanel.AddSection("Galaxy"); - PropertiesPanel.AddProperty("Sectors", $"{_context.GalaxyZones.Count}"); + PropertiesPanel.AddProperty("Sectors", () => $"{_context.GalaxyZones.Count}"); } private void PopulateZoneProperties(Guid zone) @@ -286,7 +302,7 @@ public class StrategyGameManager : MonoBehaviour var zoneData = _cache.Get(zone); PropertiesPanel.Title.text = zoneData.Name; PropertiesPanel.AddSection("Sector"); - PropertiesPanel.AddProperty("Planets", $"{zoneData.Planets.Length}"); + PropertiesPanel.AddProperty("Planets", () => $"{zoneData.Planets.Length}"); } private void PopulateTechProperties() @@ -294,9 +310,9 @@ public class StrategyGameManager : MonoBehaviour PropertiesPanel.Clear(); PropertiesPanel.Title.text = "Technologies"; var count = _context.Cache.GetAll().Count(); - PropertiesPanel.AddProperty("Discovered Techs", $"{count}"); - PropertiesPanel.AddProperty("Available Techs", $"{count}"); - PropertiesPanel.AddProperty("Researched Techs", $"{count}"); + PropertiesPanel.AddProperty("Discovered Techs", () => $"{count}"); + PropertiesPanel.AddProperty("Available Techs", () => $"{count}"); + PropertiesPanel.AddProperty("Researched Techs", () => $"{count}"); } private void Update() @@ -314,7 +330,7 @@ public class StrategyGameManager : MonoBehaviour } if (_currentTab == ZoneTabButton && _populatedZone == _selectedZone) { - foreach (var planet in _zoneObjects) + foreach (var planet in _zoneGravityObjects) { planet.Value.transform.position = float3(_context.GetOrbitPosition(planet.Key) * ZoneSizeScale, .1f); } @@ -333,9 +349,135 @@ public class StrategyGameManager : MonoBehaviour thrusterScale.x = ship.Key.Axes[ship.Key.GetAxis()].Value; ship.Value.Thruster.localScale = thrusterScale; } + + var entities = _context.GetEntities(_populatedZone); + var shipGameObjects = _zoneShips.Keys.ToList(); + var orbitalGameObjects = _zoneOrbitals.Keys.ToList(); + var zoneShips = entities.Where(e => e is Ship && e.Parent == Guid.Empty).Cast(); + var zoneOrbitals = entities.Where(e => e is OrbitalEntity && e.Parent == Guid.Empty).Cast(); + + void PopulateChildObjects(ZoneObject zoneObject, Entity entity) + { + if (zoneObject.Children.Count != entity.Children.Count) + { + foreach(var child in zoneObject.Children) + Destroy(child.gameObject); + zoneObject.Children.Clear(); + var positions = GetChildEntityPositions(entity.Children.Count); + foreach (var child in entity.Children) + { + var childEntity = _context.Cache.Get(child); + var childGameObject = Instantiate(ChildEntityPrefab, zoneObject.transform); + childGameObject.material.SetTexture("_MainTex", childEntity is Ship ? ShipSprite : OrbitalSprite ); + childGameObject.GetComponent().OnClick += (collider, data) => + { + if (data.button == PointerEventData.InputButton.Left) + PopulatePropertiesPanel(child); + else if (data.button == PointerEventData.InputButton.Right) + ShowContextMenu(child); + }; + zoneObject.Children.Add(childGameObject); + } + + for (int i = 0; i < entity.Children.Count; i++) + zoneObject.Children[i].transform.localPosition = (Vector2) positions[i]; + } + } + + foreach (var ship in zoneShips) + { + if (!_zoneShips.ContainsKey(ship)) + { + var zoneShip = Instantiate(ZoneShipPrefab, ZoneRoot); + zoneShip.Icon.GetComponent().OnClick += (collider, data) => + { + if (data.button == PointerEventData.InputButton.Left) + PopulatePropertiesPanel(ship.ID); + else if (data.button == PointerEventData.InputButton.Right) + ShowContextMenu(ship.ID); + }; + zoneShip.Label.text = ship.Name; + _zoneShips[ship] = zoneShip; + } + + _zoneShips[ship].transform.position = float3(ship.Position * ZoneSizeScale, .05f); + _zoneShips[ship].Icon.transform.up = (Vector2) ship.Direction; + var thrusterScale = _zoneShips[ship].Thruster.localScale; + thrusterScale.x = ship.Axes[ship.GetAxis()].Value; + _zoneShips[ship].Thruster.localScale = thrusterScale; + + PopulateChildObjects(_zoneShips[ship], ship); + + shipGameObjects.Remove(ship); + } + + // We have removed all game objects which are associated with active entities + // Any game objects remaining are orphans and must be executed + foreach(var ship in shipGameObjects) + { + Destroy(_zoneShips[ship].gameObject); + _zoneShips.Remove(ship); + } + + foreach (var orbital in zoneOrbitals) + { + if (!_zoneOrbitals.ContainsKey(orbital)) + { + var zoneOrbital = Instantiate(ZoneObjectPrefab, ZoneRoot); + zoneOrbital.Icon.material.SetTexture("_MainTex", OrbitalSprite ); + zoneOrbital.Icon.GetComponent().OnClick += (collider, data) => + { + if (data.button == PointerEventData.InputButton.Left) + PopulatePropertiesPanel(orbital.ID); + else if (data.button == PointerEventData.InputButton.Right) + ShowContextMenu(orbital.ID); + }; + zoneOrbital.Label.text = orbital.Name; + _zoneOrbitals[orbital] = zoneOrbital; + } + + _zoneOrbitals[orbital].transform.position = float3(orbital.Position * ZoneSizeScale, .05f); + _zoneOrbitals[orbital].Icon.transform.up = (Vector2) orbital.Direction; + + PopulateChildObjects(_zoneOrbitals[orbital], orbital); + + orbitalGameObjects.Remove(orbital); + } + + foreach(var orbital in orbitalGameObjects) + { + Destroy(_zoneOrbitals[orbital].gameObject); + _zoneOrbitals.Remove(orbital); + } } } + private float2[] GetChildEntityPositions(int count) + { + if (!_childEntityPositions.ContainsKey(count)) + { + var down = float2(0, -ChildEntityDistance); + var positions = new float2[count]; + if (count % 2 == 1) + { + positions[0] = down; + for (int i = 1; i < count; i++) + positions[i] = mul(float3(down, 1), Unity.Mathematics.float3x3.RotateZ( + Mathf.Deg2Rad * ChildEntityOffsetDegrees * ((i - 1) / 2 + 1) * (i % 2 == 1 ? 1 : -1))).xy; + } + else + { + for (int i = 0; i < count; i++) + positions[i] = mul(float3(down, 1), Unity.Mathematics.float3x3.RotateZ( + Mathf.Deg2Rad * ((ChildEntityOffsetDegrees * (i / 2 + 1) - ChildEntityOffsetDegrees/2) * (i % 2 == 1 ? 1 : -1)))).xy; + } + + _childEntityPositions[count] = positions; + } + + return _childEntityPositions[count]; + } + private void OnApplicationQuit() { if (TestMode) @@ -344,11 +486,12 @@ public class StrategyGameManager : MonoBehaviour } } - void ShowContextMenu(object clickTarget) + void ShowContextMenu(Guid clickTarget) { + var targetObject = _context.Cache.Get(clickTarget); ContextMenu.gameObject.SetActive(true); ContextMenu.Clear(); - if (clickTarget is PlanetData planet) + if (targetObject is PlanetData planet) { ContextMenu.AddOption("Test Option 1", () => Debug.Log("Test Option 1 Selected")); ContextMenu.AddOption("Test Option 2", () => Debug.Log("Test Option 2 Selected")); @@ -360,9 +503,38 @@ public class StrategyGameManager : MonoBehaviour }); ContextMenu.AddOption("Test Option 3", () => Debug.Log("Test Option 3 Selected")); } + else + { + ContextMenu.gameObject.SetActive(false); + return; + } ContextMenu.Show(); } + void PopulatePropertiesPanel(Guid clickTarget) + { + var targetObject = _context.Cache.Get(clickTarget); + + if (targetObject is PlanetData planet) + { + PropertiesPanel.Clear(); + PropertiesPanel.Title.text = planet.Name; + if(planet.Belt) + PropertiesPanel.AddSection("Asteroid Belt"); + else + PropertiesPanel.AddSection(planet.Mass > _context.GlobalData.SunMass ? "Star" : + planet.Mass > _context.GlobalData.GasGiantMass ? "Gas Giant" : + planet.Mass > _context.GlobalData.PlanetMass ? "Planet" : + "Planetoid"); + PropertiesPanel.AddProperty("Mass", () => $"{planet.Mass}"); + PropertiesPanel.AddList("Resources", planet.Resources.Select(resource => + { + var itemData = _context.Cache.Get(resource.Key); + return new Tuple(itemData.Name, $"{resource.Value:0}"); + })); + } + } + void PopulateGalaxy() { _galaxyPopulated = true; @@ -463,8 +635,8 @@ public class StrategyGameManager : MonoBehaviour 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 _zoneGravityObjects.Values) Destroy(zoneObject.gameObject);//zoneObject.GetComponent().ReturnToPool(); + _zoneGravityObjects.Clear(); foreach (var zoneObject in _wormholes) Destroy(zoneObject.gameObject); //zoneObject.GetComponent().ReturnToPool(); _wormholes.Clear(); foreach (var belt in _zoneBelts.Values) Destroy(belt.Transform.gameObject); @@ -490,8 +662,8 @@ public class StrategyGameManager : MonoBehaviour var planetData = _cache.Get(planet); if (!planetData.Belt) { - var planetObject = Instantiate(ZoneObjectPrefab, ZoneRoot); - _zoneObjects[planetData.Orbit] = planetObject; + var planetObject = Instantiate(ZoneGravityObjectPrefab, ZoneRoot); + _zoneGravityObjects[planetData.Orbit] = planetObject; planetObject.Label.text = planetData.Name; planetObject.GravityMesh.gameObject.SetActive(true); planetObject.GravityMesh.transform.localScale = @@ -509,50 +681,23 @@ public class StrategyGameManager : MonoBehaviour planetObject.Icon.GetComponent().OnClick += (collider, data) => { if (data.button == PointerEventData.InputButton.Left) - { - PropertiesPanel.Clear(); - PropertiesPanel.Title.text = planetData.Name; - PropertiesPanel.AddSection(planetData.Mass > _context.GlobalData.SunMass ? "Star" : - planetData.Mass > _context.GlobalData.GasGiantMass ? "Gas Giant" : - planetData.Mass > _context.GlobalData.PlanetMass ? "Planet" : - "Planetoid"); - PropertiesPanel.AddProperty("Mass", $"{planetData.Mass}"); - PropertiesPanel.AddList("Resources", planetData.Resources.Select(resource => - { - var itemData = _context.Cache.Get(resource.Key); - return new Tuple(itemData.Name, $"{resource.Value:0}"); - })); - } - else if (data.button == PointerEventData.InputButton.Right) - { - ShowContextMenu(planetData); - } + PopulatePropertiesPanel(planetData.ID); + else if (data.button == PointerEventData.InputButton.Right) + ShowContextMenu(planetData.ID); }; } else { var beltObject = Instantiate(BeltPrefab, ZoneRoot); var collider = beltObject.GetComponent(); - var belt = new AsteroidBelt(_context, beltObject, collider, planetData, AsteroidSpritesheetWidth, AsteroidSpritesheetHeight, ZoneSizeScale); + var belt = new AsteroidBelt(_context, beltObject, collider, planetData.ID, AsteroidSpritesheetWidth, AsteroidSpritesheetHeight, ZoneSizeScale); _zoneBelts[_cache.Get(planetData.Orbit).Parent] = belt; beltObject.GetComponent().OnClick += (_, data) => { if (data.button == PointerEventData.InputButton.Left) - { - PropertiesPanel.Clear(); - PropertiesPanel.Title.text = planetData.Name; - PropertiesPanel.AddSection("Asteroid Belt"); - PropertiesPanel.AddProperty("Mass", $"{planetData.Mass}"); - PropertiesPanel.AddList("Resources", planetData.Resources.Select(resource => - { - var itemData = _context.Cache.Get(resource.Key); - return new Tuple(itemData.Name, $"{resource.Value:0}"); - })); - } - else if (data.button == PointerEventData.InputButton.Right) - { - ShowContextMenu(planetData); - } + PopulatePropertiesPanel(planetData.ID); + else if (data.button == PointerEventData.InputButton.Right) + ShowContextMenu(planetData.ID); }; } } @@ -565,7 +710,7 @@ public class StrategyGameManager : MonoBehaviour foreach (var wormhole in zoneData.Wormholes) { var otherZone = _context.GalaxyZones[wormhole]; - var wormholeObject = Instantiate(ZoneObjectPrefab, ZoneRoot); + var wormholeObject = Instantiate(ZoneGravityObjectPrefab, ZoneRoot); _wormholes.Add(wormholeObject); wormholeObject.transform.position = (Vector2) (_context.WormholePosition(zoneData.ID, wormhole) * ZoneSizeScale); wormholeObject.GravityMesh.gameObject.SetActive(false); @@ -603,62 +748,71 @@ public class StrategyGameManager : MonoBehaviour return; } + var loadoutData = _context.Cache.GetAll().FirstOrDefault(l => l.Name == args[1]); + if (loadoutData == null) + { + Debug.Log($"Loadout with name \"{args[1]}\" not found!"); + return; + } + + _context.CreateEntity(_populatedZone, _playerCorporation, loadoutData.ID); + // Parse first argument as hull name, default to Fighter if argument missing - HullData hullData; - if (args.Length > 1) - { - hullData = _cache.GetAll().FirstOrDefault(h => h.Name == args[1]); - if (hullData == null) - { - Debug.Log($"Hull with name \"{args[1]}\" not found!"); - return; - } - } - else - { - hullData = _cache.GetAll().FirstOrDefault(h => h.Name == "Fighter"); - } - var hull = _context.CreateInstance(hullData.ID, .9f) as Gear; - - List gear = new List(); - if (args.Length > 2) - { - foreach (string arg in args.Skip(2)) - { - var gearData = _cache.GetAll().FirstOrDefault(h => h.Name == arg); - if (gearData == null) - { - Debug.Log($"Gear with name \"{arg}\" not found!"); - return; - } - gear.Add(_context.CreateInstance(gearData.ID, .9f) as Gear); - } - } - else - { - // If no gear arguments supplied and we're spawning a ship, get the first thruster and put it in - if (args[0] == "ship") - { - var thrusterData = _cache.GetAll().FirstOrDefault(g => g.Behaviors.Any(b => b is ThrusterData)); - var thruster = _context.CreateInstance(thrusterData.ID, .9f) as Gear; - gear.Add(thruster); - } - } - - if (args[0] == "ship") - { - var entity = new Ship(_context, hull.ID, gear.Select(i=>i.ID), Enumerable.Empty(), _populatedZone); - _context.Cache.Add(entity); - _context.ZoneEntities[_populatedZone][entity.ID] = entity; - //_context.Agents.Add(new AgentController(_context, _populatedZone, entity.ID)); - var zoneShip = Instantiate(ZoneShipPrefab, ZoneRoot); - zoneShip.Label.text = $"Ship {_zoneShips.Count}"; - _zoneShips[entity] = zoneShip; - } - else - { - Debug.Log($"Unknown entity type: \"{args[0]}\""); - } + // HullData hullData; + // if (args.Length > 1) + // { + // hullData = _cache.GetAll().FirstOrDefault(h => h.Name == args[1]); + // if (hullData == null) + // { + // Debug.Log($"Hull with name \"{args[1]}\" not found!"); + // return; + // } + // } + // else + // { + // hullData = _cache.GetAll().FirstOrDefault(h => h.Name == "Fighter"); + // } + // var hull = _context.CreateInstance(hullData.ID, .9f) as Gear; + // + // List gear = new List(); + // if (args.Length > 2) + // { + // foreach (string arg in args.Skip(2)) + // { + // var gearData = _cache.GetAll().FirstOrDefault(h => h.Name == arg); + // if (gearData == null) + // { + // Debug.Log($"Gear with name \"{arg}\" not found!"); + // return; + // } + // gear.Add(_context.CreateInstance(gearData.ID, .9f) as Gear); + // } + // } + // else + // { + // // If no gear arguments supplied and we're spawning a ship, get the first thruster and put it in + // if (args[0] == "ship") + // { + // var thrusterData = _cache.GetAll().FirstOrDefault(g => g.Behaviors.Any(b => b is ThrusterData)); + // var thruster = _context.CreateInstance(thrusterData.ID, .9f) as Gear; + // gear.Add(thruster); + // } + // } + // + // if (args[0] == "ship") + // { + // var entity = new Ship(_context, hull.ID, gear.Select(i=>i.ID), Enumerable.Empty(), _populatedZone); + // _context.Cache.Add(entity); + // _context.ZoneEntities[_populatedZone][entity.ID] = entity; + // //_context.Agents.Add(new AgentController(_context, _populatedZone, entity.ID)); + // var zoneShip = Instantiate(ZoneShipPrefab, ZoneRoot); + // zoneShip.Label.text = $"Ship {_zoneShips.Count}"; + // _zoneShips[entity] = zoneShip; + // } + // else + // { + // Debug.Log($"Unknown entity type: \"{args[0]}\""); + // } } void newzone(string[] args) @@ -738,12 +892,12 @@ public class AsteroidBelt private Vector3[] _normals; private Vector2[] _uvs; private int[] _indices; - private PlanetData _data; + private Guid _data; private GameContext _context; private Mesh _mesh; private float _zoneScale; - public AsteroidBelt(GameContext context, MeshFilter meshFilter, MeshCollider collider, PlanetData data, int spritesheetWidth, int spritesheetHeight, float zoneScale) + public AsteroidBelt(GameContext context, MeshFilter meshFilter, MeshCollider collider, Guid data, int spritesheetWidth, int spritesheetHeight, float zoneScale) { Transform = collider.transform; _context = context; @@ -751,18 +905,19 @@ public class AsteroidBelt _filter = meshFilter; _collider = collider; _zoneScale = zoneScale; - _vertices = new Vector3[data.Asteroids.Length*4]; - _normals = new Vector3[data.Asteroids.Length*4]; - _uvs = new Vector2[data.Asteroids.Length*4]; - _indices = new int[data.Asteroids.Length*6]; + var planetData = context.Cache.Get(data); + _vertices = new Vector3[planetData.Asteroids.Length*4]; + _normals = new Vector3[planetData.Asteroids.Length*4]; + _uvs = new Vector2[planetData.Asteroids.Length*4]; + _indices = new int[planetData.Asteroids.Length*6]; var maxDist = 0f; var spriteSize = float2(1f / spritesheetWidth, 1f / spritesheetHeight); // vertex order: bottom left, top left, top right, bottom right - for (var i = 0; i < _data.Asteroids.Length; i++) + for (var i = 0; i < planetData.Asteroids.Length; i++) { - if (_data.Asteroids[i].x > maxDist) - maxDist = _data.Asteroids[i].x; + if (planetData.Asteroids[i].x > maxDist) + maxDist = planetData.Asteroids[i].x; var spriteX = Random.Range(0, spritesheetWidth); var spriteY = Random.Range(0, spritesheetHeight); @@ -797,16 +952,16 @@ public class AsteroidBelt public void Update() { - for (var i = 0; i < _data.Asteroids.Length; i++) + var planetData = _context.Cache.Get(_data); + var asteroidTransforms = _context.GetAsteroidTransforms(_data); + for (var i = 0; i < planetData.Asteroids.Length; i++) { - var rotation = Quaternion.Euler(0, 0, (float) (_context.Time * _data.Asteroids[i].w % 360.0)); - var position = (Vector3) (Vector2) - OrbitData.Evaluate((float) frac(_context.Time / -_context.OrbitalPeriod(_data.Asteroids[i].x) * - _context.GlobalData.OrbitSpeedMultiplier + _data.Asteroids[i].y)) * (_data.Asteroids[i].x * _zoneScale); - _vertices[i * 4] = rotation * new Vector3(-_data.Asteroids[i].z,-_data.Asteroids[i].z,0) + position; - _vertices[i * 4 + 1] = rotation * new Vector3(-_data.Asteroids[i].z,_data.Asteroids[i].z,0) + position; - _vertices[i * 4 + 2] = rotation * new Vector3(_data.Asteroids[i].z,_data.Asteroids[i].z,0) + position; - _vertices[i * 4 + 3] = rotation * new Vector3(_data.Asteroids[i].z,-_data.Asteroids[i].z,0) + position; + var rotation = Quaternion.Euler(0, 0, asteroidTransforms[i].z); + var position = (Vector3) (Vector2) asteroidTransforms[i].xy * _zoneScale; + _vertices[i * 4] = rotation * new Vector3(-planetData.Asteroids[i].z,-planetData.Asteroids[i].z,0) + position; + _vertices[i * 4 + 1] = rotation * new Vector3(-planetData.Asteroids[i].z,planetData.Asteroids[i].z,0) + position; + _vertices[i * 4 + 2] = rotation * new Vector3(planetData.Asteroids[i].z,planetData.Asteroids[i].z,0) + position; + _vertices[i * 4 + 3] = rotation * new Vector3(planetData.Asteroids[i].z,-planetData.Asteroids[i].z,0) + position; } _mesh.vertices = _vertices; diff --git a/Assets/Scripts/TechTreeMsagl.cs b/Assets/Scripts/TechTreeMsagl.cs index ac4eea7ff..93c807998 100644 --- a/Assets/Scripts/TechTreeMsagl.cs +++ b/Assets/Scripts/TechTreeMsagl.cs @@ -333,10 +333,10 @@ public class TechTreeMsagl : MonoBehaviour PropertiesPanel.Clear(); var blueprint = (BlueprintData) vertex.UserData; PropertiesPanel.Title.text = blueprint.Name; - PropertiesPanel.AddProperty("Research Time", $"{blueprint.ResearchTime:0.##} MH"); - PropertiesPanel.AddProperty("Produces", $"{blueprint.Quantity} {Context.Cache.Get(blueprint.Item).Name}"); - PropertiesPanel.AddProperty("Production Quality", $"{Mathf.RoundToInt(blueprint.Quality * 100)}%"); - PropertiesPanel.AddProperty("Production Time", $"{blueprint.ProductionTime:0.##} MH"); + PropertiesPanel.AddProperty("Research Time", () => $"{blueprint.ResearchTime:0.##} MH"); + PropertiesPanel.AddProperty("Produces", () => $"{blueprint.Quantity} {Context.Cache.Get(blueprint.Item).Name}"); + PropertiesPanel.AddProperty("Production Quality", () => $"{Mathf.RoundToInt(blueprint.Quality * 100)}%"); + PropertiesPanel.AddProperty("Production Time", () => $"{blueprint.ProductionTime:0.##} MH"); PropertiesPanel.AddList("Ingredients", blueprint.Ingredients.Select(ingredient => { var ingredientData = Context.Cache.Get(ingredient.Key); diff --git a/Assets/Scripts/UI/PropertyLabel.cs b/Assets/Scripts/UI/PropertyLabel.cs index 22532c96d..a35f98c1f 100644 --- a/Assets/Scripts/UI/PropertyLabel.cs +++ b/Assets/Scripts/UI/PropertyLabel.cs @@ -1,4 +1,5 @@ -using System.Collections; +using System; +using System.Collections; using System.Collections.Generic; using TMPro; using UnityEngine; @@ -7,4 +8,10 @@ public class PropertyLabel : MonoBehaviour { public TextMeshProUGUI Name; public TextMeshProUGUI Value; + public Func ValueFunction; + + private void Update() + { + Value.text = ValueFunction?.Invoke() ?? ""; + } } diff --git a/Assets/Scripts/UI/ReadOnlyPropertiesPanel.cs b/Assets/Scripts/UI/ReadOnlyPropertiesPanel.cs index 89bccfb93..88b6cf131 100644 --- a/Assets/Scripts/UI/ReadOnlyPropertiesPanel.cs +++ b/Assets/Scripts/UI/ReadOnlyPropertiesPanel.cs @@ -21,11 +21,11 @@ public class ReadOnlyPropertiesPanel : MonoBehaviour Destroy(property); } - public void AddProperty(string name, string value) + public void AddProperty(string name, Func value) { var property = Instantiate(PropertyPrefab, transform); property.Name.text = name; - property.Value.text = value; + property.ValueFunction = value; _properties.Add(property.gameObject); } diff --git a/Assets/Scripts/UI/ZoneGravityObject.cs b/Assets/Scripts/UI/ZoneGravityObject.cs new file mode 100644 index 000000000..7e679fc10 --- /dev/null +++ b/Assets/Scripts/UI/ZoneGravityObject.cs @@ -0,0 +1,9 @@ +using System.Collections; +using System.Collections.Generic; +using TMPro; +using UnityEngine; + +public class ZoneGravityObject : ZoneObject +{ + public MeshRenderer GravityMesh; +} diff --git a/Assets/Scripts/UI/ZoneGravityObject.cs.meta b/Assets/Scripts/UI/ZoneGravityObject.cs.meta new file mode 100644 index 000000000..76336c665 --- /dev/null +++ b/Assets/Scripts/UI/ZoneGravityObject.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 17a379c98cd100d4c8548e22c676d246 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/UI/ZoneObject.cs b/Assets/Scripts/UI/ZoneObject.cs index a682565d1..65d4b2d80 100644 --- a/Assets/Scripts/UI/ZoneObject.cs +++ b/Assets/Scripts/UI/ZoneObject.cs @@ -5,9 +5,10 @@ using UnityEngine; public class ZoneObject : MonoBehaviour { - public MeshRenderer GravityMesh; - public MeshRenderer Icon; public TextMeshPro Label; + + [HideInInspector] + public List Children = new List(); } diff --git a/Assets/Scripts/UI/ZoneObject.cs.meta b/Assets/Scripts/UI/ZoneObject.cs.meta index 76336c665..824280b0f 100644 --- a/Assets/Scripts/UI/ZoneObject.cs.meta +++ b/Assets/Scripts/UI/ZoneObject.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 17a379c98cd100d4c8548e22c676d246 +guid: 4d8b39205d8cd404bae28355b1ed1596 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/Scripts/UI/ZoneShip.cs b/Assets/Scripts/UI/ZoneShip.cs index 0f37f3edb..81407f0d3 100644 --- a/Assets/Scripts/UI/ZoneShip.cs +++ b/Assets/Scripts/UI/ZoneShip.cs @@ -3,10 +3,7 @@ using System.Collections.Generic; using TMPro; using UnityEngine; -public class ZoneShip : MonoBehaviour +public class ZoneShip : ZoneObject { - public MeshRenderer Icon; - - public TextMeshPro Label; public Transform Thruster; }