Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add fetch&deploy profile #121

Merged
merged 6 commits into from
Dec 12, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion godot/.godot/global_script_class_cache.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -83,14 +83,20 @@ list=Array[Dictionary]([{
"language": &"GDScript",
"path": "res://src/logic/content/opensea_nft_fetcher.gd"
}, {
"base": &"DclPlayerIdentity",
"class": &"PlayerIdentity",
"icon": "",
"language": &"GDScript",
"path": "res://src/logic/player/player_identity.gd"
}, {
"base": &"DclPortableExperienceController",
"class": &"PortableExperienceController",
"icon": "",
"language": &"GDScript",
"path": "res://src/logic/portable_experience_controller.gd"
}, {
"base": &"RefCounted",
"class": &"Promise",
"class": &"PromiseUtils",
"icon": "",
"language": &"GDScript",
"path": "res://src/utils/promise.gd"
Expand Down
Binary file modified godot/.godot/uid_cache.bin
Binary file not shown.
16 changes: 8 additions & 8 deletions godot/assets/themes/theme.tres

Large diffs are not rendered by default.

31 changes: 0 additions & 31 deletions godot/src/config/config_data.gd
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ enum ConfigParams {
SHOW_FPS,
LIMIT_FPS,
SKY_BOX,
AVATAR_PROFILE,
SESSION_ACCOUNT
}

Expand Down Expand Up @@ -91,11 +90,6 @@ var skybox: int = 1:
skybox = value
param_changed.emit(ConfigParams.SKY_BOX)

var avatar_profile: Dictionary = {}:
set(value):
avatar_profile = value
param_changed.emit(ConfigParams.AVATAR_PROFILE)

var last_realm_joined: String = "":
set(value):
last_realm_joined = value
Expand All @@ -110,28 +104,6 @@ var session_account: Dictionary = {}:
param_changed.emit(ConfigParams.SESSION_ACCOUNT)


func default_profile() -> Dictionary:
return {
"base_url": "https://peer.decentraland.org/content",
"name": "Godotte",
"body_shape": "urn:decentraland:off-chain:base-avatars:BaseFemale",
"eyes": Color(0.3, 0.22, 0.99),
"hair": Color(0.6, 0.38, 0.1),
"skin": Color(0.5, 0.36, 0.28),
"wearables":
[
"urn:decentraland:off-chain:base-avatars:f_sweater",
"urn:decentraland:off-chain:base-avatars:f_jeans",
"urn:decentraland:off-chain:base-avatars:bun_shoes",
"urn:decentraland:off-chain:base-avatars:standard_hair",
"urn:decentraland:off-chain:base-avatars:f_eyes_01",
"urn:decentraland:off-chain:base-avatars:f_eyebrows_00",
"urn:decentraland:off-chain:base-avatars:f_mouth_00"
],
"emotes": []
}


func load_from_default():
self.gravity = 55.0
self.jump_velocity = 12.0
Expand All @@ -154,7 +126,6 @@ func load_from_default():
self.resolution = "1280 x 720"
self.window_size = "1280 x 720"
self.ui_scale = 1
self.avatar_profile = default_profile()
self.session_account = {}

self.last_realm_joined = "https://sdk-team-cdn.decentraland.org/ipfs/goerli-plaza-main"
Expand Down Expand Up @@ -190,7 +161,6 @@ func load_from_settings_file():
self.window_size = settings_file.get_value("config", "window_size", data_default.window_size)
self.ui_scale = settings_file.get_value("config", "ui_scale", data_default.ui_scale)

self.avatar_profile = settings_file.get_value("profile", "avatar", data_default.avatar_profile)
self.session_account = settings_file.get_value(
"session", "account", data_default.session_account
)
Expand Down Expand Up @@ -221,7 +191,6 @@ func save_to_settings_file():
settings_file.set_value("config", "resolution", self.resolution)
settings_file.set_value("config", "window_size", self.window_size)
settings_file.set_value("config", "ui_scale", self.ui_scale)
settings_file.set_value("profile", "avatar", self.avatar_profile)
settings_file.set_value("session", "account", self.session_account)
settings_file.set_value("user", "last_parcel_position", self.last_parcel_position)
settings_file.set_value("user", "last_realm_joined", self.last_realm_joined)
Expand Down
4 changes: 2 additions & 2 deletions godot/src/decentraland_components/audio_source.gd
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,8 @@ func _async_refresh_data():
var promise: Promise = Global.content_manager.fetch_audio(
last_loaded_audio_clip, content_mapping
)
var res = await promise.async_awaiter()
if res is Promise.Error:
var res = await PromiseUtils.async_awaiter(promise)
if res is PromiseError:
self.stop()
self.stream = null
printerr("Error on fetch audio: ", res.get_error())
Expand Down
6 changes: 3 additions & 3 deletions godot/src/decentraland_components/avatar.gd
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ func async_update_avatar(avatar: Dictionary):
finish_loading = false

var promise = Global.content_manager.fetch_wearables(wearable_to_request, current_content_url)
await promise.async_awaiter()
await PromiseUtils.async_awaiter(promise)
async_fetch_wearables_dependencies()


Expand Down Expand Up @@ -206,7 +206,7 @@ func async_fetch_wearables_dependencies():
for file_name in content_to_fetch:
async_calls.push_back(_fetch_texture_or_gltf(file_name, content_mapping))

await Promise.async_all(async_calls)
await PromiseUtils.async_all(async_calls)

async_load_wearables()

Expand Down Expand Up @@ -344,7 +344,7 @@ func async_load_wearables():
meshes.push_back({"n": child.get_surface_override_material_count(), "mesh": child.mesh})

var promise = Global.content_manager.duplicate_materials(meshes)
await promise.async_awaiter()
await PromiseUtils.async_awaiter(promise)
apply_color_and_facial()
body_shape_skeleton_3d.visible = true
finish_loading = true
Expand Down
4 changes: 2 additions & 2 deletions godot/src/decentraland_components/gltf_container.gd
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ func async_load_gltf():

var promise = Global.content_manager.fetch_gltf(dcl_gltf_src, content_mapping)
if promise != null:
await promise.async_awaiter()
await PromiseUtils.async_awaiter(promise)

_async_on_gltf_loaded()

Expand All @@ -46,7 +46,7 @@ func _async_on_gltf_loaded():
node, dcl_visible_cmask, dcl_invisible_cmask, dcl_scene_id, dcl_entity_id
)

await promise.async_awaiter()
await PromiseUtils.async_awaiter(promise)

gltf_node = promise.get_data()
self.async_deferred_add_child.call_deferred(gltf_node)
Expand Down
4 changes: 2 additions & 2 deletions godot/src/decentraland_components/nft_shape.gd
Original file line number Diff line number Diff line change
Expand Up @@ -112,8 +112,8 @@ func _async_load_nft(picture_frame: Node3D, urn: String, style: NftFrameStyleLoa
return

var promise = Global.nft_fetcher.fetch_nft(dcl_urn)
var result = await promise.async_awaiter()
if result is Promise.Error:
var result = await PromiseUtils.async_awaiter(promise)
if result is PromiseError:
printerr("NftShape::load_nft Error on fetching nft: ", result.get_error())
return
await _async_set_opensea_nft(picture_frame, style, result)
Expand Down
4 changes: 2 additions & 2 deletions godot/src/decentraland_components/video_player.gd
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ func async_request_video(file_hash):
var content_mapping = Global.scene_runner.get_scene_content_mapping(dcl_scene_id)

var promise = Global.content_manager.fetch_video(file_hash, content_mapping)
var res = await promise.async_awaiter()
if res is Promise.Error:
var res = await PromiseUtils.async_awaiter(promise)
if res is PromiseError:
printerr("Error on fetching video: ", res.get_error())
else:
_on_video_loaded(file_hash)
Expand Down
8 changes: 7 additions & 1 deletion godot/src/global.gd
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ var raycast_debugger = load("res://src/tool/raycast_debugger/raycast_debugger.gd
var animation_importer: AnimationImporter = AnimationImporter.new()

var scene_fetcher: SceneFetcher = null
var http_requester: RustHttpRequesterWrapper = RustHttpRequesterWrapper.new()
var http_requester: RustHttpRequesterWrapper

var nft_fetcher: OpenSeaFetcher = OpenSeaFetcher.new()
var nft_frame_loader: NftFrameStyleLoader = NftFrameStyleLoader.new()
Expand All @@ -33,6 +33,8 @@ var standalone = false


func _ready():
http_requester = RustHttpRequesterWrapper.new()

var args := OS.get_cmdline_args()
if args.size() == 1 and args[0].begins_with("res://"):
if args[0] != "res://src/main.tscn":
Expand All @@ -57,6 +59,9 @@ func _ready():
self.realm = Realm.new()
self.realm.set_name("realm")

self.player_identity = PlayerIdentity.new()
self.player_identity.set_name("player_identity")

self.testing_tools = TestingTools.new()
self.testing_tools.set_name("testing_tool")

Expand All @@ -76,6 +81,7 @@ func _ready():
get_tree().root.add_child.call_deferred(self.content_manager)
get_tree().root.add_child.call_deferred(self.scene_runner)
get_tree().root.add_child.call_deferred(self.realm)
get_tree().root.add_child.call_deferred(self.player_identity)
get_tree().root.add_child.call_deferred(self.comms)
get_tree().root.add_child.call_deferred(self.avatars)
get_tree().root.add_child.call_deferred(self.portable_experience_controller)
Expand Down
29 changes: 17 additions & 12 deletions godot/src/logic/content/content_thread.gd
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ var id: int = -1

# Private
var _pending_content: Array[Dictionary] = []
var _http_requester = RustHttpRequesterWrapper.new()
var _http_requester: RustHttpRequesterWrapper

# Metrics
var _processing_count = 0
Expand All @@ -32,6 +32,7 @@ func content_processing_count():


func _init(param_id: int, param_thread: Thread):
_http_requester = RustHttpRequesterWrapper.new()
self.thread = param_thread
self.id = param_id

Expand Down Expand Up @@ -104,15 +105,19 @@ func _async_process_loading_wearable(
content.get("content_base_url", "https://peer.decentraland.org/content") + "entities/active"
)
var wearables: PackedStringArray = content.get("new_wearables", [])
if wearables.is_empty():
printerr("Trying to fetch empty wearables")
return

var json_payload: String = JSON.stringify({"pointers": wearables})
var headers = ["Content-Type: application/json"]

var promise: Promise = _http_requester.request_json(
url, HTTPClient.METHOD_POST, json_payload, headers
)

var content_result = await promise.async_awaiter()
if content_result is Promise.Error:
var content_result = await PromiseUtils.async_awaiter(promise)
if content_result is PromiseError:
printerr("Failing on loading wearable ", url, " reason: ", content_result.get_error())
return

Expand Down Expand Up @@ -183,8 +188,8 @@ func _async_process_loading_gltf(content: Dictionary, content_cache_map: Diction

var request_promise = _http_requester.request_file(file_hash_path, absolute_file_path)

var content_result = await request_promise.async_awaiter()
if content_result is Promise.Error:
var content_result = await PromiseUtils.async_awaiter(request_promise)
if content_result is PromiseError:
printerr(
"Failing on loading gltf ", file_hash_path, " reason: ", content_result.get_error()
)
Expand Down Expand Up @@ -227,7 +232,7 @@ func _async_process_loading_gltf(content: Dictionary, content_cache_map: Diction

content["gltf_mappings"] = mappings

await Promise.async_all(promises_dependencies)
await PromiseUtils.async_all(promises_dependencies)

# final processing
var new_gltf := GLTFDocument.new()
Expand Down Expand Up @@ -269,8 +274,8 @@ func _async_process_loading_texture(

var promise_texture_file: Promise = _http_requester.request_file(url, absolute_file_path)

var content_result = await promise_texture_file.async_awaiter()
if content_result is Promise.Error:
var content_result = await PromiseUtils.async_awaiter(promise_texture_file)
if content_result is PromiseError:
content_cache_map[file_hash]["promise"].call_deferred(
"reject",
"Failing on loading texture " + url + " reason: " + str(content_result.get_error())
Expand Down Expand Up @@ -321,8 +326,8 @@ func _async_process_loading_audio(
var promise_audio_file: Promise = _http_requester.request_file(
file_hash_path, absolute_file_path
)
var content_result = await promise_audio_file.async_awaiter()
if content_result is Promise.Error:
var content_result = await PromiseUtils.async_awaiter(promise_audio_file)
if content_result is PromiseError:
printerr(
"Failing on loading wearable ",
file_hash_path,
Expand Down Expand Up @@ -382,8 +387,8 @@ func _async_process_loading_video(
var promise_video_file: Promise = _http_requester.request_file(
base_url + file_hash, absolute_file_path
)
var content_result = await promise_video_file.async_awaiter()
if content_result is Promise.Error:
var content_result = await PromiseUtils.async_awaiter(promise_video_file)
if content_result is PromiseError:
printerr(
"Failing on loading wearable ",
file_hash_path,
Expand Down
4 changes: 3 additions & 1 deletion godot/src/logic/content/content_thread_pool.gd
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ const USE_THREAD = true
const MAX_THREADS = 1

var content_threads: Array[ContentThread] = []
var http_requester = RustHttpRequesterWrapper.new()
var http_requester: RustHttpRequesterWrapper

var request_monotonic_counter: int = 0

Expand All @@ -37,6 +37,8 @@ func get_best_content_thread() -> ContentThread:


func _ready():
http_requester = RustHttpRequesterWrapper.new()

var custom_importer = load("res://src/logic/custom_gltf_importer.gd").new()
GLTFDocument.register_gltf_document_extension(custom_importer)

Expand Down
12 changes: 6 additions & 6 deletions godot/src/logic/content/opensea_nft_fetcher.gd
Original file line number Diff line number Diff line change
Expand Up @@ -102,8 +102,8 @@ class Asset:
var offers_promise: Promise = Global.http_requester.request_json(
url, HTTPClient.METHOD_GET, "", headers
)
var offers_result = await offers_promise.async_awaiter()
if offers_result is Promise.Error:
var offers_result = await PromiseUtils.async_awaiter(offers_promise)
if offers_result is PromiseError:
printerr("Asset::async_load_offers error loading offers: ", offers_result.get_error())
return 0
# Parsing
Expand Down Expand Up @@ -131,8 +131,8 @@ class Asset:
func async_download_image():
var texture_hash = get_hash()
var promise = Global.content_manager.fetch_texture_by_url(texture_hash, image_url)
var result = await promise.async_awaiter()
if result is Promise.Error:
var result = await PromiseUtils.async_awaiter(promise)
if result is PromiseError:
printerr(
"open_sea_nft_fetcher::asset::download_image promise error: ", result.get_error()
)
Expand Down Expand Up @@ -167,9 +167,9 @@ func _async_request_nft(completed_promise: Promise, urn: DclUrn):
var asset_promise: Promise = Global.http_requester.request_json(
url, HTTPClient.METHOD_GET, "", headers
)
var asset_result = await asset_promise.async_awaiter()
var asset_result = await PromiseUtils.async_awaiter(asset_promise)

if asset_result is Promise.Error:
if asset_result is PromiseError:
printerr(
"Error fetching asset result for opensea, url: ",
url,
Expand Down
3 changes: 1 addition & 2 deletions godot/src/logic/player/player.gd
Original file line number Diff line number Diff line change
Expand Up @@ -80,8 +80,7 @@ func _ready():

floor_snap_length = 0.2

avatar.async_update_avatar(Global.config.avatar_profile)
Global.comms.player_identity.profile_changed.connect(self._on_player_profile_changed)
Global.player_identity.profile_changed.connect(self._on_player_profile_changed)


func _on_player_profile_changed(new_profile: Dictionary):
Expand Down
Loading
Loading