From 9b5a48e5f0c41976740ba2fb0f0928fc311378c0 Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Wed, 20 Oct 2021 13:40:49 +0300 Subject: [PATCH] added username on player --- Game_4/code/game.gd | 10 ++++++++ Game_4/code/network_setup.gd | 25 ++++++++++++++++++++ Game_4/code/player.gd | 38 +++++++++++++++++++++++++++++-- Game_4/code/server_browser.gd | 7 +++--- Game_4/code/username_text.gd | 15 ++++++++++++ Game_4/scenes/game.tscn | 11 +++++++++ Game_4/scenes/main_menu.tscn | 19 +++++++++++----- Game_4/scenes/server_browser.tscn | 9 ++++++++ Game_4/scenes/username_text.tscn | 21 +++++++++++++++++ 9 files changed, 144 insertions(+), 11 deletions(-) create mode 100644 Game_4/code/game.gd create mode 100644 Game_4/code/username_text.gd create mode 100644 Game_4/scenes/game.tscn create mode 100644 Game_4/scenes/username_text.tscn diff --git a/Game_4/code/game.gd b/Game_4/code/game.gd new file mode 100644 index 0000000..8264d8d --- /dev/null +++ b/Game_4/code/game.gd @@ -0,0 +1,10 @@ +extends Node2D + +func _ready() -> void: + get_tree().connect("network_peer_disconnected", self, "_player_disconnected") + + +func _player_disconnected(id) -> void: + if Players.has_node(str(id)): + Players.get_node(str(id)).username_text_instance.queue_free() + Players.get_node(str(id)).queue_free() diff --git a/Game_4/code/network_setup.gd b/Game_4/code/network_setup.gd index b962c0f..f5361ce 100644 --- a/Game_4/code/network_setup.gd +++ b/Game_4/code/network_setup.gd @@ -5,6 +5,7 @@ var player = load("res://scenes/player.tscn") onready var multiplayer_config_ui = $multiplayer_configure onready var username_text_edit = $multiplayer_configure/username_text_edit onready var device_ip_address = $CanvasLayer/device_ip_address +onready var start_game = $CanvasLayer/start_game func _ready(): @@ -13,6 +14,20 @@ func _ready(): get_tree().connect("connected_to_server", self, "_connected_to_server") device_ip_address.text = Network.ip_address + + if get_tree().network_peer != null: + pass + else: + start_game.hide() + + +func _process(delta: float) -> void: + if get_tree().network_peer != null: + if get_tree().get_network_connected_peers().size() >= 0 and get_tree().is_network_server(): + start_game.show() + else: + start_game.hide() + func _player_connected(id) -> void: print("Player " + str(id) + " has connected") @@ -22,6 +37,7 @@ func _player_connected(id) -> void: func _player_disconnected(id) -> void: print("Player " + str(id) + " has disconnected") if Players.has_node(str(id)): + Players.get_node(str(id)).username_text_instance.queue_free() Players.get_node(str(id)).queue_free() @@ -49,3 +65,12 @@ func instance_player(id) -> void: var player_instance = Global.instance_node_at_location(player, Players, Vector2(rand_range(0, 1920), rand_range(0, 1080))) player_instance.name = str(id) player_instance.set_network_master(id) + player_instance.username = username_text_edit.text + + +func _on_start_game_pressed(): + rpc("switch_to_game") + + +sync func switch_to_game() -> void: + get_tree().change_scene("res://scenes/game.tscn") diff --git a/Game_4/code/player.gd b/Game_4/code/player.gd index 6916eb8..99232db 100644 --- a/Game_4/code/player.gd +++ b/Game_4/code/player.gd @@ -9,11 +9,29 @@ var speed = 50 var velocity = Vector2() var fly = false +var username_text = load("res://scenes/username_text.tscn") +var username setget username_set +var username_text_instance = null + puppet var puppet_position = Vector2(0, 0) setget puppet_position_set puppet var puppet_velocity = Vector2() puppet var puppet_rotaion = 0 +puppet var puppet_username = "" setget puppet_username_set + onready var tween = $Tween + +func _ready(): + get_tree().connect("network_peer_connected", self, "_network_peer_connected") + username_text_instance = Global.instance_node_at_location(username_text, Players, global_position) + username_text_instance.player_following = self + + +func _process(delta: float) -> void: + if username_text_instance != null: + username_text_instance.name = "username" + name + + func _physics_process(delta): if is_network_master(): mode_switch(delta) @@ -50,7 +68,6 @@ func movement(delta): if Input.is_action_pressed("jump") and is_on_floor(): velocity.y -= JUMP_FORCE velocity = move_and_slide(velocity, Vector2.UP) - print(velocity) func flying(): @@ -65,7 +82,6 @@ func flying(): if Input.is_action_pressed("move_up"): velocity.y -= 1 velocity = velocity.normalized() * fly_speed - print(velocity) velocity = move_and_slide(velocity) @@ -76,12 +92,30 @@ func screen_wrap(): if position.x >= get_viewport_rect().size.x + 10: position.x = 0 + func puppet_position_set(new_value) -> void: puppet_position = new_value tween.interpolate_property(self, "global_position", global_position, puppet_position, 0.1) tween.start() +func username_set(new_value) -> void: + username = new_value + if is_network_master() and username_text_instance != null: + username_text_instance.text = username + rset("puppet_username", username) + + +func puppet_username_set(new_value) -> void: + puppet_username = new_value + if not is_network_master() and username_text_instance != null: + username_text_instance.text = puppet_username + + +func _network_peer_connected(id) -> void: + rset_id(id, "puppet_username", username) + + func _on_network_tick_rate_timeout(): if is_network_master(): rset_unreliable("puppet_position", global_position) diff --git a/Game_4/code/server_browser.gd b/Game_4/code/server_browser.gd index 47484a9..58fe7aa 100644 --- a/Game_4/code/server_browser.gd +++ b/Game_4/code/server_browser.gd @@ -25,9 +25,9 @@ func _on_server_listener_remove_server(serverIp): func _on_manual_setup_pressed(): - if manual_setup_button.text != "exit setup": + if manual_setup_button.text != "Exit setup": server_ip_text_edit.show() - manual_setup_button.text = "exit setup" + manual_setup_button.text = "Exit setup" server_container.hide() server_ip_text_edit.call_deferred("grab_focus") else: @@ -37,7 +37,8 @@ func _on_manual_setup_pressed(): func _on_join_server_pressed(): - Network.ip_address = server_ip_text_edit.text + if server_ip_text_edit.text != "": + Network.ip_address = server_ip_text_edit.text hide() Network.join_server() diff --git a/Game_4/code/username_text.gd b/Game_4/code/username_text.gd new file mode 100644 index 0000000..42618e2 --- /dev/null +++ b/Game_4/code/username_text.gd @@ -0,0 +1,15 @@ +extends Node2D + +var player_following = null +var text = "" setget text_set +onready var label = $Label + + +func _process(delta: float) -> void: + if player_following != null: + global_position = player_following.global_position + + +func text_set(new_text) -> void: + text = new_text + label.text = text diff --git a/Game_4/scenes/game.tscn b/Game_4/scenes/game.tscn new file mode 100644 index 0000000..efe7e23 --- /dev/null +++ b/Game_4/scenes/game.tscn @@ -0,0 +1,11 @@ +[gd_scene load_steps=3 format=2] + +[ext_resource path="res://scenes/floor.tscn" type="PackedScene" id=1] +[ext_resource path="res://code/game.gd" type="Script" id=2] + +[node name="game" type="Node2D"] +script = ExtResource( 2 ) + +[node name="floor" parent="." instance=ExtResource( 1 )] +position = Vector2( 960, 1056 ) +scale = Vector2( 2, 1 ) diff --git a/Game_4/scenes/main_menu.tscn b/Game_4/scenes/main_menu.tscn index 2fb5d09..7ee8d1e 100644 --- a/Game_4/scenes/main_menu.tscn +++ b/Game_4/scenes/main_menu.tscn @@ -1,8 +1,7 @@ -[gd_scene load_steps=4 format=2] +[gd_scene load_steps=3 format=2] [ext_resource path="res://font/roboto.tres" type="DynamicFont" id=1] [ext_resource path="res://code/network_setup.gd" type="Script" id=2] -[ext_resource path="res://scenes/floor.tscn" type="PackedScene" id=3] [node name="network_setup" type="Control"] anchor_right = 1.0 @@ -62,6 +61,17 @@ __meta__ = { [node name="CanvasLayer" type="CanvasLayer" parent="."] +[node name="start_game" type="Button" parent="CanvasLayer"] +margin_left = 27.0 +margin_top = 27.0 +margin_right = 391.0 +margin_bottom = 158.0 +custom_fonts/font = ExtResource( 1 ) +text = "Start game" +__meta__ = { +"_edit_use_anchors_": false +} + [node name="device_ip_address" type="Label" parent="CanvasLayer"] anchor_top = 1.0 anchor_right = 1.0 @@ -74,9 +84,6 @@ __meta__ = { "_edit_use_anchors_": false } -[node name="floor" parent="." instance=ExtResource( 3 )] -position = Vector2( 960, 1056 ) -scale = Vector2( 2, 1 ) - [connection signal="pressed" from="multiplayer_configure/create_server" to="." method="_on_create_server_pressed"] [connection signal="pressed" from="multiplayer_configure/join_server" to="." method="_on_join_server_pressed"] +[connection signal="pressed" from="CanvasLayer/start_game" to="." method="_on_start_game_pressed"] diff --git a/Game_4/scenes/server_browser.tscn b/Game_4/scenes/server_browser.tscn index ff1fc14..2054895 100644 --- a/Game_4/scenes/server_browser.tscn +++ b/Game_4/scenes/server_browser.tscn @@ -64,6 +64,9 @@ margin_right = 473.0 margin_bottom = -25.0 custom_fonts/font = ExtResource( 1 ) text = "Go back" +__meta__ = { +"_edit_use_anchors_": false +} [node name="server_ip_text_edit" type="LineEdit" parent="background_panel"] anchor_left = 0.5 @@ -107,6 +110,9 @@ margin_left = 70.0 margin_top = 40.0 margin_right = -70.0 margin_bottom = -175.0 +__meta__ = { +"_edit_use_anchors_": false +} [node name="searching_for_servers" type="Label" parent="background_panel/VBoxContainer"] margin_right = 1588.0 @@ -129,6 +135,9 @@ custom_fonts/font = ExtResource( 1 ) text = "Server Browser" align = 1 valign = 1 +__meta__ = { +"_edit_use_anchors_": false +} [node name="server_listener" parent="." instance=ExtResource( 2 )] diff --git a/Game_4/scenes/username_text.tscn b/Game_4/scenes/username_text.tscn new file mode 100644 index 0000000..2d9c247 --- /dev/null +++ b/Game_4/scenes/username_text.tscn @@ -0,0 +1,21 @@ +[gd_scene load_steps=3 format=2] + +[ext_resource path="res://font/roboto.tres" type="DynamicFont" id=1] +[ext_resource path="res://code/username_text.gd" type="Script" id=2] + +[node name="username_text" type="Node2D"] +z_index = 10 +script = ExtResource( 2 ) + +[node name="Label" type="Label" parent="."] +margin_left = -197.0 +margin_top = -125.0 +margin_right = 197.0 +margin_bottom = -49.0 +custom_fonts/font = ExtResource( 1 ) +text = "null" +align = 1 +valign = 1 +__meta__ = { +"_edit_use_anchors_": false +}