#if UNITY_IPHONE_API using System; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Collections; namespace UnityEngine { public sealed partial class ADBannerView { public enum Layout { // banner Top = 0, Bottom = 1, // rect TopLeft = 0, TopRight = 4, TopCenter = 8, BottomLeft = 1, BottomRight = 5, BottomCenter= 9, CenterLeft = 2, CenterRight = 6, Center = 10, Manual = -1 }; public enum Type { Banner = 0, MediumRect = 1 }; private Layout _layout; private IntPtr _bannerView; public static bool IsAvailable(Type type) { return Native_BannerTypeAvailable((int)type); } // some naughty magic to make sure we can properly strip class // if ctor is ever called, static func will be forcibly generated private static bool _AlwaysFalseDummy = false; public ADBannerView(Type type, Layout layout) { if(_AlwaysFalseDummy) { FireBannerWasClicked(); FireBannerWasLoaded(); } _bannerView = Native_CreateBanner((int)type, (int)layout); } ~ADBannerView() { Native_DestroyBanner(_bannerView); } public bool loaded { get { return Native_BannerAdLoaded(_bannerView); } } public bool visible { get { return Native_BannerAdVisible(_bannerView); } set { Native_ShowBanner(_bannerView, value); } } public Layout layout { // TODO: should we query native side? get { return _layout; } set { _layout = value; Native_LayoutBanner(_bannerView, (int)_layout); } } public Vector2 position { get { Vector2 ret; Native_BannerPosition(_bannerView, out ret); return OSToScreenCoords(ret); } set { Vector2 pos = new Vector2(value.x/Screen.width, value.y/Screen.height); Native_MoveBanner(_bannerView, pos); } } public Vector2 size { get { Vector2 ret; Native_BannerSize(_bannerView, out ret); return OSToScreenCoords(ret); } } public delegate void BannerWasClickedDelegate(); public static event BannerWasClickedDelegate onBannerWasClicked = null; public delegate void BannerWasLoadedDelegate(); public static event BannerWasLoadedDelegate onBannerWasLoaded = null; private Vector2 OSToScreenCoords(Vector2 v) { return new Vector2(v.x * Screen.width, v.y * Screen.height); } private static void FireBannerWasClicked() { if(onBannerWasClicked != null) onBannerWasClicked(); } private static void FireBannerWasLoaded() { if(onBannerWasLoaded != null) onBannerWasLoaded(); } } public sealed partial class ADInterstitialAd { private IntPtr interstitialView; public static bool isAvailable { get { return Native_InterstitialAvailable(); } } // some naughty magic to make sure we can properly strip class // if ctor is ever called, static func will be forcibly generated private static bool _AlwaysFalseDummy = false; private void CtorImpl(bool autoReload) { if(_AlwaysFalseDummy) FireInterstitialWasLoaded(); interstitialView = Native_CreateInterstitial(autoReload); } public ADInterstitialAd(bool autoReload) { CtorImpl(autoReload); } public ADInterstitialAd() { CtorImpl(false); } ~ADInterstitialAd() { Native_DestroyInterstitial(interstitialView); } public void Show() { Native_ShowInterstitial(interstitialView); } public void ReloadAd() { Native_ReloadInterstitial(interstitialView); } public bool loaded { get { return Native_InterstitialAdLoaded(interstitialView); } } public delegate void InterstitialWasLoadedDelegate(); public static event InterstitialWasLoadedDelegate onInterstitialWasLoaded = null; private static void FireInterstitialWasLoaded() { if(onInterstitialWasLoaded != null) onInterstitialWasLoaded(); } } } #endif