Multiplayer connects but needs to load players and finish setup checks.
This commit is contained in:
@@ -17,6 +17,7 @@ config/icon="res://visuals/images/icon.svg"
|
|||||||
[autoload]
|
[autoload]
|
||||||
|
|
||||||
Game="*res://scripts/autos/game.gd"
|
Game="*res://scripts/autos/game.gd"
|
||||||
|
Multiplayer="*res://scripts/autos/multiplayer.gd"
|
||||||
|
|
||||||
[display]
|
[display]
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,6 @@ grow_vertical = 2
|
|||||||
script = ExtResource("1_lckj3")
|
script = ExtResource("1_lckj3")
|
||||||
|
|
||||||
[node name="Panel" type="PanelContainer" parent="."]
|
[node name="Panel" type="PanelContainer" parent="."]
|
||||||
visible = false
|
|
||||||
custom_minimum_size = Vector2(400, 400)
|
custom_minimum_size = Vector2(400, 400)
|
||||||
layout_mode = 1
|
layout_mode = 1
|
||||||
anchors_preset = 8
|
anchors_preset = 8
|
||||||
@@ -45,6 +44,7 @@ text = "Back"
|
|||||||
|
|
||||||
[node name="Hosting" type="VBoxContainer" parent="Panel"]
|
[node name="Hosting" type="VBoxContainer" parent="Panel"]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
|
visible = false
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
alignment = 1
|
alignment = 1
|
||||||
|
|
||||||
@@ -60,7 +60,7 @@ layout_mode = 2
|
|||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
text = "Handle"
|
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
|
unique_name_in_owner = true
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
size_flags_horizontal = 3
|
size_flags_horizontal = 3
|
||||||
@@ -87,7 +87,8 @@ horizontal_alignment = 1
|
|||||||
[node name="PanelContainer" type="PanelContainer" parent="Panel/Host Waiting"]
|
[node name="PanelContainer" type="PanelContainer" parent="Panel/Host Waiting"]
|
||||||
layout_mode = 2
|
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)
|
custom_minimum_size = Vector2(0, 70)
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
size_flags_horizontal = 3
|
size_flags_horizontal = 3
|
||||||
@@ -121,7 +122,8 @@ layout_mode = 2
|
|||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
text = "HANDLE"
|
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
|
layout_mode = 2
|
||||||
size_flags_horizontal = 3
|
size_flags_horizontal = 3
|
||||||
|
|
||||||
|
|||||||
@@ -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="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="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://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"]
|
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_gbhdq"]
|
||||||
albedo_texture = ExtResource("2_02mmr")
|
albedo_texture = ExtResource("2_02mmr")
|
||||||
uv1_scale = Vector3(100, 100, 100)
|
uv1_scale = Vector3(100, 100, 100)
|
||||||
texture_filter = 0
|
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="Node3D" type="Node3D"]
|
||||||
|
|
||||||
[node name="CanvasLayer" type="CanvasLayer" parent="."]
|
[node name="CanvasLayer" type="CanvasLayer" parent="."]
|
||||||
layer = 1000
|
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="."]
|
[node name="CSGBox3D" type="CSGBox3D" parent="."]
|
||||||
size = Vector3(100, 1, 100)
|
size = Vector3(100, 1, 100)
|
||||||
@@ -36,25 +27,8 @@ projection = 1
|
|||||||
size = 5.0
|
size = 5.0
|
||||||
script = ExtResource("3_qfwdi")
|
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)
|
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="."]
|
[node name="OmniLight3D" type="OmniLight3D" parent="."]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 18.508709, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 18.508709, 0)
|
||||||
|
|||||||
@@ -3,28 +3,48 @@ extends Node
|
|||||||
|
|
||||||
const SERVER_PORT = 8080
|
const SERVER_PORT = 8080
|
||||||
const SERVER_IP = "127.0.0.1"
|
const SERVER_IP = "127.0.0.1"
|
||||||
|
var handle : String
|
||||||
|
var id : int
|
||||||
|
var players : Dictionary = {}
|
||||||
|
|
||||||
func become_host() -> void:
|
func become_host() -> void:
|
||||||
print("Starting host!")
|
print("Starting host!")
|
||||||
|
|
||||||
var server_peer = ENetMultiplayerPeer.new()
|
var server_peer = ENetMultiplayerPeer.new()
|
||||||
server_peer.create_server(SERVER_PORT)
|
server_peer.create_server(SERVER_PORT)
|
||||||
|
players[handle] = 1
|
||||||
multiplayer.multiplayer_peer = server_peer
|
multiplayer.multiplayer_peer = server_peer
|
||||||
|
print("%s %d t" % [handle, multiplayer.get_unique_id()])
|
||||||
multiplayer.peer_connected.connect(_add_player_to_game)
|
multiplayer.peer_connected.connect(_add_player_to_game)
|
||||||
multiplayer.peer_disconnected.connect(_remove_player_from_game)
|
multiplayer.peer_disconnected.connect(_remove_player_from_game)
|
||||||
|
|
||||||
|
|
||||||
func join_game() -> void:
|
func join_game(handle : String) -> Error:
|
||||||
print("Player 2 joining.")
|
print("Player 2 joining.")
|
||||||
|
|
||||||
var client_peer = ENetMultiplayerPeer.new()
|
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:
|
func _add_player_to_game(id : int) -> void:
|
||||||
print("Player %s joined the game!" % id)
|
print("Player %s joined the game!" % id)
|
||||||
|
players[handle] = id
|
||||||
|
|
||||||
func _remove_player_from_game(id : int) -> void:
|
func _remove_player_from_game(id : int) -> void:
|
||||||
print("Player %s left the game!" % id)
|
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
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
class_name MultiplayerPlayer extends Player
|
class_name MultiplayerPC extends Player
|
||||||
|
|
||||||
@export var player_id := 1 :
|
@export var player_id := 1 :
|
||||||
set(id):
|
set(id):
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
extends Control
|
extends Control
|
||||||
|
|
||||||
var host : bool
|
var host : bool
|
||||||
|
var handle : String
|
||||||
func _on_host_game_button_pressed() -> void:
|
func _on_host_game_button_pressed() -> void:
|
||||||
%Menu.visible = false
|
%Menu.visible = false
|
||||||
%Hosting.visible = true
|
%Hosting.visible = true
|
||||||
@@ -19,10 +19,17 @@ func _on_menu_back_button_pressed() -> void:
|
|||||||
|
|
||||||
|
|
||||||
func _on_start_hosting_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
|
#Validate entries
|
||||||
%Hosting.visible = false
|
%Hosting.visible = false
|
||||||
#Set fields
|
#Set fields
|
||||||
|
%ParticipantsText.text = "[color=FFFF00]*%s (HOST)[/color]\n" % handle
|
||||||
%"Host Waiting".visible = true
|
%"Host Waiting".visible = true
|
||||||
|
Multiplayer.become_host()
|
||||||
|
|
||||||
|
|
||||||
func _on_hosting_back_button_pressed() -> void:
|
func _on_hosting_back_button_pressed() -> void:
|
||||||
@@ -43,10 +50,15 @@ func _on_waiting_back_button_pressed() -> void:
|
|||||||
|
|
||||||
|
|
||||||
func _on_join_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
|
#Check for valid game
|
||||||
#If found
|
#If found
|
||||||
%Joining.visible = false
|
%Joining.visible = false
|
||||||
%"Host Waiting".visible = true
|
if Multiplayer.join_game(handle):
|
||||||
|
%"Host Waiting".visible = true
|
||||||
|
|
||||||
|
|
||||||
func _on_joining_back_button_pressed() -> void:
|
func _on_joining_back_button_pressed() -> void:
|
||||||
|
|||||||
31
templates/multiplayer_pc.tscn
Normal file
31
templates/multiplayer_pc.tscn
Normal 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")
|
||||||
Reference in New Issue
Block a user