using asap.core;
using GameCore;
using System;
using UniRx;
namespace game
{
public class AdsResult
{
public AdvertPopupType Type;
///
/// //0-成功 1-失败 2 -点击 3-关闭
///
public int Result;
}
public class AdsInterstitialResult
{
public AdvertPopupType Type;
}
public enum AdvertPopupType
{
None = 0,
Shop = 1,
Turntable = 2,
Showdown = 3,
FishingFail = 4,
Chest = 5,
Aquarium = 6,
AdWheel = 7,
LuckyMission = 8,
Cycle2 = 9,
SignInAdvert = 10,
}
public class AggAdsService : IAdsService
{
#if UNITY_IOS
private static string AD_Unit_ID = "ec3c8fd688cdb5e2";
private static string AD_Unit_ID_Inter = "00442f7962682a80";
#else
private static string AD_Unit_ID = "c6c49a100de8496c";
private static string AD_Unit_ID_Inter = "0dcd37fa0885aa1f";
#endif
private static bool isMaxSdkInitialized = false;
private readonly RewardAdHandler rewardHandler;
private readonly InterstitialAdHandler interstitialHandler;
private readonly ISettingService settings;
private CompositeDisposable disposables;
private Action onRewardDisplayed;
private Action onRewardHidden;
private Action onInterstitialDisplayed;
private Action onInterstitialHidden;
public AggAdsService(ISettingService settings)
{
this.settings = settings;
rewardHandler = new RewardAdHandler(AD_Unit_ID);
interstitialHandler = new InterstitialAdHandler(AD_Unit_ID_Inter);
}
public void Init()
{
AdsEventLogger.CheckAndLogCrash();
if (!isMaxSdkInitialized)
{
rewardHandler.RegisterCallbacks();
interstitialHandler.RegisterCallbacks();
onRewardDisplayed = (id, info) => ChangeAudio(true);
onRewardHidden = (id, info) => ChangeAudio(false);
onInterstitialDisplayed = (id, info) => ChangeAudio(true);
onInterstitialHidden = (id, info) => ChangeAudio(false);
MaxSdkCallbacks.Rewarded.OnAdDisplayedEvent += onRewardDisplayed;
MaxSdkCallbacks.Rewarded.OnAdHiddenEvent += onRewardHidden;
MaxSdkCallbacks.Interstitial.OnAdDisplayedEvent += onInterstitialDisplayed;
MaxSdkCallbacks.Interstitial.OnAdHiddenEvent += onInterstitialHidden;
isMaxSdkInitialized = true;
}
disposables?.Dispose();
disposables = new CompositeDisposable();
RootCtx.OnEvent()
.Where(evt => evt.lvl >= 40)
.Subscribe(evt =>
{
rewardHandler.TryLoad("level_up");
interstitialHandler.TryLoad();
})
.AddTo(disposables);
RootCtx.OnEvent()
.Where(evt => evt.FishCount >= 17)
.Subscribe(evt =>
{
rewardHandler.TryLoad("fish_exchange");
interstitialHandler.TryLoad();
})
.AddTo(disposables);
// Check current state on Init
// rewardHandler.TryLoad("init");
// interstitialHandler.TryLoad();
}
public void Release()
{
disposables?.Dispose();
disposables = null;
rewardHandler.UnregisterCallbacks();
interstitialHandler.UnregisterCallbacks();
if (onRewardDisplayed != null)
{
MaxSdkCallbacks.Rewarded.OnAdDisplayedEvent -= onRewardDisplayed;
MaxSdkCallbacks.Rewarded.OnAdHiddenEvent -= onRewardHidden;
MaxSdkCallbacks.Interstitial.OnAdDisplayedEvent -= onInterstitialDisplayed;
MaxSdkCallbacks.Interstitial.OnAdHiddenEvent -= onInterstitialHidden;
}
isMaxSdkInitialized = false;
}
public void ShowRewarded(AdvertPopupType advertPopupType)
{
rewardHandler.Show(advertPopupType);
}
public void ShowInterstitial(AdvertPopupType advertPopupType)
{
interstitialHandler.Show(advertPopupType);
}
private void ChangeAudio(bool adShowing)
{
ISoundService soundService = GContext.container.Resolve();
ISettingService settingService = GContext.container.Resolve();
int vol = adShowing ? 0 : 80;
if (soundService != null && settingService != null)
{
if (settingService.Music)
{
soundService.BGMVol = vol;
}
if (settingService.Sound)
{
soundService.SFXVol = vol;
soundService.VoiceVol = vol;
}
}
}
}
}