WIP: Both players are spawned, but controls do not work
This commit is contained in:
parent
c9625327df
commit
aadf8722a5
@ -11,18 +11,32 @@ var player_side: String
|
|||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
var char : Node3D = null
|
var char : Node3D = null
|
||||||
var red_spawn: Node3D = $Spawns/Blue/SpawnArea
|
var red_spawn: Node3D = $Spawns/Blue/SpawnArea
|
||||||
|
|
||||||
var position := red_spawn.global_position
|
var position := red_spawn.global_position
|
||||||
if multiplayer.is_server():
|
if multiplayer.is_server():
|
||||||
for i in GameServerManager.players:
|
for i in GameServerManager.players:
|
||||||
|
print(i)
|
||||||
char = ResourceLoader.load("res://scenes/utils/character.tscn").instantiate()
|
char = ResourceLoader.load("res://scenes/utils/character.tscn").instantiate()
|
||||||
char.name = str(GameServerManager.players[i].name)
|
char.name = str(GameServerManager.players[i].name)
|
||||||
char.global_position = position
|
char.global_position = position
|
||||||
var my_random_number = RandomNumberGenerator.new().randf_range(-2.0, 2.0)
|
var my_random_number = RandomNumberGenerator.new().randf_range(-2.0, 2.0)
|
||||||
char.global_position = position
|
char.global_position = position
|
||||||
char.global_position.x += my_random_number
|
char.global_position.x += my_random_number
|
||||||
|
$MultiplayerSpawner.spawn(char)
|
||||||
|
|
||||||
players.add_child(char)
|
players.add_child(char)
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
func spawn_player(id: int):
|
||||||
|
var red_spawn: Node3D = $Spawns/Blue/SpawnArea
|
||||||
|
var position := red_spawn.global_position
|
||||||
|
var char = ResourceLoader.load("res://scenes/utils/character.tscn").instantiate()
|
||||||
|
char.name = str(GameServerManager.players[id].name)
|
||||||
|
char.global_position = position
|
||||||
|
var my_random_number = RandomNumberGenerator.new().randf_range(-2.0, 2.0)
|
||||||
|
char.global_position = position
|
||||||
|
char.global_position.x += my_random_number
|
||||||
|
|
||||||
|
|
||||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||||
func _process(delta: float) -> void:
|
func _process(delta: float) -> void:
|
||||||
|
@ -1,22 +1,8 @@
|
|||||||
extends Control
|
extends Control
|
||||||
|
|
||||||
|
# Autoload named Lobby
|
||||||
|
|
||||||
# Called when the node enters the scene tree for the first time.
|
# These signals can be connected to by a UI lobby scene or the game scene.
|
||||||
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.
|
|
||||||
|
|
||||||
|
|
||||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
|
||||||
func _process(delta: float) -> void:
|
|
||||||
pass
|
|
||||||
|
|
||||||
var peer = ENetMultiplayerPeer.new()
|
|
||||||
|
|
||||||
signal player_connected(peer_id, player_info)
|
signal player_connected(peer_id, player_info)
|
||||||
signal player_disconnected(peer_id)
|
signal player_disconnected(peer_id)
|
||||||
signal server_disconnected
|
signal server_disconnected
|
||||||
@ -25,28 +11,46 @@ const PORT = 7000
|
|||||||
const DEFAULT_SERVER_IP = "127.0.0.1" # IPv4 localhost
|
const DEFAULT_SERVER_IP = "127.0.0.1" # IPv4 localhost
|
||||||
const MAX_CONNECTIONS = 20
|
const MAX_CONNECTIONS = 20
|
||||||
|
|
||||||
|
var players = {}
|
||||||
|
var my_random_number = RandomNumberGenerator.new().randf_range(-2.0, 2.0)
|
||||||
|
var player_info = {"name": str(my_random_number)}
|
||||||
var players_loaded = 0
|
var players_loaded = 0
|
||||||
|
|
||||||
var player_info = {"name": "Name"}
|
# Called when the node enters the scene tree for the first time.
|
||||||
var players = {}
|
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)
|
||||||
|
|
||||||
func _on_host_pressed() -> void:
|
func join_game(address = ""):
|
||||||
|
if address.is_empty():
|
||||||
|
address = DEFAULT_SERVER_IP
|
||||||
|
var peer = ENetMultiplayerPeer.new()
|
||||||
|
var error = peer.create_client(address, PORT)
|
||||||
|
if error:
|
||||||
|
return error
|
||||||
|
multiplayer.multiplayer_peer = peer
|
||||||
|
|
||||||
|
func create_game():
|
||||||
var peer = ENetMultiplayerPeer.new()
|
var peer = ENetMultiplayerPeer.new()
|
||||||
var error = peer.create_server(PORT, MAX_CONNECTIONS)
|
var error = peer.create_server(PORT, MAX_CONNECTIONS)
|
||||||
if error:
|
if error:
|
||||||
print(error)
|
return error
|
||||||
multiplayer.multiplayer_peer = peer
|
multiplayer.multiplayer_peer = peer
|
||||||
|
|
||||||
players[1] = player_info
|
players[1] = player_info
|
||||||
player_connected.emit(1, player_info)
|
player_connected.emit(peer.get_unique_id(), player_info)
|
||||||
GameServerManager.players[1] = {"id": "1", "name": "host"}
|
|
||||||
|
|
||||||
func remove_multiplayer_peer():
|
func remove_multiplayer_peer():
|
||||||
multiplayer.multiplayer_peer = null
|
multiplayer.multiplayer_peer = null
|
||||||
|
|
||||||
# When the server decides to start the game from a UI scene,
|
# When the server decides to start the game from a UI scene,
|
||||||
# do Lobby.load_game.rpc(filepath)
|
# do Lobby.load_game.rpc(filepath)
|
||||||
@rpc("call_local", "reliable")
|
@rpc("call_local", "reliable")
|
||||||
func load_game(game_scene_path):
|
func load_game():
|
||||||
|
print("loading")
|
||||||
get_tree().change_scene_to_file("res://scenes/maps/el_test.tscn")
|
get_tree().change_scene_to_file("res://scenes/maps/el_test.tscn")
|
||||||
|
|
||||||
# Every peer will call this when they have loaded the game scene.
|
# Every peer will call this when they have loaded the game scene.
|
||||||
@ -54,40 +58,34 @@ func load_game(game_scene_path):
|
|||||||
func player_loaded():
|
func player_loaded():
|
||||||
if multiplayer.is_server():
|
if multiplayer.is_server():
|
||||||
players_loaded += 1
|
players_loaded += 1
|
||||||
|
players_loaded = players.size()
|
||||||
if players_loaded == players.size():
|
if players_loaded == players.size():
|
||||||
|
#$/root/Game.start_game()
|
||||||
players_loaded = 0
|
players_loaded = 0
|
||||||
|
|
||||||
func _on_join_pressed() -> void:
|
# When a peer connects, send them my player info.
|
||||||
var address = '127.0.0.1'
|
# This allows transfer of all desired data for each player, not only the unique ID.
|
||||||
var peer = ENetMultiplayerPeer.new()
|
func _on_player_connected(id):
|
||||||
var error = peer.create_client(address, PORT)
|
_register_player.rpc_id(1, player_info)
|
||||||
if error:
|
|
||||||
print(error)
|
|
||||||
multiplayer.multiplayer_peer = peer
|
|
||||||
add_player.rpc_id(1, multiplayer.get_unique_id(), "guest")
|
|
||||||
|
|
||||||
@rpc("call_remote")
|
|
||||||
func add_player(id: int, name: String):
|
|
||||||
if not GameServerManager.players.has(id):
|
|
||||||
GameServerManager.players[1] = {"id": str(id), "name": name}
|
|
||||||
|
|
||||||
func _on_player_connected(id: Variant, player_info: Variant) -> void:
|
|
||||||
print(player_info)
|
|
||||||
_register_player.rpc_id(id, player_info)
|
|
||||||
|
|
||||||
@rpc("any_peer", "reliable")
|
@rpc("any_peer", "reliable")
|
||||||
func _register_player(new_player_info):
|
func _register_player(new_player_info):
|
||||||
var new_player_id = multiplayer.get_remote_sender_id()
|
var new_player_id = multiplayer.get_remote_sender_id()
|
||||||
players[new_player_id] = new_player_info
|
players[new_player_id] = new_player_info
|
||||||
|
if multiplayer.is_server():
|
||||||
|
print("registering a player")
|
||||||
|
print(player_info)
|
||||||
|
print(new_player_id)
|
||||||
|
GameServerManager.players[new_player_id] = new_player_info
|
||||||
|
|
||||||
player_connected.emit(new_player_id, new_player_info)
|
player_connected.emit(new_player_id, new_player_info)
|
||||||
|
|
||||||
|
|
||||||
func _on_player_disconnected(id: Variant) -> void:
|
func _on_player_disconnected(id):
|
||||||
pass
|
|
||||||
players.erase(id)
|
players.erase(id)
|
||||||
player_disconnected.emit(id)
|
player_disconnected.emit(id)
|
||||||
|
|
||||||
|
|
||||||
func _on_connected_ok():
|
func _on_connected_ok():
|
||||||
var peer_id = multiplayer.get_unique_id()
|
var peer_id = multiplayer.get_unique_id()
|
||||||
players[peer_id] = player_info
|
players[peer_id] = player_info
|
||||||
@ -96,17 +94,26 @@ func _on_connected_ok():
|
|||||||
|
|
||||||
func _on_connected_fail():
|
func _on_connected_fail():
|
||||||
multiplayer.multiplayer_peer = null
|
multiplayer.multiplayer_peer = null
|
||||||
|
|
||||||
func _on_server_disconnected() -> void:
|
|
||||||
|
func _on_server_disconnected():
|
||||||
multiplayer.multiplayer_peer = null
|
multiplayer.multiplayer_peer = null
|
||||||
players.clear()
|
players.clear()
|
||||||
server_disconnected.emit()
|
server_disconnected.emit()
|
||||||
|
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||||
|
|
||||||
|
func _on_host_pressed() -> void:
|
||||||
|
player_info = {"name": "host"}
|
||||||
|
_register_player(player_info)
|
||||||
|
create_game()
|
||||||
|
|
||||||
|
func _on_join_pressed() -> void:
|
||||||
@rpc("call_local", "reliable", "any_peer")
|
player_info = {"name": "guest"}
|
||||||
func start_game():
|
join_game()
|
||||||
get_tree().change_scene_to_file("res://scenes/maps/el_test.tscn")
|
|
||||||
|
|
||||||
func _on_start_pressed() -> void:
|
func _on_start_pressed() -> void:
|
||||||
start_game.rpc()
|
print("starting")
|
||||||
|
load_game.rpc()
|
||||||
|
func _process(delta: float) -> void:
|
||||||
|
if multiplayer.is_server():
|
||||||
|
print(GameServerManager.players)
|
||||||
|
@ -32,6 +32,7 @@ var is_crouch: bool = false
|
|||||||
@onready var character: Node3D = $"."
|
@onready var character: Node3D = $"."
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
|
set_process(get_multiplayer_authority() == multiplayer.get_unique_id())
|
||||||
capture_mouse()
|
capture_mouse()
|
||||||
func _unhandled_input(event: InputEvent) -> void:
|
func _unhandled_input(event: InputEvent) -> void:
|
||||||
if event is InputEventMouseMotion:
|
if event is InputEventMouseMotion:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user