Skip to content

Instantly share code, notes, and snippets.

@ricardoalcantara
Last active May 18, 2022 12:33
Show Gist options
  • Save ricardoalcantara/6dddf96f35f26d168a66757f8ab1109f to your computer and use it in GitHub Desktop.
Save ricardoalcantara/6dddf96f35f26d168a66757f8ab1109f to your computer and use it in GitHub Desktop.
Godot-Android-Admob-Plugin admon.gd to C#
using Godot;
namespace AdmobLib
{
public class Admob : Node
{
[Signal] public delegate void banner_loaded();
[Signal] public delegate void banner_failed_to_load(int error_code);
[Signal] public delegate void interstitial_failed_to_load(int error_code);
[Signal] public delegate void interstitial_loaded();
[Signal] public delegate void interstitial_closed();
[Signal] public delegate void rewarded_video_loaded();
[Signal] public delegate void rewarded_video_closed();
[Signal] public delegate void rewarded(string currency, int ammount);
[Signal] public delegate void rewarded_video_left_application();
[Signal] public delegate void rewarded_video_failed_to_load(int error_code);
[Signal] public delegate void rewarded_video_opened();
[Signal] public delegate void rewarded_video_started();
private bool _is_real;
[Export]
public bool is_real
{
get => _is_real;
set
{
_is_real = value;
init();
}
}
[Export] public bool banner_on_top = true;
[Export] public string banner_id;
[Export] public string interstitial_id;
[Export] public string rewarded_id;
[Export] public bool child_directed = false;
[Export] public bool is_personalized = true;
[Export(PropertyHint.Enum, "G,PG,T,MA")] string max_ad_content_rate;
// "private" properties
// private Object _admob_singleton = null;
private Object _admob_singleton = null;
private bool _is_interstitial_loaded = false;
private bool _is_rewarded_video_loaded = false;
public override void _EnterTree()
{
GD.Print("Enter Tree");
if (!init())
GD.Print("AdMob Java Singleton not found");
}
// initialization
private bool init()
{
if (Engine.HasSingleton("GodotAdMob"))
{
GD.Print("GetInstanceId() ", GetInstanceId());
_admob_singleton = Engine.GetSingleton("GodotAdMob");
_admob_singleton.Call(
"initWithContentRating",
is_real,
GetInstanceId(),
child_directed,
is_personalized,
max_ad_content_rate
);
return true;
}
return false;
}
// load
public void load_banner()
{
if (_admob_singleton != null)
_admob_singleton.Call(
"loadBanner",
banner_id, banner_on_top);
}
public void load_interstitial()
{
if (_admob_singleton != null)
_admob_singleton.Call(
"loadInterstitial",
interstitial_id);
}
public bool is_interstitial_loaded()
{
if (_admob_singleton != null)
return _is_interstitial_loaded;
return false;
}
public void load_rewarded_video()
{
if (_admob_singleton != null)
_admob_singleton.Call(
"loadRewardedVideo",
rewarded_id);
}
public bool is_rewarded_video_loaded()
{
if (_admob_singleton != null)
return _is_rewarded_video_loaded;
return false;
}
// show / hide
public void show_banner()
{
if (_admob_singleton != null)
_admob_singleton.Call("showBanner");
}
public void hide_banner()
{
if (_admob_singleton != null)
_admob_singleton.Call("hideBanner");
}
public void show_interstitial()
{
if (_admob_singleton != null)
{
_admob_singleton.Call("showInterstitial");
_is_interstitial_loaded = false;
}
}
public void show_rewarded_video()
{
if (_admob_singleton != null)
{
_admob_singleton.Call("showRewardedVideo");
_is_rewarded_video_loaded = false;
}
}
// resize
public void banner_resize()
{
if (_admob_singleton != null)
{
_admob_singleton.Call("resize");
}
}
// dimension
public Vector2 get_banner_dimension()
{
if (_admob_singleton != null)
{
var width = (float)_admob_singleton.Call("getBannerWidth");
var height = (float)_admob_singleton.Call("getBannerHeight");
return new Vector2(width, height);
}
return new Vector2();
}
// callbacks
public void _on_admob_ad_loaded()
{
GD.Print("banner_loaded");
EmitSignal("banner_loaded");
}
public void _on_admob_banner_failed_to_load(int error_code)
{
GD.Print("banner_failed_to_load ", error_code);
EmitSignal("banner_failed_to_load", error_code);
}
public void _on_interstitial_failed_to_load(int error_code)
{
_is_interstitial_loaded = false;
GD.Print("interstitial_failed_to_load ", error_code);
EmitSignal("interstitial_failed_to_load", error_code);
}
public void _on_interstitial_loaded()
{
_is_interstitial_loaded = true;
GD.Print("interstitial_loaded");
EmitSignal("interstitial_loaded");
}
public void _on_interstitial_close()
{
GD.Print("interstitial_closed");
EmitSignal("interstitial_closed");
}
public void _on_rewarded_video_ad_loaded()
{
_is_rewarded_video_loaded = true;
GD.Print("rewarded_video_loaded");
EmitSignal("rewarded_video_loaded");
}
public void _on_rewarded_video_ad_closed()
{
GD.Print("rewarded_video_closed");
EmitSignal("rewarded_video_closed");
}
public void _on_rewarded(string currency, int amount)
{
GD.Print("rewarded ", currency, " ", amount);
EmitSignal("rewarded", currency, amount);
}
public void _on_rewarded_video_ad_left_application()
{
GD.Print("rewarded_video_left_application");
EmitSignal("rewarded_video_left_application");
}
public void _on_rewarded_video_ad_failed_to_load(int error_code)
{
_is_rewarded_video_loaded = false;
GD.Print("rewarded_video_failed_to_load ", error_code);
EmitSignal("rewarded_video_failed_to_load", error_code);
}
public void _on_rewarded_video_ad_opened()
{
GD.Print("rewarded_video_opened");
EmitSignal("rewarded_video_opened");
}
public void _on_rewarded_video_started()
{
GD.Print("rewarded_video_started");
EmitSignal("rewarded_video_started");
}
}
}
@DanesZalor
Copy link

I have a problem with this, the signals doesn't appear to be emitting so i added this function

public void connect_signals(){
    _admob_singleton.Connect("on_admob_ad_loaded", this, "_on_admob_ad_loaded");
    _admob_singleton.Connect("on_admob_banner_failed_to_load", this, "_on_admob_banner_failed_to_load");
    _admob_singleton.Connect("on_interstitial_failed_to_load", this, "_on_interstitial_failed_to_load");
    _admob_singleton.Connect("on_interstitial_loaded", this, "_on_interstitial_loaded");
    _admob_singleton.Connect("on_interstitial_close", this, "_on_interstitial_close");
    _admob_singleton.Connect("on_rewarded_video_ad_loaded", this, "_on_rewarded_video_ad_loaded");
    _admob_singleton.Connect("on_rewarded_video_ad_closed", this, "_on_rewarded_video_ad_closed");
    _admob_singleton.Connect("on_rewarded", this, "_on_rewarded");
    _admob_singleton.Connect("on_rewarded_video_ad_left_application", this, "_on_rewarded_video_ad_left_application");
    _admob_singleton.Connect("on_rewarded_video_ad_failed_to_load", this, "_on_rewarded_video_ad_failed_to_load");
    _admob_singleton.Connect("on_rewarded_video_ad_opened", this, "_on_rewarded_video_ad_opened");
    _admob_singleton.Connect("on_rewarded_video_started", this, "_on_rewarded_video_started");
}

and called it on init() just like in the gdscript version
image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment