186 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			C#
		
	
	
			
		
		
	
	
			186 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			C#
		
	
	
| using System;
 | |
| using System.Collections.Generic;
 | |
| using System.IO;
 | |
| using UnityEngine;
 | |
| using UnityEditor;
 | |
| using UnityEditor.Compilation;
 | |
| using Debug = UnityEngine.Debug;
 | |
| 
 | |
| namespace Guru.Editor.Max
 | |
| {
 | |
| 
 | |
|     /// <summary>
 | |
|     /// GuruMaxIntegrationManager Support for MaxPlugins
 | |
|     /// </summary>
 | |
|     public class GuruMaxSdkAPI
 | |
|     {
 | |
|         // ------------ VERSION INFO ------------
 | |
|         public const string Version = "0.1.0";
 | |
|         public const string SdkVersion = "6.1.2";
 | |
|         // ------------ VERSION INFO ------------
 | |
| 
 | |
|         public const string PackageName = "com.guru.unity.max";
 | |
|         private static readonly string AppLovinSettingsRootDir = "Assets/Guru/Resources";
 | |
|         private static string AppLovinSettingsAssetPath = $"{AppLovinSettingsRootDir}/AppLovinSettings.asset";
 | |
|         
 | |
|         public static bool DefaultQualityServiceEnabled = true;
 | |
|         public static bool DefaultUseMaxConsentFlow = false;
 | |
|         public static bool DefaultAttributionReportEndpoint = true;
 | |
|         public static bool DefaultAddApsSkAdNetworkIds = true;
 | |
|         
 | |
|         
 | |
| 
 | |
|         /// <summary>
 | |
|         /// GuruMaxIntegrationManager Max 的根目录地址
 | |
|         /// </summary>
 | |
|         public static string PackageDataPath
 | |
|         {
 | |
|             get
 | |
|             {
 | |
| #if GURU_SDK_DEV
 | |
|                 return DevPackageRoot;
 | |
| #endif
 | |
|                 return $"Packages/{PackageName}";
 | |
| 
 | |
|             }
 | |
|         }
 | |
| 
 | |
| 
 | |
| #if GURU_SDK_DEV
 | |
|         private static readonly string DefaultDevPackageRoot = $"Assets/__upm/{PackageName}";
 | |
|         private static string _devPackageRoot = "";
 | |
|         public static string DevPackageRoot
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 if (string.IsNullOrEmpty(_devPackageRoot))
 | |
|                 {
 | |
|                     _devPackageRoot = DefaultDevPackageRoot;
 | |
|                     var assets = AssetDatabase.FindAssets($"GuruMaxSdkAPI t:script");
 | |
|                     if (assets != null && assets.Length > 0)
 | |
|                     {
 | |
|                         string path = AssetDatabase.GUIDToAssetPath(assets[0]);
 | |
|                         if (File.Exists(path) && path.Replace("\\", "/").Contains("/Editor"))
 | |
|                         {
 | |
|                             _devPackageRoot = path.Replace("/Editor", ",").Split(',')[0];
 | |
|                         }
 | |
|                     }
 | |
|                 }
 | |
|                 return _devPackageRoot;
 | |
|             }
 | |
|         }
 | |
| #endif    
 | |
| 
 | |
| 
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 加载并修复AppLovinSettings组件路径和位置
 | |
|         /// </summary>
 | |
|         public static AppLovinSettings LoadOrCreateAppLovinSettings()
 | |
