You've already forked CC-Framework.Commercialization
update
This commit is contained in:
138
Assets/Runtime/ADAggregator/AsyncAdPlayer.cs
Normal file
138
Assets/Runtime/ADAggregator/AsyncAdPlayer.cs
Normal file
@@ -0,0 +1,138 @@
|
||||
using System;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Runtime.ADAggregator
|
||||
{
|
||||
public class AsyncAdPlayer
|
||||
{
|
||||
private Action<bool> _callback;
|
||||
private ADPlayer _adPlayer;
|
||||
private bool firstLoad;
|
||||
private bool isKill;
|
||||
private bool isUpdate;
|
||||
private AdTimeHandler overHandler;
|
||||
|
||||
private float _outTime;
|
||||
|
||||
public AsyncAdPlayer(ADPlayer player , Action<bool> callback)
|
||||
{
|
||||
|
||||
this._outTime = 0;
|
||||
this._callback = callback;
|
||||
this.isKill = false;
|
||||
this.firstLoad = true;
|
||||
this._adPlayer = player;
|
||||
if (_adPlayer == null)
|
||||
{
|
||||
#if UNITY_EDITOR
|
||||
Debug.LogError("无法播放指定的广告");
|
||||
#endif
|
||||
_callback?.Invoke(false);
|
||||
Kill();
|
||||
return;
|
||||
}
|
||||
ADManager.Instance.OpenMask();
|
||||
_adPlayer.OnErrorAction = OnError;
|
||||
isUpdate = true;
|
||||
ADManager.Instance.AddUpdater(DoUpdate);
|
||||
}
|
||||
|
||||
private void OnError()
|
||||
{
|
||||
#if UNITY_EDITOR
|
||||
Debug.LogError("广告异常: " + this._adPlayer.Key);
|
||||
#endif
|
||||
// return;
|
||||
// if (isUpdate)
|
||||
// {
|
||||
// isUpdate = false;
|
||||
// ADManager.Instance.RemoveUpdater(DoUpdate);
|
||||
// }
|
||||
// ADManager.Instance.CloseMask();
|
||||
// _callback?.Invoke(false);
|
||||
// Clear();
|
||||
}
|
||||
|
||||
private void DoUpdate()
|
||||
{
|
||||
if (!isUpdate)
|
||||
return;
|
||||
_outTime += Time.deltaTime;
|
||||
if (this._outTime >= 15)
|
||||
{
|
||||
_callback?.Invoke(false);
|
||||
Kill();
|
||||
}
|
||||
if (_adPlayer.IsReadly())
|
||||
{
|
||||
#if UNITY_EDITOR
|
||||
Debug.LogError("开始播放广告: " + this._adPlayer.Key);
|
||||
#endif
|
||||
_adPlayer.ShowAD(OnCloseAD, OnComplete);
|
||||
ADManager.Instance.CloseMask();
|
||||
isUpdate = false;
|
||||
ADManager.Instance.RemoveUpdater(DoUpdate);
|
||||
}
|
||||
else if(!_adPlayer.IsLoading())
|
||||
{
|
||||
if (firstLoad)
|
||||
{
|
||||
#if UNITY_EDITOR
|
||||
Debug.LogError("开始加载广告: " + this._adPlayer.Key);
|
||||
#endif
|
||||
this._outTime = 0;
|
||||
_adPlayer.LoadAD();
|
||||
firstLoad = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
_callback?.Invoke(false);
|
||||
Kill();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void OnCloseAD()
|
||||
{
|
||||
#if UNITY_EDITOR
|
||||
Debug.LogError("关闭广告: " + this._adPlayer.Key);
|
||||
#endif
|
||||
if (overHandler == null)
|
||||
{
|
||||
overHandler = ADManager.Instance.CreateTimer(1.5f, () =>
|
||||
{
|
||||
this._callback?.Invoke(false);
|
||||
Clear();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private void OnComplete(bool obj)
|
||||
{
|
||||
this.overHandler?.Kill();
|
||||
this.overHandler = ADManager.Instance.CreateTimer(0.05f, () =>
|
||||
{
|
||||
_callback?.Invoke(obj);
|
||||
Clear();
|
||||
});
|
||||
}
|
||||
|
||||
//销毁广告
|
||||
public void Kill()
|
||||
{
|
||||
if (isKill)
|
||||
return;
|
||||
ADManager.Instance.CloseMask();
|
||||
ADManager.Instance.RemoveUpdater(DoUpdate);
|
||||
Clear();
|
||||
}
|
||||
|
||||
private void Clear()
|
||||
{
|
||||
isKill = true;
|
||||
_callback = null;
|
||||
_adPlayer = null;
|
||||
this.overHandler = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user