1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
|
extends Spatial
var client
var client_id: int
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: bool = 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", NodePath("."))
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})
func get_client_id() -> int:
return client_id
func is_chatting_f() -> bool:
return is_chatting
|