11using System . Collections . Generic ;
22using System . IO ;
3+ using System . Linq ;
34using UnityEditor ;
45using UnityEngine ;
56using UnityEngine . Video ;
67using TrombLoader . Data ;
78
8- namespace TrombLoader
9+ namespace TrombLoader
910{
1011 [ CustomEditor ( typeof ( Camera ) ) ]
1112 public class BackgroundEditor : Editor
1213 {
1314 Camera tromboneBackground ;
1415
16+ // yoinked from https://github.com/tc-mods/TrombLoader/blob/9469e0593896eafb7a927847aa1bd8899ad781d5/Helpers/ShaderHelper.cs#L36
17+ public List < string > BaseGameShaderNames = new List < string >
18+ {
19+ "Custom/WavySpriteLit" , "Custom/WavySpriteUnlit" , "FX/Flare" , "FX/Gem" , "GUI/Text Shader" ,
20+ "Hidden/BlitCopy" , "Hidden/BlitCopyDepth" , "Hidden/BlitCopyWithDepth" , "Hidden/BlitToDepth" ,
21+ "Hidden/BlitToDepth/MSAA" , "Hidden/Compositing" , "Hidden/ConvertTexture" , "Hidden/CubeBlend" ,
22+ "Hidden/CubeBlur" , "Hidden/CubeCopy" , "Hidden/FrameDebuggerRenderTargetDisplay" , "Hidden/Internal-Colored" ,
23+ "Hidden/Internal-CombineDepthNormals" , "Hidden/Internal-CubemapToEquirect" ,
24+ "Hidden/Internal-DeferredReflections" , "Hidden/Internal-DeferredShading" ,
25+ "Hidden/Internal-DepthNormalsTexture" , "Hidden/Internal-Flare" , "Hidden/Internal-GUIRoundedRect" ,
26+ "Hidden/Internal-GUIRoundedRectWithColorPerBorder" , "Hidden/Internal-GUITexture" ,
27+ "Hidden/Internal-GUITextureBlit" , "Hidden/Internal-GUITextureClip" , "Hidden/Internal-GUITextureClipText" ,
28+ "Hidden/Internal-Halo" , "Hidden/Internal-MotionVectors" , "Hidden/Internal-ODSWorldTexture" ,
29+ "Hidden/Internal-PrePassLighting" , "Hidden/Internal-ScreenSpaceShadows" , "Hidden/Internal-StencilWrite" ,
30+ "Hidden/Internal-UIRAtlasBlitCopy" , "Hidden/Internal-UIRDefault" , "Hidden/InternalClear" ,
31+ "Hidden/InternalErrorShader" , "Hidden/Post FX/Ambient Occlusion" , "Hidden/Post FX/Blit" ,
32+ "Hidden/Post FX/Bloom" , "Hidden/Post FX/Builtin Debug Views" , "Hidden/Post FX/Depth Of Field" ,
33+ "Hidden/Post FX/Eye Adaptation" , "Hidden/Post FX/Fog" , "Hidden/Post FX/FXAA" ,
34+ "Hidden/Post FX/Grain Generator" , "Hidden/Post FX/Lut Generator" , "Hidden/Post FX/Motion Blur" ,
35+ "Hidden/Post FX/Screen Space Reflection" , "Hidden/Post FX/Temporal Anti-aliasing" ,
36+ "hidden/SuperSystems/Wireframe-Global" , "hidden/SuperSystems/Wireframe-Shaded-Unlit-Global" ,
37+ "hidden/SuperSystems/Wireframe-Transparent-Culled-Global" ,
38+ "hidden/SuperSystems/Wireframe-Transparent-Global" , "Hidden/TextCore/Distance Field SSD" ,
39+ "Hidden/VideoComposite" , "Hidden/VideoDecode" , "Hidden/VideoDecodeOSX" ,
40+ "Hidden/VR/BlitFromTex2DToTexArraySlice" , "Hidden/VR/BlitTexArraySlice" , "Legacy Shaders/Diffuse" ,
41+ "Legacy Shaders/Particles/Additive" , "Legacy Shaders/Particles/Alpha Blended Premultiply" ,
42+ "Legacy Shaders/Particles/Alpha Blended" , "Legacy Shaders/Transparent/VertexLit" ,
43+ "Legacy Shaders/VertexLit" , "Mobile/Unlit (Supports Lightmap)" , "Particles/Standard Unlit" ,
44+ "Skybox/Procedural" , "Spaventacorvi/Glitter/Glitter F - Bumped Specular" ,
45+ "Spaventacorvi/Holographic/Holo D - Specular Textured" , "Sprites/Default" , "Sprites/Diffuse" ,
46+ "Sprites/Mask" , "Standard (Specular setup)" , "Standard" , "SuperSystems/Wireframe-Transparent-Culled" ,
47+ "TextMeshPro/Bitmap Custom Atlas" , "TextMeshPro/Bitmap" , "TextMeshPro/Distance Field (Surface)" ,
48+ "TextMeshPro/Distance Field Overlay" , "TextMeshPro/Distance Field" , "TextMeshPro/Mobile/Bitmap" ,
49+ "TextMeshPro/Mobile/Distance Field (Surface)" , "TextMeshPro/Mobile/Distance Field - Masking" ,
50+ "TextMeshPro/Mobile/Distance Field Overlay" , "TextMeshPro/Mobile/Distance Field" , "TextMeshPro/Sprite" ,
51+ "UI/Default" , "Hidden/Post FX/Uber"
52+ } ;
53+
54+ // just as cursed as above, but hey it still saves on disk space
55+ public List < string > TrombLoaderShaderNames = new List < string >
56+ {
57+ "Hidden/Internal-DeferredShading" , "Hidden/Internal-DeferredReflections" , "Hidden/Internal-ScreenSpaceShadows" ,
58+ "Hidden/Internal-PrePassLighting" , "Hidden/Internal-DepthNormalsTexture" , "Hidden/Internal-MotionVectors" ,
59+ "Hidden/Internal-Halo" , "Hidden/Internal-Flare" , "Hidden/CubeBlur" , "Hidden/CubeCopy" , "Hidden/CubeBlend" ,
60+ "Hidden/BlitCopy" , "Legacy Shaders/Self-Illumin/VertexLit" , "Legacy Shaders/Self-Illumin/Diffuse" ,
61+ "Legacy Shaders/Reflective/VertexLit" , "Legacy Shaders/Reflective/Specular" , "Legacy Shaders/Transparent/Diffuse" ,
62+ "Legacy Shaders/Transparent/Bumped Diffuse" , "Legacy Shaders/Transparent/Cutout/VertexLit" ,
63+ "Legacy Shaders/Transparent/Cutout/Diffuse" , "Legacy Shaders/Particles/~Additive-Multiply" ,
64+ "Legacy Shaders/Particles/Additive (Soft)" , "Particles/Standard Surface" , "Hidden/Nature/Terrain/Utilities" ,
65+ "Hidden/TerrainEngine/Details/Vertexlit" , "Hidden/TerrainEngine/Details/WavingDoublePass" ,
66+ "Hidden/TerrainEngine/Details/BillboardWavingDoublePass" , "Hidden/TerrainEngine/BillboardTree" ,
67+ "Hidden/TerrainEngine/Splatmap/Diffuse-Base" , "Hidden/TerrainEngine/Splatmap/Diffuse-BaseGen" ,
68+ "Hidden/TerrainEngine/Splatmap/Diffuse-AddPass" , "Nature/Terrain/Diffuse" , "Hidden/Internal-GUITextureClip" ,
69+ "Hidden/Internal-GUITextureClipText" , "Hidden/Internal-GUITexture" , "Hidden/Internal-GUITextureBlit" ,
70+ "Hidden/Internal-GUIRoundedRect" , "Hidden/Internal-UIRDefault" , "Hidden/Internal-UIRAtlasBlitCopy" ,
71+ "Hidden/Internal-GUIRoundedRectWithColorPerBorder" , "Mobile/VertexLit" , "Mobile/Diffuse" , "Mobile/Particles/Additive" ,
72+ "Unlit/Transparent" , "Unlit/Transparent Cutout" , "Unlit/Texture" , "Unlit/Color" , "Hidden/VideoComposite" ,
73+ "Hidden/VideoDecode" , "Hidden/VideoDecodeOSX" , "Hidden/VideoDecodeAndroid" , "Hidden/VideoDecodeML" , "Hidden/Compositing" ,
74+ "Hidden/Shader Forge/SFN_Blend_Divide" , "Hidden/Shader Forge/SFN_Time" , "Hidden/Shader Forge/SFN_Blend_Subtract" ,
75+ "Hidden/Shader Forge/SFN_UVTile" , "Hidden/Shader Forge/SFN_Blend_PinLight" , "Hidden/Shader Forge/FillColor" ,
76+ "Hidden/Shader Forge/SFN_Blend_LinearDodge" , "Hidden/Shader Forge/SFN_Noise" , "Hidden/Shader Forge/SFN_TexCoord" ,
77+ "Hidden/Shader Forge/SFN_ArcTan2_ZTO" , "Hidden/Shader Forge/SFN_Blend_Multiply" , "Hidden/Shader Forge/SFN_Blend_Overlay" ,
78+ "Hidden/Shader Forge/SFN_Add_2" , "Hidden/Shader Forge/SFN_ArcTan2_ZTOW" , "Hidden/Shader Forge/SFN_Tex2d_UV" ,
79+ "Hidden/Shader Forge/ExtractChannel" , "Hidden/Shader Forge/SFN_Tex2d_NoInputs" , "Hidden/Shader Forge/SFN_Blend_ColorDodge" ,
80+ "Hidden/Shader Forge/SFN_ArcTan2_NOTO" , "Hidden/Shader Forge/SFN_Distance" , "Hidden/Shader Forge/SFN_Posterize" ,
81+ "Hidden/Shader Forge/SFN_ComponentMask_CC2" , "Hidden/Shader Forge/SFN_ComponentMask_CC3" ,
82+ "Hidden/Shader Forge/SFN_ComponentMask_CC1" , "Hidden/Shader Forge/SFN_Blend_ColorBurn" , "Hidden/Shader Forge/SFN_ArcTan" ,
83+ "Hidden/Shader Forge/SFN_Blend_Difference" , "Hidden/Shader Forge/SFN_Blend_Screen" , "Hidden/Shader Forge/SFN_Append" ,
84+ "Hidden/Shader Forge/SFN_Blend_LinearBurn" , "Hidden/Shader Forge/SFN_Blend_Darken" , "Hidden/Shader Forge/SFN_Multiply_2" ,
85+ "Hidden/Shader Forge/SFN_Lerp" , "Hidden/Shader Forge/SFN_Abs" , "Shader Forge/TransparentControl" ,
86+ "Shader Forge/SpiralClock" , "Shader Forge/Spiral" , "Shader Forge/ClockSpiralFinal"
87+ } ;
88+
1589 private void OnEnable ( )
1690 {
1791 tromboneBackground = ( Camera ) target ;
@@ -27,26 +101,61 @@ public override void OnInspectorGUI()
27101 {
28102 string path = EditorUtility . SaveFilePanel ( "Save Trombone Background" , string . Empty , "bg.trombackground" , "trombackground" ) ;
29103
30- BuildTargetGroup selectedBuildTargetGroup = EditorUserBuildSettings . selectedBuildTargetGroup ;
31- BuildTarget activeBuildTarget = EditorUserBuildSettings . activeBuildTarget ;
104+ BuildTargetGroup selectedBuildTargetGroup = BuildTargetGroup . Standalone ;
105+ BuildTarget activeBuildTarget = BuildTarget . StandaloneWindows64 ;
32106
33107 GameObject clonedTromboneBackground = null ;
34108
35109 try
36110 {
37111 if ( ! string . IsNullOrEmpty ( path ) )
38112 {
113+ string fileName = Path . GetFileName ( path ) ;
114+ string folderPath = Path . GetDirectoryName ( path ) ;
115+
116+ // macOS Shader compiling
117+ var shaders = Resources . FindObjectsOfTypeAll < Shader > ( ) ;
118+
119+ var filteredShaders = new List < Shader > ( ) ;
120+
121+ foreach ( var shader in shaders )
122+ {
123+ // probably don't need to check for null here but just to be safe
124+ if ( shader == null || shader . name == "Standard" ) continue ;
125+
126+ // as far as i'm aware Unity doesn't list hidden shaders in the editor UI
127+ // so hopefully excluding them won't break anything
128+ if ( shader . name . StartsWith ( "Hidden/" ) ) continue ;
129+
130+ if ( BaseGameShaderNames . Contains ( shader . name ) || TrombLoaderShaderNames . Contains ( shader . name ) ) continue ;
131+
132+ if ( filteredShaders . Contains ( shader ) ) continue ;
133+
134+ if ( shader . hideFlags . HasFlag ( HideFlags . DontSave ) || shader . hideFlags . HasFlag ( HideFlags . HideAndDontSave ) ) continue ;
135+
136+ Debug . Log ( $ "Found shader { shader . name } to build for macOS") ;
137+ filteredShaders . Add ( shader ) ;
138+ }
139+
39140 clonedTromboneBackground = Instantiate ( tromboneBackground . gameObject ) ;
40141
142+ var macShadersBuilt = true ;
143+
144+ if ( filteredShaders . Any ( ) )
145+ {
146+ MacShaderPicker window = CreateInstance < MacShaderPicker > ( ) ;
147+ window . titleContent = new GUIContent ( "macOS Shader Bundle Builder" ) ;
148+ window . Init ( filteredShaders , folderPath , clonedTromboneBackground ) ;
149+ window . ShowModalUtility ( ) ;
150+ macShadersBuilt = window . HasBuilt ;
151+ }
152+
41153 // serialize
42154 foreach ( var manager in clonedTromboneBackground . gameObject . GetComponentsInChildren < TromboneEventManager > ( ) )
43155 {
44156 manager . SerializeAllGenericEvents ( ) ;
45157 }
46158
47- string fileName = Path . GetFileName ( path ) ;
48- string folderPath = Path . GetDirectoryName ( path ) ;
49-
50159 int serializedCount = 0 ;
51160 // serialize video clips because unity REALLY does not like making them work in assetbundles
52161 foreach ( var videoPlayer in clonedTromboneBackground . gameObject . GetComponentsInChildren < VideoPlayer > ( ) )
@@ -111,7 +220,14 @@ public override void OnInspectorGUI()
111220
112221 AssetDatabase . Refresh ( ) ;
113222
114- EditorUtility . DisplayDialog ( "Exportation Successful!" , "Exportation Successful!" , "OK" ) ;
223+ if ( macShadersBuilt )
224+ {
225+ EditorUtility . DisplayDialog ( "Exportation Successful!" , "Exportation Successful!" , "OK" ) ;
226+ }
227+ else
228+ {
229+ EditorUtility . DisplayDialog ( "Exportation Successful!" , "No macOS shaders were built." , "OK" ) ;
230+ }
115231
116232 if ( clonedTromboneBackground != null ) DestroyImmediate ( clonedTromboneBackground ) ;
117233
@@ -131,4 +247,4 @@ public override void OnInspectorGUI()
131247 }
132248 }
133249 }
134- }
250+ }
0 commit comments