summaryrefslogtreecommitdiff
path: root/godot/scripts/GameBase.gd
blob: 9f24d7bbedf320714560074e51707b3974b79637 (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
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
117
118
119
120
121
122
123
124
125
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.call("idle",delta)

func _physics_process(delta):
	if is_local:
		local_server_tree.call("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()
		cam.attach($DEFAULTCAM, "STATIC", NodePath("."))
	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

func get_players_info(id: int, index: int) -> String:
	return players_info[id][index]

func set_player_char(character) -> void:
	player_char = character

func get_cam():
	return cam