76 lines
2.8 KiB
GDScript
76 lines
2.8 KiB
GDScript
#*****************************************************************************
|
|
# @author MakerYang
|
|
# @site mir2.makeryang.com
|
|
#*****************************************************************************
|
|
|
|
extends Control
|
|
|
|
# 场景资源
|
|
@onready var button_pressed_music: AudioStreamPlayer2D = $ButtonPressedMusic
|
|
@onready var default: Control = $Default
|
|
@onready var list: VBoxContainer = $Default/Box/List
|
|
|
|
# 场景数据
|
|
var server_list: Array = []
|
|
|
|
# 场景信号
|
|
signal switch_role_signal(token: String)
|
|
|
|
func _ready() -> void:
|
|
default.visible = false
|
|
|
|
func on_server() -> void:
|
|
print("[launch:server:on_server]")
|
|
# 清空当前渲染列表数据
|
|
while list.get_child_count() > 0:
|
|
var last_child = list.get_child(list.get_child_count() - 1)
|
|
list.remove_child(last_child)
|
|
last_child.queue_free()
|
|
Request.on_server("/game/server/index", 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:
|
|
get_parent().on_dialog(response.message)
|
|
return
|
|
server_list = Global.update_server_area(response.data.server)
|
|
# 渲染列表数据
|
|
var font_path = load("res://assets/common/font/HarmonyOS_Sans_Bold.ttf")
|
|
var texture_normal = load("res://assets/launch/nodes/server/server_button_0.png")
|
|
var texture_pressed = load("res://assets/launch/nodes/server/server_button_1.png")
|
|
var texture_hover = load("res://assets/launch/nodes/server/server_button_2.png")
|
|
for i in range(len(server_list)):
|
|
var item:TextureButton = TextureButton.new()
|
|
var item_label:Label = Label.new()
|
|
item.texture_normal = texture_normal
|
|
item.texture_pressed = texture_pressed
|
|
item.texture_hover = texture_hover
|
|
item.texture_disabled = texture_normal
|
|
item_label.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER
|
|
item_label.vertical_alignment = VERTICAL_ALIGNMENT_CENTER
|
|
item_label.size = Vector2(157, 24)
|
|
item_label.position = Vector2(10, 11)
|
|
item_label.text = server_list[i]["server_name"]
|
|
item_label.add_theme_font_size_override("font_size", 12)
|
|
item_label.add_theme_color_override("font_color", Color("#cba368"))
|
|
item_label.add_theme_font_override("font", font_path)
|
|
item.add_child(item_label)
|
|
item.connect("pressed", _on_item_pressed.bind(server_list[i]["token"]))
|
|
list.add_child(item)
|
|
default.visible = true
|
|
else:
|
|
get_parent().on_dialog("服务区获取失败")
|
|
)
|
|
|
|
# 服务区按钮事件函数
|
|
func _on_item_pressed(_token: String) -> void:
|
|
print("[launch:server:item:pressed]")
|
|
_on_button_pressed_music()
|
|
for i in range(list.get_child_count()):
|
|
list.get_child(i).disabled = true
|
|
default.visible = false
|
|
switch_role_signal.emit(_token)
|
|
|
|
# 公用按钮音效函数
|
|
func _on_button_pressed_music() -> void:
|
|
button_pressed_music.play()
|