More work on multiplayer and first pass of the trap icons
This commit is contained in:
@@ -1,4 +1,14 @@
|
||||
extends Node
|
||||
|
||||
|
||||
const vs_man_level = preload("res://scenes/multiplayer_test.tscn")
|
||||
|
||||
var player : Player
|
||||
|
||||
|
||||
func start_vs_man() -> void:
|
||||
var setup = get_tree().get_first_node_in_group("scenes")
|
||||
setup.queue_free()
|
||||
var level = vs_man_level.instantiate()
|
||||
var spawner = get_tree().get_first_node_in_group("level_spawner") as MultiplayerSpawner
|
||||
spawner.add_child(level)
|
||||
|
||||
@@ -6,6 +6,7 @@ const SERVER_IP = "127.0.0.1"
|
||||
var handle : String
|
||||
var id : int
|
||||
var players : Dictionary = {}
|
||||
signal client_added(handle : String, id : int)
|
||||
|
||||
func become_host() -> void:
|
||||
print("Starting host!")
|
||||
@@ -14,37 +15,43 @@ func become_host() -> void:
|
||||
server_peer.create_server(SERVER_PORT)
|
||||
players[handle] = 1
|
||||
multiplayer.multiplayer_peer = server_peer
|
||||
id = multiplayer.get_unique_id()
|
||||
print("%s %d t" % [handle, multiplayer.get_unique_id()])
|
||||
multiplayer.peer_connected.connect(_add_player_to_game)
|
||||
multiplayer.peer_disconnected.connect(_remove_player_from_game)
|
||||
|
||||
|
||||
func join_game(handle : String) -> Error:
|
||||
func join_game(new_handle : String) -> Error:
|
||||
print("Player 2 joining.")
|
||||
|
||||
var client_peer = ENetMultiplayerPeer.new()
|
||||
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()
|
||||
handle = new_handle
|
||||
id = multiplayer.get_unique_id()
|
||||
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:
|
||||
print("Player %s joined the game!" % id)
|
||||
players[handle] = id
|
||||
await get_tree().create_timer(0.5).timeout
|
||||
get_handle_from_peer(id)
|
||||
|
||||
func _remove_player_from_game(id : int) -> void:
|
||||
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_id(peer_id, "report_handle_to_peer", id)
|
||||
|
||||
@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
|
||||
client_added.emit(peer_handle, peer_id)
|
||||
|
||||
@rpc("any_peer", "call_remote")
|
||||
func report_handle_to_peer(peer_id : int) -> void:
|
||||
rpc_id(peer_id, "receive_peer_handle", multiplayer.get_unique_id(), handle)
|
||||
|
||||
@@ -5,8 +5,12 @@ class_name MultiplayerPC extends Player
|
||||
player_id = id
|
||||
|
||||
func _enter_tree() -> void:
|
||||
Game.player = self
|
||||
#Game.player = self
|
||||
pass
|
||||
|
||||
func setup(id) -> void:
|
||||
player_id = id
|
||||
|
||||
func _physics_process(delta: float) -> void:
|
||||
var dir = Input.get_vector("west", "east", "north", "south")
|
||||
dir = Vector3(dir.x, 0, dir.y)
|
||||
|
||||
13
scripts/multiplayer_level.gd
Normal file
13
scripts/multiplayer_level.gd
Normal file
@@ -0,0 +1,13 @@
|
||||
extends Node3D
|
||||
|
||||
const multiplayer_pc_template = preload("res://templates/multiplayer_pc.tscn")
|
||||
const camera_template = preload("res://templates/camera.tscn")
|
||||
@onready var spawner = %Spawner
|
||||
func _ready() -> void:
|
||||
print("LEVEL LOADING, ID: " + str(Multiplayer.id))
|
||||
for key in Multiplayer.players.values():
|
||||
var pc = multiplayer_pc_template.instantiate()
|
||||
pc.setup(key)
|
||||
spawner.add_player(pc)
|
||||
var camera = camera_template.instantiate()
|
||||
add_child(camera)
|
||||
1
scripts/multiplayer_level.gd.uid
Normal file
1
scripts/multiplayer_level.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://ccj72thiebvx8
|
||||
@@ -1,7 +1,11 @@
|
||||
extends Control
|
||||
extends MultiplayerSpawner
|
||||
|
||||
var host : bool
|
||||
var handle : String
|
||||
|
||||
func _ready() -> void:
|
||||
Multiplayer.client_added.connect(_on_client_added)
|
||||
|
||||
func _on_host_game_button_pressed() -> void:
|
||||
%Menu.visible = false
|
||||
%Hosting.visible = true
|
||||
@@ -38,7 +42,7 @@ func _on_hosting_back_button_pressed() -> void:
|
||||
|
||||
|
||||
func _on_start_game_button_pressed() -> void:
|
||||
Game.start_vs_com()
|
||||
Game.start_vs_man()
|
||||
|
||||
|
||||
func _on_waiting_back_button_pressed() -> void:
|
||||
@@ -59,8 +63,12 @@ func _on_join_button_pressed() -> void:
|
||||
%Joining.visible = false
|
||||
if Multiplayer.join_game(handle):
|
||||
%"Host Waiting".visible = true
|
||||
|
||||
%StartButton.visible = false
|
||||
|
||||
func _on_joining_back_button_pressed() -> void:
|
||||
%Joining.visible = false
|
||||
%Menu.visible = true
|
||||
|
||||
func _on_client_added(peer_handle : String, peer_id : int) -> void:
|
||||
%ParticipantsText.text = "[color=FFFF00][b]*%s[/b][/color]\n[color=FFFFFF]*%s[/color]" % [handle, peer_handle]
|
||||
%StartButton.disabled = false
|
||||
|
||||
18
scripts/multiplayer_spawner.gd
Normal file
18
scripts/multiplayer_spawner.gd
Normal file
@@ -0,0 +1,18 @@
|
||||
extends MultiplayerSpawner
|
||||
|
||||
|
||||
var spawn_points : Array = []
|
||||
|
||||
func _enter_tree() -> void:
|
||||
spawn_points = $SpawnPoints.get_children()
|
||||
|
||||
func add_player(player : MultiplayerPC) -> void:
|
||||
add_child(player)
|
||||
if player.player_id == 1:
|
||||
player.global_position = spawn_points[0].global_position
|
||||
if Multiplayer.multiplayer.is_server():
|
||||
Game.player = player
|
||||
else:
|
||||
player.global_position = spawn_points[1].global_position
|
||||
if !Multiplayer.multiplayer.is_server():
|
||||
Game.player = player
|
||||
1
scripts/multiplayer_spawner.gd.uid
Normal file
1
scripts/multiplayer_spawner.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://nn76jlxer5qb
|
||||
Reference in New Issue
Block a user