First lobby implementation
This commit is contained in:
parent
9adf07d745
commit
fe08da9d4c
@ -11,6 +11,14 @@ grow_horizontal = 2
|
|||||||
grow_vertical = 2
|
grow_vertical = 2
|
||||||
script = ExtResource("1_5mxqd")
|
script = ExtResource("1_5mxqd")
|
||||||
|
|
||||||
|
[node name="Start" type="Button" parent="."]
|
||||||
|
layout_mode = 0
|
||||||
|
offset_left = 230.0
|
||||||
|
offset_top = 296.0
|
||||||
|
offset_right = 339.0
|
||||||
|
offset_bottom = 368.0
|
||||||
|
text = "Start"
|
||||||
|
|
||||||
[node name="Host" type="Button" parent="."]
|
[node name="Host" type="Button" parent="."]
|
||||||
layout_mode = 0
|
layout_mode = 0
|
||||||
offset_left = 113.0
|
offset_left = 113.0
|
||||||
@ -27,5 +35,9 @@ offset_right = 224.0
|
|||||||
offset_bottom = 220.0
|
offset_bottom = 220.0
|
||||||
text = "Join"
|
text = "Join"
|
||||||
|
|
||||||
|
[connection signal="player_connected" from="." to="." method="_on_player_connected"]
|
||||||
|
[connection signal="player_disconnected" from="." to="." method="_on_player_disconnected"]
|
||||||
|
[connection signal="server_disconnected" from="." to="." method="_on_server_disconnected"]
|
||||||
|
[connection signal="pressed" from="Start" to="." method="_on_start_pressed"]
|
||||||
[connection signal="pressed" from="Host" to="." method="_on_host_pressed"]
|
[connection signal="pressed" from="Host" to="." method="_on_host_pressed"]
|
||||||
[connection signal="pressed" from="Join" to="." method="_on_join_pressed"]
|
[connection signal="pressed" from="Join" to="." method="_on_join_pressed"]
|
||||||
|
@ -11,9 +11,8 @@ height = 1.8
|
|||||||
|
|
||||||
[node name="Character" type="Node3D"]
|
[node name="Character" type="Node3D"]
|
||||||
|
|
||||||
[node name="CharacterBody3D" type="CharacterBody3D" parent="." node_paths=PackedStringArray("ANIMATION_PLAYER")]
|
[node name="CharacterBody3D" type="CharacterBody3D" parent="."]
|
||||||
script = ExtResource("1_sue4n")
|
script = ExtResource("1_sue4n")
|
||||||
ANIMATION_PLAYER = NodePath("")
|
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="CharacterBody3D"]
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="CharacterBody3D"]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1.42432, 0, 0, 0, 0.967678, 0, 1.27907, 0)
|
transform = Transform3D(1, 0, 0, 0, 1.42432, 0, 0, 0, 0.967678, 0, 1.27907, 0)
|
||||||
|
@ -3,6 +3,11 @@ extends Control
|
|||||||
|
|
||||||
# Called when the node enters the scene tree for the first time.
|
# Called when the node enters the scene tree for the first time.
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
|
multiplayer.peer_connected.connect(_on_player_connected)
|
||||||
|
multiplayer.peer_disconnected.connect(_on_player_disconnected)
|
||||||
|
multiplayer.connected_to_server.connect(_on_connected_ok)
|
||||||
|
multiplayer.connection_failed.connect(_on_connected_fail)
|
||||||
|
multiplayer.server_disconnected.connect(_on_server_disconnected)
|
||||||
pass # Replace with function body.
|
pass # Replace with function body.
|
||||||
|
|
||||||
|
|
||||||
@ -12,11 +17,93 @@ func _process(delta: float) -> void:
|
|||||||
|
|
||||||
var peer = ENetMultiplayerPeer.new()
|
var peer = ENetMultiplayerPeer.new()
|
||||||
|
|
||||||
|
signal player_connected(peer_id, player_info)
|
||||||
|
signal player_disconnected(peer_id)
|
||||||
|
signal server_disconnected
|
||||||
|
|
||||||
|
const PORT = 7000
|
||||||
|
const DEFAULT_SERVER_IP = "127.0.0.1" # IPv4 localhost
|
||||||
|
const MAX_CONNECTIONS = 20
|
||||||
|
|
||||||
|
var players_loaded = 0
|
||||||
|
|
||||||
|
var player_info = {"name": "Name"}
|
||||||
|
var players = {}
|
||||||
|
|
||||||
func _on_host_pressed() -> void:
|
func _on_host_pressed() -> void:
|
||||||
get_tree().change_scene_to_file("res://scenes/maps/el_test.tscn")
|
var peer = ENetMultiplayerPeer.new()
|
||||||
|
var error = peer.create_server(PORT, MAX_CONNECTIONS)
|
||||||
|
if error:
|
||||||
|
print(error)
|
||||||
|
multiplayer.multiplayer_peer = peer
|
||||||
|
|
||||||
|
players[1] = player_info
|
||||||
|
player_connected.emit(1, player_info)
|
||||||
|
|
||||||
|
|
||||||
|
func remove_multiplayer_peer():
|
||||||
|
multiplayer.multiplayer_peer = null
|
||||||
|
|
||||||
|
# When the server decides to start the game from a UI scene,
|
||||||
|
# do Lobby.load_game.rpc(filepath)
|
||||||
|
@rpc("call_local", "reliable")
|
||||||
|
func load_game(game_scene_path):
|
||||||
|
get_tree().change_scene_to_file("res://scenes/maps/el_test.tscn")
|
||||||
|
|
||||||
|
# Every peer will call this when they have loaded the game scene.
|
||||||
|
@rpc("any_peer", "call_local", "reliable")
|
||||||
|
func player_loaded():
|
||||||
|
if multiplayer.is_server():
|
||||||
|
players_loaded += 1
|
||||||
|
if players_loaded == players.size():
|
||||||
|
|
||||||
|
players_loaded = 0
|
||||||
|
|
||||||
func _on_join_pressed() -> void:
|
func _on_join_pressed() -> void:
|
||||||
print("join")
|
var address = '127.0.0.1'
|
||||||
|
var peer = ENetMultiplayerPeer.new()
|
||||||
|
var error = peer.create_client(address, PORT)
|
||||||
|
if error:
|
||||||
|
print(error)
|
||||||
|
multiplayer.multiplayer_peer = peer
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
func _on_player_connected(id: Variant, player_info: Variant) -> void:
|
||||||
|
print(player_info)
|
||||||
|
_register_player.rpc_id(id, player_info)
|
||||||
|
|
||||||
|
@rpc("any_peer", "reliable")
|
||||||
|
func _register_player(new_player_info):
|
||||||
|
var new_player_id = multiplayer.get_remote_sender_id()
|
||||||
|
players[new_player_id] = new_player_info
|
||||||
|
player_connected.emit(new_player_id, new_player_info)
|
||||||
|
|
||||||
|
|
||||||
|
func _on_player_disconnected(id: Variant) -> void:
|
||||||
|
pass
|
||||||
|
players.erase(id)
|
||||||
|
player_disconnected.emit(id)
|
||||||
|
|
||||||
|
func _on_connected_ok():
|
||||||
|
var peer_id = multiplayer.get_unique_id()
|
||||||
|
players[peer_id] = player_info
|
||||||
|
player_connected.emit(peer_id, player_info)
|
||||||
|
|
||||||
|
|
||||||
|
func _on_connected_fail():
|
||||||
|
multiplayer.multiplayer_peer = null
|
||||||
|
|
||||||
|
func _on_server_disconnected() -> void:
|
||||||
|
multiplayer.multiplayer_peer = null
|
||||||
|
players.clear()
|
||||||
|
server_disconnected.emit()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@rpc("call_local", "reliable", "any_peer")
|
||||||
|
func start_game():
|
||||||
|
get_tree().change_scene_to_file("res://scenes/maps/el_test.tscn")
|
||||||
|
|
||||||
|
func _on_start_pressed() -> void:
|
||||||
|
start_game.rpc()
|
||||||
|
Loading…
Reference in New Issue
Block a user