using System; using Dirichlet.Mediation; using Runtime.ADAggregator; using UnityEngine; public sealed class TapadnInteractionPlayer : ADPlayer, IDirichletInterstitialAutoAdListener { private DirichletAdNative _adNative; private DirichletInterstitialAd _loadedAd; private bool _showSettled; public override int MaxLoadAttempts => TapadnAdController.CurrentOptions?.InterstitialMaxLoadAttempts ?? base.MaxLoadAttempts; public override float LoadRetryDelaySeconds => Math.Max(0f, (TapadnAdController.CurrentOptions?.InterstitialLoadRetryDelayMs ?? 500) / 1000f); public override float ShowPendingTimeoutSeconds => Math.Max(1f, (TapadnAdController.CurrentOptions?.InterstitialShowTimeoutMs ?? 20000) / 1000f); public override bool AutoPreloadOnInit => TapadnAdController.CurrentOptions?.InterstitialPrewarmOnInit ?? false; public override void OnInit() { _adNative = DirichletAdManager.CreateAdNative(); } public override bool IsReadly() { if (UseAutoLoad()) { return TapadnAdRequestFactory.TryParseSlotId(Key, out _); } if (_loadedAd != null && _loadedAd.IsLoaded && _loadedAd.IsValid) { curState = 2; return true; } return false; } public override void LoadAD() { if (!TapadnAdRequestFactory.TryParseSlotId(Key, out _)) { Debug.LogError($"[TapADN] Invalid interstitial slot id: {Key}"); curState = 0; return; } if (UseAutoLoad()) { curState = 2; return; } if (curState == 1 || IsReadly()) { return; } curState = 1; _adNative.LoadInterstitialAd( TapadnAdRequestFactory.BuildInterstitial(Key, TapadnAdController.CurrentOptions), ad => { _loadedAd?.Destroy(); _loadedAd = ad; _loadedAd.Shown += OnManualShown; _loadedAd.Clicked += OnManualClicked; _loadedAd.ShowFailed += OnManualShowFailed; _loadedAd.Closed += OnManualClosed; curState = 2; Debug.Log($"[TapADN] Interstitial loaded. slot={Key}"); }, error => { curState = 0; Debug.LogError($"[TapADN] Interstitial load failed. code={error.Code}, message={error.Message}"); }); } public override void ShowAD(Action onClose, Action onVideoComplete) { adListener.onClose = onClose; adListener.onVideoComplete = onVideoComplete; _showSettled = false; curState = 0; if (UseAutoLoad()) { _adNative.ShowInterstitialAutoAd(TapadnAdRequestFactory.BuildInterstitial(Key, TapadnAdController.CurrentOptions), this); return; } if (_loadedAd == null || !_loadedAd.Show()) { OnError(new DirichletError("show_failed", "ShowInterstitialAd returned false")); } } public void OnError(DirichletError error) { if (_showSettled) { return; } _showSettled = true; curState = 0; Debug.LogError($"[TapADN] Interstitial show failed. code={error?.Code}, message={error?.Message}"); adListener.OnShowError(); } public void OnAdShow() { NotifyShowStarted(); } public void OnAdClose() { if (_showSettled) { return; } _showSettled = true; adListener.OnAdClose(); adListener.OnShowComplete(); } public void OnAdClick() { } private bool UseAutoLoad() { return TapadnAdController.CurrentOptions?.InterstitialAutoLoad ?? true; } private void OnManualShown() { NotifyShowStarted(); } private void OnManualClicked() { } private void OnManualShowFailed(DirichletError error) { OnError(error); } private void OnManualClosed() { _loadedAd?.Destroy(); _loadedAd = null; OnAdClose(); } }