using System; using System.Diagnostics; using SUISS.Core; using SUISSEngine; using UnityEngine; namespace CIG { public sealed class ChartboostVideoAdsProvider : Singleton, IAdProvider { public ChartboostVideoAdsProvider() { GameObject gameObject = new GameObject("ChartBoostVideoAdsProvider"); UnityEngine.Object.DontDestroyOnLoad(gameObject); gameObject.hideFlags = HideFlags.HideAndDontSave; this._providerMonoBehaviour = gameObject.AddComponent(); } //[DebuggerBrowsable(DebuggerBrowsableState.Never)] public event AdAvailabilityChangedEventHandler AvailabilityChangedEvent; private void FireAvailabilityChangedEvent() { if (this.AvailabilityChangedEvent != null) { this.AvailabilityChangedEvent(this); } } public void StartCaching() { AdProviderState providerState = this._providerState; if (providerState != AdProviderState.None) { if (providerState == AdProviderState.Initialized) { AdState adState = this._adState; if (adState == AdState.None) { this.RequestAd(); } } } else { try { this._providerState = AdProviderState.Initializing; this._providerState = AdProviderState.Initialized; this.StartCaching(); } catch (Exception ex) { this._providerState = AdProviderState.None; UnityEngine.Debug.LogErrorFormat("[ChartboostVideoAdsProvider] Failed to Initialize Chartboost. Error: {1}\r\nStacktrace:\r\n{2}", new object[] { ex.Message, ex.StackTrace }); } } } public bool ShowAd(Action callback) { if (this.IsReady) { this._adState = AdState.Showing; this._callback = callback; SingletonMonobehaviour.Instance.AddScreenViewed("video_chartboost"); this.FireAvailabilityChangedEvent(); return true; } return false; } public bool IsReady { get { return true; } } public AdType AdType { get { return AdType.Video; } } public AdProviderType AdProviderType { get { return AdProviderType.Chartboost; } } private void RequestAd() { this._adState = AdState.Requesting; } private const float MaxBackOffSeconds = 120f; private AdProviderState _providerState; private AdState _adState; private Action _callback; private float _backOffSeconds; private AdProviderMonoBehaviour _providerMonoBehaviour; } }