Release Void Bastion alpha.4
This commit is contained in:
1 parent
bd980d099b
commit
118061b8d7
26 files changed
+1231
-183
No files matched your search
+27
-42
@@ -3,11 +3,9 @@ extends Node
|
||||
|
||||
signal energy_reward_granted(amount: int)
|
||||
signal ad_unavailable(message: String)
|
||||
signal victory_interstitial_finished(was_shown: bool)
|
||||
|
||||
const SAVE_PATH := "user://void_bastion_ads.json"
|
||||
const ENERGY_REWARD := 150
|
||||
const MISSIONS_PER_INTERSTITIAL := 3
|
||||
const INTERSTITIAL_COOLDOWN_SECONDS := 15 * 60
|
||||
const ANDROID_TEST_APP_ID := "ca-app-pub-3940256099942544~3347511713"
|
||||
const IOS_TEST_APP_ID := "ca-app-pub-3940256099942544~1458002511"
|
||||
|
||||
@@ -16,15 +14,13 @@ var initialized := false
|
||||
var rewarded_ready := false
|
||||
var interstitial_ready := false
|
||||
var reward_used_this_mission := false
|
||||
var missions_since_interstitial := 0
|
||||
var last_interstitial_time := 0
|
||||
var _victory_interstitial_pending := false
|
||||
|
||||
var _admob: Node
|
||||
var _initialization_requested := false
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
_load_state()
|
||||
mobile_ads_supported = OS.has_feature("android") or OS.has_feature("ios")
|
||||
if not mobile_ads_supported:
|
||||
return
|
||||
@@ -55,6 +51,7 @@ func _create_admob_node() -> void:
|
||||
_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)
|
||||
|
||||
|
||||
@@ -76,31 +73,23 @@ func request_rewarded_energy() -> void:
|
||||
_admob.show_rewarded_ad()
|
||||
|
||||
|
||||
func record_mission_finished() -> void:
|
||||
missions_since_interstitial += 1
|
||||
_save_state()
|
||||
if is_interstitial_due() and interstitial_ready:
|
||||
_show_interstitial()
|
||||
elif is_interstitial_due() and initialized:
|
||||
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 is_interstitial_due(now_unix: int = -1) -> bool:
|
||||
if missions_since_interstitial < MISSIONS_PER_INTERSTITIAL:
|
||||
return false
|
||||
if last_interstitial_time <= 0:
|
||||
return true
|
||||
var now := int(Time.get_unix_time_from_system()) if now_unix < 0 else now_unix
|
||||
return now - last_interstitial_time >= INTERSTITIAL_COOLDOWN_SECONDS
|
||||
|
||||
|
||||
func _show_interstitial() -> void:
|
||||
if not mobile_ads_supported or not initialized or not interstitial_ready:
|
||||
func _display_pending_victory_interstitial() -> void:
|
||||
if not _victory_interstitial_pending or not interstitial_ready:
|
||||
return
|
||||
interstitial_ready = false
|
||||
missions_since_interstitial = 0
|
||||
last_interstitial_time = int(Time.get_unix_time_from_system())
|
||||
_save_state()
|
||||
_admob.show_interstitial_ad()
|
||||
|
||||
|
||||
@@ -171,33 +160,29 @@ func _on_rewarded_ad_dismissed(_ad_info) -> void:
|
||||
|
||||
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 _save_state() -> void:
|
||||
var file := FileAccess.open(SAVE_PATH, FileAccess.WRITE)
|
||||
if file:
|
||||
file.store_string(JSON.stringify({
|
||||
"missions_since_interstitial": missions_since_interstitial,
|
||||
"last_interstitial_time": last_interstitial_time
|
||||
}))
|
||||
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 _load_state() -> void:
|
||||
if not FileAccess.file_exists(SAVE_PATH):
|
||||
func _finish_victory_interstitial(was_shown: bool) -> void:
|
||||
if not _victory_interstitial_pending:
|
||||
return
|
||||
var file := FileAccess.open(SAVE_PATH, FileAccess.READ)
|
||||
if not file:
|
||||
return
|
||||
var data = JSON.parse_string(file.get_as_text())
|
||||
if data is Dictionary:
|
||||
missions_since_interstitial = maxi(0, int(data.get("missions_since_interstitial", 0)))
|
||||
last_interstitial_time = maxi(0, int(data.get("last_interstitial_time", 0)))
|
||||
_victory_interstitial_pending = false
|
||||
victory_interstitial_finished.emit(was_shown)
|
||||
Reference in new issue
Block a user