summaryrefslogtreecommitdiffstats
path: root/Third_Party/at.pimaker.ltcgi/Editor/LTCGI_ControllerAutoSetup.cs
diff options
context:
space:
mode:
authoryum <yum.food.vr@gmail.com>2024-04-25 15:52:24 -0700
committeryum <yum.food.vr@gmail.com>2024-04-25 15:52:24 -0700
commit6eed98ff4e57326ebf7a41f0c180635a7bcac626 (patch)
tree67f5e269bafb49608cab8a6b22534d83fd09b58b /Third_Party/at.pimaker.ltcgi/Editor/LTCGI_ControllerAutoSetup.cs
parentb9671b47df8b17fa3143d4b0dbdecf9b77cc7607 (diff)
Add LTCGI
Also begin trying to fix fallback shaders.
Diffstat (limited to 'Third_Party/at.pimaker.ltcgi/Editor/LTCGI_ControllerAutoSetup.cs')
-rw-r--r--Third_Party/at.pimaker.ltcgi/Editor/LTCGI_ControllerAutoSetup.cs161
1 files changed, 161 insertions, 0 deletions
diff --git a/Third_Party/at.pimaker.ltcgi/Editor/LTCGI_ControllerAutoSetup.cs b/Third_Party/at.pimaker.ltcgi/Editor/LTCGI_ControllerAutoSetup.cs
new file mode 100644
index 0000000..726edbc
--- /dev/null
+++ b/Third_Party/at.pimaker.ltcgi/Editor/LTCGI_ControllerAutoSetup.cs
@@ -0,0 +1,161 @@
+#if UNITY_EDITOR
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using UnityEditor;
+using UnityEngine;
+#if UDONSHARP
+using UdonSharp;
+using UdonSharpEditor;
+#endif
+#endif
+
+namespace pi.LTCGI
+{
+ #if UNITY_EDITOR
+ public partial class LTCGI_Controller
+ {
+ public GameObject ConfiguredAdapter;
+
+ private const string PROTV_ADAPTER_VERSION = "1.0.0";
+ private const string UDONSHARP_ADAPTER_VERSION = "1.0.0";
+
+ internal static List<ILTCGI_AutoSetup> wizards;
+ internal static List<ILTCGI_AutoSetup> Wizards
+ {
+ get
+ {
+ if (wizards != null) return wizards;
+ wizards = new List<ILTCGI_AutoSetup>();
+
+ var asms = System.AppDomain.CurrentDomain.GetAssemblies();
+ Assembly asm = Assembly.GetExecutingAssembly();
+ foreach (var a in asms)
+ {
+ if (a.FullName.Contains("Assembly-CSharp-Editor"))
+ {
+ asm = a;
+ break;
+ }
+ }
+
+ foreach (var wizard in asm.GetTypes()
+ .Where(x => x.IsClass && !x.IsAbstract && typeof(ILTCGI_AutoSetup).IsAssignableFrom(x)))
+ {
+ var instance = Activator.CreateInstance(wizard) as ILTCGI_AutoSetup;
+ if (instance != null)
+ {
+ //Debug.Log("LTCGI: Found AutoSetup wizard: " + wizard.Name);
+ wizards.Add(instance);
+ }
+ }
+
+ return wizards;
+ }
+ }
+
+ internal static void DrawAutoSetupEditor(LTCGI_Controller my)
+ {
+ // we have one configured, only allow un-setup
+ if (my.ConfiguredAdapter != null)
+ {
+ EditorGUILayout.LabelField("Configured Adapter: " + my.ConfiguredAdapter.name);
+ if (GUILayout.Button("Un-Configure"))
+ {
+ DestroyImmediate(my.ConfiguredAdapter);
+ my.ConfiguredAdapter = null;
+ LTCGI_Controller.Singleton.UpdateMaterials();
+ }
+ return;
+ }
+
+ // try to detect auto-setupable video players
+ foreach (var wizard in Wizards)
+ {
+ var set = wizard.AutoSetupEditor(my);
+ if (set != null)
+ {
+ my.ConfiguredAdapter = set;
+ LTCGI_Controller.Singleton.UpdateMaterials();
+ return;
+ }
+ }
+ }
+
+ internal static void DetectAndEnableAdaptersForAvailableVideoplayers()
+ {
+#if UDONSHARP
+ if (!AssetDatabase.IsValidFolder("Assets/_pi_"))
+ AssetDatabase.CreateFolder("Assets", "_pi_");
+ if (!AssetDatabase.IsValidFolder("Assets/_pi_/_LTCGI-Adapters"))
+ AssetDatabase.CreateFolder("Assets/_pi_", "_LTCGI-Adapters");
+ if (!AssetDatabase.IsValidFolder("Assets/_pi_/_LTCGI-Adapters/Editor"))
+ AssetDatabase.CreateFolder("Assets/_pi_/_LTCGI-Adapters", "Editor");
+
+ var changed = false;
+
+ // ProTv
+ if (AssetDatabase.IsValidFolder("Assets/ArchiTechAnon/ProTV") && (!System.IO.File.Exists("Assets/_pi_/_LTCGI-Adapters/protv_adapter_version.txt") || System.IO.File.ReadAllText("Assets/_pi_/_LTCGI-Adapters/protv_adapter_version.txt") != PROTV_ADAPTER_VERSION))
+ {
+ EditorUtility.DisplayDialog("LTCGI", "ProTv detected, enabling ProTv adapter.", "OK");
+
+ System.IO.File.WriteAllText("Assets/_pi_/_LTCGI-Adapters/protv_adapter_version.txt", PROTV_ADAPTER_VERSION);
+
+ System.IO.File.Copy("Packages/at.pimaker.ltcgi/Adapters/LTCGI_ProTvAdapter.cs_disabled", "Assets/_pi_/_LTCGI-Adapters/LTCGI_ProTvAdapter.cs", true);
+ System.IO.File.Copy("Packages/at.pimaker.ltcgi/Adapters/LTCGI_ProTvAdapter.cs_disabled.meta", "Assets/_pi_/_LTCGI-Adapters/LTCGI_ProTvAdapter.cs.meta", true);
+ System.IO.File.Copy("Packages/at.pimaker.ltcgi/Adapters/LTCGI_ProTvAdapter.asset_disabled", "Assets/_pi_/_LTCGI-Adapters/LTCGI_ProTvAdapter.asset", true);
+ System.IO.File.Copy("Packages/at.pimaker.ltcgi/Adapters/LTCGI_ProTvAdapter.asset_disabled.meta", "Assets/_pi_/_LTCGI-Adapters/LTCGI_ProTvAdapter.asset.meta", true);
+ System.IO.File.Copy("Packages/at.pimaker.ltcgi/Adapters/Editor/LTCGI_ProTvAdapterAutoSetup.cs_disabled", "Assets/_pi_/_LTCGI-Adapters/Editor/LTCGI_ProTvAdapterAutoSetup.cs", true);
+
+ AssetDatabase.ImportAsset("Assets/_pi_/_LTCGI-Adapters/LTCGI_ProTvAdapter.asset", ImportAssetOptions.ForceSynchronousImport);
+ AssetDatabase.Refresh();
+
+ UdonSharpProgramAsset adapter = AssetDatabase.LoadAssetAtPath<UdonSharpProgramAsset>("Assets/_pi_/_LTCGI-Adapters/LTCGI_ProTvAdapter.asset");
+ adapter.sourceCsScript = AssetDatabase.LoadAssetAtPath<MonoScript>("Assets/_pi_/_LTCGI-Adapters/LTCGI_ProTvAdapter.cs");
+ adapter.ApplyProgram();
+ EditorUtility.SetDirty(adapter);
+
+ changed = true;
+ }
+
+ // USharpVideo
+ if (AssetDatabase.IsValidFolder("Assets/USharpVideo") && (!System.IO.File.Exists("Assets/_pi_/_LTCGI-Adapters/usharpvideo_adapter_version.txt") || System.IO.File.ReadAllText("Assets/_pi_/_LTCGI-Adapters/usharpvideo_adapter_version.txt") != UDONSHARP_ADAPTER_VERSION))
+ {
+ EditorUtility.DisplayDialog("LTCGI", "USharpVideo detected, enabling USharpVideo adapter.", "OK");
+
+ System.IO.File.WriteAllText("Assets/_pi_/_LTCGI-Adapters/usharpvideo_adapter_version.txt", UDONSHARP_ADAPTER_VERSION);
+
+ System.IO.File.Copy("Packages/at.pimaker.ltcgi/Adapters/LTCGI_USharpVideoAdapter.cs_disabled", "Assets/_pi_/_LTCGI-Adapters/LTCGI_USharpVideoAdapter.cs", true);
+ System.IO.File.Copy("Packages/at.pimaker.ltcgi/Adapters/LTCGI_USharpVideoAdapter.cs_disabled.meta", "Assets/_pi_/_LTCGI-Adapters/LTCGI_USharpVideoAdapter.cs.meta", true);
+ System.IO.File.Copy("Packages/at.pimaker.ltcgi/Adapters/LTCGI_USharpVideoAdapter.asset_disabled", "Assets/_pi_/_LTCGI-Adapters/LTCGI_USharpVideoAdapter.asset", true);
+ System.IO.File.Copy("Packages/at.pimaker.ltcgi/Adapters/LTCGI_USharpVideoAdapter.asset_disabled.meta", "Assets/_pi_/_LTCGI-Adapters/LTCGI_USharpVideoAdapter.asset.meta", true);
+ System.IO.File.Copy("Packages/at.pimaker.ltcgi/Adapters/Editor/LTCGI_USharpVideoAdapterAutoSetup.cs_disabled", "Assets/_pi_/_LTCGI-Adapters/Editor/LTCGI_USharpVideoAdapterAutoSetup.cs", true);
+
+ AssetDatabase.ImportAsset("Assets/_pi_/_LTCGI-Adapters/LTCGI_USharpVideoAdapter.asset", ImportAssetOptions.ForceSynchronousImport);
+ AssetDatabase.Refresh();
+
+ UdonSharpProgramAsset adapter = AssetDatabase.LoadAssetAtPath<UdonSharpProgramAsset>("Assets/_pi_/_LTCGI-Adapters/LTCGI_USharpVideoAdapter.asset");
+ adapter.sourceCsScript = AssetDatabase.LoadAssetAtPath<MonoScript>("Assets/_pi_/_LTCGI-Adapters/LTCGI_USharpVideoAdapter.cs");
+ adapter.ApplyProgram();
+ EditorUtility.SetDirty(adapter);
+
+ changed = true;
+ }
+
+ if (changed)
+ {
+ AssetDatabase.SaveAssets();
+ UdonSharp.Compiler.UdonSharpCompilerV1.CompileSync();
+ }
+#endif
+ }
+ }
+
+ public interface ILTCGI_AutoSetup
+ {
+ // returns value if set up
+ GameObject AutoSetupEditor(LTCGI_Controller controller);
+ }
+ #endif
+} \ No newline at end of file