Multiplayer connects but needs to load players and finish setup checks.

This commit is contained in:
2025-12-04 21:10:12 -05:00
parent 5d8452c70d
commit c6da8344a4
7 changed files with 82 additions and 42 deletions

View File

@@ -17,6 +17,7 @@ config/icon="res://visuals/images/icon.svg"
[autoload]
Game="*res://scripts/autos/game.gd"
Multiplayer="*res://scripts/autos/multiplayer.gd"
[display]

View File

@@ -12,7 +12,6 @@ grow_vertical = 2
script = ExtResource("1_lckj3")
[node name="Panel" type="PanelContainer" parent="."]
visible = false
custom_minimum_size = Vector2(400, 400)
layout_mode = 1
anchors_preset = 8
@@ -45,6 +44,7 @@ text = "Back"
[node name="Hosting" type="VBoxContainer" parent="Panel"]
unique_name_in_owner = true
visible = false
layout_mode = 2
alignment = 1
@@ -60,7 +60,7 @@ layout_mode = 2
layout_mode = 2
text = "Handle"
[node name="HandleEdit" type="TextEdit" parent="Panel/Hosting/HBoxContainer"]
[node name="HostHandle" type="TextEdit" parent="Panel/Hosting/HBoxContainer"]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
@@ -87,7 +87,8 @@ horizontal_alignment = 1
[node name="PanelContainer" type="PanelContainer" parent="Panel/Host Waiting"]
layout_mode = 2
[node name="TextEdit" type="RichTextLabel" parent="Panel/Host Waiting/PanelContainer"]
[node name="ParticipantsText" type="RichTextLabel" parent="Panel/Host Waiting/PanelContainer"]
unique_name_in_owner = true
custom_minimum_size = Vector2(0, 70)
layout_mode = 2
size_flags_horizontal = 3
@@ -121,7 +122,8 @@ layout_mode = 2
layout_mode = 2
text = "HANDLE"
[node name="TextEdit" type="TextEdit" parent="Panel/Joining/HBoxContainer"]
[node name="JoinHandle" type="TextEdit" parent="Panel/Joining/HBoxContainer"]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3

View File

