模板脚本文件
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
class_name MainMenuUI
|
||||
extends Control
|
||||
|
||||
signal host_pressed(nickname: String, skin: String)
|
||||
signal join_pressed(nickname: String, skin: String, address: String)
|
||||
signal quit_pressed
|
||||
|
||||
const SKIN_OPTIONS: Array[String] = ["Blue", "Yellow", "Green", "Red"]
|
||||
const SAFE_AREA_MARGIN := 24.0
|
||||
|
||||
@onready var skin_input: OptionButton = $MainContainer/MainMenu/Option2/SkinInput
|
||||
@onready var nick_input: LineEdit = $MainContainer/MainMenu/Option1/NickInput
|
||||
@onready var address_input: LineEdit = $MainContainer/MainMenu/Option3/AddressInput
|
||||
@onready var main_container: VBoxContainer = $MainContainer
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
skin_input.clear()
|
||||
for skin_name in SKIN_OPTIONS:
|
||||
skin_input.add_item(skin_name)
|
||||
skin_input.select(0)
|
||||
resized.connect(_update_responsive_layout)
|
||||
call_deferred("_update_responsive_layout")
|
||||
|
||||
|
||||
func _on_host_pressed() -> void:
|
||||
var nickname = nick_input.text.strip_edges()
|
||||
var skin = get_skin()
|
||||
host_pressed.emit(nickname, skin)
|
||||
|
||||
|
||||
func _on_join_pressed() -> void:
|
||||
var nickname = nick_input.text.strip_edges()
|
||||
var skin = get_skin()
|
||||
var address = address_input.text.strip_edges()
|
||||
join_pressed.emit(nickname, skin, address)
|
||||
|
||||
|
||||
func _on_quit_pressed():
|
||||
quit_pressed.emit()
|
||||
|
||||
|
||||
func show_menu():
|
||||
show()
|
||||
call_deferred("_update_responsive_layout")
|
||||
|
||||
|
||||
func hide_menu():
|
||||
hide()
|
||||
|
||||
|
||||
func is_menu_visible() -> bool:
|
||||
return visible
|
||||
|
||||
|
||||
func _update_responsive_layout() -> void:
|
||||
if not main_container:
|
||||
return
|
||||
var available_size := Vector2(
|
||||
maxf(1.0, size.x - SAFE_AREA_MARGIN * 2.0), maxf(1.0, size.y - SAFE_AREA_MARGIN * 2.0)
|
||||
)
|
||||
var content_size := main_container.get_combined_minimum_size()
|
||||
if content_size.x <= 0.0 or content_size.y <= 0.0:
|
||||
return
|
||||
var scale_factor := minf(1.0, minf(available_size.x / content_size.x, available_size.y / content_size.y))
|
||||
main_container.pivot_offset = main_container.size * 0.5
|
||||
main_container.scale = Vector2.ONE * scale_factor
|
||||
|
||||
|
||||
func get_skin() -> String:
|
||||
return skin_input.get_item_text(skin_input.selected).to_lower()
|
||||
Reference in New Issue
Block a user