diff --git a/.idea/.idea.Aetheria-Economy/.idea/contentModel.xml b/.idea/.idea.Aetheria-Economy/.idea/contentModel.xml index 61d5712d6..90aee212e 100644 --- a/.idea/.idea.Aetheria-Economy/.idea/contentModel.xml +++ b/.idea/.idea.Aetheria-Economy/.idea/contentModel.xml @@ -2023,6 +2023,7 @@ + diff --git a/Assets/Materials/UI/Map Gravity Lines.mat b/Assets/Materials/UI/Map Gravity Lines.mat index 0d9aadfbe..1ae7b17e2 100644 --- a/Assets/Materials/UI/Map Gravity Lines.mat +++ b/Assets/Materials/UI/Map Gravity Lines.mat @@ -86,7 +86,7 @@ Material: - _Mode: 0 - _OcclusionStrength: 1 - _Parallax: 0.02 - - _Scale: 2.8484566 + - _Scale: 8.4506855 - _SmoothnessTextureChannel: 0 - _SpecularHighlights: 1 - _SrcBlend: 1 diff --git a/Assets/Prefabs/UI/Ranged Float Field.prefab b/Assets/Prefabs/UI/Ranged Float Field.prefab index 28aef017c..07c5826d3 100644 --- a/Assets/Prefabs/UI/Ranged Float Field.prefab +++ b/Assets/Prefabs/UI/Ranged Float Field.prefab @@ -58,7 +58,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} - m_Color: {r: 0, g: 0, b: 0, a: 0.49019608} + m_Color: {r: 0.2, g: 0.2, b: 0.2, a: 1} m_RaycastTarget: 1 m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 @@ -255,10 +255,10 @@ RectTransform: m_Father: {fileID: 3222204141728529077} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} + m_AnchorMin: {x: 0.635, y: 0} + m_AnchorMax: {x: 0.635, y: 1} m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 20, y: 0} + m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &3123360186942093854 CanvasRenderer: @@ -631,6 +631,7 @@ MonoBehaviour: m_EditorClassIdentifier: m_Navigation: m_Mode: 3 + m_WrapAround: 0 m_SelectOnUp: {fileID: 0} m_SelectOnDown: {fileID: 0} m_SelectOnLeft: {fileID: 0} diff --git a/Assets/Resources/Aetheria.inputactions b/Assets/Resources/Aetheria.inputactions index 2a0963e99..38b255860 100644 --- a/Assets/Resources/Aetheria.inputactions +++ b/Assets/Resources/Aetheria.inputactions @@ -172,6 +172,14 @@ "expectedControlType": "Button", "processors": "", "interactions": "" + }, + { + "name": "Override Shutdown", + "type": "Button", + "id": "62a64686-4670-43c9-81ee-bbb8578e284b", + "expectedControlType": "Button", + "processors": "", + "interactions": "" } ], "bindings": [ @@ -588,10 +596,21 @@ "path": "/#(G)", "interactions": "", "processors": "", - "groups": "", + "groups": "Keyboard&Mouse", "action": "Toggle Shield", "isComposite": false, "isPartOfComposite": false + }, + { + "name": "", + "id": "8e8b5d19-20fd-43f3-88cf-6246f374e7cf", + "path": "/#(O)", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Override Shutdown", + "isComposite": false, + "isPartOfComposite": false } ] }, diff --git a/Assets/Resources/Sprites/Attribution.txt b/Assets/Resources/Sprites/Attribution.txt index 2a4ead81a..f813b8cee 100644 --- a/Assets/Resources/Sprites/Attribution.txt +++ b/Assets/Resources/Sprites/Attribution.txt @@ -52,6 +52,8 @@ Tank by Creative Stall Satellite by Amelia distance by Anthony Ledoux Cross by shashank singh +Worried Fire Flame by Akshar Pathak +Boiling Thermometer by KEN MURRAY Other diff --git a/Assets/Resources/Sprites/Icons/Boiling Thermometer.png b/Assets/Resources/Sprites/Icons/Boiling Thermometer.png new file mode 100644 index 000000000..3261ab235 --- /dev/null +++ b/Assets/Resources/Sprites/Icons/Boiling Thermometer.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fc943f753b7d2c1c35edd49573fafc397bed2d4c88b992160ed51be6adcd9f30 +size 34354 diff --git a/Assets/Resources/Sprites/Icons/Boiling Thermometer.png.meta b/Assets/Resources/Sprites/Icons/Boiling Thermometer.png.meta new file mode 100644 index 000000000..19feb1fa0 --- /dev/null +++ b/Assets/Resources/Sprites/Icons/Boiling Thermometer.png.meta @@ -0,0 +1,108 @@ +fileFormatVersion: 2 +guid: 8c679ed13c51b764b8304e50aef07931 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Sprites/Icons/Worried Flame Stroked.png b/Assets/Resources/Sprites/Icons/Worried Flame Stroked.png new file mode 100644 index 000000000..ee851a1e2 --- /dev/null +++ b/Assets/Resources/Sprites/Icons/Worried Flame Stroked.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4491329f54bcfa1a2a1c508d65c45f2ce51fbd7f6c5e5984929dd4bf725128d7 +size 49325 diff --git a/Assets/Resources/Sprites/Icons/Worried Flame Stroked.png.meta b/Assets/Resources/Sprites/Icons/Worried Flame Stroked.png.meta new file mode 100644 index 000000000..9c1705fc1 --- /dev/null +++ b/Assets/Resources/Sprites/Icons/Worried Flame Stroked.png.meta @@ -0,0 +1,108 @@ +fileFormatVersion: 2 +guid: 2656fc64446ab434aac46c4a660281aa +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Sprites/Icons/Worried Flame.png b/Assets/Resources/Sprites/Icons/Worried Flame.png new file mode 100644 index 000000000..62ed1a117 --- /dev/null +++ b/Assets/Resources/Sprites/Icons/Worried Flame.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0ff2bf93f6dc0b7fc203a87f05ba3453e95e0525f0396eb3dc3eeb0372d1257a +size 23992 diff --git a/Assets/Resources/Sprites/Icons/Worried Flame.png.meta b/Assets/Resources/Sprites/Icons/Worried Flame.png.meta new file mode 100644 index 000000000..e69b8f1c4 --- /dev/null +++ b/Assets/Resources/Sprites/Icons/Worried Flame.png.meta @@ -0,0 +1,108 @@ +fileFormatVersion: 2 +guid: aabcc41df8eabd64686f0f801267d759 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/ARPG.unity b/Assets/Scenes/ARPG.unity index facf859c3..c07bf563b 100644 --- a/Assets/Scenes/ARPG.unity +++ b/Assets/Scenes/ARPG.unity @@ -252,13 +252,13 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 7628189704016736659} - m_RootOrder: 2 + m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 1, y: 1} m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: -6, y: -8} + m_AnchoredPosition: {x: -18, y: -44} m_SizeDelta: {x: 16, y: 16} - m_Pivot: {x: 1, y: 1} + m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &19222413 MonoBehaviour: m_ObjectHideFlags: 0 @@ -4661,6 +4661,8 @@ MonoBehaviour: TriggerGroupPrototype: {fileID: 1564656282} HeaderElementEnabledColor: {r: 0, g: 0, b: 0, a: 0} HeaderElementDisabledColor: {r: 0, g: 0, b: 0, a: 0} + OverrideIcon: {fileID: 0} + OverrideIconBlinkSpeed: 0 ShieldIcon: {fileID: 0} HeatsinkBackground: {fileID: 0} EnergyLabel: {fileID: 0} @@ -18244,7 +18246,7 @@ PrefabInstance: - target: {fileID: 878382121558056004, guid: 2758dfa2744d7ad4d8877545189d116e, type: 3} propertyPath: m_AnchoredPosition.x - value: 0 + value: 55.675 objectReference: {fileID: 0} - target: {fileID: 878382121558056004, guid: 2758dfa2744d7ad4d8877545189d116e, type: 3} @@ -18961,6 +18963,102 @@ MonoBehaviour: m_FlexibleWidth: -1 m_FlexibleHeight: -1 m_LayoutPriority: 1 +--- !u!1 &1576705656 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1576705657} + - component: {fileID: 1576705660} + - component: {fileID: 1576705659} + - component: {fileID: 1576705658} + m_Layer: 5 + m_Name: Override Icon + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1576705657 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1576705656} + 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: 7628189704016736659} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -18, y: -20} + m_SizeDelta: {x: 24, y: 24} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1576705658 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1576705656} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 1 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: -1 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!114 &1576705659 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1576705656} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.44583336, b: 0.050000012, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 8c679ed13c51b764b8304e50aef07931, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1576705660 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1576705656} + m_CullTransparentMesh: 1 --- !u!1 &1590553658 GameObject: m_ObjectHideFlags: 0 @@ -19175,7 +19273,7 @@ PrefabInstance: - target: {fileID: 878382121558056004, guid: 2758dfa2744d7ad4d8877545189d116e, type: 3} propertyPath: m_AnchoredPosition.x - value: 0 + value: 60.98 objectReference: {fileID: 0} - target: {fileID: 878382121558056004, guid: 2758dfa2744d7ad4d8877545189d116e, type: 3} @@ -28762,6 +28860,7 @@ RectTransform: m_Children: - {fileID: 2851244030680155772} - {fileID: 7628189703197605886} + - {fileID: 1576705657} - {fileID: 19222412} m_Father: {fileID: 7628189704109037581} m_RootOrder: 4 @@ -29687,6 +29786,8 @@ MonoBehaviour: TriggerGroupPrototype: {fileID: 1564656282} HeaderElementEnabledColor: {r: 1, g: 1, b: 1, a: 0.078431375} HeaderElementDisabledColor: {r: 1, g: 1, b: 1, a: 0.011764706} + OverrideIcon: {fileID: 1576705656} + OverrideIconBlinkSpeed: 10 ShieldIcon: {fileID: 19222411} HeatsinkBackground: {fileID: 661332569} EnergyLabel: {fileID: 804489113} diff --git a/Assets/Scripts/AetheriaInput.cs b/Assets/Scripts/AetheriaInput.cs index 765313dd1..cefbd5755 100644 --- a/Assets/Scripts/AetheriaInput.cs +++ b/Assets/Scripts/AetheriaInput.cs @@ -185,6 +185,14 @@ public class @AetheriaInput : IInputActionCollection, IDisposable ""expectedControlType"": ""Button"", ""processors"": """", ""interactions"": """" + }, + { + ""name"": ""Override Shutdown"", + ""type"": ""Button"", + ""id"": ""62a64686-4670-43c9-81ee-bbb8578e284b"", + ""expectedControlType"": ""Button"", + ""processors"": """", + ""interactions"": """" } ], ""bindings"": [ @@ -601,10 +609,21 @@ public class @AetheriaInput : IInputActionCollection, IDisposable ""path"": ""/#(G)"", ""interactions"": """", ""processors"": """", - ""groups"": """", + ""groups"": ""Keyboard&Mouse"", ""action"": ""Toggle Shield"", ""isComposite"": false, ""isPartOfComposite"": false + }, + { + ""name"": """", + ""id"": ""8e8b5d19-20fd-43f3-88cf-6246f374e7cf"", + ""path"": ""/#(O)"", + ""interactions"": """", + ""processors"": """", + ""groups"": ""Keyboard&Mouse"", + ""action"": ""Override Shutdown"", + ""isComposite"": false, + ""isPartOfComposite"": false } ] }, @@ -1192,6 +1211,7 @@ public class @AetheriaInput : IInputActionCollection, IDisposable m_Player_ToggleHeatsinks = m_Player.FindAction("Toggle Heatsinks", throwIfNotFound: true); m_Player_EnterWormhole = m_Player.FindAction("EnterWormhole", throwIfNotFound: true); m_Player_ToggleShield = m_Player.FindAction("Toggle Shield", throwIfNotFound: true); + m_Player_OverrideShutdown = m_Player.FindAction("Override Shutdown", throwIfNotFound: true); // UI m_UI = asset.FindActionMap("UI", throwIfNotFound: true); m_UI_Navigate = m_UI.FindAction("Navigate", throwIfNotFound: true); @@ -1278,6 +1298,7 @@ public class @AetheriaInput : IInputActionCollection, IDisposable private readonly InputAction m_Player_ToggleHeatsinks; private readonly InputAction m_Player_EnterWormhole; private readonly InputAction m_Player_ToggleShield; + private readonly InputAction m_Player_OverrideShutdown; public struct PlayerActions { private @AetheriaInput m_Wrapper; @@ -1303,6 +1324,7 @@ public class @AetheriaInput : IInputActionCollection, IDisposable public InputAction @ToggleHeatsinks => m_Wrapper.m_Player_ToggleHeatsinks; public InputAction @EnterWormhole => m_Wrapper.m_Player_EnterWormhole; public InputAction @ToggleShield => m_Wrapper.m_Player_ToggleShield; + public InputAction @OverrideShutdown => m_Wrapper.m_Player_OverrideShutdown; public InputActionMap Get() { return m_Wrapper.m_Player; } public void Enable() { Get().Enable(); } public void Disable() { Get().Disable(); } @@ -1375,6 +1397,9 @@ public class @AetheriaInput : IInputActionCollection, IDisposable @ToggleShield.started -= m_Wrapper.m_PlayerActionsCallbackInterface.OnToggleShield; @ToggleShield.performed -= m_Wrapper.m_PlayerActionsCallbackInterface.OnToggleShield; @ToggleShield.canceled -= m_Wrapper.m_PlayerActionsCallbackInterface.OnToggleShield; + @OverrideShutdown.started -= m_Wrapper.m_PlayerActionsCallbackInterface.OnOverrideShutdown; + @OverrideShutdown.performed -= m_Wrapper.m_PlayerActionsCallbackInterface.OnOverrideShutdown; + @OverrideShutdown.canceled -= m_Wrapper.m_PlayerActionsCallbackInterface.OnOverrideShutdown; } m_Wrapper.m_PlayerActionsCallbackInterface = instance; if (instance != null) @@ -1442,6 +1467,9 @@ public class @AetheriaInput : IInputActionCollection, IDisposable @ToggleShield.started += instance.OnToggleShield; @ToggleShield.performed += instance.OnToggleShield; @ToggleShield.canceled += instance.OnToggleShield; + @OverrideShutdown.started += instance.OnOverrideShutdown; + @OverrideShutdown.performed += instance.OnOverrideShutdown; + @OverrideShutdown.canceled += instance.OnOverrideShutdown; } } } @@ -1642,6 +1670,7 @@ public class @AetheriaInput : IInputActionCollection, IDisposable void OnToggleHeatsinks(InputAction.CallbackContext context); void OnEnterWormhole(InputAction.CallbackContext context); void OnToggleShield(InputAction.CallbackContext context); + void OnOverrideShutdown(InputAction.CallbackContext context); } public interface IUIActions { diff --git a/Assets/Scripts/Gameplay/ActionGameManager.cs b/Assets/Scripts/Gameplay/ActionGameManager.cs index a2f53df67..5c0da767b 100644 --- a/Assets/Scripts/Gameplay/ActionGameManager.cs +++ b/Assets/Scripts/Gameplay/ActionGameManager.cs @@ -52,6 +52,7 @@ public class ActionGameManager : MonoBehaviour // private CinemachineFramingTransposer _transposer; // private CinemachineComposer _composer; + public PlayerSettings PlayerSettings { get; private set; } private DirectoryInfo _filePath; private DirectoryInfo _loadoutPath; private bool _editMode; @@ -112,7 +113,10 @@ public class ActionGameManager : MonoBehaviour if (CurrentShip != null) { + CurrentShip.Deactivate(); + CurrentShip.Zone = Zone; Zone.Entities.Add(CurrentShip); + CurrentShip.Activate(); } SectorRenderer.LoadZone(Zone); @@ -128,11 +132,20 @@ public class ActionGameManager : MonoBehaviour ConsoleController.MessageReceiver = this; _filePath = new DirectoryInfo(Application.dataPath).Parent.CreateSubdirectory("GameData"); _loadoutPath = _filePath.CreateSubdirectory("Loadouts"); + ItemData = new DatabaseCache(); - ItemData.Load(_filePath.FullName); + ItemData.Load(Path.Combine(_filePath.FullName, "AetherDB.msgpack")); ItemManager = new ItemManager(ItemData, Settings.GameplaySettings, Debug.Log); SectorRenderer.ItemManager = ItemManager; + FileInfo playerSettingsFile = new FileInfo(Path.Combine(_filePath.FullName, "PlayerSettings.msgpack")); + if (!playerSettingsFile.Exists) + { + File.WriteAllBytes(playerSettingsFile.FullName, MessagePackSerializer.Serialize(Settings.DefaultPlayerSettings)); + } + PlayerSettings = MessagePackSerializer.Deserialize( + File.ReadAllBytes(playerSettingsFile.FullName)); + Loadouts.AddRange(_loadoutPath.EnumerateFiles("*.preset") .Select(fi => MessagePackSerializer.Deserialize(File.ReadAllBytes(fi.FullName)))); @@ -230,6 +243,11 @@ public class ActionGameManager : MonoBehaviour } }; + _input.Player.OverrideShutdown.performed += context => + { + CurrentShip.OverrideShutdown = !CurrentShip.OverrideShutdown; + }; + _input.Player.ToggleHeatsinks.performed += context => { CurrentShip.HeatsinksEnabled = !CurrentShip.HeatsinksEnabled; @@ -240,8 +258,8 @@ public class ActionGameManager : MonoBehaviour { if (CurrentShip.Shield != null) { - CurrentShip.Shield.Item.Enabled = !CurrentShip.Shield.Item.Enabled; - AkSoundEngine.PostEvent(CurrentShip.Shield.Item.Enabled ? "UI_Success" : "UI_Fail", gameObject); + CurrentShip.Shield.Item.Enabled.Value = !CurrentShip.Shield.Item.Enabled.Value; + AkSoundEngine.PostEvent(CurrentShip.Shield.Item.Enabled.Value ? "UI_Success" : "UI_Fail", gameObject); } }; diff --git a/Assets/Scripts/Gameplay/GameSettings.cs b/Assets/Scripts/Gameplay/GameSettings.cs index f5b72e170..b0ad1ea57 100644 --- a/Assets/Scripts/Gameplay/GameSettings.cs +++ b/Assets/Scripts/Gameplay/GameSettings.cs @@ -27,6 +27,7 @@ public class GameSettings : ScriptableObject public PlanetSettings PlanetSettings; public ZoneGenerationSettings ZoneSettings; public GameplaySettings GameplaySettings; + public PlayerSettings DefaultPlayerSettings; public Color HullHitColor; public Color ArmorHitColor; public Color HardpointHitColor; diff --git a/Assets/Scripts/Gameplay/Weapons/ConstantLaser.cs b/Assets/Scripts/Gameplay/Weapons/ConstantLaser.cs index 81b925a8f..3bd71ce3f 100644 --- a/Assets/Scripts/Gameplay/Weapons/ConstantLaser.cs +++ b/Assets/Scripts/Gameplay/Weapons/ConstantLaser.cs @@ -76,7 +76,7 @@ public class ConstantLaser : MonoBehaviour var shield = hit.collider.GetComponent(); if (shield) { - if (!(shield.Entity.Shield != null && shield.Entity.Shield.Item.Active && shield.Entity.Shield.CanTakeHit(DamageType, Damage))) continue; + if (!(shield.Entity.Shield != null && shield.Entity.Shield.Item.Active.Value && shield.Entity.Shield.CanTakeHit(DamageType, Damage))) continue; if (shield.Entity != SourceEntity) { shield.Entity.Shield.TakeHit(DamageType, Damage); diff --git a/Assets/Scripts/Gameplay/Weapons/ConstantLaserManager.cs b/Assets/Scripts/Gameplay/Weapons/ConstantLaserManager.cs index 8d798558e..351314e61 100644 --- a/Assets/Scripts/Gameplay/Weapons/ConstantLaserManager.cs +++ b/Assets/Scripts/Gameplay/Weapons/ConstantLaserManager.cs @@ -14,14 +14,14 @@ public class ConstantLaserManager : ConstantWeaponEffectManager p.SourceEntity = source.Entity; var hp = source.Entity.Hardpoints[item.Position.x, item.Position.y]; var barrel = source.GetBarrel(hp); - p.Range = source.Entity.ItemManager.Evaluate(data.Range, item); + p.Range = item.Evaluate(data.Range); var t = p.transform; t.SetParent(barrel); t.forward = barrel.forward; t.position = barrel.position; - p.Damage = source.Entity.ItemManager.Evaluate(data.Damage, item); - p.Penetration = source.Entity.ItemManager.Evaluate(data.Penetration, item); - p.Spread = source.Entity.ItemManager.Evaluate(data.DamageSpread, item); + p.Damage = item.Evaluate(data.Damage); + p.Penetration = item.Evaluate(data.Penetration); + p.Spread = item.Evaluate(data.DamageSpread); p.DamageType = data.DamageType; _lasers.Add(item, p); } diff --git a/Assets/Scripts/Gameplay/Weapons/ConstantLightning.cs b/Assets/Scripts/Gameplay/Weapons/ConstantLightning.cs index 7f2446b55..d50717a22 100644 --- a/Assets/Scripts/Gameplay/Weapons/ConstantLightning.cs +++ b/Assets/Scripts/Gameplay/Weapons/ConstantLightning.cs @@ -55,14 +55,14 @@ public class ConstantLightning : MonoBehaviour foreach (var hit in hits) { var shield = hit.collider.GetComponent(); - if (shield && (shield.Entity.Shield != null && shield.Entity.Shield.Item.Active && shield.Entity.Shield.CanTakeHit(DamageType, Damage))) + if (shield && (shield.Entity.Shield != null && shield.Entity.Shield.Item.Active.Value && shield.Entity.Shield.CanTakeHit(DamageType, Damage))) { if (shield.Entity == Source.Entity) continue; shield.Entity.Shield.TakeHit(DamageType, Damage * Time.deltaTime); shield.ShowHit(hit.point, sqrt(Damage)); } var hull = hit.collider.GetComponent(); - if (hull && !(hull.Entity.Shield != null && hull.Entity.Shield.Item.Active && hull.Entity.Shield.CanTakeHit(DamageType, Damage))) + if (hull && !(hull.Entity.Shield != null && hull.Entity.Shield.Item.Active.Value && hull.Entity.Shield.CanTakeHit(DamageType, Damage))) { if (hull.Entity == Source.Entity) continue; hull.SendHit(Damage * Time.deltaTime, Penetration, Spread, DamageType, Source.Entity, hit.textureCoord, Barrel.forward); diff --git a/Assets/Scripts/Gameplay/Weapons/ConstantLightningManager.cs b/Assets/Scripts/Gameplay/Weapons/ConstantLightningManager.cs index dbeb0cff4..77a1be884 100644 --- a/Assets/Scripts/Gameplay/Weapons/ConstantLightningManager.cs +++ b/Assets/Scripts/Gameplay/Weapons/ConstantLightningManager.cs @@ -16,10 +16,10 @@ public class ConstantLightningManager : ConstantWeaponEffectManager var hp = source.Entity.Hardpoints[item.Position.x, item.Position.y]; var barrel = source.GetBarrel(hp); p.Barrel = barrel; - p.Damage = source.Entity.ItemManager.Evaluate(data.Damage, item); - p.Range = source.Entity.ItemManager.Evaluate(data.Range, item); - p.Penetration = source.Entity.ItemManager.Evaluate(data.Penetration, item); - p.Spread = source.Entity.ItemManager.Evaluate(data.DamageSpread, item); + p.Damage = item.Evaluate(data.Damage); + p.Range = item.Evaluate(data.Range); + p.Penetration = item.Evaluate(data.Penetration); + p.Spread = item.Evaluate(data.DamageSpread); p.DamageType = data.DamageType; _bolts.Add(item, p); } diff --git a/Assets/Scripts/Gameplay/Weapons/ConstantParticleWeaponManager.cs b/Assets/Scripts/Gameplay/Weapons/ConstantParticleWeaponManager.cs index 575ec67cd..6326330e3 100644 --- a/Assets/Scripts/Gameplay/Weapons/ConstantParticleWeaponManager.cs +++ b/Assets/Scripts/Gameplay/Weapons/ConstantParticleWeaponManager.cs @@ -19,7 +19,7 @@ public class ConstantParticleWeaponManager : ConstantWeaponEffectManager t.SetParent(barrel); t.forward = barrel.forward; t.position = barrel.position; - p.Damage = source.Entity.ItemManager.Evaluate(data.Damage, item); + p.Damage = item.Evaluate(data.Damage); p.DamageType = data.DamageType; _weapons.Add(item, p); p.Initialize(); diff --git a/Assets/Scripts/Gameplay/Weapons/GuidedProjectile.cs b/Assets/Scripts/Gameplay/Weapons/GuidedProjectile.cs index 8fd55340d..d1ae0d6bf 100644 --- a/Assets/Scripts/Gameplay/Weapons/GuidedProjectile.cs +++ b/Assets/Scripts/Gameplay/Weapons/GuidedProjectile.cs @@ -147,7 +147,7 @@ public class GuidedProjectile : MonoBehaviour var shield = hit.collider.GetComponent(); if (shield) { - if (!(shield.Entity.Shield != null && shield.Entity.Shield.Item.Active && shield.Entity.Shield.CanTakeHit(DamageType, Damage))) continue; + if (!(shield.Entity.Shield != null && shield.Entity.Shield.Item.Active.Value && shield.Entity.Shield.CanTakeHit(DamageType, Damage))) continue; if (shield.Entity != SourceEntity) { shield.Entity.Shield.TakeHit(DamageType, Damage); @@ -155,7 +155,7 @@ public class GuidedProjectile : MonoBehaviour } } var hull = hit.collider.GetComponent(); - if (hull && !(hull.Entity.Shield != null && hull.Entity.Shield.Item.Active && hull.Entity.Shield.CanTakeHit(DamageType, Damage))) + if (hull && !(hull.Entity.Shield != null && hull.Entity.Shield.Item.Active.Value && hull.Entity.Shield.CanTakeHit(DamageType, Damage))) { if (hull.Entity != SourceEntity) { diff --git a/Assets/Scripts/Gameplay/Weapons/GuidedProjectileManager.cs b/Assets/Scripts/Gameplay/Weapons/GuidedProjectileManager.cs index f49d43fd5..8713e53f1 100644 --- a/Assets/Scripts/Gameplay/Weapons/GuidedProjectileManager.cs +++ b/Assets/Scripts/Gameplay/Weapons/GuidedProjectileManager.cs @@ -29,8 +29,8 @@ public class GuidedProjectileManager : InstantWeaponEffectManager p.LiftCurve = launcher.LiftCurve.ToCurve(); p.ThrustCurve = launcher.ThrustCurve.ToCurve(); p.Velocity = barrel.forward * weapon.Velocity; - p.Thrust = source.Entity.ItemManager.Evaluate(launcher.Thrust, item); - p.TopSpeed = source.Entity.ItemManager.Evaluate(launcher.MissileVelocity, item); + p.Thrust = item.Evaluate(launcher.Thrust); + p.TopSpeed = item.Evaluate(launcher.MissileVelocity); } else if(weapon.Data is GuidedWeaponData guidance) { @@ -51,8 +51,8 @@ public class GuidedProjectileManager : InstantWeaponEffectManager p.LiftCurve = guidance.LiftCurve.ToCurve(); p.ThrustCurve = guidance.ThrustCurve.ToCurve(); p.Velocity = barrel.forward * weapon.Velocity; - p.Thrust = source.Entity.ItemManager.Evaluate(guidance.Thrust, item); - p.TopSpeed = source.Entity.ItemManager.Evaluate(guidance.MissileVelocity, item); + p.Thrust = item.Evaluate(guidance.Thrust); + p.TopSpeed = item.Evaluate(guidance.MissileVelocity); p.TargetPosition = () => source.Entity.Position + length( (float3)source.LookAtPoint.position - source.Entity.Position) * source.Entity.LookDirection; } else Debug.LogError($"Weapon {item.EquippableItem.Name} linked to {name} effect, but is not a Launcher!"); diff --git a/Assets/Scripts/Gameplay/Weapons/HitscanEffect.cs b/Assets/Scripts/Gameplay/Weapons/HitscanEffect.cs index 68e1bfd74..5d59c36b4 100644 --- a/Assets/Scripts/Gameplay/Weapons/HitscanEffect.cs +++ b/Assets/Scripts/Gameplay/Weapons/HitscanEffect.cs @@ -33,7 +33,7 @@ public class HitscanEffect : MonoBehaviour var shield = hit.collider.GetComponent(); if (shield) { - if (!(shield.Entity.Shield != null && shield.Entity.Shield.Item.Active && shield.Entity.Shield.CanTakeHit(DamageType, Damage))) continue; + if (!(shield.Entity.Shield != null && shield.Entity.Shield.Item.Active.Value && shield.Entity.Shield.CanTakeHit(DamageType, Damage))) continue; if (shield.Entity != SourceEntity) { shield.Entity.Shield.TakeHit(DamageType, Damage); diff --git a/Assets/Scripts/Gameplay/Weapons/Laser.cs b/Assets/Scripts/Gameplay/Weapons/Laser.cs index 9c34d7c09..fdc7e777e 100644 --- a/Assets/Scripts/Gameplay/Weapons/Laser.cs +++ b/Assets/Scripts/Gameplay/Weapons/Laser.cs @@ -42,7 +42,7 @@ public class Laser : MonoBehaviour var shield = hit.collider.GetComponent(); if (shield) { - if (!(shield.Entity.Shield != null && shield.Entity.Shield.Item.Active && shield.Entity.Shield.CanTakeHit(DamageType, Damage))) continue; + if (!(shield.Entity.Shield != null && shield.Entity.Shield.Item.Active.Value && shield.Entity.Shield.CanTakeHit(DamageType, Damage))) continue; if (shield.Entity != SourceEntity) { shield.Entity.Shield.TakeHit(DamageType, Damage); diff --git a/Assets/Scripts/Gameplay/Weapons/Lightning.cs b/Assets/Scripts/Gameplay/Weapons/Lightning.cs index cb63b3a86..5432761f3 100644 --- a/Assets/Scripts/Gameplay/Weapons/Lightning.cs +++ b/Assets/Scripts/Gameplay/Weapons/Lightning.cs @@ -36,7 +36,7 @@ public class Lightning : MonoBehaviour foreach (var hit in hits) { var shield = hit.collider.GetComponent(); - if (shield && (shield.Entity.Shield != null && shield.Entity.Shield.Item.Active && shield.Entity.Shield.CanTakeHit(DamageType, Damage))) + if (shield && (shield.Entity.Shield != null && shield.Entity.Shield.Item.Active.Value && shield.Entity.Shield.CanTakeHit(DamageType, Damage))) { if (shield.Entity == Source.Entity) continue; LightningCompute.OnLeaderComplete = () => @@ -46,7 +46,7 @@ public class Lightning : MonoBehaviour }; } var hull = hit.collider.GetComponent(); - if (hull && !(hull.Entity.Shield != null && hull.Entity.Shield.Item.Active && hull.Entity.Shield.CanTakeHit(DamageType, Damage))) + if (hull && !(hull.Entity.Shield != null && hull.Entity.Shield.Item.Active.Value && hull.Entity.Shield.CanTakeHit(DamageType, Damage))) { if (hull.Entity == Source.Entity) continue; LightningCompute.OnLeaderComplete = () => diff --git a/Assets/Scripts/Gameplay/Weapons/Mine.cs b/Assets/Scripts/Gameplay/Weapons/Mine.cs index cad1114d3..fc3d42e71 100644 --- a/Assets/Scripts/Gameplay/Weapons/Mine.cs +++ b/Assets/Scripts/Gameplay/Weapons/Mine.cs @@ -109,13 +109,13 @@ public class Mine : MonoBehaviour foreach (var collider in Physics.OverlapSphere(t.position, BlastRange, 1 | (1 << 17))) { var shield = collider.GetComponent(); - if (shield && (shield.Entity.Shield != null && shield.Entity.Shield.Item.Active && shield.Entity.Shield.CanTakeHit(DamageType, Damage))) + if (shield && (shield.Entity.Shield != null && shield.Entity.Shield.Item.Active.Value && shield.Entity.Shield.CanTakeHit(DamageType, Damage))) { shield.Entity.Shield.TakeHit(DamageType, Damage); shield.ShowHit(t.position, sqrt(Damage)); } var hull = collider.GetComponent(); - if (hull && !(hull.Entity.Shield != null && hull.Entity.Shield.Item.Active && hull.Entity.Shield.CanTakeHit(DamageType, Damage))) + if (hull && !(hull.Entity.Shield != null && hull.Entity.Shield.Item.Active.Value && hull.Entity.Shield.CanTakeHit(DamageType, Damage))) { hull.SendSplash(Damage, DamageType, Source.Entity, (collider.transform.position - t.position).normalized); } diff --git a/Assets/Scripts/Gameplay/Weapons/Projectile.cs b/Assets/Scripts/Gameplay/Weapons/Projectile.cs index f5c4f7400..31d6d61c1 100644 --- a/Assets/Scripts/Gameplay/Weapons/Projectile.cs +++ b/Assets/Scripts/Gameplay/Weapons/Projectile.cs @@ -61,14 +61,14 @@ public class Projectile : MonoBehaviour var hull = hit.collider.GetComponent(); if (shield) { - if (!(shield.Entity.Shield != null && shield.Entity.Shield.Item.Active && shield.Entity.Shield.CanTakeHit(DamageType, Damage))) continue; + if (!(shield.Entity.Shield != null && shield.Entity.Shield.Item.Active.Value && shield.Entity.Shield.CanTakeHit(DamageType, Damage))) continue; if (shield.Entity != SourceEntity) { shield.Entity.Shield.TakeHit(DamageType, Damage*DirectHitDamageMultiplier); shield.ShowHit(hit.point, sqrt(Damage * DirectHitDamageMultiplier)); } } - else if (hull && !(hull.Entity.Shield != null && hull.Entity.Shield.Item.Active && hull.Entity.Shield.CanTakeHit(DamageType, Damage))) + else if (hull && !(hull.Entity.Shield != null && hull.Entity.Shield.Item.Active.Value && hull.Entity.Shield.CanTakeHit(DamageType, Damage))) { if (hull.Entity != SourceEntity) { diff --git a/Assets/Scripts/ServerShared/Agents/States/Combat.cs b/Assets/Scripts/ServerShared/Agents/States/Combat.cs index f09eee06d..99f6e7449 100644 --- a/Assets/Scripts/ServerShared/Agents/States/Combat.cs +++ b/Assets/Scripts/ServerShared/Agents/States/Combat.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using UniRx; using static Unity.Mathematics.math; using float2 = Unity.Mathematics.float2; using float3 = Unity.Mathematics.float3; @@ -18,8 +19,7 @@ public class CombatState : BaseState SampleDps(); foreach (var weapon in _agent.Ship.Weapons) { - weapon.Item.OnOffline += SampleDps; - weapon.Item.OnOnline += SampleDps; + weapon.Item.Online.Subscribe(b => SampleDps()); } } @@ -38,7 +38,7 @@ public class CombatState : BaseState var group = _agent.Ship.TriggerGroups[i]; var dps = 0f; foreach (var weapon in group.weapons) - if (weapon.Item.Online && + if (weapon.Item.Online.Value && weapon.MinRange < targetDistance && targetDistance < weapon.Range && (weapon is ConstantWeapon || @@ -134,7 +134,7 @@ public class CombatState : BaseState float dps = 0; foreach (var weapon in _agent.Ship.Weapons) { - if (weapon.Item.Online && weapon.MinRange < range && range < weapon.Range) + if (weapon.Item.Online.Value && weapon.MinRange < range && range < weapon.Range) dps += weapon.RangeDamagePerSecond(range); } diff --git a/Assets/Scripts/ServerShared/Behaviors/Capacitor.cs b/Assets/Scripts/ServerShared/Behaviors/Capacitor.cs index 6602f889d..6017711be 100644 --- a/Assets/Scripts/ServerShared/Behaviors/Capacitor.cs +++ b/Assets/Scripts/ServerShared/Behaviors/Capacitor.cs @@ -53,8 +53,8 @@ public class Capacitor : IBehavior public bool Execute(float delta) { - Capacity = Context.Evaluate(_data.Capacity, Item); - Efficiency = Context.Evaluate(_data.Efficiency, Item); + Capacity = Item.Evaluate(_data.Capacity); + Efficiency = Item.Evaluate(_data.Efficiency); return true; } } \ No newline at end of file diff --git a/Assets/Scripts/ServerShared/Behaviors/ChargedWeapon.cs b/Assets/Scripts/ServerShared/Behaviors/ChargedWeapon.cs index 3a468b603..8510e4cde 100644 --- a/Assets/Scripts/ServerShared/Behaviors/ChargedWeapon.cs +++ b/Assets/Scripts/ServerShared/Behaviors/ChargedWeapon.cs @@ -100,9 +100,9 @@ public class ChargedWeapon : InstantWeapon protected override void UpdateStats() { base.UpdateStats(); - ChargeTime = Context.Evaluate(_data.ChargeTime, Item); - ChargeEnergy = Context.Evaluate(_data.ChargeEnergy, Item); - ChargeHeat = Context.Evaluate(_data.ChargeHeat, Item); + ChargeTime = Item.Evaluate(_data.ChargeTime); + ChargeEnergy = Item.Evaluate(_data.ChargeEnergy); + ChargeHeat = Item.Evaluate(_data.ChargeHeat); Damage *= lerp(1, _data.ChargeFiringDamageMultiplier, saturate(_charge)); Heat *= lerp(1, _data.ChargeFiringHeatMultiplier, saturate(_charge)); Spread *= lerp(1, _data.ChargeFiringSpreadMultiplier, saturate(_charge)); diff --git a/Assets/Scripts/ServerShared/Behaviors/ConstantWeapon.cs b/Assets/Scripts/ServerShared/Behaviors/ConstantWeapon.cs index 5ca9f9498..8fdd7301b 100644 --- a/Assets/Scripts/ServerShared/Behaviors/ConstantWeapon.cs +++ b/Assets/Scripts/ServerShared/Behaviors/ConstantWeapon.cs @@ -67,7 +67,7 @@ public class ConstantWeapon : Weapon, IProgressBehavior base.Execute(delta); if (_firing) { - if (!Entity.TryConsumeEnergy(Context.Evaluate(_data.Energy, Item) * delta)) + if (!Entity.TryConsumeEnergy(Item.Evaluate(_data.Energy) * delta)) { _firing = false; OnStopFiring?.Invoke(); @@ -115,9 +115,9 @@ public class ConstantWeapon : Weapon, IProgressBehavior } } - Item.EquippableItem.Durability -= Wear * delta; - Item.AddHeat(Context.Evaluate(_data.Heat, Item) * delta); - Entity.VisibilitySources[this] = Context.Evaluate(_data.Visibility, Item); + Item.EquippableItem.Durability -= Item.Wear * delta; + Item.AddHeat(Item.Evaluate(_data.Heat) * delta); + Entity.VisibilitySources[this] = Item.Evaluate(_data.Visibility); } return true; } diff --git a/Assets/Scripts/ServerShared/Behaviors/Cooldown.cs b/Assets/Scripts/ServerShared/Behaviors/Cooldown.cs index ba16a09c8..36c63226b 100644 --- a/Assets/Scripts/ServerShared/Behaviors/Cooldown.cs +++ b/Assets/Scripts/ServerShared/Behaviors/Cooldown.cs @@ -56,6 +56,6 @@ public class Cooldown : IBehavior, IAlwaysUpdatedBehavior, IProgressBehavior public void Update(float delta) { - _cooldown -= delta / Context.Evaluate(_data.Cooldown, Item); + _cooldown -= delta / Item.Evaluate(_data.Cooldown); } } \ No newline at end of file diff --git a/Assets/Scripts/ServerShared/Behaviors/EnergyDraw.cs b/Assets/Scripts/ServerShared/Behaviors/EnergyDraw.cs index 68b9dac66..dc5094d08 100644 --- a/Assets/Scripts/ServerShared/Behaviors/EnergyDraw.cs +++ b/Assets/Scripts/ServerShared/Behaviors/EnergyDraw.cs @@ -42,6 +42,6 @@ public class EnergyDraw : IBehavior public bool Execute(float delta) { - return Entity.TryConsumeEnergy(Context.Evaluate(_data.EnergyDraw, Item) * (_data.PerSecond ? delta : 1)); + return Entity.TryConsumeEnergy(Item.Evaluate(_data.EnergyDraw) * (_data.PerSecond ? delta : 1)); } } \ No newline at end of file diff --git a/Assets/Scripts/ServerShared/Behaviors/Heat.cs b/Assets/Scripts/ServerShared/Behaviors/Heat.cs index 3f9dd6e2e..b135c32fd 100644 --- a/Assets/Scripts/ServerShared/Behaviors/Heat.cs +++ b/Assets/Scripts/ServerShared/Behaviors/Heat.cs @@ -42,7 +42,7 @@ public class Heat : IBehavior public bool Execute(float delta) { - Item.AddHeat(Context.Evaluate(_data.Heat, Item) * (_data.PerSecond ? delta : 1)); + Item.AddHeat(Item.Evaluate(_data.Heat) * (_data.PerSecond ? delta : 1)); return true; } diff --git a/Assets/Scripts/ServerShared/Behaviors/InstantWeapon.cs b/Assets/Scripts/ServerShared/Behaviors/InstantWeapon.cs index 63dc23e72..f09e5c409 100644 --- a/Assets/Scripts/ServerShared/Behaviors/InstantWeapon.cs +++ b/Assets/Scripts/ServerShared/Behaviors/InstantWeapon.cs @@ -92,9 +92,9 @@ public class InstantWeapon : Weapon, IProgressBehavior protected override void UpdateStats() { base.UpdateStats(); - BurstCount = Context.Evaluate(_data.Count, Item); - BurstTime = Context.Evaluate(_data.BurstTime, Item); - Cooldown = Context.Evaluate(_data.Cooldown, Item); + BurstCount = Item.Evaluate(_data.Count); + BurstTime = Item.Evaluate(_data.BurstTime); + Cooldown = Item.Evaluate(_data.Cooldown); Damage /= (int) BurstCount; Heat /= (int) BurstCount; @@ -165,7 +165,7 @@ public class InstantWeapon : Weapon, IProgressBehavior _burstRemaining--; _burstTimer -= _burstInterval; OnFire?.Invoke(); - Item.EquippableItem.Durability -= Wear; + Item.EquippableItem.Durability -= Item.Wear; Item.AddHeat(Heat); Entity.VisibilitySources[this] = Visibility; } diff --git a/Assets/Scripts/ServerShared/Behaviors/LockWeapon.cs b/Assets/Scripts/ServerShared/Behaviors/LockWeapon.cs index aeca0fad2..f030ed23c 100644 --- a/Assets/Scripts/ServerShared/Behaviors/LockWeapon.cs +++ b/Assets/Scripts/ServerShared/Behaviors/LockWeapon.cs @@ -71,11 +71,11 @@ public class LockWeapon : InstantWeapon if (Entity.Target.Value != null) { - LockSpeed = Context.Evaluate(_data.LockSpeed, Item); - SensorImpact = Context.Evaluate(_data.SensorImpact, Item); - LockAngle = Context.Evaluate(_data.LockAngle, Item); - DirectionImpact = Context.Evaluate(_data.DirectionImpact, Item); - Decay = Context.Evaluate(_data.Decay, Item); + LockSpeed = Item.Evaluate(_data.LockSpeed); + SensorImpact = Item.Evaluate(_data.SensorImpact); + LockAngle = Item.Evaluate(_data.LockAngle); + DirectionImpact = Item.Evaluate(_data.DirectionImpact); + Decay = Item.Evaluate(_data.Decay); var degrees = acos(dot(normalize(Entity.Target.Value.Position - Entity.Position), normalize(Entity.LookDirection))) * 57.2958f; if (degrees < LockAngle) diff --git a/Assets/Scripts/ServerShared/Behaviors/MiningTool.cs b/Assets/Scripts/ServerShared/Behaviors/MiningTool.cs index 651b2d7db..5c71e2d16 100644 --- a/Assets/Scripts/ServerShared/Behaviors/MiningTool.cs +++ b/Assets/Scripts/ServerShared/Behaviors/MiningTool.cs @@ -54,7 +54,7 @@ public class MiningTool : IBehavior public bool Execute(float delta) { - Range = Context.Evaluate(_data.Range, Item); + Range = Item.Evaluate(_data.Range); var belt = Entity.Zone.AsteroidBelts[AsteroidBelt]; if (AsteroidBelt != Guid.Empty && Entity.Zone.AsteroidExists(AsteroidBelt, Asteroid) && @@ -64,9 +64,9 @@ public class MiningTool : IBehavior Entity, AsteroidBelt, Asteroid, - Context.Evaluate(_data.DamagePerSecond, Item) * delta, - Context.Evaluate(_data.Efficiency, Item), - Context.Evaluate(_data.Penetration, Item)); + Item.Evaluate(_data.DamagePerSecond) * delta, + Item.Evaluate(_data.Efficiency), + Item.Evaluate(_data.Penetration)); return true; } diff --git a/Assets/Scripts/ServerShared/Behaviors/Radiator.cs b/Assets/Scripts/ServerShared/Behaviors/Radiator.cs index 30f50c653..7365a5d28 100644 --- a/Assets/Scripts/ServerShared/Behaviors/Radiator.cs +++ b/Assets/Scripts/ServerShared/Behaviors/Radiator.cs @@ -57,9 +57,9 @@ public class Radiator : IBehavior, IAlwaysUpdatedBehavior, IInitializableBehavio public bool Execute(float delta) { - PumpedHeat = Context.Evaluate(_data.PumpedHeat, Item); - WasteHeat = Context.Evaluate(_data.WasteHeat, Item); - EnergyUsage = Context.Evaluate(_data.EnergyUsage, Item); + PumpedHeat = Item.Evaluate(_data.PumpedHeat); + WasteHeat = Item.Evaluate(_data.WasteHeat); + EnergyUsage = Item.Evaluate(_data.EnergyUsage); var itemTemperature = Item.Temperature; var tempRatio = max(Temperature / itemTemperature, 1); @@ -84,7 +84,7 @@ public class Radiator : IBehavior, IAlwaysUpdatedBehavior, IInitializableBehavio public void Update(float delta) { - Emissivity = Context.Evaluate(_data.Emissivity, Item); + Emissivity = Item.Evaluate(_data.Emissivity); var rad = pow(Temperature, Context.GameplaySettings.HeatRadiationExponent) * Context.GameplaySettings.HeatRadiationMultiplier * Emissivity; Temperature -= rad * delta; Entity.VisibilitySources[this] = rad; diff --git a/Assets/Scripts/ServerShared/Behaviors/Reactor.cs b/Assets/Scripts/ServerShared/Behaviors/Reactor.cs index 4659fe3ee..9f2d3c3f7 100644 --- a/Assets/Scripts/ServerShared/Behaviors/Reactor.cs +++ b/Assets/Scripts/ServerShared/Behaviors/Reactor.cs @@ -74,8 +74,8 @@ public class Reactor : IBehavior, IOrderedBehavior public bool Execute(float delta) { - var charge = Context.Evaluate(_data.Charge, Item) * delta; - var efficiency = Context.Evaluate(_data.Efficiency, Item); + var charge = Item.Evaluate(_data.Charge) * delta; + var efficiency = Item.Evaluate(_data.Efficiency); // This behavior executes last, so any components drawing power have already done so @@ -88,7 +88,7 @@ public class Reactor : IBehavior, IOrderedBehavior // We have an energy deficit, have to overload the reactor if (Draw > .01f) { - var overloadEfficiency = Context.Evaluate(_data.OverloadEfficiency, Item); + var overloadEfficiency = Item.Evaluate(_data.OverloadEfficiency); // Generate heat using overload efficiency, usually much less efficient! heat += Draw / overloadEfficiency; @@ -120,7 +120,7 @@ public class Reactor : IBehavior, IOrderedBehavior // We still have an energy surplus, try to throttle the reactor to reduce heat generation if (Draw < -.01f) { - heat -= Draw / efficiency * (1 - 1 / Context.Evaluate(_data.ThrottlingFactor, Item)); + heat -= Draw / efficiency * (1 - 1 / Item.Evaluate(_data.ThrottlingFactor)); Draw = 0; } diff --git a/Assets/Scripts/ServerShared/Behaviors/ResourceScanner.cs b/Assets/Scripts/ServerShared/Behaviors/ResourceScanner.cs index d6737adef..fa20a6b97 100644 --- a/Assets/Scripts/ServerShared/Behaviors/ResourceScanner.cs +++ b/Assets/Scripts/ServerShared/Behaviors/ResourceScanner.cs @@ -105,8 +105,8 @@ public class ResourceScanner : IBehavior, IAlwaysUpdatedBehavior public void Update(float delta) { - Range = Context.Evaluate(_data.Range, Item); - MinimumDensity = Context.Evaluate(_data.MinimumDensity, Item); - ScanDuration = Context.Evaluate(_data.ScanDuration, Item); + Range = Item.Evaluate(_data.Range); + MinimumDensity = Item.Evaluate(_data.MinimumDensity); + ScanDuration = Item.Evaluate(_data.ScanDuration); } } \ No newline at end of file diff --git a/Assets/Scripts/ServerShared/Behaviors/Sensor.cs b/Assets/Scripts/ServerShared/Behaviors/Sensor.cs index 62476cca4..5f91642b7 100644 --- a/Assets/Scripts/ServerShared/Behaviors/Sensor.cs +++ b/Assets/Scripts/ServerShared/Behaviors/Sensor.cs @@ -59,7 +59,7 @@ public class Sensor : IBehavior var next = saturate( previous + entity.Visibility * - Context.Evaluate(_data.Sensitivity, Item) * + Item.Evaluate(_data.Sensitivity) * _data.SensitivityCurve.Evaluate(angle / PI) * delta / dist); next *= 1 - Context.GameplaySettings.TargetInfoDecay * delta; diff --git a/Assets/Scripts/ServerShared/Behaviors/Shield.cs b/Assets/Scripts/ServerShared/Behaviors/Shield.cs index ca7207e5d..e27fafe46 100644 --- a/Assets/Scripts/ServerShared/Behaviors/Shield.cs +++ b/Assets/Scripts/ServerShared/Behaviors/Shield.cs @@ -45,8 +45,8 @@ public class Shield : IBehavior public bool Execute(float delta) { - Efficiency = Context.Evaluate(_data.Efficiency, Item); - EnergyUsage = Context.Evaluate(_data.EnergyUsage, Item); + Efficiency = Item.Evaluate(_data.Efficiency); + EnergyUsage = Item.Evaluate(_data.EnergyUsage); return true; } diff --git a/Assets/Scripts/ServerShared/Behaviors/StatModifier.cs b/Assets/Scripts/ServerShared/Behaviors/StatModifier.cs index e2d9d9b18..3a1464872 100644 --- a/Assets/Scripts/ServerShared/Behaviors/StatModifier.cs +++ b/Assets/Scripts/ServerShared/Behaviors/StatModifier.cs @@ -86,7 +86,7 @@ public class StatModifier : IBehavior, IInitializableBehavior, IDisposableBehavi foreach (var stat in _stats) (_data.Type == StatModifierType.Constant ? stat.GetConstantModifiers(Entity) - : stat.GetScaleModifiers(Entity))[this] = Context.Evaluate(_data.Modifier, Item); + : stat.GetScaleModifiers(Entity))[this] = Item.Evaluate(_data.Modifier); return true; } diff --git a/Assets/Scripts/ServerShared/Behaviors/Thruster.cs b/Assets/Scripts/ServerShared/Behaviors/Thruster.cs index 2cf70147b..c738ce8f9 100644 --- a/Assets/Scripts/ServerShared/Behaviors/Thruster.cs +++ b/Assets/Scripts/ServerShared/Behaviors/Thruster.cs @@ -61,16 +61,16 @@ public class Thruster : IAnalogBehavior var itemCenter = hullData.Shape.Inset(itemData.Shape, item.Position, item.EquippableItem.Rotation).CenterOfMass; var toCenter = hullCenter - itemCenter; Torque = -dot(normalize(toCenter), float2(1, 0).Rotate(item.EquippableItem.Rotation)); - Thrust = Context.Evaluate(_data.Thrust, Item); + Thrust = Item.Evaluate(_data.Thrust); } public bool Execute(float delta) { - Thrust = Context.Evaluate(_data.Thrust, Item); + Thrust = Item.Evaluate(_data.Thrust); Entity.Velocity -= Entity.Direction.Rotate(Item.EquippableItem.Rotation) * _input * Thrust / Entity.Mass * delta; Entity.Direction = mul(Entity.Direction, Unity.Mathematics.float2x2.Rotate(_input * Torque * Thrust * Context.GameplaySettings.TorqueMultiplier / Entity.Mass * delta)); - Item.AddHeat(_input * Context.Evaluate(_data.Heat, Item) * delta); - var vis = _input * Context.Evaluate(_data.Visibility, Item); + Item.AddHeat(_input * Item.Evaluate(_data.Heat) * delta); + var vis = _input * Item.Evaluate(_data.Visibility); if(!Entity.VisibilitySources.ContainsKey(this) || vis > Entity.VisibilitySources[this]) Entity.VisibilitySources[this] = vis; return _input > .01f; diff --git a/Assets/Scripts/ServerShared/Behaviors/TurretController.cs b/Assets/Scripts/ServerShared/Behaviors/TurretController.cs index ccfcd53e7..f9496e49a 100644 --- a/Assets/Scripts/ServerShared/Behaviors/TurretController.cs +++ b/Assets/Scripts/ServerShared/Behaviors/TurretController.cs @@ -60,7 +60,7 @@ public class TurretController : IBehavior if (b is Weapon weapon) { _weapons.Add(weapon); - var vel = Context.Evaluate(weapon.WeaponData.Velocity, item); + var vel = weapon.Item.Evaluate(weapon.WeaponData.Velocity); if (vel > .1f) { _predictShots = true; @@ -95,7 +95,7 @@ public class TurretController : IBehavior var fire = dot( EquippedEntity.HardpointTransforms[EquippedEntity.Hardpoints[x.Item.Position.x, x.Item.Position.y]].direction, EquippedEntity.LookDirection) > .99f; - if (Context.Evaluate(data.Range, x.Item) > dist && fire) + if (x.Item.Evaluate(data.Range) > dist && fire) { x.Activate(); } diff --git a/Assets/Scripts/ServerShared/Behaviors/VelocityLimit.cs b/Assets/Scripts/ServerShared/Behaviors/VelocityLimit.cs index 4f7417a72..e36700cdf 100644 --- a/Assets/Scripts/ServerShared/Behaviors/VelocityLimit.cs +++ b/Assets/Scripts/ServerShared/Behaviors/VelocityLimit.cs @@ -46,7 +46,7 @@ public class VelocityLimit : IBehavior public bool Execute(float delta) { - Limit = Context.Evaluate(_data.TopSpeed, Item); + Limit = Item.Evaluate(_data.TopSpeed); if (length(Entity.Velocity) > Limit) Entity.Velocity = normalize(Entity.Velocity) * Limit; return true; diff --git a/Assets/Scripts/ServerShared/Behaviors/Visibility.cs b/Assets/Scripts/ServerShared/Behaviors/Visibility.cs index 62fa242ca..735bf5040 100644 --- a/Assets/Scripts/ServerShared/Behaviors/Visibility.cs +++ b/Assets/Scripts/ServerShared/Behaviors/Visibility.cs @@ -44,7 +44,7 @@ public class Visibility : IBehavior, IAlwaysUpdatedBehavior public bool Execute(float delta) { - Entity.VisibilitySources[this] = Context.Evaluate(_data.Visibility, Item); + Entity.VisibilitySources[this] = Item.Evaluate(_data.Visibility); return true; } @@ -53,7 +53,7 @@ public class Visibility : IBehavior, IAlwaysUpdatedBehavior // TODO: Time independent decay? if(Entity.VisibilitySources.ContainsKey(this)) { - Entity.VisibilitySources[this] *= Context.Evaluate(_data.VisibilityDecay, Item); + Entity.VisibilitySources[this] *= Item.Evaluate(_data.VisibilityDecay); } } } \ No newline at end of file diff --git a/Assets/Scripts/ServerShared/Behaviors/Weapon.cs b/Assets/Scripts/ServerShared/Behaviors/Weapon.cs index 3762e3672..6e599384a 100644 --- a/Assets/Scripts/ServerShared/Behaviors/Weapon.cs +++ b/Assets/Scripts/ServerShared/Behaviors/Weapon.cs @@ -91,7 +91,6 @@ public abstract class Weapon : IActivatedBehavior public float Visibility { get; protected set; } public float Spread { get; protected set; } public float Velocity { get; protected set; } - public float Wear { get; protected set; } protected bool _firing; @@ -114,20 +113,16 @@ public abstract class Weapon : IActivatedBehavior protected virtual void UpdateStats() { - Damage = Context.Evaluate(_data.Damage, Item); - Penetration = Context.Evaluate(_data.Penetration, Item); - DamageSpread = Context.Evaluate(_data.DamageSpread, Item); - MinRange = Context.Evaluate(_data.MinRange, Item); - Range = Context.Evaluate(_data.Range, Item); - Energy = Context.Evaluate(_data.Energy, Item); - Heat = Context.Evaluate(_data.Heat, Item); - Visibility = Context.Evaluate(_data.Visibility, Item); - Spread = Context.Evaluate(_data.Spread, Item); - Velocity = Context.Evaluate(_data.Velocity, Item); - Wear = (1 - pow(_itemData.Performance(Item.Temperature), - (1 - pow(Item.EquippableItem.Quality, Context.GameplaySettings.QualityWearExponent)) * - Context.GameplaySettings.ThermalWearExponent) - ) * _itemData.Durability; + Damage = Item.Evaluate(_data.Damage); + Penetration = Item.Evaluate(_data.Penetration); + DamageSpread = Item.Evaluate(_data.DamageSpread); + MinRange = Item.Evaluate(_data.MinRange); + Range = Item.Evaluate(_data.Range); + Energy = Item.Evaluate(_data.Energy); + Heat = Item.Evaluate(_data.Heat); + Visibility = Item.Evaluate(_data.Visibility); + Spread = Item.Evaluate(_data.Spread); + Velocity = Item.Evaluate(_data.Velocity); } public virtual bool Execute(float delta) diff --git a/Assets/Scripts/ServerShared/Behaviors/Wear.cs b/Assets/Scripts/ServerShared/Behaviors/Wear.cs index 8b6e68567..1062d0b26 100644 --- a/Assets/Scripts/ServerShared/Behaviors/Wear.cs +++ b/Assets/Scripts/ServerShared/Behaviors/Wear.cs @@ -42,12 +42,9 @@ public class Wear : IBehavior public bool Execute(float delta) { - var wear = (1 - pow(_itemData.Performance(Item.Temperature), - (1 - pow(Item.EquippableItem.Quality, Context.GameplaySettings.QualityWearExponent)) * - Context.GameplaySettings.ThermalWearExponent) - ) * _itemData.Durability / _itemData.ThermalResilience; - if (_data.PerSecond) wear *= delta; - Item.EquippableItem.Durability -= wear; + if (_data.PerSecond) + Item.EquippableItem.Durability -= Item.Wear * delta; + else Item.EquippableItem.Durability -= Item.Wear; return true; } } \ No newline at end of file diff --git a/Assets/Scripts/ServerShared/DatabaseCache.cs b/Assets/Scripts/ServerShared/DatabaseCache.cs index 0469e3817..e55358c3f 100644 --- a/Assets/Scripts/ServerShared/DatabaseCache.cs +++ b/Assets/Scripts/ServerShared/DatabaseCache.cs @@ -109,7 +109,7 @@ public class DatabaseCache public void Load(string path) { RegisterResolver.Register(); - var bytes = File.ReadAllBytes(Path.Combine(path, "AetherDB.msgpack")); + var bytes = File.ReadAllBytes(path); var entries = MessagePackSerializer.Deserialize(bytes); AddAll(entries); } diff --git a/Assets/Scripts/ServerShared/Entity.cs b/Assets/Scripts/ServerShared/Entity.cs index 02a4259a5..89b4099c4 100644 --- a/Assets/Scripts/ServerShared/Entity.cs +++ b/Assets/Scripts/ServerShared/Entity.cs @@ -22,6 +22,7 @@ public abstract class Entity { public Zone Zone; public MegaCorporation Faction; + public PlayerSettings PlayerSettings; public EquippableItem Hull; public float3 Position; @@ -82,10 +83,12 @@ public abstract class Entity if (value == _heatsinksEnabled) return; _heatsinksEnabled = value; foreach (var heatsink in _heatsinks) - heatsink.Item.Enabled = value; + heatsink.Item.Enabled.Value = value; } } + public bool OverrideShutdown { get; set; } + public bool Active { get => _active; @@ -110,8 +113,8 @@ public abstract class Entity public Subject<(int2 pos, float damage)> ArmorDamage = new Subject<(int2, float)>(); public Subject<(EquippedItem item, float damage)> ItemDamage = new Subject<(EquippedItem, float)>(); - public Subject ItemOffline = new Subject(); - public Subject ItemOnline = new Subject(); + // public Subject ItemOffline = new Subject(); + // public Subject ItemOnline = new Subject(); public Subject HullDamage = new Subject(); public Subject Docked = new Subject(); public Subject HeatstrokeRisk = new Subject(); @@ -543,8 +546,8 @@ public abstract class Entity Cockpit = cockpit; } - equippedItem.OnOnline += () => ItemOnline.OnNext(equippedItem); - equippedItem.OnOffline += () => ItemOffline.OnNext(equippedItem); + // equippedItem.OnOnline += () => ItemOnline.OnNext(equippedItem); + // equippedItem.OnOffline += () => ItemOffline.OnNext(equippedItem); foreach (var i in itemData.Shape.Coordinates) { @@ -597,7 +600,7 @@ public abstract class Entity public bool CanConsumeEnergy(float energy) { var capEnergy = _capacitors.Sum(cap => cap.Charge); - int onlineReactors = _reactors.Count(reactor=>reactor.Item.Online); + int onlineReactors = _reactors.Count(reactor=>reactor.Item.Online.Value); return capEnergy > energy || onlineReactors > 0; } @@ -622,10 +625,10 @@ public abstract class Entity if (energy < .01f) return true; - int onlineReactors = _reactors.Count(reactor=>reactor.Item.Online); + int onlineReactors = _reactors.Count(reactor=>reactor.Item.Online.Value); foreach (var reactor in _reactors) { - if (reactor.Item.Online) + if (reactor.Item.Online.Value) { reactor.ConsumeEnergy(energy / onlineReactors); } @@ -877,67 +880,66 @@ public abstract class Entity public class EquippedItem { + public int SortPosition; public EquippableItem EquippableItem; - public int2 Position; - - public IBehavior[] Behaviors; - public Dictionary BehaviorGroups; - public bool Enabled = true; - - public event Action OnOffline; - public event Action OnOnline; + private bool _thermalOnline; + private bool _durabilityOnline; + public IBehavior[] Behaviors { get; } public float Conductivity { get; } - + public float ThermalPerformance { get; private set; } + public float ThermalExponent { get; } + public float DurabilityPerformance { get; private set; } + public float DurabilityExponent { get; } + public float Wear { get; private set; } public Shape InsetShape { get; } + public Entity Entity { get; } + public EquippableItemData Data { get; } - public int SortPosition; - - public bool Active - { - get => _online && Enabled; - } + public ReactiveProperty ThermalOnline { get; } = new ReactiveProperty(false); + public ReactiveProperty DurabilityOnline { get; } = new ReactiveProperty(false); + public ReadOnlyReactiveProperty Online { get; } + public ReactiveProperty Enabled { get; } = new ReactiveProperty(true); + public ReadOnlyReactiveProperty Active { get; } - public bool Online - { - get => _online; - } public float Temperature { get { float sum = 0; - foreach (var x in InsetShape.Coordinates) sum += _entity.Temperature[x.x, x.y]; + foreach (var x in InsetShape.Coordinates) sum += Entity.Temperature[x.x, x.y]; return sum/InsetShape.Coordinates.Length; } } - public Entity Entity - { - get => _entity; - } protected readonly ItemManager _itemManager; - private readonly EquippableItemData _data; - private Entity _entity; - private bool _online; + //private bool _online; public EquippedItem(ItemManager itemManager, EquippableItem item, int2 position, Entity entity) { _itemManager = itemManager; - _data = _itemManager.GetData(item); - _entity = entity; + Data = _itemManager.GetData(item); + Entity = entity; EquippableItem = item; Position = position; - Conductivity = _data.Conductivity; + Conductivity = Data.Conductivity; + ThermalExponent = _itemManager.Evaluate(Data.HeatExponent, EquippableItem); + DurabilityExponent = _itemManager.Evaluate(Data.DurabilityExponent, EquippableItem); var hullData = itemManager.GetData(entity.Hull); - InsetShape = hullData.Shape.Inset(_data.Shape, position, item.Rotation); + InsetShape = hullData.Shape.Inset(Data.Shape, position, item.Rotation); - Behaviors = _data.Behaviors + Online = new ReadOnlyReactiveProperty(ThermalOnline + .CombineLatest(DurabilityOnline, (thermal, durability) => thermal && durability).DistinctUntilChanged()); + Active = new ReadOnlyReactiveProperty(Enabled + .CombineLatest(Online, (enabled, online) => enabled && online).DistinctUntilChanged()); + + + Behaviors = Data.Behaviors .Select(bd => bd.CreateInstance(itemManager, entity, this)) .ToArray(); @@ -946,9 +948,7 @@ public class EquippedItem .OrderBy(g => g.Key) .ToDictionary(g => g.Key, g => new BehaviorGroup { - Behaviors = g.ToArray(), - // Switch = (Switch) g.FirstOrDefault(b => b is Switch), - // Trigger = (Trigger) g.FirstOrDefault(b => b is Trigger) + Behaviors = g.ToArray() }); foreach (var behavior in Behaviors) @@ -960,10 +960,32 @@ public class EquippedItem } } + public float Evaluate(PerformanceStat stat) + { + var heat = 1f; + if(stat.HeatDependent) + heat = pow(ThermalPerformance, ThermalExponent * stat.HeatExponentMultiplier); + var durability = 1f; + if(stat.DurabilityDependent) + durability = pow(DurabilityPerformance, DurabilityExponent); + var quality = pow(_itemManager.Quality(stat, EquippableItem), stat.QualityExponent); + + var scaleModifier = 1.0f; + foreach (var value in stat.GetScaleModifiers(Entity).Values) scaleModifier = scaleModifier * value; + + float constantModifier = 0; + foreach (var value in stat.GetConstantModifiers(Entity).Values) constantModifier += value; + + var result = lerp(stat.Min, stat.Max, durability * quality * heat) * scaleModifier + constantModifier; + if (float.IsNaN(result)) + return stat.Min; + return result; + } + public void AddHeat(float heat, bool ignoreThermalMass = false) { foreach(var hullCoord in InsetShape.Coordinates) - _entity.AddHeat(hullCoord, heat / InsetShape.Coordinates.Length, ignoreThermalMass); + Entity.AddHeat(hullCoord, heat / InsetShape.Coordinates.Length, ignoreThermalMass); } public void Update(float delta) @@ -971,13 +993,18 @@ public class EquippedItem foreach (var behavior in Behaviors) if(behavior is IAlwaysUpdatedBehavior alwaysUpdatedBehavior) alwaysUpdatedBehavior.Update(delta); - var previouslyOnline = _online; - _online = EquippableItem.Durability > .01f && Temperature > _data.MinimumTemperature && Temperature < _data.MaximumTemperature; + var temp = Temperature; + ThermalPerformance = Data.Performance(temp); + DurabilityPerformance = EquippableItem.Durability / Data.Durability; + var performanceThreshold = Entity.PlayerSettings?.ShutdownPerformance ?? _itemManager.GameplaySettings.DefaultShutdownPerformance; + Wear = (1 - pow(Data.Performance(temp), + (1 - pow(_itemManager.CompoundQuality(EquippableItem), _itemManager.GameplaySettings.QualityWearExponent)) * + _itemManager.GameplaySettings.ThermalWearExponent) + ) * Data.Durability / Data.ThermalResilience; + ThermalOnline.Value = ThermalPerformance > performanceThreshold || Entity.OverrideShutdown && EquippableItem.OverrideShutdown; + DurabilityOnline.Value = EquippableItem.Durability > .01f; - if (!previouslyOnline && _online) OnOnline?.Invoke(); - if (previouslyOnline && !_online) OnOffline?.Invoke(); - - if (Active) + if (Active.Value) { foreach (var group in BehaviorGroups.Values) { diff --git a/Assets/Scripts/ServerShared/ItemInstance.cs b/Assets/Scripts/ServerShared/ItemInstance.cs index b8bb5f3cb..b76b535ba 100644 --- a/Assets/Scripts/ServerShared/ItemInstance.cs +++ b/Assets/Scripts/ServerShared/ItemInstance.cs @@ -55,5 +55,6 @@ public class SimpleCommodity : ItemInstance [MessagePackObject, JsonObject(MemberSerialization.OptIn)] public class EquippableItem : CraftedItemInstance { - [JsonProperty("durability"), Key(7)] public float Durability; + [JsonProperty("durability"), Key(7)] public float Durability; + [JsonProperty("override"), Key(8)] public bool OverrideShutdown; } \ No newline at end of file diff --git a/Assets/Scripts/ServerShared/ItemManager.cs b/Assets/Scripts/ServerShared/ItemManager.cs index ffb1f903c..a939851ce 100644 --- a/Assets/Scripts/ServerShared/ItemManager.cs +++ b/Assets/Scripts/ServerShared/ItemManager.cs @@ -272,27 +272,6 @@ public class ItemManager return result; } - // Returns stat using ship temperature and modifiers - public float Evaluate(PerformanceStat stat, EquippedItem item) - { - var itemData = GetData(item.EquippableItem); - - var heat = !stat.HeatDependent ? 1 : pow(itemData.Performance(item.Temperature), Evaluate(itemData.HeatExponent, item.EquippableItem) * stat.HeatExponentMultiplier); - var durability = !stat.DurabilityDependent ? 1 : pow(item.EquippableItem.Durability / itemData.Durability, Evaluate(itemData.DurabilityExponent,item.EquippableItem)); - var quality = pow(Quality(stat, item.EquippableItem), stat.QualityExponent); - - var scaleModifier = 1.0f; - foreach (var value in stat.GetScaleModifiers(item.Entity).Values) scaleModifier = scaleModifier * value; - - float constantModifier = 0; - foreach (var value in stat.GetConstantModifiers(item.Entity).Values) constantModifier += value; - - var result = lerp(stat.Min, stat.Max, durability * quality * heat) * scaleModifier + constantModifier; - if (float.IsNaN(result)) - return stat.Min; - return result; - } - // public Entity CreateEntity(Guid zoneID, Guid corporation, Guid loadout) // { // if (!(ItemData.Get(loadout) is LoadoutData loadoutData)) diff --git a/Assets/Scripts/ServerShared/PlayerSettings.cs b/Assets/Scripts/ServerShared/PlayerSettings.cs new file mode 100644 index 000000000..1c0ed1f44 --- /dev/null +++ b/Assets/Scripts/ServerShared/PlayerSettings.cs @@ -0,0 +1,12 @@ +using System; +using MessagePack; + +[MessagePackObject, Serializable] +public class PlayerSettings +{ + [Key(0)] + public string Name; + + [Key(1)] + public float ShutdownPerformance = .25f; +} \ No newline at end of file diff --git a/Assets/Scripts/ServerShared/PlayerSettings.cs.meta b/Assets/Scripts/ServerShared/PlayerSettings.cs.meta new file mode 100644 index 000000000..3d9224fb5 --- /dev/null +++ b/Assets/Scripts/ServerShared/PlayerSettings.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ae0b9ef04d124cd5b5dbc098681b7fc2 +timeCreated: 1615064445 \ No newline at end of file diff --git a/Assets/Scripts/ServerShared/Settings.cs b/Assets/Scripts/ServerShared/Settings.cs index 95af78cb2..580952b7c 100644 --- a/Assets/Scripts/ServerShared/Settings.cs +++ b/Assets/Scripts/ServerShared/Settings.cs @@ -88,6 +88,7 @@ public class ZoneGenerationSettings [Serializable, MessagePackObject(keyAsPropertyName: true), JsonObject] public class GameplaySettings { + public float DefaultShutdownPerformance = .25f; public float SevereHeatstrokeRiskThreshold = .25f; public float WormholeDepth = 1000; public float WormholeExitVelocity = 20; diff --git a/Assets/Scripts/ServerShared/Ship.cs b/Assets/Scripts/ServerShared/Ship.cs index 479d296df..2170f5f59 100644 --- a/Assets/Scripts/ServerShared/Ship.cs +++ b/Assets/Scripts/ServerShared/Ship.cs @@ -94,26 +94,38 @@ public class Ship : Entity _forwardThrusters = new HashSet(_allThrusters .Where(x => x.Item.EquippableItem.Rotation == ItemRotation.Reversed)); RecalculateForwardThrust(); - + foreach (var thruster in _forwardThrusters) + thruster.Item.Online.Skip(1).Subscribe(b => RecalculateForwardThrust()); + _reverseThrusters = new HashSet(_allThrusters .Where(x => x.Item.EquippableItem.Rotation == ItemRotation.None)); RecalculateReverseThrust(); + foreach (var thruster in _reverseThrusters) + thruster.Item.Online.Skip(1).Subscribe(b => RecalculateReverseThrust()); _rightThrusters = new HashSet(_allThrusters .Where(x => x.Item.EquippableItem.Rotation == ItemRotation.CounterClockwise)); RecalculateRightStrafeThrust(); + foreach (var thruster in _rightThrusters) + thruster.Item.Online.Skip(1).Subscribe(b => RecalculateRightStrafeThrust()); _leftThrusters = new HashSet(_allThrusters .Where(x => x.Item.EquippableItem.Rotation == ItemRotation.Clockwise)); RecalculateLeftStrafeThrust(); + foreach (var thruster in _leftThrusters) + thruster.Item.Online.Skip(1).Subscribe(b => RecalculateLeftStrafeThrust()); _counterClockwiseThrusters = new HashSet(_allThrusters .Where(x => x.Torque < -ItemManager.GameplaySettings.TorqueFloor)); RecalculateCounterClockwiseTorque(); + foreach (var thruster in _counterClockwiseThrusters) + thruster.Item.Online.Skip(1).Subscribe(b => RecalculateCounterClockwiseTorque()); _clockwiseThrusters = new HashSet(_allThrusters .Where(x => x.Torque > ItemManager.GameplaySettings.TorqueFloor)); RecalculateClockwiseTorque(); + foreach (var thruster in _clockwiseThrusters) + thruster.Item.Online.Skip(1).Subscribe(b => RecalculateClockwiseTorque()); } public Ship(ItemManager itemManager, Zone zone, EquippableItem hull) : base(itemManager, zone, hull) @@ -138,8 +150,6 @@ public class Ship : Entity } ItemDamage.Select(x => x.item).Subscribe(CheckForThruster); - ItemOffline.Subscribe(CheckForThruster); - ItemOnline.Subscribe(CheckForThruster); } #region ThrustCalculation @@ -149,7 +159,7 @@ public class Ship : Entity ForwardThrust = 0; foreach (var thruster in _forwardThrusters) { - if(thruster.Item.Online) + if(thruster.Item.Active.Value) ForwardThrust += thruster.Thrust; } } @@ -159,7 +169,7 @@ public class Ship : Entity ReverseThrust = 0; foreach (var thruster in _reverseThrusters) { - if(thruster.Item.Online) + if(thruster.Item.Active.Value) ReverseThrust += thruster.Thrust; } } @@ -170,7 +180,7 @@ public class Ship : Entity LeftStrafeTotalTorque = 0; foreach (var thruster in _leftThrusters) { - if(thruster.Item.Online) + if(thruster.Item.Active.Value) { LeftStrafeThrust += thruster.Thrust; LeftStrafeTotalTorque += thruster.Torque * thruster.Thrust; @@ -187,7 +197,7 @@ public class Ship : Entity RightStrafeTotalTorque = 0; foreach (var thruster in _rightThrusters) { - if(thruster.Item.Online) + if(thruster.Item.Active.Value) { RightStrafeThrust += thruster.Thrust; RightStrafeTotalTorque += thruster.Torque * thruster.Thrust; @@ -203,7 +213,7 @@ public class Ship : Entity ClockwiseTorque = 0; foreach (var thruster in _clockwiseThrusters) { - if(thruster.Item.Online) + if(thruster.Item.Active.Value) ClockwiseTorque += thruster.Torque; } } @@ -213,7 +223,7 @@ public class Ship : Entity CounterClockwiseTorque = 0; foreach (var thruster in _counterClockwiseThrusters) { - if(thruster.Item.Online) + if(thruster.Item.Active.Value) CounterClockwiseTorque -= thruster.Torque; } } diff --git a/Assets/Scripts/UI/InventoryMenu.cs b/Assets/Scripts/UI/InventoryMenu.cs index 2c98baa28..8a5357324 100644 --- a/Assets/Scripts/UI/InventoryMenu.cs +++ b/Assets/Scripts/UI/InventoryMenu.cs @@ -282,8 +282,7 @@ public class InventoryMenu : MonoBehaviour floatCells(); } }); - - + panel.OnClickAsObservable().Subscribe(data => { if (data is InventoryCargoEventData cargoEvent) @@ -387,6 +386,16 @@ public class InventoryMenu : MonoBehaviour } } }); + + panel.OnBackgroundClick.Subscribe(data => + { + PropertiesPanel.Clear(); + PropertiesPanel.AddField("Shutdown Threshold", + () => GameManager.PlayerSettings.ShutdownPerformance, + f => GameManager.PlayerSettings.ShutdownPerformance = f, + 0, + 1); + }); } } diff --git a/Assets/Scripts/UI/InventoryPanel.cs b/Assets/Scripts/UI/InventoryPanel.cs index dd8a7a5b9..fdaf1d604 100644 --- a/Assets/Scripts/UI/InventoryPanel.cs +++ b/Assets/Scripts/UI/InventoryPanel.cs @@ -17,7 +17,7 @@ using Unity.Mathematics; using static Unity.Mathematics.math; using int2 = Unity.Mathematics.int2; -public class InventoryPanel : MonoBehaviour +public class InventoryPanel : MonoBehaviour, IPointerClickHandler { public ConfirmationDialog ConfirmationDialog; public bool Flip; @@ -669,13 +669,19 @@ public class InventoryPanel : MonoBehaviour return false; } - + + public Subject OnBackgroundClick = new Subject(); public UniRx.IObservable OnClickAsObservable() => _onClick ?? (_onClick = new Subject()); public UniRx.IObservable OnBeginDragAsObservable() => _onBeginDrag ?? (_onBeginDrag = new Subject()); public UniRx.IObservable OnDragAsObservable() => _onDrag ?? (_onDrag = new Subject()); public UniRx.IObservable OnEndDragAsObservable() => _onEndDrag ?? (_onEndDrag = new Subject()); public UniRx.IObservable OnPointerEnterAsObservable() => _onPointerEnter ?? (_onPointerEnter = new Subject()); public UniRx.IObservable OnPointerExitAsObservable() => _onPointerExit ?? (_onPointerExit = new Subject()); + + public void OnPointerClick(PointerEventData eventData) + { + OnBackgroundClick.OnNext(eventData); + } } public abstract class InventoryEventData diff --git a/Assets/Scripts/UI/PropertiesPanel.cs b/Assets/Scripts/UI/PropertiesPanel.cs index 27754c2e6..f38844fe4 100644 --- a/Assets/Scripts/UI/PropertiesPanel.cs +++ b/Assets/Scripts/UI/PropertiesPanel.cs @@ -485,6 +485,7 @@ public class PropertiesPanel : MonoBehaviour Clear(); if (item.EquippableItem != null) { + AddField("Override Shutdown", () => item.EquippableItem.OverrideShutdown, b => item.EquippableItem.OverrideShutdown = b); AddProperty("Temperature", () => (item.Temperature - 273.15f).SignificantDigits(Context.GameplaySettings.SignificantDigits)); AddItemProperties(entity, item.EquippableItem); foreach (var behavior in item.Behaviors) diff --git a/Assets/Scripts/UI/SchematicDisplay.cs b/Assets/Scripts/UI/SchematicDisplay.cs index 8a1f9fc6e..9b3deb505 100644 --- a/Assets/Scripts/UI/SchematicDisplay.cs +++ b/Assets/Scripts/UI/SchematicDisplay.cs @@ -18,6 +18,8 @@ public class SchematicDisplay : MonoBehaviour public Color HeaderElementEnabledColor; public Color HeaderElementDisabledColor; + public GameObject OverrideIcon; + public float OverrideIconBlinkSpeed; public GameObject ShieldIcon; public Image HeatsinkBackground; @@ -216,7 +218,8 @@ public class SchematicDisplay : MonoBehaviour { if (!_enemy) { - ShieldIcon.SetActive(_entity.Shield!=null && _entity.Shield.Item.Active); + OverrideIcon.SetActive(_entity.OverrideShutdown && cos(Time.time * OverrideIconBlinkSpeed) > 0); + ShieldIcon.SetActive(_entity.Shield!=null && _entity.Shield.Item.Active.Value); if (_radiators.Length == 1) RadiatorTemperatureLabel.text = $"{((int)(_radiators[0].Temperature - 273.15f)).ToString()}°C"; else if (_radiators.Length > 1) @@ -290,7 +293,7 @@ public class SchematicDisplay : MonoBehaviour if (x.Weapon.WeaponData != null) { - x.ListElement.RangeLabel.text = ((int) _entity.ItemManager.Evaluate(x.Weapon.WeaponData.Range, x.Item)).ToString(); + x.ListElement.RangeLabel.text = ((int) x.Weapon.Range).ToString(); } } } diff --git a/Assets/Shaders/Raymarching/VolumeRender.shader b/Assets/Shaders/Raymarching/VolumeRender.shader index 181adbdc4..f939cc3ca 100644 --- a/Assets/Shaders/Raymarching/VolumeRender.shader +++ b/Assets/Shaders/Raymarching/VolumeRender.shader @@ -1,5 +1,5 @@ Shader "VolSample/Volume Render" { - Properties{ + Properties { _MainTex( "", 2D ) = "white" {} _StepExponent("Step Exponent", float) = 1 _Surface("Surface", 2D) = "black" {} diff --git a/Assets/ShieldManager.cs b/Assets/ShieldManager.cs index 68ff6105f..fc6ef5de6 100644 --- a/Assets/ShieldManager.cs +++ b/Assets/ShieldManager.cs @@ -30,7 +30,7 @@ public class ShieldManager : MonoBehaviour var v1np = PostCollisionVelocity(v1n, Entity.Mass, v2n, otherShield.Entity.Mass); Entity.Velocity = tangent * v1t + normal * v1np; - if(Entity.Shield != null && Entity.Shield.Item.Active) ShowHit(contact.point, CollisionHitDuration); + if(Entity.Shield != null && Entity.Shield.Item.Active.Value) ShowHit(contact.point, CollisionHitDuration); } private float PostCollisionVelocity(float v1, float m1, float v2, float m2) diff --git a/Economy.Shared.Unity.csproj b/Economy.Shared.Unity.csproj index b67ad3fbd..7445659ca 100644 --- a/Economy.Shared.Unity.csproj +++ b/Economy.Shared.Unity.csproj @@ -363,6 +363,7 @@ + diff --git a/GameData/AetherDB.msgpack b/GameData/AetherDB.msgpack index dd15db465..8982d0837 100644 Binary files a/GameData/AetherDB.msgpack and b/GameData/AetherDB.msgpack differ diff --git a/GameData/PlayerSettings.msgpack b/GameData/PlayerSettings.msgpack new file mode 100644 index 000000000..c21fcc83e Binary files /dev/null and b/GameData/PlayerSettings.msgpack differ