WIP multiplayer stuff
This commit is contained in:
parent
55133ec400
commit
811129ac02
11
GameManager.gd
Normal file
11
GameManager.gd
Normal 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
55
Multiplayer.tscn
Normal 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
82
MultiplayerController.gd
Normal 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
0
player.tscn
Executable file → Normal file
14
project.godot
Executable file → Normal file
14
project.godot
Executable file → Normal 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
|
||||
|
||||
[application]
|
||||
|
||||
config/name="game"
|
||||
run/main_scene="res://test_map.tscn"
|
||||
run/main_scene="res://Multiplayer.tscn"
|
||||
config/features=PackedStringArray("4.2", "Forward Plus")
|
||||
config/icon="res://icon.svg"
|
||||
|
||||
[autoload]
|
||||
|
||||
GameManager="*res://GameManager.gd"
|
||||
|
||||
[input]
|
||||
|
||||
move_forward={
|
||||
|
||||
0
test_map.tscn
Executable file → Normal file
0
test_map.tscn
Executable file → Normal file
Loading…
x
Reference in New Issue
Block a user