extends Control var world onready var character_list = $CharacterSelect/VBoxContainer onready var progress_bar: ProgressBar = $UseProgress # Called when the node enters the scene tree for the first time. func _ready(): world = get_tree().get_root().get_node("GAMEWORLD") func _input(_event): if Input.is_action_just_pressed("menu"): #toggle mouse capture on esc $ServerJoinMenu.visible = false $CharacterSelect.visible = false $ChatPrompt.visible = false $HUDAnim.play("close_chat") world.is_chatting = false Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED) if Input.is_action_just_pressed("server_menu"): world.is_chatting = true $CharacterSelect.visible = false $ServerJoinMenu.visible = true Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE) if Input.is_action_just_pressed("game_menu"): update_characters() world.is_chatting = true $ServerJoinMenu.visible = false $CharacterSelect.visible = true Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE) if Input.is_action_just_pressed("chat") and !$ChatPrompt.visible: world.is_chatting = true Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE) $Chat.visible = true $ChatPrompt.visible = true $ChatPrompt.grab_focus() yield(get_tree(), "idle_frame") $ChatPrompt.text = "" func send_chat_msg(txt: String): world.is_chatting = false $ChatPrompt.visible = false $ChatPrompt.text = "" if !txt.begins_with("/"): world.rpc_id(1, "_call_on_server", "_send_chat", {"id" : world.client_id, "msg" : txt}) return #command process var end_ind = txt.find(" ")-1 if end_ind < -1: end_ind = -1 var cmd: String = txt.get_slice(" ", 0).substr(1).to_lower() var args = txt.substr(end_ind+1, -1).split(" ", false) match cmd: "goto": var pos: Vector3 = str2var("Vector3("+txt.get_slice(" ", 1)+")") if world.player_char: world.player_char.ai_set_path_target(pos) "find": var item: String = txt.get_slice(" ", 1) if world.player_char: CharacterAIManager.request_find_object(world.player_char, item, 50, true) "setaistate": world.rpc_id(1,"_call_on_server", "_set_ai_state", [args[0], args[1]]) for i in range(2,13): world.rpc_id(1,"_call_on_server", "_set_ai_state", [args[0]+str(i), args[1]]) func ui_chat_msg(msg): $HUDAnim.stop() $Chat.visible = true var textlabel = Label.new() textlabel.text = msg textlabel.autowrap = true textlabel.set_h_size_flags(SIZE_EXPAND_FILL) $Chat/ChatLines.add_child(textlabel) yield(get_tree().create_timer(0.05), "timeout") $Chat.ensure_control_visible(textlabel) $HUDAnim.play("close_chat") Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED) func ui_hide_chat(): if !$ChatPrompt.visible: $Chat.visible = false func ui_play_hitsound(): $AudioCues/Hitsound.play() func ui_play_killsound(): $AudioCues/Killsound.play() func update_characters(): for btn in character_list.get_children(): btn.queue_free() for character in world.get_node("PLAYERS").get_children(): if world.player_team == character.team: var select_button = Button.new() select_button.connect("pressed", world, "request_select_character", [character.name]) select_button.text = character.name + " (" + str(character.get_network_master()) + ")" character_list.add_child(select_button) func _ui_disconnect(): get_tree().get_root().get_node("GAMEWORLD").client_disconnect() func ui_join_red(): world.join_team("RED") func ui_join_blue(): world.join_team("BLUE") func set_progress(delta: float)-> void: progress_bar.visible = true progress_bar.set_value(delta) func hide_progress() -> void: progress_bar.set_value(0) progress_bar.visible = false