diff options
Diffstat (limited to 'godot/scripts/GameBase.gd')
| -rw-r--r-- | godot/scripts/GameBase.gd | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/godot/scripts/GameBase.gd b/godot/scripts/GameBase.gd new file mode 100644 index 0000000..0df53dd --- /dev/null +++ b/godot/scripts/GameBase.gd @@ -0,0 +1,107 @@ +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): + $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"] + + 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}) |
