extends Spatial var client var client_id var is_local = false var local_server_tree = null var player_name : String var player_team : String var player_char = null onready var cam = $PLAYERCAM var players_info = {} #dictionary of id : name, team, ping, etc. var is_chatting = false var winddir = Vector3(1,0,0) func _process(delta): $HUD/Health.text = str(player_char.health) if player_char != null else "" if is_local: local_server_tree.idle(delta) func _physics_process(delta): if is_local: local_server_tree.iteration(delta) remote func set_up_server_info(info): $HUD/ServerJoinMenu/MOTD.text = info["MOTD"] $HUD/ServerJoinMenu/ServerName.text = info["server_name"] $DEFAULTCAM.transform = info["cam_pos"] cam.attach($DEFAULTCAM, "STATIC") rpc_id(1, "_call_on_server", "_client_connection_confirmed", {"id" : client_id, "username" : player_name}) remote func load_map(geo_info): for geo in geo_info: var prop = load(geo["filename"]).instance() prop.transform = geo["transform"] $WORLDGEO.add_child(prop) remote func load_entities(entity_info): #machines, players, and projectiles for entity in entity_info: var parent_section = get_node(entity["type"]) var ent = load(entity["filename"]).instance() ent.name = entity["name"] ent.set_network_master(entity["net_master"]) parent_section.add_child(ent, true) ent.transform = entity["transform"] ent.mp_init(entity["init_info"]) remote func update_players_info(info): $HUD/ServerJoinMenu/Team1Players.text = "" $HUD/ServerJoinMenu/Team2Players.text = "" $HUD/ServerJoinMenu/Spectators.text = "" players_info = info for player in players_info.keys(): var p_team = players_info[player][1] var p_name = players_info[player][0] if p_team == "RED": $HUD/ServerJoinMenu/Team1Players.text += p_name + ", " elif p_team == "BLUE": $HUD/ServerJoinMenu/Team2Players.text += p_name + ", " elif p_team == "SPEC": $HUD/ServerJoinMenu/Spectators.text += p_name + ", " remote func game_update_chars(): $HUD.update_characters() remote func game_chat_msg(msg): $HUD.ui_chat_msg(msg) remotesync func game_hitsound(): $HUD.ui_play_hitsound() remotesync func game_killsound(): $HUD.ui_play_killsound() func select_character(dest): if player_char == null: rpc_id(1, "_call_on_server", "_client_request_change_character", {"id" : client_id, "current_char_name" : "NULL", "char_name" : dest}) else: rpc_id(1, "_call_on_server", "_client_request_change_character", {"id" : client_id, "current_char_name" : player_char.name, "char_name" : dest}) func client_disconnect(): if player_char != null: player_char.deselect_character() client.close_connection() if is_local: local_server_tree.free() back_to_main() func _connection_lost(): if is_local: local_server_tree.free() back_to_main() func back_to_main(): var main_menu = load("res://ui/MainMenu.tscn").instance() get_tree().get_root().add_child(main_menu) get_tree().get_root().remove_child(self) queue_free() func join_team(team): if player_char != null: player_char.deselect_character() $DEFAULTCAM.current = true player_team = team rpc_id(1, "_call_on_server", "_client_change_teams", {"id" : client_id, "team" : team})