mirror of
https://github.com/jcreek/CosmicClash.git
synced 2026-09-10 16:04:04 +00:00
feat(multiplayer): add Steam transport foundation
This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
class_name SteamBootstrap
|
||||
extends RefCounted
|
||||
|
||||
# Spacewar is Valve's development App ID. It is intentionally a development
|
||||
# default, never a public-server identity or discovery configuration.
|
||||
const SPACEWAR_APP_ID := 480
|
||||
const APP_ID_ENV := "COSMIC_CLASH_STEAM_APP_ID"
|
||||
|
||||
|
||||
static func app_id() -> int:
|
||||
var configured := OS.get_environment(APP_ID_ENV).strip_edges()
|
||||
if configured.is_valid_int() and int(configured) > 0:
|
||||
return int(configured)
|
||||
return SPACEWAR_APP_ID
|
||||
|
||||
|
||||
static func is_runtime_available() -> bool:
|
||||
return OS.has_feature("steam") and ClassDB.class_exists("SteamMultiplayerPeer") and Engine.has_singleton("Steam")
|
||||
|
||||
|
||||
static func unavailable_reason() -> String:
|
||||
if not OS.has_feature("steam"):
|
||||
return "this export was not built with the steam feature"
|
||||
if not ClassDB.class_exists("SteamMultiplayerPeer"):
|
||||
return "SteamMultiplayerPeer is missing from this custom Godot build"
|
||||
if not Engine.has_singleton("Steam"):
|
||||
return "the GodotSteam Steam singleton is missing from this custom Godot build"
|
||||
return "Steam is unavailable"
|
||||
|
||||
|
||||
static func initialize() -> Dictionary:
|
||||
if not is_runtime_available():
|
||||
return {"error": ERR_UNAVAILABLE, "reason": unavailable_reason()}
|
||||
var steam := Engine.get_singleton("Steam")
|
||||
# `steamInit` is deliberately called dynamically: stock Godot must be able
|
||||
# to parse and run this project without GodotSteam symbols installed.
|
||||
var result = steam.call("steamInit")
|
||||
if result is bool and result:
|
||||
return {"error": OK, "app_id": app_id()}
|
||||
if result is Dictionary and bool(result.get("status", false)):
|
||||
return {"error": OK, "app_id": app_id()}
|
||||
return {"error": ERR_CANT_CONNECT, "reason": "Steam initialization failed for App ID %d" % app_id()}
|
||||
Reference in New Issue
Block a user