summaryrefslogtreecommitdiff
path: root/scripts/GameBase.gd
blob: 019aa14424603ad5c51da8c2d4dbf460f088d46f (plain)
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
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

var players_info = {} #dictionary of id : name, team, ping, etc.

var is_chatting = false

var winddir = Vector3(1,0,0)

func _process(delta):
	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"]
	
	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()
		$WORLDGEO.add_child(prop)
		prop.transform = geo["transform"]

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)

func select_character(dest):
	print(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()
	get_tree().quit()

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})