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 生命周期 /// /// 打开窗体 /// public static void Open() { if (_currentWindow != null) { _currentWindow.Close(); } _currentWindow = GetWindow(); if (_currentWindow != null) { _currentWindow.minSize = _miniSize; _currentWindow.Show(); } } private void Awake() { this.titleContent = new GUIContent("Guru.Max"); } /// /// 窗体激活 /// 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; /// /// 绘制接入的各种Network /// 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 } }