Godot 4 (web)
El addon de Godot agrega un autoload Gamealia que llama al SDK de JavaScript con JavaScriptBridge. Godot 4.3 o más nuevo, exportación Web.
Instalación
- Corré
gamealia init --writeen la carpeta del proyecto de Godot (o pedíselo a tu asistente), que copiaaddons/gamealia/. O copiá esa carpeta a mano. - Activá Gamealia en Project → Project Settings → Plugins. Eso registra el autoload
Gamealia. En Project → Export → Web → HTML → Head Include, agregá:
<script src="https://gamealia.app/sdk/v1.js"></script>- Exportá para Web y subí la carpeta de la exportación, con la página exportada renombrada a
index.html. Una exportación con hilos (SharedArrayBuffer) necesita el aislamiento de la ficha encoop-coep.
Uso
Las llamadas que devuelven un valor son corrutinas: usá await.
func _ready() -> void:
Gamealia.ad_started.connect(func(): get_tree().paused = true)
Gamealia.ad_finished.connect(func(_r): get_tree().paused = false)
Gamealia.paused.connect(func(): get_tree().paused = true)
Gamealia.resumed.connect(func(): get_tree().paused = false)
var info := await Gamealia.init()
# info.locale: "es", "en", ...
var save := await Gamealia.data_load()
if save.ok:
progress = save.data.get("progress", {})
# si no: no se pudo leer la partida; no la pises
Gamealia.loading_stop() # obligatorio, cuando el juego ya se puede jugar
func start_level() -> void:
Gamealia.gameplay_start()
func game_over() -> void:
Gamealia.gameplay_stop()
await Gamealia.request_midgame()
show_game_over()
func watch_ad_for_life() -> void:
var ad := await Gamealia.request_rewarded()
if ad.rewarded:
lives += 1
Hay un ejemplo completo en sample/main.gd del addon.
API
| GDScript | JavaScript |
|---|---|
init() -> Dictionary, init_result, locale, environment, device, señal init_done(result) | init() |
is_available() -> bool | la página cargó el SDK |
loading_start(), loading_stop(), gameplay_start(), gameplay_stop(), happy_time() | game.* |
request_midgame(), request_rewarded() → {kind, shown, rewarded}; señales ad_started, ad_finished(result) | ad.* |
get_user() (Dictionary o null), get_token() ("" para invitados), request_login() | user.* |
data_load() → {ok, data, error}, data_get(key), data_set(key, value) -> bool, data_remove(key), data_clear() | data.* |
get_join_code() -> String, invite_link(code), show_invite(code), publish_room(room), unpublish_room() | room.* |
set_presence(text) | presence.setStatus() |
señales paused, resumed, muted, unmuted, user_changed(user), room_join(code) | on(event) |
- Audio: con
auto_mute_audio(por defectotrue) el bus Master se silencia mientras se muestra un anuncio. - Partidas: los valores son JSON, así que los números vuelven como
float. 1 MB por jugador y juego. - Salas:
publish_roomrecibe un Dictionary concode,name,players,maxeinProgress.
Fuera de la web
En el editor, en exportaciones de escritorio o celular y en una página web sin el SDK, todas las llamadas funcionan en local: init() devuelve environment: "mock", los anuncios devuelven "no se mostró" y los datos se guardan en user://gamealia_data.json.
Fallas comunes del autotest
sdk_loaded: falta el Head Include.entry: la página exportada no se llamaindex.html, o subiste la carpeta de arriba.engine_integrity: tienen que estar todos los archivos.js,.wasmy.pckde la exportación.