From 1c4aa57d78fa4a8fa7d6213c854085002cd25e27 Mon Sep 17 00:00:00 2001 From: Reinier Vens Date: Sun, 7 Mar 2021 23:24:22 +0000 Subject: [PATCH] Stealth Detection Indicator Modified fade texture to have those cool circuit trace designs Added visible hostile indicator which fills to indicate player is being detected and flashes when detected --- .../.idea/contentModel.xml | 1 + Assembly-CSharp.csproj | 1 + Asset Sources/clouds.psd | 3 + Asset Sources/triangle.psd | 3 + Assets/Materials/Aluminium brushed.mat | 2 +- Assets/Materials/UI/Map Gravity Lines.mat | 2 +- .../Sprites/Indicators/triangleFill.png | 3 + .../Sprites/Indicators/triangleFill.png.meta | 108 ++++++ .../Sprites/Indicators/triangleStroke.png | 3 + .../Indicators/triangleStroke.png.meta | 108 ++++++ Assets/Scenes/ARPG.unity | 366 +++++++++++++++++- Assets/Scripts/Gameplay/ActionGameManager.cs | 64 ++- Assets/Scripts/UI/PlaceUIElementWorldspace.cs | 26 +- Assets/Scripts/UI/VisibleHostileIndicator.cs | 11 + .../UI/VisibleHostileIndicator.cs.meta | 11 + Assets/Shaders/GlowFade.shader | 2 +- Assets/Textures/clouds.png | 4 +- 17 files changed, 692 insertions(+), 26 deletions(-) create mode 100644 Asset Sources/clouds.psd create mode 100644 Asset Sources/triangle.psd create mode 100644 Assets/Resources/Sprites/Indicators/triangleFill.png create mode 100644 Assets/Resources/Sprites/Indicators/triangleFill.png.meta create mode 100644 Assets/Resources/Sprites/Indicators/triangleStroke.png create mode 100644 Assets/Resources/Sprites/Indicators/triangleStroke.png.meta create mode 100644 Assets/Scripts/UI/VisibleHostileIndicator.cs create mode 100644 Assets/Scripts/UI/VisibleHostileIndicator.cs.meta diff --git a/.idea/.idea.Aetheria-Economy/.idea/contentModel.xml b/.idea/.idea.Aetheria-Economy/.idea/contentModel.xml index 90aee212e..ee6b5d753 100644 --- a/.idea/.idea.Aetheria-Economy/.idea/contentModel.xml +++ b/.idea/.idea.Aetheria-Economy/.idea/contentModel.xml @@ -2088,6 +2088,7 @@ + diff --git a/Assembly-CSharp.csproj b/Assembly-CSharp.csproj index 81b735da5..38b512e74 100644 --- a/Assembly-CSharp.csproj +++ b/Assembly-CSharp.csproj @@ -395,6 +395,7 @@ + diff --git a/Asset Sources/clouds.psd b/Asset Sources/clouds.psd new file mode 100644 index 000000000..6fa053384 --- /dev/null +++ b/Asset Sources/clouds.psd @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6d0755dea7b5ab43c12bbd843da3e3435c0964e5ee2e89b539cce380707b97ae +size 2412596 diff --git a/Asset Sources/triangle.psd b/Asset Sources/triangle.psd new file mode 100644 index 000000000..f0bca5272 --- /dev/null +++ b/Asset Sources/triangle.psd @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f4445df8ed91cccba81b0dad63b9baea7e130ec9b890f5e203d4c36bb962fd14 +size 50374 diff --git a/Assets/Materials/Aluminium brushed.mat b/Assets/Materials/Aluminium brushed.mat index 67365ef29..b8ade999f 100644 --- a/Assets/Materials/Aluminium brushed.mat +++ b/Assets/Materials/Aluminium brushed.mat @@ -69,7 +69,7 @@ Material: - _Cutoff: 0.5 - _DetailNormalMapScale: 1 - _DstBlend: 0 - - _Fade: 1 + - _Fade: 0 - _FadeEdge: 0.05 - _FadeSharpness: 16 - _GlossMapScale: 1 diff --git a/Assets/Materials/UI/Map Gravity Lines.mat b/Assets/Materials/UI/Map Gravity Lines.mat index 1ae7b17e2..cf592f684 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: 8.4506855 + - _Scale: 1.2393435 - _SmoothnessTextureChannel: 0 - _SpecularHighlights: 1 - _SrcBlend: 1 diff --git a/Assets/Resources/Sprites/Indicators/triangleFill.png b/Assets/Resources/Sprites/Indicators/triangleFill.png new file mode 100644 index 000000000..38ac44781 --- /dev/null +++ b/Assets/Resources/Sprites/Indicators/triangleFill.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:31ac4884ae92ce43febd9cadc184dadf79f628c7db908bcb7aa6db3527f6b6f5 +size 5493 diff --git a/Assets/Resources/Sprites/Indicators/triangleFill.png.meta b/Assets/Resources/Sprites/Indicators/triangleFill.png.meta new file mode 100644 index 000000000..39e3ac411 --- /dev/null +++ b/Assets/Resources/Sprites/Indicators/triangleFill.png.meta @@ -0,0 +1,108 @@ +fileFormatVersion: 2 +guid: 9e87ff4a45e1fff4e8f210c3c26551a0 +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/Indicators/triangleStroke.png b/Assets/Resources/Sprites/Indicators/triangleStroke.png new file mode 100644 index 000000000..17869cd49 --- /dev/null +++ b/Assets/Resources/Sprites/Indicators/triangleStroke.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2c5aa581e7932e225b6f760d2fe44dabd3b42489282c92e3d180806859ab39b6 +size 6606 diff --git a/Assets/Resources/Sprites/Indicators/triangleStroke.png.meta b/Assets/Resources/Sprites/Indicators/triangleStroke.png.meta new file mode 100644 index 000000000..30fdd13aa --- /dev/null +++ b/Assets/Resources/Sprites/Indicators/triangleStroke.png.meta @@ -0,0 +1,108 @@ +fileFormatVersion: 2 +guid: 9fa59801aac390542a1aab396485ab57 +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/Scenes/ARPG.unity b/Assets/Scenes/ARPG.unity index c07bf563b..bdbe4b14f 100644 --- a/Assets/Scenes/ARPG.unity +++ b/Assets/Scenes/ARPG.unity @@ -1759,6 +1759,9 @@ MonoBehaviour: NoiseFrequency: 0 Canvas: {fileID: 0} BorderPixels: 10 + PointAtTarget: 0 + ScreenSpaceOffset: {x: 0, y: 0} + EdgeMargin: 0.1 Target: {x: 0, y: 0, z: 0} --- !u!1 &166261016 GameObject: @@ -2948,6 +2951,81 @@ RectTransform: m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &221986828 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 221986829} + - component: {fileID: 221986831} + - component: {fileID: 221986830} + m_Layer: 5 + m_Name: Stroke + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &221986829 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 221986828} + 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: 1787772780} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &221986830 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 221986828} + 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, b: 0, 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: 9fa59801aac390542a1aab396485ab57, 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 &221986831 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 221986828} + m_CullTransparentMesh: 1 --- !u!1 &232470596 GameObject: m_ObjectHideFlags: 0 @@ -3932,6 +4010,101 @@ Camera: m_OcclusionCulling: 0 m_StereoConvergence: 10 m_StereoSeparation: 0.022 +--- !u!1 &328187702 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 328187706} + - component: {fileID: 328187705} + - component: {fileID: 328187704} + - component: {fileID: 328187703} + m_Layer: 0 + m_Name: Sphere + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!135 &328187703 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 328187702} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &328187704 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 328187702} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 5acb4b3490cbda04c85ad7cca3b2b325, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &328187705 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 328187702} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &328187706 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 328187702} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -1.03, y: -0.16, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1001 &342600466 PrefabInstance: m_ObjectHideFlags: 0 @@ -4143,6 +4316,7 @@ RectTransform: - {fileID: 1284802338} - {fileID: 1631662978} - {fileID: 146394775} + - {fileID: 1787772780} m_Father: {fileID: 761574181} m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -7758,6 +7932,81 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 574005126} m_CullTransparentMesh: 1 +--- !u!1 &582989120 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 582989121} + - component: {fileID: 582989123} + - component: {fileID: 582989122} + m_Layer: 5 + m_Name: Fill + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &582989121 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 582989120} + 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: 1787772780} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &582989122 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 582989120} + 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: 1, b: 1, 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: 9e87ff4a45e1fff4e8f210c3c26551a0, type: 3} + m_Type: 3 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 1 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 1 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &582989123 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 582989120} + m_CullTransparentMesh: 1 --- !u!1 &594274405 GameObject: m_ObjectHideFlags: 0 @@ -10096,6 +10345,9 @@ MonoBehaviour: NoiseFrequency: 0 Canvas: {fileID: 761574180} BorderPixels: 10 + PointAtTarget: 0 + ScreenSpaceOffset: {x: 0, y: 0} + EdgeMargin: 0.1 Target: {x: 0, y: 0, z: 0} --- !u!114 &776416426 MonoBehaviour: @@ -13156,8 +13408,11 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 39f95af24dd29a645895a57a75460b0c, type: 3} m_Name: m_EditorClassIdentifier: + TargetSpottedBlinkFrequency: 20 + TargetSpottedBlinkOffset: -0.25 HeatstrokePP: {fileID: 1404901906} SevereHeatstrokePP: {fileID: 837424435} + HostileTargetIndicator: {fileID: 1787772783} ViewDot: {fileID: 146394778} TargetIndicator: {fileID: 1556666357} LockIndicator: {fileID: 1876420642} @@ -15709,6 +15964,9 @@ MonoBehaviour: NoiseFrequency: 0 Canvas: {fileID: 761574180} BorderPixels: 10 + PointAtTarget: 0 + ScreenSpaceOffset: {x: 0, y: 0} + EdgeMargin: 0.1 Target: {x: 0, y: 0, z: 0} --- !u!114 &1284802340 MonoBehaviour: @@ -18509,7 +18767,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 0 + m_IsActive: 1 --- !u!224 &1556666354 RectTransform: m_ObjectHideFlags: 0 @@ -18583,6 +18841,9 @@ MonoBehaviour: NoiseFrequency: 0 Canvas: {fileID: 761574180} BorderPixels: 10 + PointAtTarget: 0 + ScreenSpaceOffset: {x: 0, y: 0} + EdgeMargin: 0.1 Target: {x: 0, y: 0, z: 0} --- !u!1 &1558182380 GameObject: @@ -19647,6 +19908,9 @@ MonoBehaviour: NoiseFrequency: 0 Canvas: {fileID: 761574180} BorderPixels: 10 + PointAtTarget: 0 + ScreenSpaceOffset: {x: 0, y: 0} + EdgeMargin: 0.1 Target: {x: 0, y: 0, z: 0} --- !u!114 &1631662980 MonoBehaviour: @@ -21008,6 +21272,9 @@ MonoBehaviour: NoiseFrequency: 0 Canvas: {fileID: 761574180} BorderPixels: 10 + PointAtTarget: 0 + ScreenSpaceOffset: {x: 0, y: 0} + EdgeMargin: 0.1 Target: {x: 0, y: 0, z: 0} --- !u!114 &1771741751 MonoBehaviour: @@ -21152,6 +21419,93 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1783772014} m_CullTransparentMesh: 0 +--- !u!1 &1787772779 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1787772780} + - component: {fileID: 1787772783} + - component: {fileID: 1787772782} + - component: {fileID: 1787772781} + m_Layer: 5 + m_Name: Visible Hostile + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1787772780 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1787772779} + m_LocalRotation: {x: 0, y: 0, z: 1, w: 0} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 582989121} + - {fileID: 221986829} + m_Father: {fileID: 346000247} + m_RootOrder: 12 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 180} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 26.1} + m_SizeDelta: {x: 32, y: 32} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1787772781 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1787772779} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 79e1b49bde6c1c54aa6b5c2256e0e382, type: 3} + m_Name: + m_EditorClassIdentifier: + NoiseAmplitude: 0 + NoiseFrequency: 0 + Canvas: {fileID: 761574180} + BorderPixels: 10 + PointAtTarget: 1 + ScreenSpaceOffset: {x: 0, y: 25} + EdgeMargin: 0.001 + Target: {x: 0, y: 0, z: 0} +--- !u!114 &1787772782 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1787772779} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e39172b086df1a44c8da6b3962a5ecd3, type: 3} + m_Name: + m_EditorClassIdentifier: + Transform: {fileID: 1787772780} + Fill: {fileID: 582989122} + Place: {fileID: 1787772781} +--- !u!114 &1787772783 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1787772779} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1281fe44325f9b548aa42dc331b17266, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!1 &1803753852 GameObject: m_ObjectHideFlags: 0 @@ -21886,6 +22240,9 @@ MonoBehaviour: NoiseFrequency: 0 Canvas: {fileID: 761574180} BorderPixels: 10 + PointAtTarget: 0 + ScreenSpaceOffset: {x: 0, y: 0} + EdgeMargin: 0.1 Target: {x: 0, y: 0, z: 0} --- !u!114 &1876420642 MonoBehaviour: @@ -22111,6 +22468,9 @@ MonoBehaviour: NoiseFrequency: 0 Canvas: {fileID: 761574180} BorderPixels: 10 + PointAtTarget: 0 + ScreenSpaceOffset: {x: 0, y: 0} + EdgeMargin: 0.1 Target: {x: 0, y: 0, z: 0} --- !u!114 &1914685584 MonoBehaviour: @@ -23633,8 +23993,8 @@ Camera: m_GameObject: {fileID: 2115559087} m_Enabled: 1 serializedVersion: 2 - m_ClearFlags: 1 - m_BackGroundColor: {r: 0.5, g: 0.5, b: 0.5, a: 0} + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.319, g: 0.319, b: 0.319, a: 1} m_projectionMatrixMode: 1 m_GateFitMode: 2 m_FOVAxisMode: 0 diff --git a/Assets/Scripts/Gameplay/ActionGameManager.cs b/Assets/Scripts/Gameplay/ActionGameManager.cs index 5c0da767b..500ae5071 100644 --- a/Assets/Scripts/Gameplay/ActionGameManager.cs +++ b/Assets/Scripts/Gameplay/ActionGameManager.cs @@ -23,8 +23,11 @@ using Random = UnityEngine.Random; public class ActionGameManager : MonoBehaviour { + public float TargetSpottedBlinkFrequency = 20; + public float TargetSpottedBlinkOffset = -.25f; public PostProcessVolume HeatstrokePP; public PostProcessVolume SevereHeatstrokePP; + public Prototype HostileTargetIndicator; public PlaceUIElementWorldspace ViewDot; public PlaceUIElementWorldspace TargetIndicator; public Prototype LockIndicator; @@ -67,6 +70,7 @@ public class ActionGameManager : MonoBehaviour private float3 _viewDirection; private (HardpointData[] hardpoints, Transform[] barrels, PlaceUIElementWorldspace crosshair)[] _articulationGroups; private (LockWeapon targetLock, PlaceUIElementWorldspace indicator, Rotate spin)[] _lockingIndicators; + private Dictionary _visibleHostileIndicators = new Dictionary(); private List _shipSubscriptions = new List(); private float _severeHeatstrokePhase; @@ -576,21 +580,11 @@ public class ActionGameManager : MonoBehaviour return (x, i, i.GetComponent()); }).ToArray(); - CurrentShip.HullDamage.Subscribe(f => - { - if (float.IsNaN(CurrentShip.Hull.Durability)) - Debug.Log("WTF!"); - }); - _shipSubscriptions.Add(CurrentShip.Target.Subscribe(target => - { - TargetIndicator.gameObject.SetActive(CurrentShip.Target.Value != null); - TargetShipPanel.gameObject.SetActive(target != null); - if (target != null) - { - TargetShipPanel.Display(target, true); - TargetSchematicDisplay.ShowShip(target, CurrentShip); - } - })); + // CurrentShip.HullDamage.Subscribe(f => + // { + // if (float.IsNaN(CurrentShip.Hull.Durability)) + // Debug.Log("WTF!"); + // }); //_shipSubscriptions.Add(CurrentShip.HeatstrokeRisk.Subscribe(_ => _severeHeatstrokePhase = 0)); @@ -632,6 +626,36 @@ public class ActionGameManager : MonoBehaviour crosshair.gameObject.SetActive(false); foreach (var group in _articulationGroups) group.crosshair.gameObject.SetActive(true); + + foreach(var subscription in _shipSubscriptions) subscription.Dispose(); + _shipSubscriptions.Clear(); + + _shipSubscriptions.Add(CurrentShip.Target.Subscribe(target => + { + TargetIndicator.gameObject.SetActive(CurrentShip.Target.Value != null); + TargetShipPanel.gameObject.SetActive(target != null); + if (target != null) + { + TargetShipPanel.Display(target, true); + TargetSchematicDisplay.ShowShip(target, CurrentShip); + } + })); + + foreach (var entity in CurrentShip.VisibleHostiles) + { + var indicator = HostileTargetIndicator.Instantiate(); + _visibleHostileIndicators.Add(entity, indicator); + } + _shipSubscriptions.Add(CurrentShip.VisibleHostiles.ObserveAdd().Subscribe(addEvent => + { + var indicator = HostileTargetIndicator.Instantiate(); + _visibleHostileIndicators.Add(addEvent.Value, indicator); + })); + _shipSubscriptions.Add(CurrentShip.VisibleHostiles.ObserveRemove().Subscribe(removeEvent => + { + _visibleHostileIndicators[removeEvent.Value].GetComponent().ReturnToPool(); + _visibleHostileIndicators.Remove(removeEvent.Value); + })); } public void SaveZone() => File.WriteAllBytes( @@ -674,6 +698,16 @@ public class ActionGameManager : MonoBehaviour ItemManager.Time = Time.time; if(CurrentShip !=null && CurrentShip.Parent==null) { + foreach (var indicator in _visibleHostileIndicators) + { + indicator.Value.gameObject.SetActive(indicator.Key!=CurrentShip.Target.Value); + indicator.Value.Place.Target = indicator.Key.Position; + indicator.Value.Fill.fillAmount = + saturate(indicator.Key.EntityInfoGathered[CurrentShip] / Settings.GameplaySettings.TargetDetectionInfoThreshold); + indicator.Value.Fill.enabled = + !(indicator.Key.EntityInfoGathered[CurrentShip] > Settings.GameplaySettings.TargetDetectionInfoThreshold) || + sin(TargetSpottedBlinkFrequency * Time.time) + TargetSpottedBlinkOffset > 0; + } var look = _input.Player.Look.ReadValue(); _shipYawPitch = float2(_shipYawPitch.x + look.x * Sensitivity.x, clamp(_shipYawPitch.y + look.y * Sensitivity.y, -.45f * PI, .45f * PI)); _viewDirection = mul(float3(0, 0, 1), Unity.Mathematics.float3x3.Euler(float3(_shipYawPitch.yx, 0), RotationOrder.YXZ)); diff --git a/Assets/Scripts/UI/PlaceUIElementWorldspace.cs b/Assets/Scripts/UI/PlaceUIElementWorldspace.cs index 8e43ae97a..d4874a456 100644 --- a/Assets/Scripts/UI/PlaceUIElementWorldspace.cs +++ b/Assets/Scripts/UI/PlaceUIElementWorldspace.cs @@ -14,6 +14,9 @@ public class PlaceUIElementWorldspace : MonoBehaviour public float NoiseFrequency; public Canvas Canvas; public float BorderPixels = 10; + public bool PointAtTarget; + public Vector2 ScreenSpaceOffset; + public float EdgeMargin = .1f; public Vector3 Target; @@ -21,6 +24,8 @@ public class PlaceUIElementWorldspace : MonoBehaviour private Transform _cameraTransform; private float _noiseOffset; private RectTransform _canvasRectTransform; + private Camera _mainCamera; + private Quaternion _startRotation; void Start() { @@ -28,6 +33,8 @@ public class PlaceUIElementWorldspace : MonoBehaviour _rectTransform = GetComponent(); _cameraTransform = Camera.main.transform; _canvasRectTransform = Canvas.GetComponent(); + _mainCamera = Camera.main; + _startRotation = transform.rotation; } private void OnEnable() @@ -42,10 +49,23 @@ public class PlaceUIElementWorldspace : MonoBehaviour { _noiseOffset += Time.deltaTime * NoiseFrequency; - Vector2 screenPoint = RectTransformUtility.WorldToScreenPoint(Camera.main, Target); + Vector2 screenPoint = RectTransformUtility.WorldToScreenPoint(_mainCamera, Target); + var toTarget = (Target - _mainCamera.transform.position).normalized; + screenPoint *= Mathf.Sign(Vector3.Dot(_cameraTransform.forward, Target - _cameraTransform.position)); screenPoint += new Vector2(noise(_noiseOffset), noise(10 + _noiseOffset)) * NoiseAmplitude; - screenPoint = new Vector2(Mathf.Clamp(screenPoint.x, BorderPixels, Screen.width - BorderPixels),Mathf.Clamp(screenPoint.y, BorderPixels, Screen.height - BorderPixels)); - _rectTransform.anchoredPosition = screenPoint / Canvas.scaleFactor - _canvasRectTransform.sizeDelta / 2f; + var clampedPoint = new Vector2( + Mathf.Clamp(screenPoint.x, BorderPixels, Screen.width - BorderPixels), + Mathf.Clamp(screenPoint.y, BorderPixels, Screen.height - BorderPixels)); + var toEdge = _mainCamera.ScreenPointToRay(clampedPoint); + var edgeLerp = smoothstep(1 - EdgeMargin, 1, dot(toEdge.direction, toTarget)); + if (PointAtTarget) + { + transform.rotation = Quaternion.Slerp( + Quaternion.LookRotation(Vector3.forward, (screenPoint - clampedPoint).normalized), + _startRotation, edgeLerp); + } + clampedPoint += ScreenSpaceOffset * edgeLerp; + _rectTransform.anchoredPosition = clampedPoint / Canvas.scaleFactor - _canvasRectTransform.sizeDelta / 2f; } } \ No newline at end of file diff --git a/Assets/Scripts/UI/VisibleHostileIndicator.cs b/Assets/Scripts/UI/VisibleHostileIndicator.cs new file mode 100644 index 000000000..0b70fc62f --- /dev/null +++ b/Assets/Scripts/UI/VisibleHostileIndicator.cs @@ -0,0 +1,11 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.UI; + +public class VisibleHostileIndicator : MonoBehaviour +{ + public RectTransform Transform; + public Image Fill; + public PlaceUIElementWorldspace Place; +} diff --git a/Assets/Scripts/UI/VisibleHostileIndicator.cs.meta b/Assets/Scripts/UI/VisibleHostileIndicator.cs.meta new file mode 100644 index 000000000..9645a46cd --- /dev/null +++ b/Assets/Scripts/UI/VisibleHostileIndicator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e39172b086df1a44c8da6b3962a5ecd3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Shaders/GlowFade.shader b/Assets/Shaders/GlowFade.shader index 7a804521a..eb5dbbdde 100644 --- a/Assets/Shaders/GlowFade.shader +++ b/Assets/Shaders/GlowFade.shader @@ -67,7 +67,7 @@ Shader "Aetheria/GlowFade" void surf (Input IN, inout SurfaceOutputStandard o) { - half f = tex2D (_FadeTex, IN.uv_FadeTex).r + (1-_Fade); + half f = tex2D (_FadeTex, IN.uv_FadeTex).r + (1-_FadeEdge-_Fade); half3 e = _EdgeColor * smoothstep(1 - _FadeEdge, 1, f); o.Emission = e; // Apply screen space dithering diff --git a/Assets/Textures/clouds.png b/Assets/Textures/clouds.png index b7fc0f4af..49a3251d4 100644 --- a/Assets/Textures/clouds.png +++ b/Assets/Textures/clouds.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d560c4f091b05d85f4c7301566ed825159c4c103ba30455900a491a074a17cd9 -size 94614 +oid sha256:98a467ba6a03d8bea66d2116d56d0c1fac7096edc775cb48883fb4ce0e4cf4c4 +size 310616