Skip to content

Commit

Permalink
fix web export broken because of missing steam singleton
Browse files Browse the repository at this point in the history
  • Loading branch information
tcfunk committed Jan 28, 2025
1 parent a6d5c9f commit 6f5e4c4
Show file tree
Hide file tree
Showing 10 changed files with 72 additions and 84 deletions.
3 changes: 2 additions & 1 deletion Components/UI/MainMenu.gd
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
extends Control

@onready var quit_button = %QuitButton

func _ready():
var x = -1 if 1 < 0 else 1
if OS.get_name() == "Web":
$"VBoxContainer/QuitButton".visible = false
quit_button.visible = false

func _process(_delta):
if Input.is_key_pressed(KEY_BACKSLASH):
Expand Down
1 change: 1 addition & 0 deletions Components/UI/MainMenu.tscn
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,7 @@ text = "[S] Settings"
uppercase = true

[node name="QuitButton" type="Button" parent="BorderPanel/MainMenuContainer/MarginContainer/VBoxContainer"]
unique_name_in_owner = true
custom_minimum_size = Vector2(2.08165e-12, 50)
layout_mode = 2
script = ExtResource("4_i7vk5")
Expand Down
18 changes: 5 additions & 13 deletions Components/UI/WinScreen.gd
Original file line number Diff line number Diff line change
Expand Up @@ -43,22 +43,14 @@ func millis_to_minutes(millis: float) -> float:

func _submit_new_score():
pass
# do the thing

func fill_table(data: Dictionary):
#print("Player short id %s" % LootLocker.player_short_id)
for entry : Dictionary in data.items:
var row : TableRow = row_scene.instantiate()
if entry.has('steam_id'):
row.set_data(Steam.getFriendPersonaName(entry.steam_id), 0)
row.set_data(str(entry.score), 1)
row.set_data(str(entry.global_rank), 2)
else:
row.set_data(entry.player.name, 0)
row.set_data(str(entry.score), 1)
row.set_data(str(entry.rank), 2)
#row.set_highlight(true)
#if str(entry.player.id) == str(LootLocker.player_short_id):
#row.set_highlight(true)
var lb_entry : Dictionary = LeaderboardManager.board_api.parse_entry(entry)
row.set_data(lb_entry.name, 0)
row.set_data(lb_entry.score, 1)
row.set_data(lb_entry.rank, 2)
row.set_highlight(lb_entry.highlight)
tree.add_child(row)
loading_message.visible = false
18 changes: 3 additions & 15 deletions Components/UI/loading_screen.gd
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,10 @@ extends Control


func _ready():
if OS.has_feature('web'):
init_lootlocker()
else:
if not init_steam():
init_lootlocker()
if not LeaderboardManager.is_node_ready():
await LeaderboardManager.ready
LeaderboardManager.api_ready.connect(_go_to_main_menu)

func init_lootlocker():
LeaderboardManager.use_lootlocker()
#LootLocker.lootlocker_ready.connect(_go_to_main_menu)
#LootLocker.initialize()

func init_steam():
LeaderboardManager.use_steam()
#SteamInit.steam_ready.connect(_go_to_main_menu)
return SteamInit.initialize_steam()
LeaderboardManager.initialize()

func _go_to_main_menu():
get_tree().change_scene_to_file("res://Components/UI/MainMenu.tscn")
11 changes: 9 additions & 2 deletions Components/UI/win_screen.tscn
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
[gd_scene load_steps=10 format=3 uid="uid://cvgr706cfuhue"]
[gd_scene load_steps=11 format=3 uid="uid://cvgr706cfuhue"]

[ext_resource type="Script" path="res://Components/UI/WinScreen.gd" id="1_5p8od"]
[ext_resource type="Theme" uid="uid://urlbj24trl7l" path="res://Resources/ui_theme.tres" id="2_7sqmg"]
[ext_resource type="Texture2D" uid="uid://4qxd5qx3v0p8" path="res://Textures/main_menu.png" id="2_bcyp8"]
[ext_resource type="Script" path="res://Components/UI/PlayButton.gd" id="3_7iniu"]
[ext_resource type="Script" path="res://loading_messge.gd" id="5_0fn1b"]
[ext_resource type="Script" path="res://Components/UI/IMenu.gd" id="5_al4ln"]

