AkiraPixelWind/Assets/Scripts/Main/Base/AppEntry.Custom.cs
2022-12-29 18:20:40 +08:00

167 lines
4.3 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Axibug;
using Axibug.Runtime;
using System;
using UnityEngine;
using UnityEngine.Events;
namespace Game
{
/// <summary>
/// 游戏入口。
/// </summary>
public partial class AppEntry : MonoBehaviour
{
public static BuiltinDataComponent BuiltinData
{
get;
private set;
}
public static UpdateComponent HotUpdate
{
get;
private set;
}
//public static UIMgr UI
//{
// get;
// private set;
//}
//public static Tips Tips
//{
// get;
// private set;
//}
public static LocalStorage LocalStorage
{
get;
private set;
}
public static long Ticktime
{
get
{
return (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000;
}
}
public static GameObject confirmUIGo = null;
public static GameObject updateUIGo = null;
//gc释放时间
long _GcTime;
public long GCTime
{
get { return _GcTime; }
set { _GcTime = value; }
}
//gc释放时间
long _idleTime;
public long IdleTime
{
get { return _idleTime; }
set { _idleTime = value; }
}
private static void InitCustomComponents()
{
BuiltinData = GameEntry.GetComponent<BuiltinDataComponent>();
HotUpdate = GameEntry.GetComponent<UpdateComponent>();
//UI = GameEntry.GetComponent<UIMgr>();
//Tips = GameEntry.GetComponent<Tips>();
LocalStorage = LocalStorage.Instance;
}
public static void QuitGame()
{
#if UNITY_EDITOR
UnityEditor.EditorApplication.isPlaying = false;
#else
Application.Quit();
#endif
}
//非随机调用策略
void CheckTickTime()
{
long tickTime = Ticktime - _GcTime;
if (tickTime > 60000)
{
UnityEngine.Resources.UnloadUnusedAssets();
GC.Collect();
_GcTime = Ticktime;
IdleTime = Ticktime;
}
}
//待机状态策略
void CheckIdleTime()
{
//待机超过2分钟调用gc
if (Ticktime - IdleTime > 120000)
{
Log.Info("待机超过2分钟手动调用GC");
IdleTime = Ticktime;
GCTime = Ticktime;
UnityEngine.Resources.UnloadUnusedAssets();
GC.Collect();
}
}
public static T OpenNativeUI<T>(string name) where T : UnityEngine.Object
{
string path = $"Prefabs/{name}";
UnityEngine.Object obj = Resources.Load(path);
GameObject go = Instantiate(obj) as GameObject;
//如果是对话框默认放在update框下面
if (name.Equals("NativeConfirmUI"))
{
confirmUIGo = go;
go.transform.SetParent(updateUIGo.transform, false);
}
else if (name.Equals("NativeUpdateUI"))
updateUIGo = go;
return go.GetComponent<T>();
}
public static void CloseNativeUI(string name)
{
if (name.Equals("NativeConfirmUI"))
{
DestroyImmediate(confirmUIGo);
confirmUIGo = null;
}
else if (name.Equals("NativeUpdateUI"))
{
DestroyImmediate(updateUIGo);
updateUIGo = null;
}
}
public static NativeConfirmUI ShowMessageBox(string title, string context, string confirmText, string cancelText, UnityAction confirmAction, UnityAction cancelAction)
{
NativeConfirmUI confirmUI = OpenNativeUI<NativeConfirmUI>("NativeConfirmUI");
if (confirmUI == null)
throw new GameException("原生对话框打开失败");
confirmUI.Show(title, context, confirmText, cancelText);
confirmUI.AddOnclickListener(confirmAction, cancelAction);
return confirmUI;
}
public void LateUpdate()
{
CheckIdleTime();
}
}
}