92 lines
3.3 KiB
GDScript3
92 lines
3.3 KiB
GDScript3
|
|
#*****************************************************************************
|
||
|
|
# @author MakerYang
|
||
|
|
# @site mir2.makeryang.com
|
||
|
|
#*****************************************************************************
|
||
|
|
|
||
|
|
class_name World extends Node2D
|
||
|
|
|
||
|
|
# 场景资源
|
||
|
|
@onready var main: Node2D = $Main
|
||
|
|
@onready var interface: CanvasLayer = $Interface
|
||
|
|
@onready var loading: Control = $Interface/Loading
|
||
|
|
|
||
|
|
# 场景数据
|
||
|
|
var is_loader: bool = false
|
||
|
|
var loader_progress: Array = []
|
||
|
|
|
||
|
|
func _ready() -> void:
|
||
|
|
print("[world:ready]")
|
||
|
|
if Global.is_server():
|
||
|
|
#var child_node = get_node("Interface")
|
||
|
|
#if child_node:
|
||
|
|
#remove_child(child_node)
|
||
|
|
#child_node.queue_free()
|
||
|
|
on_server_loader_map()
|
||
|
|
return
|
||
|
|
main.visible = false
|
||
|
|
interface.visible = true
|
||
|
|
loading.visible = true
|
||
|
|
|
||
|
|
func _process(_delta: float) -> void:
|
||
|
|
if !Global.is_server():
|
||
|
|
if !is_loader:
|
||
|
|
on_player_map_loader()
|
||
|
|
|
||
|
|
# 服务器加载地图资源函数
|
||
|
|
func on_server_loader_map() -> void:
|
||
|
|
print("[world:server:loader:map]")
|
||
|
|
Request.on_internal("/internal/map/list", HTTPClient.METHOD_GET, {}, func(_result, code, _headers, body):
|
||
|
|
if code == 200:
|
||
|
|
var response = JSON.parse_string(body.get_string_from_utf8())
|
||
|
|
if response.code == 0:
|
||
|
|
if len(response.data.map) > 0:
|
||
|
|
for i in range(len(response.data.map)):
|
||
|
|
var map_scene:Node2D = load(Global.get_map_root_path() + response.data.map[i].map_number + "/" + response.data.map[i].map_number + ".tscn").instantiate()
|
||
|
|
main.add_child(map_scene)
|
||
|
|
print("[world:server:loader:map] ", response.data.map[i].map_name + " ", response.data.map[i].map_number + " ", "" + str(i+1) + "/" + str(len(response.data.map)))
|
||
|
|
on_server_loader_npc()
|
||
|
|
else:
|
||
|
|
print("[world:server:loader:map:error]")
|
||
|
|
)
|
||
|
|
|
||
|
|
# 服务器加载NPC资源函数
|
||
|
|
func on_server_loader_npc() -> void:
|
||
|
|
print("[world:server:loader:npc]")
|
||
|
|
on_server_loader_monster()
|
||
|
|
|
||
|
|
# 服务器加载怪物资源函数
|
||
|
|
func on_server_loader_monster() -> void:
|
||
|
|
print("[world:server:loader:monster]")
|
||
|
|
|
||
|
|
# 加载玩家地图资源函数
|
||
|
|
func on_player_map_loader() -> void:
|
||
|
|
var map_scene_path = Account.get_player_map_path(Account.get_player())
|
||
|
|
ResourceLoader.load_threaded_request(map_scene_path)
|
||
|
|
var loader_status = ResourceLoader.load_threaded_get_status(map_scene_path, loader_progress)
|
||
|
|
loading.progress_bar.value = (loader_progress[0] * 100)
|
||
|
|
if loader_status == ResourceLoader.THREAD_LOAD_LOADED:
|
||
|
|
print("[world:player:map:loader]")
|
||
|
|
is_loader = true
|
||
|
|
main.add_child(load(map_scene_path).instantiate())
|
||
|
|
await get_tree().create_timer(0.2).timeout
|
||
|
|
var error = Client.create_client()
|
||
|
|
if error == OK:
|
||
|
|
print("[client:create]", "success")
|
||
|
|
await multiplayer.multiplayer_peer.peer_connected
|
||
|
|
var server_url = "/game/player/update/client/id?token=" + Account.get_player_token() + "&client_id=" + str(Client.get_client_id())
|
||
|
|
Request.on_server(server_url, HTTPClient.METHOD_GET, {}, func(_result, code, _headers, body):
|
||
|
|
if code == 200:
|
||
|
|
var response = JSON.parse_string(body.get_string_from_utf8())
|
||
|
|
if response.code != 0:
|
||
|
|
printerr("[client:create:update:client:id]", JSON.stringify(response))
|
||
|
|
return
|
||
|
|
Server.on_add_player.rpc(Client.get_client_id(), JSON.stringify(Account.get_player()))
|
||
|
|
await get_tree().create_timer(0.2).timeout
|
||
|
|
main.visible = true
|
||
|
|
loading.visible = false
|
||
|
|
else:
|
||
|
|
printerr("[request:ping]", "error")
|
||
|
|
)
|
||
|
|
else:
|
||
|
|
printerr("[client:create]", "error")
|