@@ -1,30 +1,21 @@
[gd_scene load_steps=9 format=3 uid="uid://ti65jukt8gvs"]
[gd_scene load_steps=6 format=3 uid="uid://ti65jukt8gvs"]
[ext_resource type="PackedScene" uid="uid://bgocskbofewsr" path="res://templates/HUD.tscn" id="1_q2h5d"]
[ext_resource type="Texture2D" uid="uid://bj07x13pkoevk" path="res://visuals/textures/tile.png" id="2_02mmr"]
[ext_resource type="Script" uid="uid://cymi1n4gavixy" path="res://scripts/level_camera.gd" id="3_qfwdi"]
[ext_resource type="Script" uid="uid://wpjuowslx60b" path="res://scripts/multiplayer_controller.gd" id="4_q2h5d"]
[ext_resource type="PackedScene" uid="uid://cqe6hkn2oncpc" path="res://templates/multiplayer_pc.tscn" id="4_q2h5d"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_gbhdq"]
albedo_texture = ExtResource("2_02mmr")
uv1_scale = Vector3(100, 100, 100)
texture_filter = 0
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_y646j"]
albedo_color = Color(0.08468992, 0.08468992, 0.08468992, 1)
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_lnbra"]
albedo_color = Color(0, 1, 1, 1)
[sub_resource type="BoxShape3D" id="BoxShape3D_6emce"]
size = Vector3(0.75, 2, 0.75)
[node name="Node3D" type="Node3D"]
[node name="CanvasLayer" type="CanvasLayer" parent="."]
layer = 1000
[node name="Control" parent="CanvasLayer" instance=ExtResource("1_q2h5d")]
[node name="HUD" parent="CanvasLayer" instance=ExtResource("1_q2h5d")]
[node name="CSGBox3D" type="CSGBox3D" parent="."]
size = Vector3(100, 1, 100)
@@ -36,25 +27,8 @@ projection = 1
size = 5.0
script = ExtResource("3_qfwdi")
[node name="Node3D" type="CharacterBody3D" parent="."]
[node name="MultiplayerPC" parent="." instance=ExtResource("4_q2h5d")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
script = ExtResource("4_q2h5d")
speed = 5.0
[node name="Body" type="CSGBox3D" parent="Node3D"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
size = Vector3(0.75, 2, 0.75)
material = SubResource("StandardMaterial3D_y646j")
[node name="CSGCylinder3D" type="CSGCylinder3D" parent="Node3D/Body"]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, -1, 0, 1, -4.371139e-08, 0, 0.5, 0.556)
radius = 0.3
height = 0.1
material = SubResource("StandardMaterial3D_lnbra")
[node name="CollisionShape3D" type="CollisionShape3D" parent="Node3D"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
shape = SubResource("BoxShape3D_6emce")
[node name="OmniLight3D" type="OmniLight3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 18.508709, 0)

View File

@@ -3,28 +3,48 @@ extends Node
const SERVER_PORT = 8080
const SERVER_IP = "127.0.0.1"
var handle : String
var id : int
var players : Dictionary = {}
func become_host() -> void:
print("Starting host!")
var server_peer = ENetMultiplayerPeer.new()
server_peer.create_server(SERVER_PORT)
players[handle] = 1
multiplayer.multiplayer_peer = server_peer
print("%s %d t" % [handle, multiplayer.get_unique_id()])
multiplayer.peer_connected.connect(_add_player_to_game)
multiplayer.peer_disconnected.connect(_remove_player_from_game)
func join_game() -> void:
func join_game(handle : String) -> Error:
print("Player 2 joining.")
var client_peer = ENetMultiplayerPeer.new()
client_peer.create_client(SERVER_IP, SERVER_PORT)
var error = client_peer.create_client(SERVER_IP, SERVER_PORT)
multiplayer.multiplayer_peer = client_peer
var p = multiplayer.get_unique_id()
var is_host = multiplayer.is_server()
if !error:
print("%s %d" % [handle, multiplayer.get_unique_id()])
rpc_id(1, "receive_peer_handle",multiplayer.get_unique_id(), handle )
return !error
func _add_player_to_game(id : int) -> void:
print("Player %s joined the game!" % id)
players[handle] = id
func _remove_player_from_game(id : int) -> void:
print("Player %s left the game!" % id)
@rpc("any_peer")
func get_handle_from_peer(peer_id) -> void:
rpc_id(peer_id, "receive_peer_handle", id, handle)
@rpc("any_peer", "call_remote")
func receive_peer_handle(peer_id, peer_handle) -> void:
print("Player %s identified as %s!" % [peer_id, peer_handle])
players[peer_handle] = peer_id

View File

@@ -1,4 +1,4 @@
class_name MultiplayerPlayer extends Player
class_name MultiplayerPC extends Player
@export var player_id := 1 :
set(id):

View File

@@ -1,7 +1,7 @@
extends Control
var host : bool
var handle : String
func _on_host_game_button_pressed() -> void:
%Menu.visible = false
%Hosting.visible = true
@@ -19,10 +19,17 @@ func _on_menu_back_button_pressed() -> void:
func _on_start_hosting_button_pressed() -> void:
var host_name = %HostHandle.text
if len(host_name) < 3:
return
handle = host_name
Multiplayer.handle = handle
#Validate entries
%Hosting.visible = false
#Set fields
%ParticipantsText.text = "[color=FFFF00]*%s (HOST)[/color]\n" % handle
%"Host Waiting".visible = true
Multiplayer.become_host()
func _on_hosting_back_button_pressed() -> void:
@@ -43,10 +50,15 @@ func _on_waiting_back_button_pressed() -> void:
func _on_join_button_pressed() -> void:
var host_name = %JoinHandle.text
if len(host_name) < 3:
return
handle = host_name
#Check for valid game
#If found
%Joining.visible = false
%"Host Waiting".visible = true
if Multiplayer.join_game(handle):
%"Host Waiting".visible = true
func _on_joining_back_button_pressed() -> void:

View File

@@ -0,0 +1,31 @@
[gd_scene load_steps=5 format=3 uid="uid://cqe6hkn2oncpc"]
[ext_resource type="Script" uid="uid://wpjuowslx60b" path="res://scripts/multiplayer_controller.gd" id="1_avlqc"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_y646j"]
albedo_color = Color(0.08468992, 0.08468992, 0.08468992, 1)
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_lnbra"]
albedo_color = Color(0, 1, 1, 1)
[sub_resource type="BoxShape3D" id="BoxShape3D_6emce"]
size = Vector3(0.75, 2, 0.75)
[node name="MultiplayerPC" type="CharacterBody3D"]
script = ExtResource("1_avlqc")
speed = 5.0
[node name="Body" type="CSGBox3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
size = Vector3(0.75, 2, 0.75)
material = SubResource("StandardMaterial3D_y646j")
[node name="CSGCylinder3D" type="CSGCylinder3D" parent="Body"]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, -1, 0, 1, -4.371139e-08, 0, 0.5, 0.556)
radius = 0.3
height = 0.1
material = SubResource("StandardMaterial3D_lnbra")
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
shape = SubResource("BoxShape3D_6emce")