From fbfb8be54dd2bca9981c87075b7b5d1dbdf72287 Mon Sep 17 00:00:00 2001 From: Reinier Vens Date: Fri, 12 Mar 2021 08:11:55 +0000 Subject: [PATCH] Sector Map: Areas of Influence Added elements to the sector map that visualizes each corporation's territorial influence --- .../Materials/Brushes/Influence Brush 1.mat | 80 +++ .../Brushes/Influence Brush 1.mat.meta | 8 + Assets/Materials/Brushes/Influence Brush.mat | 80 +++ .../Brushes/Influence Brush.mat.meta | 8 + Assets/Materials/UI/Influence Map.mat | 92 +++ Assets/Materials/UI/Influence Map.mat.meta | 8 + Assets/Resources/Influence.renderTexture | 38 ++ Assets/Resources/Influence.renderTexture.meta | 8 + Assets/Scenes/TestScene.unity | 525 +++++++++++++++++- Assets/Scripts/UI/LegendElement.cs | 3 +- Assets/Scripts/UI/SectorMap.cs | 69 ++- Assets/Scripts/UI/SectorZoneUI.cs | 1 + Assets/Shaders/Influence.shader | 113 ++++ Assets/Shaders/Influence.shader.meta | 10 + ProjectSettings/TagManager.asset | 4 +- 15 files changed, 1000 insertions(+), 47 deletions(-) create mode 100644 Assets/Materials/Brushes/Influence Brush 1.mat create mode 100644 Assets/Materials/Brushes/Influence Brush 1.mat.meta create mode 100644 Assets/Materials/Brushes/Influence Brush.mat create mode 100644 Assets/Materials/Brushes/Influence Brush.mat.meta create mode 100644 Assets/Materials/UI/Influence Map.mat create mode 100644 Assets/Materials/UI/Influence Map.mat.meta create mode 100644 Assets/Resources/Influence.renderTexture create mode 100644 Assets/Resources/Influence.renderTexture.meta create mode 100644 Assets/Shaders/Influence.shader create mode 100644 Assets/Shaders/Influence.shader.meta diff --git a/Assets/Materials/Brushes/Influence Brush 1.mat b/Assets/Materials/Brushes/Influence Brush 1.mat new file mode 100644 index 000000000..ce1762094 --- /dev/null +++ b/Assets/Materials/Brushes/Influence Brush 1.mat @@ -0,0 +1,80 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Influence Brush 1 + m_Shader: {fileID: 4800000, guid: 268da230635cfb34ab4ed6ad39503fa0, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _Depth: -10 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _Power: 2 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/Materials/Brushes/Influence Brush 1.mat.meta b/Assets/Materials/Brushes/Influence Brush 1.mat.meta new file mode 100644 index 000000000..98d783db0 --- /dev/null +++ b/Assets/Materials/Brushes/Influence Brush 1.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e26829122ec0d0e4aaf1a8266d846796 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/Brushes/Influence Brush.mat b/Assets/Materials/Brushes/Influence Brush.mat new file mode 100644 index 000000000..c4e86e7fe --- /dev/null +++ b/Assets/Materials/Brushes/Influence Brush.mat @@ -0,0 +1,80 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Influence Brush + m_Shader: {fileID: 4800000, guid: 268da230635cfb34ab4ed6ad39503fa0, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _Depth: 10 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _Power: 2 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/Materials/Brushes/Influence Brush.mat.meta b/Assets/Materials/Brushes/Influence Brush.mat.meta new file mode 100644 index 000000000..06c2d72ec --- /dev/null +++ b/Assets/Materials/Brushes/Influence Brush.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a71206b06f60aec41bc533ba93ab7907 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/UI/Influence Map.mat b/Assets/Materials/UI/Influence Map.mat new file mode 100644 index 000000000..82ab3ab70 --- /dev/null +++ b/Assets/Materials/UI/Influence Map.mat @@ -0,0 +1,92 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Influence Map + m_Shader: {fileID: 4800000, guid: dd1c67cd307167348bd4e7480a0fa526, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 8400000, guid: 9c4523304810d514b9670f6e6fa71b39, type: 2} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _Blend: 0.2 + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _FillAlpha: 0.4 + - _FillBlend: 20 + - _FillBorderBlend: 0.05 + - _FillTiling: 1024 + - _FillTilt: 0.86 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _PatternBlend: 0.25 + - _PatternOffset: -0.75 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _Stroke: 4 + - _StrokeBlend: 0.25 + - _StrokeTransitionBlend: 1 + - _Threshold: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _Color1: {r: 1, g: 0, b: 0, a: 1} + - _Color2: {r: 0.7924528, g: 0.7924528, b: 0.7924528, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/Materials/UI/Influence Map.mat.meta b/Assets/Materials/UI/Influence Map.mat.meta new file mode 100644 index 000000000..8c91eec15 --- /dev/null +++ b/Assets/Materials/UI/Influence Map.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2b21c6753ff66084283cc31f201344f9 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Influence.renderTexture b/Assets/Resources/Influence.renderTexture new file mode 100644 index 000000000..04f848caa --- /dev/null +++ b/Assets/Resources/Influence.renderTexture @@ -0,0 +1,38 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!84 &8400000 +RenderTexture: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Influence + m_ImageContentsHash: + serializedVersion: 2 + Hash: 00000000000000000000000000000000 + m_ForcedFallbackFormat: 4 + m_DownscaleFallback: 0 + m_IsAlphaChannelOptional: 0 + serializedVersion: 3 + m_Width: 512 + m_Height: 512 + m_AntiAliasing: 1 + m_MipCount: -1 + m_DepthFormat: 0 + m_ColorFormat: 45 + m_MipMap: 0 + m_GenerateMips: 1 + m_SRGB: 0 + m_UseDynamicScale: 0 + m_BindMS: 0 + m_EnableCompatibleFormat: 1 + m_TextureSettings: + serializedVersion: 2 + m_FilterMode: 1 + m_Aniso: 0 + m_MipBias: 0 + m_WrapU: 1 + m_WrapV: 1 + m_WrapW: 1 + m_Dimension: 2 + m_VolumeDepth: 1 diff --git a/Assets/Resources/Influence.renderTexture.meta b/Assets/Resources/Influence.renderTexture.meta new file mode 100644 index 000000000..b9409a7a3 --- /dev/null +++ b/Assets/Resources/Influence.renderTexture.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9c4523304810d514b9670f6e6fa71b39 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 8400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/TestScene.unity b/Assets/Scenes/TestScene.unity index 421a9800d..cf9a3b46a 100644 --- a/Assets/Scenes/TestScene.unity +++ b/Assets/Scenes/TestScene.unity @@ -155,7 +155,7 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 1124877095} - m_RootOrder: 2 + m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -209,8 +209,8 @@ MonoBehaviour: m_faceColor: serializedVersion: 2 rgba: 4294967295 - m_fontSize: 2.5 - m_fontSizeBase: 2.5 + m_fontSize: 4 + m_fontSizeBase: 4 m_fontWeight: 400 m_enableAutoSizing: 0 m_fontSizeMin: 18 @@ -825,7 +825,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 1124877095} - m_RootOrder: 1 + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!64 &162042370 MeshCollider: @@ -1086,7 +1086,7 @@ RectTransform: m_Children: - {fileID: 676739119} m_Father: {fileID: 0} - m_RootOrder: 9 + m_RootOrder: 11 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -1268,6 +1268,271 @@ MeshFilter: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 441433737} m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &453065207 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 453065208} + - component: {fileID: 453065210} + - component: {fileID: 453065209} + m_Layer: 5 + m_Name: Primary + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &453065208 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 453065207} + 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: 2039345446} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 8, y: 8} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &453065209 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 453065207} + 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: d4144ee6db2bf3c468cc5010acfe8974, 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 &453065210 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 453065207} + m_CullTransparentMesh: 1 +--- !u!1 &496644893 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 496644897} + - component: {fileID: 496644896} + - component: {fileID: 496644895} + - component: {fileID: 496644894} + m_Layer: 18 + m_Name: Influence (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!64 &496644894 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 496644893} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &496644895 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 496644893} + 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: e26829122ec0d0e4aaf1a8266d846796, 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 &496644896 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 496644893} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &496644897 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 496644893} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -305.7485, y: -442.5712, z: 0.02} + m_LocalScale: {x: 369.68045, y: 406.3519, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &507446966 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 507446970} + - component: {fileID: 507446969} + - component: {fileID: 507446968} + - component: {fileID: 507446967} + m_Layer: 0 + m_Name: Influence Map + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &507446967 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 507446966} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1281fe44325f9b548aa42dc331b17266, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!23 &507446968 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 507446966} + 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: 2b21c6753ff66084283cc31f201344f9, 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 &507446969 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 507446966} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &507446970 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 507446966} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0.25} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1183010124} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &652433663 GameObject: m_ObjectHideFlags: 0 @@ -1320,7 +1585,8 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: d3cdb62043eacb24b87bab4e3584c17c, type: 3} m_Name: m_EditorClassIdentifier: - Icon: {fileID: 2039345447} + Primary: {fileID: 453065209} + Secondary: {fileID: 2039345447} Label: {fileID: 1808942507} --- !u!114 &652433666 MonoBehaviour: @@ -2189,10 +2455,11 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1124877094} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalPosition: {x: 0.25, y: 0.25, z: 0} m_LocalScale: {x: 0.015, y: 0.015, z: 1} m_Children: - {fileID: 441433738} + - {fileID: 1190354609} - {fileID: 162042369} - {fileID: 62236174} m_Father: {fileID: 820952285} @@ -2223,6 +2490,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: Background: {fileID: 441433740} + Influence: {fileID: 1190354611} Label: {fileID: 62236175} --- !u!1 &1183010123 GameObject: @@ -2253,9 +2521,10 @@ Transform: m_LocalScale: {x: 2048, y: 2048, z: 1} m_Children: - {fileID: 1940409868} + - {fileID: 507446970} - {fileID: 2067021207} m_Father: {fileID: 0} - m_RootOrder: 8 + m_RootOrder: 10 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &1183010125 MonoBehaviour: @@ -2269,6 +2538,8 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 5369ea8554e422a45a9f949bdd3bee3f, type: 3} m_Name: m_EditorClassIdentifier: + InfluenceCamera: {fileID: 1462895484} + InfluenceRendererPrototype: {fileID: 507446967} SectorRenderer: {fileID: 1940409866} Settings: LinkDensity: 0.5 @@ -2338,7 +2609,7 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 36, y: 0} + m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &1187011253 @@ -2381,6 +2652,102 @@ MonoBehaviour: m_EditorClassIdentifier: m_HorizontalFit: 2 m_VerticalFit: 2 +--- !u!1 &1190354608 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1190354609} + - component: {fileID: 1190354612} + - component: {fileID: 1190354611} + - component: {fileID: 1190354610} + m_Layer: 18 + m_Name: Influence + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1190354609 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1190354608} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0.02} + m_LocalScale: {x: 15, y: 15, z: 1} + m_Children: [] + m_Father: {fileID: 1124877095} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1190354610 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1190354608} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1190354611 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1190354608} + 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: a71206b06f60aec41bc533ba93ab7907, 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 &1190354612 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1190354608} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &1236141027 GameObject: m_ObjectHideFlags: 0 @@ -2416,7 +2783,7 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 108, y: 0} + m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &1236141029 @@ -2674,7 +3041,7 @@ Camera: m_Depth: 0 m_CullingMask: serializedVersion: 2 - m_Bits: 4294967295 + m_Bits: 1 m_RenderingPath: -1 m_TargetTexture: {fileID: 0} m_TargetDisplay: 0 @@ -2737,6 +3104,118 @@ MonoBehaviour: _shader: {fileID: 4800000, guid: 2d020ca820b3647479e78b8c3d26e3a6, type: 3} _downSampleMode: 2 _iteration: 4 +--- !u!1 &1462895483 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1462895485} + - component: {fileID: 1462895484} + - component: {fileID: 1462895487} + - component: {fileID: 1462895486} + m_Layer: 0 + m_Name: Influence Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!20 &1462895484 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1462895483} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 2 + field of view: 60 + orthographic: 1 + orthographic size: 1024 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 262144 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: 9c4523304810d514b9670f6e6fa71b39, type: 2} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1462895485 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1462895483} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -1} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1462895486 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1462895483} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4ae335524e949404bb57f1612ec4b9b5, type: 3} + m_Name: + m_EditorClassIdentifier: + isDefaultListener: 1 + listenerId: 0 +--- !u!114 &1462895487 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1462895483} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f27db6b94e477054e96392f94dc50c9d, type: 3} + m_Name: + m_EditorClassIdentifier: + m_listeners: + initialListenerList: [] + useDefaultListeners: 1 + isEnvironmentAware: 0 + isStaticObject: 0 + m_positionOffsetData: + KeepMe: 0 + positionOffset: {x: 0, y: 0, z: 0} + m_posOffsetData: {fileID: 0} + listenerMask: 1 --- !u!1 &1538186654 GameObject: m_ObjectHideFlags: 0 @@ -3260,7 +3739,6 @@ GameObject: - component: {fileID: 1940409868} - component: {fileID: 1940409867} - component: {fileID: 1940409866} - - component: {fileID: 1940409865} m_Layer: 0 m_Name: Background m_TagString: Untagged @@ -3268,20 +3746,6 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!64 &1940409865 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1940409864} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} --- !u!23 &1940409866 MeshRenderer: m_ObjectHideFlags: 0 @@ -3661,14 +4125,15 @@ RectTransform: 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_Children: + - {fileID: 453065208} m_Father: {fileID: 652433664} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 1} m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 16, y: 0} + m_SizeDelta: {x: 12, y: 0} m_Pivot: {x: 0, y: 0.5} --- !u!114 &2039345447 MonoBehaviour: @@ -3692,7 +4157,7 @@ MonoBehaviour: m_Calls: [] m_Sprite: {fileID: 21300000, guid: 92184887b260c82429005061b0b08b3b, type: 3} m_Type: 0 - m_PreserveAspect: 1 + m_PreserveAspect: 0 m_FillCenter: 1 m_FillMethod: 4 m_FillAmount: 1 @@ -3813,7 +4278,7 @@ Transform: - {fileID: 820952285} - {fileID: 1388747985} m_Father: {fileID: 1183010124} - m_RootOrder: 1 + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1001 &7383646976240752633 PrefabInstance: diff --git a/Assets/Scripts/UI/LegendElement.cs b/Assets/Scripts/UI/LegendElement.cs index 8be40ba86..19ed51763 100644 --- a/Assets/Scripts/UI/LegendElement.cs +++ b/Assets/Scripts/UI/LegendElement.cs @@ -6,6 +6,7 @@ using UnityEngine.UI; public class LegendElement : MonoBehaviour { - public Image Icon; + public Image Primary; + public Image Secondary; public TextMeshProUGUI Label; } diff --git a/Assets/Scripts/UI/SectorMap.cs b/Assets/Scripts/UI/SectorMap.cs index 98671d7f5..97606de47 100644 --- a/Assets/Scripts/UI/SectorMap.cs +++ b/Assets/Scripts/UI/SectorMap.cs @@ -13,6 +13,8 @@ using float2 = Unity.Mathematics.float2; public class SectorMap : MonoBehaviour { + public Camera InfluenceCamera; + public Prototype InfluenceRendererPrototype; public MeshRenderer SectorRenderer; public SectorGenerationSettings Settings; public Prototype ZonePrototype; @@ -28,7 +30,9 @@ public class SectorMap : MonoBehaviour public int ZoneCount = 64; public float LinkDensity = .5f; public float LabelDistance = .4f; - // Start is called before the first frame update + + private RenderTexture[] _influenceTextures; + void Start() { var filePath = new DirectoryInfo(Application.dataPath).Parent.CreateSubdirectory("GameData"); @@ -43,7 +47,8 @@ public class SectorMap : MonoBehaviour { mega.NameGenerator = new MarkovNameGenerator(ref random, UnityHelpers.LoadAsset(mega.GeonameFile).text, Settings); var legendElement = LegendPrototype.Instantiate(); - legendElement.Icon.color = mega.PrimaryColor.ToColor(); + legendElement.Primary.color = mega.PrimaryColor.ToColor(); + legendElement.Secondary.color = mega.SecondaryColor.ToColor(); legendElement.Label.text = mega.ShortName; } @@ -51,9 +56,11 @@ public class SectorMap : MonoBehaviour var sector = SectorGenerator.GenerateSector(Settings, sectorMegas, ref random); var visitedZones = new HashSet(); Debug.Log($"Found {sector.Zones.Count(z=>!z.AdjacentZones.Any())} orphaned zones!"); + var zoneInstances = new Dictionary(); foreach (var zone in sector.Zones) { var zoneInstance = ZonePrototype.Instantiate(); + zoneInstances[zone] = zoneInstance; var zoneInstanceTransform = zoneInstance.transform; zoneInstanceTransform.localPosition = new Vector3(zone.Position.x, zone.Position.y); if(zone.Owner != null) @@ -110,18 +117,6 @@ public class SectorMap : MonoBehaviour iconTransform.localPosition = new Vector3(-linkDirection.x * IconDistance, -linkDirection.y * IconDistance); } - var bossMega = sector.BossZones.Keys.FirstOrDefault(m => sector.BossZones[m] == zone); - if (bossMega != null) - { - var iconInstance = IconPrototype.Instantiate(); - iconInstance.material.mainTexture = BossIcon; - iconInstance.material.SetColor("_TintColor", bossMega.PrimaryColor.ToColor()); - var iconTransform = iconInstance.transform; - iconTransform.SetParent(zoneInstanceTransform); - iconTransform.localScale = Vector3.one; - iconTransform.localPosition = new Vector3(-linkDirection.x * IconDistance, -linkDirection.y * IconDistance); - } - var homeMega = sector.HomeZones.Keys.FirstOrDefault(m => sector.HomeZones[m] == zone); if (homeMega != null) { @@ -133,6 +128,52 @@ public class SectorMap : MonoBehaviour iconTransform.localScale = Vector3.one; iconTransform.localPosition = new Vector3(-linkDirection.x * IconDistance, -linkDirection.y * IconDistance); } + + var bossMega = sector.BossZones.Keys.FirstOrDefault(m => sector.BossZones[m] == zone); + if (bossMega != null) + { + var iconInstance = IconPrototype.Instantiate(); + iconInstance.material.mainTexture = BossIcon; + iconInstance.material.SetColor("_TintColor", bossMega.PrimaryColor.ToColor()); + var iconTransform = iconInstance.transform; + iconTransform.SetParent(zoneInstanceTransform); + iconTransform.localScale = Vector3.one; + if(homeMega != null) + iconTransform.localPosition = new Vector3(linkDirection.x * IconDistance, linkDirection.y * IconDistance); + else iconTransform.localPosition = new Vector3(-linkDirection.x * IconDistance, -linkDirection.y * IconDistance); + } + } + + // Render Influence Textures + _influenceTextures = new RenderTexture[sectorMegas.Length]; + for (var i = 0; i < sectorMegas.Length; i++) + { + _influenceTextures[i] = new RenderTexture(1024, 1024, 1, RenderTextureFormat.RHalf); + var influenceRenderer = InfluenceRendererPrototype.Instantiate(); + foreach (var zone in sector.Zones) + { + var instance = zoneInstances[zone]; + var influence = 0f; + if (zone.Megas.Length > 0) + { + if (zone.Megas.Contains(sectorMegas[i])) + { + influence = 10; + if (zone.Owner != sectorMegas[i]) + influence *= .5f; + } + else influence = -10; + } + instance.Influence.material.SetFloat("_Depth", influence); + } + + InfluenceCamera.targetTexture = _influenceTextures[i]; + InfluenceCamera.Render(); + + influenceRenderer.material.mainTexture = _influenceTextures[i]; + influenceRenderer.material.SetColor("_Color1", sectorMegas[i].PrimaryColor.ToColor()); + influenceRenderer.material.SetColor("_Color2", sectorMegas[i].SecondaryColor.ToColor()); + influenceRenderer.material.SetFloat("_FillTilt", random.NextFloat(PI)); } } diff --git a/Assets/Scripts/UI/SectorZoneUI.cs b/Assets/Scripts/UI/SectorZoneUI.cs index a39220169..ae66e0f8b 100644 --- a/Assets/Scripts/UI/SectorZoneUI.cs +++ b/Assets/Scripts/UI/SectorZoneUI.cs @@ -7,5 +7,6 @@ using UnityEngine.UI; public class SectorZoneUI : MonoBehaviour { public MeshRenderer Background; + public MeshRenderer Influence; public TextMeshPro Label; } diff --git a/Assets/Shaders/Influence.shader b/Assets/Shaders/Influence.shader new file mode 100644 index 000000000..7a41d16c1 --- /dev/null +++ b/Assets/Shaders/Influence.shader @@ -0,0 +1,113 @@ +Shader "Aetheria/Influence" +{ + Properties + { + _MainTex ("Influence Map", 2D) = "white" {} + _Color1 ("Primary Color", Color) = (1,1,1,1) + _Color2 ("Secondary Color", Color) = (1,1,1,1) + _Threshold("Border Threshold", Float) = 0.05 + _FillTiling("Fill Tiling", Float) = 50 + _FillBorderBlend("Fill Border Blend", Float) = .05 + _FillBlend("Fill Blend", Float) = .05 + _PatternBlend("Pattern Blend", Float) = .05 + _PatternOffset("Pattern Offset", Float) = .05 + _FillAlpha("Fill Alpha", Float) = .5 + _FillTilt("Fill Tilt", Range(0,3.14)) = 1 + _Stroke("Stroke Weight", Float) = 2 + _StrokeBlend("Stroke Blend", Float) = .05 + _StrokeTransitionBlend("Stroke Transition Blend", Float) = .05 + } + SubShader + { + Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" "PreviewType"="Plane" } + LOD 100 + Blend SrcAlpha OneMinusSrcAlpha + Cull Off Lighting Off ZWrite Off + + Pass + { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + + #include "UnityCG.cginc" + + struct appdata + { + float4 vertex : POSITION; + float2 uv : TEXCOORD0; + }; + + struct v2f + { + float2 uv : TEXCOORD0; + float4 vertex : SV_POSITION; + }; + + sampler2D _MainTex; + float4 _MainTex_ST; + float4 _MainTex_TexelSize; + fixed4 _Color1; + fixed4 _Color2; + half _FillTiling; + half _FillBlend; + half _FillBorderBlend; + half _FillAlpha; + half _FillTilt; + half _PatternBlend; + half _PatternOffset; + half _Threshold; + half _Stroke; + half _StrokeBlend; + half _StrokeTransitionBlend; + + v2f vert (appdata v) + { + v2f o; + o.vertex = UnityObjectToClipPos(v.vertex); + o.uv = TRANSFORM_TEX(v.uv, _MainTex); + return o; + } + + float2 calcGrad (float2 uv, float me) + { + float n = -tex2D(_MainTex, float2(uv.x, uv.y + _MainTex_TexelSize.y)).x; + float e = -tex2D(_MainTex, float2(uv.x + _MainTex_TexelSize.x, uv.y)).x; + return float2(e-me,n-me); + } + + fixed4 frag (v2f i) : SV_Target + { + // Sample influence texture + float influence = tex2D(_MainTex, i.uv).r; + + // Calculate gradient and rate of change of influence + //float2 grad = calcGrad(i.uv, influence); + //float diff = length(grad); + float2 grad = float2(ddx(influence), ddy(influence)); + float diff = length(grad); + + // Tilt determines the vector along which we measure the uv coordinate + float2 patternDirection = float2(sin(_FillTilt), cos(_FillTilt)); + + // Repeat a sine wave along the pattern direction and smoothstep it to interpolate between the two pattern colors + fixed4 pattern = lerp(_Color1, _Color2, smoothstep(-_PatternBlend, _PatternBlend, _PatternOffset + sin(dot(patternDirection, i.uv * _FillTiling)))); + + float4 col = pattern * + smoothstep(_Threshold, _Threshold + _FillBorderBlend, influence) * + smoothstep(_Threshold + _FillBlend, _Threshold, influence) * + _FillAlpha; + + // Draw a line at the threshold + float isoline = abs(influence - _Threshold) / diff; + col = smoothstep(0,_Threshold, influence) * + lerp(col, + lerp(_Color1, _Color2, smoothstep(_StrokeTransitionBlend*diff, -_StrokeTransitionBlend*diff, influence - _Threshold)), + smoothstep(_Stroke * (1 + _StrokeBlend), _Stroke, isoline)); + + return col; + } + ENDCG + } + } +} diff --git a/Assets/Shaders/Influence.shader.meta b/Assets/Shaders/Influence.shader.meta new file mode 100644 index 000000000..11029af3c --- /dev/null +++ b/Assets/Shaders/Influence.shader.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: dd1c67cd307167348bd4e7480a0fa526 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + preprocessorOverride: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/ProjectSettings/TagManager.asset b/ProjectSettings/TagManager.asset index a07de8dc8..b387c6d44 100644 --- a/ProjectSettings/TagManager.asset +++ b/ProjectSettings/TagManager.asset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:983167af0454576c700553e065cefc2ab2e12b586202bf3d4fe7037fce01afe1 -size 488 +oid sha256:6854cb4f83c37e92613e1d04f75a69bdc9909981a242c6c9e9d7175933e7824b +size 497