WIP multiplayer stuff

This commit is contained in:
Lucas Schumacher 2024-03-06 21:09:28 -05:00
parent 55133ec400
commit 811129ac02
6 changed files with 161 additions and 1 deletions

11
GameManager.gd Normal file
View File

@ -0,0 +1,11 @@
extends Node
var players = {}
# Called when the node enters the scene tree for the first time.
func _ready():
pass # Replace with function body.
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta):
pass

55
Multiplayer.tscn Normal file
View File

@ -0,0 +1,55 @@
[gd_scene load_steps=2 format=3 uid="uid://c0tixmwdmp28k"]
[ext_resource type="Script" path="res://MultiplayerController.gd" id="1_i2fn6"]
[node name="Control" type="Control"]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1_i2fn6")
[node name="Host" type="Button" parent="."]
layout_mode = 0
offset_right = 8.0
offset_bottom = 8.0
text = "Host
"
[node name="Join" type="Button" parent="."]
offset_left = 5.0
offset_top = 33.0
offset_right = 43.0
offset_bottom = 64.0
text = "Join"
[node name="Start" type="Button" parent="."]
offset_left = 5.0
offset_top = 95.0
offset_right = 51.0
offset_bottom = 126.0
text = "Start"
[node name="Nickname" type="TextEdit" parent="."]
layout_mode = 0
offset_left = 26.0
offset_top = 138.0
offset_right = 378.0
offset_bottom = 170.0
placeholder_text = "nickname"
[node name="Apply" type="Button" parent="."]
layout_mode = 0
offset_left = 390.0
offset_top = 139.0
offset_right = 456.0
offset_bottom = 170.0
text = "Apply"
[connection signal="button_down" from="Host" to="." method="_on_host_button_down"]
[connection signal="button_down" from="Join" to="." method="_on_join_button_down"]
[connection signal="button_down" from="Start" to="." method="_on_start_button_down"]
[connection signal="text_changed" from="Nickname" to="." method="_on_nickname_text_changed"]
[connection signal="button_down" from="Apply" to="." method="_on_apply_button_down"]

82
MultiplayerController.gd Normal file
View File

@ -0,0 +1,82 @@
extends Control
@export var address = "127.0.0.1"
@export var port = 8910
var peer
var nick = "NO_NICKNAME"
# Called when the node enters the scene tree for the first time.
func _ready():
multiplayer.peer_connected.connect(peer_connected)
multiplayer.peer_disconnected.connect(peer_disconnected)
multiplayer.connected_to_server.connect(connected_to_server)
multiplayer.connection_failed.connect(connection_failed)
pass # Replace with function body.
func peer_connected(id):
print("Peer connected: " + str(id))
if multiplayer.is_server():
for p in GameManager.players:
SendPlayerInformation(p["name"], p["id"]).rpc_id(id)
func peer_disconnected(id):
print("Peer disconnected: " + str(id))
func connected_to_server():
print("Connected to server :)")
SendPlayerInformation(nick, multiplayer.get_unique_id())
func connection_failed():
print("Disconnected from server :(")
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta):
pass
@rpc("any_peer")
func SendPlayerInformation(name, id):
print("got info on " + str(id))
var sender_id = multiplayer.get_remote_sender_id()
#TODO: clients to only accept data from server
print(" from " + str(sender_id))
if !GameManager.players.has(id):
GameManager.players[id] ={
"name" : name,
"id" : id,
"score": 0
}
if multiplayer.is_server():
for i in GameManager.Players:
SendPlayerInformation.rpc(GameManager.Players[i].name, i)
@rpc("any_peer","call_local")
func StartGame():
var scene = load("res://test_map.tscn").instantiate()
get_tree().root.add_child(scene)
self.hide()
func _on_host_button_down():
peer = ENetMultiplayerPeer.new()
var err = peer.create_server(port, 32)
if err != OK:
print("Error Starting Server :(")
return
multiplayer.set_multiplayer_peer(peer)
print("Waiting for players...")
func _on_join_button_down():
peer = ENetMultiplayerPeer.new()
peer.create_client(address, port)
multiplayer.set_multiplayer_peer(peer)
func _on_start_button_down():
StartGame.rpc()
func _on_apply_button_down():
get_node("Apply").disabled = true
nick = $Nickname.text
if peer.is_connected():
SendPlayerInformation(nick, multiplayer.get_unique_id())
pass # Replace with function body.
func _on_nickname_text_changed():
if $Apply.disabled && $Nickname.text != nick:
$Apply.disabled = false

0
player.tscn Executable file → Normal file
View File

14
project.godot Executable file → Normal file
View File

@ -1,12 +1,24 @@
; Engine configuration file.
; It's best edited using the editor UI and not directly,
; since the parameters that go here are not all obvious.
;
; Format:
; [section] ; section goes between []
; param=value ; assign values to parameters
config_version=5 config_version=5
[application] [application]
config/name="game" config/name="game"
run/main_scene="res://test_map.tscn" run/main_scene="res://Multiplayer.tscn"
config/features=PackedStringArray("4.2", "Forward Plus") config/features=PackedStringArray("4.2", "Forward Plus")
config/icon="res://icon.svg" config/icon="res://icon.svg"
[autoload]
GameManager="*res://GameManager.gd"
[input] [input]
move_forward={ move_forward={

0
test_map.tscn Executable file → Normal file
View File