382 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			C#
		
	
	
			
		
		
	
	
			382 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			C#
		
	
	
| using System;
 | |
| using AppLovinMax.Scripts.IntegrationManager.Editor;
 | |
| using UnityEditor;
 | |
| using UnityEngine;
 | |
| using EUI= Guru.EasyGUILayout;
 | |
| using Network = AppLovinMax.Scripts.IntegrationManager.Editor.Network;
 | |
| 
 | |
| namespace Guru.Editor.Max
 | |
| {
 | |
|     public class GuruMaxIntegrationManager: EditorWindow
 | |
|     {
 | |
|         private static GuruMaxIntegrationManager _currentWindow;
 | |
|         private static Vector2 _miniSize = new Vector2(600, 800);
 | |
|         private AppLovinSettings _settings;
 | |
| 
 | |
|         private static GUIStyle _labelBoldStyle;
 | |
| 
 | |
|         public static GUIStyle LabelBoldStyle {
 | |
|             get {
 | |
|                 if (_labelBoldStyle == null)
 | |
|                 {
 | |
|                     _labelBoldStyle = new GUIStyle(EditorStyles.label)
 | |
|                     {
 | |
|                         fontSize = 14,
 | |
|                         fontStyle = FontStyle.Bold,
 | |
|                         fixedHeight = 20
 | |
|                     };
 | |
|                 }
 | |
| 
 | |
|                 return _labelBoldStyle;
 | |
|             }
 | |
|         }
 | |
|         
 | |
|         private string _maxSdkKey;
 | |
|         private string _admobAndroidId;
 | |
|         private string _admobIOSId;
 | |
|         private bool _qualityServiceEnabled = true;
 | |
|         private bool _setAttributionReportEndpoint = true;
 | |
|         private bool _addApsSkAdNetworkIds = true;
 | |
|         private bool _isDirty;
 | |
|         
 | |
|         //------- AppLovinData --------
 | |
|         private AppLovinEditorCoroutine loadDataCoroutine;
 | |
|         private PluginData pluginData;
 | |
|         
 | |
|         #region 生命周期
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 打开窗体
 | |
|         /// </summary>
 | |
|         public static void Open()
 | |
|         {
 | |
|             if (_currentWindow != null)
 | |
|             {
 | |
|                 _currentWindow.Close();
 | |
|             }
 | |
|             _currentWindow = GetWindow<GuruMaxIntegrationManager>();
 | |
|             if (_currentWindow != null)
 | |
|             {
 | |
|                 _currentWindow.minSize = _miniSize;
 | |
|                 _currentWindow.Show();
 | |
|             }
 | |
|         }
 | |
| 
 | |
| 
 | |
|         private void Awake()
 | |
|         {
 | |
|             this.titleContent = new GUIContent("Guru.Max");
 | |
|         }
 | |
|         
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 窗体激活
 | |
|         /// </summary>
 | |
|         private void OnEnable()
 | |
|         {
 | |
|             LoadSettings();
 | |
|             _isDirty = false;
 | |
| 
 | |
|             LoadPluginData();
 | |
|         }
 | |
| 
 | |
|         private void OnDisable()
 | |
|         {
 | |
|             CheckSaveData(true);
 | |
|             
 | |
|             if (loadDataCoroutine != null)
 | |
|             {
 | |
|                 loadDataCoroutine.Stop();
 | |
|                 loadDataCoroutine = null;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
| 
 | |
|         #region GUI
 | |
| 
 | |
|         
 | |
|         private void OnGUI()
 | |
|         {
 | |
| 
 | |
|             GUI_Title();
 | |
|             GUILayout.Space(4);
 | |
|             GUI_MaxParamsSettings();
 | |
|             GUILayout.Space(8);
 | |
|             GUI_DrawMediatedNetworks();
 | |
| #if MAX_DEV
 | |
|             GUILayout.Space(8);
 | |
|             GUI_DebugMenu();
 | |
| #endif
 | |
|             CheckSaveData();
 | |
|         }
 | |
| 
 | |
| 
 | |
|         private float _timePassed = 0;
 | |
|         private void CheckSaveData(bool force = false)
 | |
|         {
 | |
|             _timePassed += Time.deltaTime;
 | |
| 
 | |
|             if (force || _timePassed >= 2 )
 | |
|             {
 | |
|                 if ( force || _isDirty)
 | |
|                 {
 | |
|                     SaveSettings();
 | |
|                     _isDirty = false;
 | |
|                 }
 | |
|                 _timePassed= 0;
 | |
|             }
 | |
|         }
 | |
| 
 | |
| 
 | |
|         private void GUI_Title()
 | |
|         {
 | |
|             GUILayout.Space(10);
 | |
|             EUI.Label("Guru Max Manager", 0, 24, FontStyle.Bold, TextAnchor.MiddleCenter);
 | |
|             GUILayout.Space(4);
 | |
|             EUI.Label($"Version: {GuruMaxSdkAPI.Version}", fontSize:12, anchor:TextAnchor.MiddleCenter);
 | |
|             GUILayout.Space(16);
 | |
|         }
 | |
| 
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region DataSave
 | |
| 
 | |
|         private void LoadSettings()
 | |
|         {
 | |
|             _settings = GuruMaxSdkAPI.LoadOrCreateAppLovinSettings();
 | |
|             if (null != _settings)
 | |
|             {
 | |
|                 _maxSdkKey = _settings.SdkKey;
 | |
|                 _admobAndroidId = _settings.AdMobAndroidAppId;
 | |
|                 _admobIOSId = _settings.AdMobIosAppId;
 | |
|                 _qualityServiceEnabled = _settings.QualityServiceEnabled;
 | |
|                 _setAttributionReportEndpoint = _settings.SetAttributionReportEndpoint;
 | |
|                 _addApsSkAdNetworkIds = _settings.AddApsSkAdNetworkIds;
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 Debug.LogError("[GuruMax] Load AppLovinSettings failed...");
 | |
|                 if(EditorUtility.DisplayDialog("Guru Max", "Can't find AppLovinSettings in project, Something is wrong.", "OK"))
 | |
|                 {
 | |
|                     Close();
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
| 
 | |
| 
 | |
|         private void SaveSettings()
 | |
|         {
 | |
|             if (null != _settings)
 | |
|             {
 | |
|                 _settings.SdkKey = _maxSdkKey;
 | |
|                 _settings.AdMobAndroidAppId = _admobAndroidId;
 | |
|                 _settings.AdMobIosAppId = _admobIOSId;
 | |
|                 _settings.QualityServiceEnabled = _qualityServiceEnabled;
 | |
|                 _settings.SetAttributionReportEndpoint = _setAttributionReportEndpoint;
 | |
|                 _settings.AddApsSkAdNetworkIds = _addApsSkAdNetworkIds;
 | |
|                 
 | |
|                 EditorUtility.SetDirty(_settings);
 | |
|                 AssetDatabase.SaveAssetIfDirty(_settings);
 | |
|                 
 | |
|                 Debug.Log("[GuruMax] AppLovinSettings Saved.");
 | |
|             }
 | |
|         }
 | |
| 
 | |
| 
 | |
|         #endregion
 | |
|         
 | |
|         #region Params Settings
 | |
| 
 | |
| 
 | |
|         private void GUI_MaxParamsSettings()
 | |
|         {
 | |
|             EditorGUILayout.LabelField("AppLovin Settings", LabelBoldStyle);
 | |
|             GUILayout.Space(4);
 | |
|             string indentStr = "  ";
 | |
|             
 | |
|             float label_width = 160;
 | |
|             EUI.Label($"{indentStr}[ Keys for Max ]");
 | |
|             //----------- MAX SDK KEY -----------
 | |
|             EUI.BoxLineItem($"{indentStr}AppLovin SDK Key", label_width, contents: () =>
 | |
|             {
 | |
|                 EUI.Text(_maxSdkKey, value =>
 | |
|                 {
 | |
|                     _isDirty = true;
 | |
|                     _maxSdkKey = value;
 | |
|                 });
 | |
|             });
 | |
|             
 | |
|             GUILayout.Space(8);
 | |
|             EUI.Label($"{indentStr}[ Ids for AdMob ]");
 | |
|             EUI.BoxLineItem($"{indentStr}Google App ID (Android)", label_width, contents: () =>
 | |
|             {
 | |
|                 EUI.Text(_admobAndroidId, value =>
 | |
|                 {
 | |
|                     _isDirty = true;
 | |
|                     _admobAndroidId = value;
 | |
|                 });
 | |
|             });
 | |
| 
 | |
|             EUI.BoxLineItem($"{indentStr}Google App ID (iOS)", label_width, contents: () =>
 | |
|             {
 | |
|                 EUI.Text(_admobIOSId, value =>
 | |
|                 {
 | |
|                     _isDirty = true;
 | |
|                     _admobIOSId = value;
 | |
|                 });
 | |
|             });
 | |
|             GUILayout.Space(8);
 | |
|             
 | |
|             
 | |
|             EUI.Label($"{indentStr}[ Default: {GuruMaxSdkAPI.DefaultQualityServiceEnabled} ]");
 | |
|             EUI.BoxLineItem($"{indentStr}Quality Service Enabled", label_width, contents: () =>
 | |
|             {
 | |
|                 EUI.Toggle(_qualityServiceEnabled, value =>
 | |
|                 {
 | |
|                     _isDirty = true;
 | |
|                     _qualityServiceEnabled = value;
 | |
|                 });
 | |
|             });
 | |
|             GUILayout.Space(8);
 | |
|             
 | |
|             EUI.Label($"{indentStr}[ Default: {GuruMaxSdkAPI.DefaultAttributionReportEndpoint} ]");
 | |
|             EUI.BoxLineItem($"{indentStr}Attribution Report Endpoint(iOS)", label_width, contents: () =>
 | |
|             {
 | |
|                 EUI.Toggle(_setAttributionReportEndpoint, value =>
 | |
|                 {
 | |
|                     _isDirty = true;
 | |
|                     _setAttributionReportEndpoint = value;
 | |
|                 });
 | |
|             });
 | |
|             GUILayout.Space(8);
 | |
| 
 | |
|         }
 | |
| 
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region AppLovinData
 | |
|         
 | |
|         
 | |
|         private void LoadPluginData()
 | |
|         {
 | |
|             loadDataCoroutine = AppLovinEditorCoroutine.StartCoroutine(
 | |
|                 AppLovinIntegrationManager.Instance.LoadPluginData( data => {
 | |
|                     if (data != null)
 | |
|                     {
 | |
|                         pluginData = data;
 | |
|                         _showNetworks = true;
 | |
|                     }
 | |
|                 }));
 | |
|         }
 | |
| 
 | |
|         private bool _showNetworks = false;
 | |
|         private Vector2 scrollPos;
 | |
|         /// <summary>
 | |
|         /// 绘制接入的各种Network
 | |
|         /// </summary>
 | |
|         private void GUI_DrawMediatedNetworks()
 | |
|         {
 | |
|             
 | |
|             float label_width = 160;
 | |
|             EditorGUILayout.LabelField("Mediated Networks", LabelBoldStyle);
 | |
| 
 | |
| 
 | |
|             _showNetworks = EditorGUILayout.Foldout(_showNetworks, "Installed Networks" + (pluginData == null ? "  (loading...)": ""));
 | |
| 
 | |
|             if (_showNetworks)
 | |
|             {
 | |
|                 if (pluginData == null || pluginData.MediatedNetworks == null)
 | |
|                 {
 | |
|                     EditorGUILayout.LabelField("Loading...", new GUIStyle("box"), GUILayout.Width(this.minSize.x));
 | |
|                 }
 | |
|                 else
 | |
|                 {
 | |
|                 
 | |
|                     using (new EditorGUILayout.VerticalScope("box"))
 | |
|                     {
 | |
|                         EditorGUI.indentLevel++;
 | |
|                         DrawMaxTitle("Network", "Android", "iOS");
 | |
|                         // scrollPos = EditorGUILayout.BeginScrollView(scrollPos, GUILayout.Height(320));
 | |
|                         GUILayout.Space(6);
 | |
|                         Network network = null;
 | |
|                         for (int i =0; i < pluginData.MediatedNetworks.Length; i++)
 | |
|                         {
 | |
|                             network = pluginData.MediatedNetworks[i];
 | |
|                             if ( null != network && network.CurrentVersions != null &&
 | |
|                                  !string.IsNullOrEmpty(network.CurrentVersions.Unity))
 | |
|                             {
 | |
|                                 DrawMaxNetwork(network);
 | |
|                                 GUILayout.Space(2);
 | |
|                             }
 | |
|                         }
 | |
|                         // EditorGUILayout.EndScrollView();
 | |
|                         EditorGUI.indentLevel--;
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|         }
 | |
| 
 | |
| 
 | |
|         private void DrawMaxTitle(string name, string androidVersion, string iosVersion)
 | |
|         {
 | |
|             var st = new GUIStyle(EditorStyles.label)
 | |
|             {
 | |
|                 fontSize = 14,
 | |
|                 fontStyle = FontStyle.Bold,
 | |
|                 fixedHeight = 22
 | |
|             };
 | |
| 
 | |
|             using (new EditorGUILayout.HorizontalScope())
 | |
|             {
 | |
|                 EditorGUILayout.LabelField(name, st);
 | |
|                 // GUILayout.Space(2);
 | |
|                 EditorGUILayout.LabelField(androidVersion, st);
 | |
|                 // GUILayout.Space(2);
 | |
|                 EditorGUILayout.LabelField(iosVersion, st);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         private void DrawMaxNetwork(Network network)
 | |
|         {
 | |
|             using (new EditorGUILayout.HorizontalScope())
 | |
|             {
 | |
|                 EditorGUILayout.LabelField(network.DisplayName);
 | |
|                 // GUILayout.Space(2);
 | |
|                 EditorGUILayout.LabelField(network.CurrentVersions.Android ?? "...");
 | |
|                 // GUILayout.Space(2);
 | |
|                 EditorGUILayout.LabelField(network.CurrentVersions.Ios ?? "...");
 | |
|             }
 | |
|         }
 | |
| 
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region Debug
 | |
| 
 | |
| 
 | |
|         private bool _showMaxIntegrateManager = false;
 | |
|         private void GUI_DebugMenu()
 | |
|         {
 | |
|             EditorGUILayout.LabelField("Debug Menu", LabelBoldStyle);
 | |
|             GUILayout.Space(2);
 | |
| 
 | |
|             bool val = EditorGUILayout.Toggle("Show Max Menu", _showMaxIntegrateManager);
 | |
|             if (val != _showMaxIntegrateManager)
 | |
|             {
 | |
|                 _showMaxIntegrateManager = val;
 | |
|                 GuruMaxSdkAPI.SetMaxMenuActive(val);
 | |
|             }
 | |
| 
 | |
| 
 | |
| 
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
|     }
 | |
| } |