class_name AdsManager extends Node signal energy_reward_granted(amount: int) signal ad_unavailable(message: String) signal victory_interstitial_finished(was_shown: bool) const ENERGY_REWARD := 150 const ANDROID_TEST_APP_ID := "ca-app-pub-3940256099942544~3347511713" const IOS_TEST_APP_ID := "ca-app-pub-3940256099942544~1458002511" var mobile_ads_supported := false var initialized := false var rewarded_ready := false var interstitial_ready := false var reward_used_this_mission := false var _victory_interstitial_pending := false var _admob: Node var _initialization_requested := false func _ready() -> void: mobile_ads_supported = OS.has_feature("android") or OS.has_feature("ios") if not mobile_ads_supported: return _create_admob_node() _admob.update_consent_info() func _create_admob_node() -> void: var admob_script: Script = load("res://addons/AdmobPlugin/Admob.gd") _admob = admob_script.new() _admob.name = "Admob" _admob.is_real = false _admob.android_debug_application_id = ANDROID_TEST_APP_ID _admob.ios_debug_application_id = IOS_TEST_APP_ID _admob.global_ads_muted = true _admob.global_apply_at_startup = true _admob.att_enabled = false _admob.initialization_completed.connect(_on_initialization_completed) _admob.consent_info_updated.connect(_on_consent_info_updated) _admob.consent_info_update_failed.connect(_on_consent_info_update_failed) _admob.consent_form_loaded.connect(_on_consent_form_loaded) _admob.consent_form_dismissed.connect(_on_consent_form_dismissed) _admob.consent_form_failed_to_load.connect(_on_consent_form_failed_to_load) _admob.rewarded_ad_loaded.connect(_on_rewarded_ad_loaded) _admob.rewarded_ad_failed_to_load.connect(_on_rewarded_ad_failed_to_load) _admob.rewarded_ad_user_earned_reward.connect(_on_rewarded_ad_user_earned_reward) _admob.rewarded_ad_dismissed_full_screen_content.connect(_on_rewarded_ad_dismissed) _admob.interstitial_ad_loaded.connect(_on_interstitial_ad_loaded) _admob.interstitial_ad_failed_to_load.connect(_on_interstitial_ad_failed_to_load) _admob.interstitial_ad_dismissed_full_screen_content.connect(_on_interstitial_ad_dismissed) _admob.interstitial_ad_failed_to_show_full_screen_content.connect(_on_interstitial_ad_failed_to_show) add_child(_admob) func begin_mission() -> void: reward_used_this_mission = false if initialized and not rewarded_ready: _admob.load_rewarded_ad() func can_offer_rewarded() -> bool: return mobile_ads_supported and initialized and rewarded_ready and not reward_used_this_mission func request_rewarded_energy() -> void: if not can_offer_rewarded(): ad_unavailable.emit("BELOHNUNGSVIDEO IST GERADE NICHT VERFÜGBAR") return rewarded_ready = false _admob.show_rewarded_ad() func show_victory_interstitial() -> void: if _victory_interstitial_pending: return if not mobile_ads_supported or not initialized: victory_interstitial_finished.emit(false) return _victory_interstitial_pending = true if not interstitial_ready: _admob.load_interstitial_ad() return _display_pending_victory_interstitial() func _display_pending_victory_interstitial() -> void: if not _victory_interstitial_pending or not interstitial_ready: return interstitial_ready = false _admob.show_interstitial_ad() func _on_consent_info_updated() -> void: var consent = _admob.get_consent_status() var status: String = consent.to_status_string() if consent else "UNKNOWN" if status == "REQUIRED": _admob.load_consent_form() elif status in ["NOT_REQUIRED", "OBTAINED"]: _initialize_ads() func _on_consent_info_update_failed(_error) -> void: _initialize_if_prior_consent_allows() func _on_consent_form_loaded() -> void: _admob.show_consent_form() func _on_consent_form_dismissed(_error) -> void: _initialize_if_prior_consent_allows() func _on_consent_form_failed_to_load(_error) -> void: _initialize_if_prior_consent_allows() func _initialize_if_prior_consent_allows() -> void: var consent = _admob.get_consent_status() var status: String = consent.to_status_string() if consent else "UNKNOWN" if status in ["NOT_REQUIRED", "OBTAINED"]: _initialize_ads() func _initialize_ads() -> void: if _initialization_requested: return _initialization_requested = true _admob.initialize() func _on_initialization_completed(_status) -> void: initialized = true _admob.load_rewarded_ad() _admob.load_interstitial_ad() func _on_rewarded_ad_loaded(_ad_info, _response_info) -> void: rewarded_ready = true func _on_rewarded_ad_failed_to_load(_ad_info, _error) -> void: rewarded_ready = false func _on_rewarded_ad_user_earned_reward(_ad_info, _reward_data) -> void: if reward_used_this_mission: return reward_used_this_mission = true energy_reward_granted.emit(ENERGY_REWARD) func _on_rewarded_ad_dismissed(_ad_info) -> void: rewarded_ready = false _admob.load_rewarded_ad() func _on_interstitial_ad_loaded(_ad_info, _response_info) -> void: interstitial_ready = true _display_pending_victory_interstitial() func _on_interstitial_ad_failed_to_load(_ad_info, _error) -> void: interstitial_ready = false _finish_victory_interstitial(false) func _on_interstitial_ad_dismissed(_ad_info) -> void: interstitial_ready = false _finish_victory_interstitial(true) _admob.load_interstitial_ad() func _on_interstitial_ad_failed_to_show(_ad_info, _error) -> void: interstitial_ready = false _finish_victory_interstitial(false) if initialized: _admob.load_interstitial_ad() func _finish_victory_interstitial(was_shown: bool) -> void: if not _victory_interstitial_pending: return _victory_interstitial_pending = false victory_interstitial_finished.emit(was_shown)