added player connection

This commit is contained in:
2024-04-18 00:13:23 +02:00
parent 245abc25a7
commit d63bb5a3b8
7 changed files with 170 additions and 45 deletions

7
project/scenes/player.gd Normal file
View File

@@ -0,0 +1,7 @@
extends CharacterBody2D
class_name Player
var session_id: String
func _enter_tree() -> void:
$NameTag.text = session_id

View File

@@ -0,0 +1,29 @@
[gd_scene load_steps=4 format=3 uid="uid://co4dwle8qgvn4"]
[ext_resource type="Script" path="res://scenes/player.gd" id="1_0ulg3"]
[ext_resource type="Texture2D" uid="uid://brayuh2pw38ix" path="res://icon.svg" id="1_5um25"]
[sub_resource type="RectangleShape2D" id="RectangleShape2D_gcdh3"]
size = Vector2(128, 128)
[node name="Player" type="CharacterBody2D"]
script = ExtResource("1_0ulg3")
[node name="Sprite2D" type="Sprite2D" parent="."]
texture = ExtResource("1_5um25")
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
shape = SubResource("RectangleShape2D_gcdh3")
[node name="NameTag" type="Label" parent="."]
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -20.0
offset_top = -11.5
offset_right = 20.0
offset_bottom = 11.5
grow_horizontal = 2
grow_vertical = 2

View File

@@ -0,0 +1,12 @@
[gd_scene load_steps=2 format=3 uid="uid://br61u82ldlrxe"]
[ext_resource type="Script" path="res://scenes/world.gd" id="1_r7dh1"]
[node name="World" type="Node2D"]
script = ExtResource("1_r7dh1")
[node name="Button" type="Button" parent="."]
offset_right = 8.0
offset_bottom = 8.0
[connection signal="pressed" from="Button" to="." method="_on_button_pressed"]

29
project/scenes/world.gd Normal file
View File

@@ -0,0 +1,29 @@
extends Node2D
func _ready():
UdpClient.player_join.connect(_on_player_join)
UdpClient.player_disconnect.connect(_on_player_disconnect)
func _on_player_join(player_client: Dictionary, clients: Array) -> void:
add_player(player_client)
for client in clients:
add_player(client)
func add_player(client: Dictionary):
var player: Player = preload("res://scenes/player.tscn").instantiate()
player.session_id = client.session_id
player.position = Vector2(client.position.x, client.position.y)
add_child(player)
func _on_button_pressed():
var payload: Dictionary = {
"type": "init",
}
UdpClient.send_message("test")
func _on_player_disconnect(session_id: String):
for child: Node in get_children():
if child is Player && child.session_id == session_id:
child.queue_free()

12
project/scenes/world.tscn Normal file
View File

@@ -0,0 +1,12 @@
[gd_scene load_steps=2 format=3 uid="uid://br61u82ldlrxe"]
[ext_resource type="Script" path="res://scenes/world.gd" id="1_r7dh1"]
[node name="World" type="Node2D"]
script = ExtResource("1_r7dh1")
[node name="Button" type="Button" parent="."]
offset_right = 8.0
offset_bottom = 8.0
[connection signal="pressed" from="Button" to="." method="_on_button_pressed"]

View File

@@ -1,14 +1,15 @@
extends Node
signal player_move(session_id: String, position_mod: Vector2)
signal player_join(player_client: Dictionary, clients: Array)
signal player_disconnect(session_id: String)
var udp_peer: PacketPeerUDP = PacketPeerUDP.new()
var server_ip: String = "45.93.249.177" # Replace with your server's IP
var server_ip: String = "127.0.0.1" # Replace with your server's IP
var server_port: int = 4477 # Replace with your server's port
func _ready():
var err = udp_peer.bind(server_port, "*")
if err != OK:
print("Failed to bind to port: ", server_port)
return
udp_peer.bind(server_port, "*")
print("Listening on port: ", server_port)
# Send a message to the server to initiate session ID assignment
var payload: Dictionary = {
@@ -19,8 +20,16 @@ func _ready():
func _process(_delta):
if udp_peer.get_available_packet_count() > 0:
var packet = udp_peer.get_packet()
var message: String = packet.get_string_from_utf8()
print("Received: ", message)
var packet_json: Dictionary = JSON.parse_string(packet.get_string_from_utf8())
match packet_json.type:
"init_success":
player_join.emit(packet_json.player_client, Array(packet_json.clients))
"message":
print(packet_json.msg)
"move":
player_move.emit(packet_json.session_id, Vector2(packet_json.direction.x,packet_json.direction.y))
"disconnect":
player_disconnect.emit(packet_json.session_id)
func send_message(message: String) -> void:
var payload: Dictionary = {
@@ -34,12 +43,18 @@ func send_payload(payload: Dictionary):
udp_peer.set_dest_address(server_ip, server_port)
udp_peer.put_packet(packet)
func move(vec: Vector2i):
func move(position_mod: Vector2):
var payload: Dictionary = {
"type": "move",
"direction": {
"x": vec.x,
"y": vec.y
"x": position_mod.x,
"y": position_mod.y
}
}
send_payload(payload)
func _exit_tree():
var payload: Dictionary = {
"type": "disconnect"
}
send_payload(payload)