|         {
 | |
| 
 | |
|             // 若原始文件存在        
 | |
|             if (File.Exists(Path.Combine(Application.dataPath.Replace("Assets", ""), AppLovinSettingsAssetPath)))
 | |
|             {
 | |
|                 return AssetDatabase.LoadAssetAtPath<AppLovinSettings>(AppLovinSettingsAssetPath);
 | |
|             }
 | |
| 
 | |
|             // 否则开始查找文件
 | |
|             var guids = AssetDatabase.FindAssets("AppLovinSettings t:ScriptableObject");
 | |
| 
 | |
|             int removed = 0;
 | |
|             if (guids.Length > 0)
 | |
|             {
 | |
|                 foreach (var g in guids)
 | |
|                 {
 | |
|                     var path = AssetDatabase.GUIDToAssetPath(g);
 | |
| 
 | |
|                     Debug.Log($"--- Found assets at path:{path}");
 | |
| 
 | |
| 
 | |
|                     if (!path.StartsWith(AppLovinSettingsRootDir))
 | |
|                     {
 | |
|                         AssetDatabase.DeleteAsset(path);
 | |
|                         removed++;
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             if (guids.Length == 0 || removed >= guids.Length)
 | |
|             {
 | |
|                 return CreateDefaultAppLovinSettings(); // 创建默认的AppLovin Settings 配置
 | |
|             }
 | |
| 
 | |
| 
 | |
|             return AssetDatabase.LoadAssetAtPath<AppLovinSettings>(AssetDatabase.GUIDToAssetPath(guids[0]));
 | |
| 
 | |
| 
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 创建AppLovinSettings 配置默认路径
 | |
|         /// </summary>
 | |
|         /// <returns></returns>
 | |
|         private static AppLovinSettings CreateDefaultAppLovinSettings()
 | |
|         {
 | |
|             // Create Root dir
 | |
|             var expDir =
 | |
|                 new DirectoryInfo(Path.Combine(Application.dataPath.Replace("Assets", ""), AppLovinSettingsRootDir));
 | |
|             if (!expDir.Exists) expDir.Create();
 | |
| 
 | |
|             // Make a new one
 | |
|             var settings = ScriptableObject.CreateInstance<AppLovinSettings>();
 | |
|             settings.QualityServiceEnabled = DefaultQualityServiceEnabled;
 | |
|             settings.SetAttributionReportEndpoint = DefaultAttributionReportEndpoint;
 | |
|             settings.ConsentFlowEnabled = DefaultUseMaxConsentFlow;
 | |
|             settings.AddApsSkAdNetworkIds = DefaultAddApsSkAdNetworkIds;
 | |
|             AssetDatabase.CreateAsset(settings, AppLovinSettingsAssetPath);
 | |
|             AssetDatabase.SaveAssetIfDirty(settings);
 | |
|             AssetDatabase.Refresh();
 | |
| 
 | |
|             Debug.Log($"[Guru] <color=#88ff00>--- Create AppLovinSettings at:</color> \n{AppLovinSettingsAssetPath}");
 | |
| 
 | |
|             return settings;
 | |
|         }
 | |
| 
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 是否显示MAX菜单
 | |
|         /// </summary>
 | |
|         /// <param name="active"></param>
 | |
|         public static void SetMaxMenuActive(bool active)
 | |
|         {
 | |
|             if (active)
 | |
|             {
 | |
|                 ApplovinMod.MenuItemsRecover();
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 ApplovinMod.MenuItemsHide();
 | |
|             }
 | |
|             CompilationPipeline.RequestScriptCompilation();
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 移动文件
 | |
|         /// </summary>
 | |
|         /// <param name="from"></param>
 | |
|         /// <param name="to"></param>
 | |
|         private static void MoveFile(string from, string to)
 | |
|         {
 | |
|             if (!File.Exists(from))
 | |
|             {
 | |
|                 Debug.Log($"<color=orange>File not found: {from}</color>");
 | |
|                 return;
 | |
|             }
 | |
| 
 | |
|             if (File.Exists(to)) File.Delete(to);
 | |
| 
 | |
|             File.Move(from, to);
 | |
|             Debug.Log($"<color=#88ff00>File move: {from} to \n{to}</color>");
 | |
|         }
 | |
| 
 | |
|     }
 | |
| 
 | |
| 
 | |
| } |