[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_ka7m1"]
Expand Down Expand Up @@ -158,9 +159,15 @@ uppercase = true
unique_name_in_owner = true
layout_mode = 2
size_flags_vertical = 3
text = "Loading leaderboard..."
text = "Loading leaderboard"
horizontal_alignment = 1
vertical_alignment = 1
script = ExtResource("5_0fn1b")
base_message = "Loading leaderboard"

[node name="Timer" type="Timer" parent="BorderPanel/VBoxContainer/data/PanelContainer/tree/loading_message"]
wait_time = 0.3
autostart = true

[node name="VBoxContainer" type="VBoxContainer" parent="BorderPanel/VBoxContainer/data"]
layout_mode = 2
Expand Down
3 changes: 3 additions & 0 deletions Scripts/Leaderboards/Leaderboard.gd
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,6 @@ func upload_score(board_name: String, score: int):

func get_leaderboard_entries(board_name: String):
pass

func parse_entry(entry: Dictionary):
pass
18 changes: 9 additions & 9 deletions Scripts/Leaderboards/LeaderboardManager.gd
Original file line number Diff line number Diff line change
Expand Up @@ -3,23 +3,23 @@ extends Node
signal api_ready

var board_api : Leaderboard

func use_steam():
board_api = SteamLeaderboards.new()
board_api.api_ready.connect(_emit_api_ready)
board_api.initialize()

func use_lootlocker():
board_api = LootLocker.new()
func _ready():
if OS.has_feature('web'):
board_api = LootLocker.new()
print('create lootlocker object')
else:
board_api = SteamLeaderboards.new()

func initialize():
add_child(board_api)
board_api.api_ready.connect(_emit_api_ready)
board_api.initialize()

func get_leaderboard_entries(board_name: String):
print('getting leaderboard entries')
board_api.get_leaderboard_entries(board_name)

func upload_score(board_name: String, score: int):
print('uploading score')
board_api.upload_score(board_name, score)

func _emit_api_ready():
Expand Down
11 changes: 11 additions & 0 deletions Scripts/Leaderboards/LootLocker.gd
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,9 @@ var leader_http : HTTPRequest
var submit_score_http : HTTPRequest
var submit_name_http : HTTPRequest


func initialize():
print('init lootlocker')
_authentication_request()

func _authentication_request():
Expand Down Expand Up @@ -114,6 +116,15 @@ func upload_score(board_id: String, score: int):
request_completed.connect(_on_submit_score_completed)
request(api_domain + "game/leaderboards/" + board_id + "/submit", headers, HTTPClient.METHOD_POST, JSON.stringify(data))

func parse_entry(entry: Dictionary) -> Dictionary:
# todo: highlight row if it belongs to current user
return {
'name': entry.player.name,
'score': str(entry.score),
'rank': str(entry.rank),
'highlight': false
}

func _on_submit_score_completed(_result, _response_code, _headers, body):
var response = JSON.parse_string(body.get_string_from_utf8())
print(response)
Expand Down
43 changes: 29 additions & 14 deletions Scripts/Leaderboards/SteamLeaderboards.gd
Original file line number Diff line number Diff line change
Expand Up @@ -3,41 +3,56 @@ class_name SteamLeaderboards

signal leaderboard_handle_found
var leaderboard_handle: int
const STEAM_APP_ID = 3490830
var steam_api: Object = null

func _ready():
initialize()

func _process(float) -> void:
if Engine.has_singleton('Steam') and steam_api != null:
steam_api.run_callbacks()

func initialize():
Steam.leaderboard_score_uploaded.connect(_on_leaderboard_score_uploaded)
Steam.leaderboard_scores_downloaded.connect(_on_leaderboard_scores_downloaded)
if SteamInit.active:
if Engine.has_singleton('Steam'):
steam_api = Engine.get_singleton('Steam')
OS.set_environment("SteamAppId", str(STEAM_APP_ID))
OS.set_environment("SteamGameId", str(STEAM_APP_ID))

steam_api.leaderboard_score_uploaded.connect(_on_leaderboard_score_uploaded)
steam_api.leaderboard_scores_downloaded.connect(_on_leaderboard_scores_downloaded)
steam_api.steamInitEx()
api_ready.emit()
else:
SteamInit.steam_ready.connect(func():
api_ready.emit())
SteamInit.initialize_steam()

func upload_score(board_name: String, score: int):
_get_leaderboard_handle(board_name)
await leaderboard_handle_found
Steam.uploadLeaderboardScore(score, true, [], leaderboard_handle)
steam_api.uploadLeaderboardScore(score, true, [], leaderboard_handle)

func parse_entry(entry: Dictionary) -> Dictionary:
return {
'name': steam_api.getFriendPersonaName(entry.steam_id),
'score': str(entry.score),
'rank': str(entry.global_rank),
'highlight': steam_api.getSteamID() == entry.steam_id
}

func get_leaderboard_entries(board_name: String):
_get_leaderboard_handle(board_name)
await leaderboard_handle_found
Steam.downloadLeaderboardEntries(1, 10, Steam.LEADERBOARD_DATA_REQUEST_GLOBAL_AROUND_USER, leaderboard_handle)
steam_api.downloadLeaderboardEntries(1, 10, steam_api.LEADERBOARD_DATA_REQUEST_GLOBAL_AROUND_USER, leaderboard_handle)

func _get_leaderboard_handle(board_name: String):
Steam.leaderboard_find_result.connect(_on_leaderboard_find_result)
Steam.findOrCreateLeaderboard(board_name, Steam.LEADERBOARD_SORT_METHOD_DESCENDING, Steam.LEADERBOARD_DISPLAY_TYPE_NUMERIC)
steam_api.leaderboard_find_result.connect(_on_leaderboard_find_result)
steam_api.findOrCreateLeaderboard(board_name, steam_api.LEADERBOARD_SORT_METHOD_DESCENDING, steam_api.LEADERBOARD_DISPLAY_TYPE_NUMERIC)

func _on_leaderboard_find_result(handle: int, found: int) -> void:
if found == 1:
leaderboard_handle = handle
leaderboard_handle_found.emit()

func _on_leaderboard_scores_downloaded(message: String, leaderboard_handle: int, leaderboard_entries: Array):
print(message)
print(leaderboard_entries)
leaderboard_entries_retrieved.emit({'items': leaderboard_entries})

func _on_leaderboard_score_uploaded(success: int, this_handle: int, this_score: Dictionary) -> void:
print(this_score)
upload_score_completed.emit()
30 changes: 0 additions & 30 deletions Scripts/SteamInit.gd

This file was deleted.

0 comments on commit 6f5e4c4

Please sign in to comment.