add player formatting and checking for active multiplayer instance
This commit is contained in:
parent
fff9a3eb11
commit
07cfb07cc6
@ -40,7 +40,6 @@ gdscript/warnings/integer_division=0
|
|||||||
|
|
||||||
window/size/viewport_width=1920
|
window/size/viewport_width=1920
|
||||||
window/size/viewport_height=1080
|
window/size/viewport_height=1080
|
||||||
window/size/always_on_top=true
|
|
||||||
window/size/window_width_override=1280
|
window/size/window_width_override=1280
|
||||||
window/size/window_height_override=720
|
window/size/window_height_override=720
|
||||||
window/stretch/mode="canvas_items"
|
window/stretch/mode="canvas_items"
|
||||||
|
|||||||
@ -23,6 +23,7 @@ properties/2/replication_mode = 1
|
|||||||
[node name="Player" type="CharacterBody3D"]
|
[node name="Player" type="CharacterBody3D"]
|
||||||
collision_layer = 2
|
collision_layer = 2
|
||||||
script = ExtResource("1_82m0t")
|
script = ExtResource("1_82m0t")
|
||||||
|
_respawn_height = null
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
|
||||||
|
|||||||
@ -112,7 +112,7 @@ func _update_visibility() -> void:
|
|||||||
|
|
||||||
|
|
||||||
func _unproject(pos: Vector3) -> Vector2:
|
func _unproject(pos: Vector3) -> Vector2:
|
||||||
return Referencer.main_camera.unproject_position(pos)
|
return Referencer.camera.unproject_position(pos)
|
||||||
|
|
||||||
|
|
||||||
func _update_controls_label() -> void:
|
func _update_controls_label() -> void:
|
||||||
@ -196,8 +196,8 @@ func _append_event(key: String, frame: int, args: Array[Variant]) -> void:
|
|||||||
|
|
||||||
func _draw_vector(from: Vector3, to: Vector3, color: Color) -> void:
|
func _draw_vector(from: Vector3, to: Vector3, color: Color) -> void:
|
||||||
if (
|
if (
|
||||||
not Referencer.main_camera.is_position_in_frustum(from)
|
not Referencer.camera.is_position_in_frustum(from)
|
||||||
and not Referencer.main_camera.is_position_in_frustum(to)
|
and not Referencer.camera.is_position_in_frustum(to)
|
||||||
):
|
):
|
||||||
return
|
return
|
||||||
|
|
||||||
@ -223,7 +223,7 @@ func _draw_triangle(
|
|||||||
|
|
||||||
|
|
||||||
func _draw_marker(pos: Vector3, radius: float, color: Color) -> void:
|
func _draw_marker(pos: Vector3, radius: float, color: Color) -> void:
|
||||||
if not Referencer.main_camera.is_position_in_frustum(pos):
|
if not Referencer.camera.is_position_in_frustum(pos):
|
||||||
return
|
return
|
||||||
|
|
||||||
var x_start := _unproject(pos + (Vector3.LEFT * radius))
|
var x_start := _unproject(pos + (Vector3.LEFT * radius))
|
||||||
@ -240,7 +240,7 @@ func _draw_marker(pos: Vector3, radius: float, color: Color) -> void:
|
|||||||
|
|
||||||
|
|
||||||
func _draw_circle(pos: Vector3, color: Color) -> void:
|
func _draw_circle(pos: Vector3, color: Color) -> void:
|
||||||
if not Referencer.main_camera.is_position_in_frustum(pos):
|
if not Referencer.camera.is_position_in_frustum(pos):
|
||||||
return
|
return
|
||||||
|
|
||||||
var point := _unproject(pos)
|
var point := _unproject(pos)
|
||||||
@ -284,7 +284,7 @@ func _on_control_draw() -> void:
|
|||||||
|
|
||||||
_set_label_texts()
|
_set_label_texts()
|
||||||
|
|
||||||
if !Referencer.main_camera:
|
if !Referencer.camera:
|
||||||
return
|
return
|
||||||
|
|
||||||
for v: Dictionary in _vectors_to_draw.values():
|
for v: Dictionary in _vectors_to_draw.values():
|
||||||
|
|||||||
@ -7,10 +7,10 @@ signal network_error(message: String)
|
|||||||
const DEFAULT_PORT: int = 10567
|
const DEFAULT_PORT: int = 10567
|
||||||
const MAX_PEERS: int = 20
|
const MAX_PEERS: int = 20
|
||||||
|
|
||||||
var _peer: ENetMultiplayerPeer
|
var players := {}
|
||||||
|
|
||||||
|
var _peer: ENetMultiplayerPeer
|
||||||
var _local_player_info := {"name": ""}
|
var _local_player_info := {"name": ""}
|
||||||
var _players := {}
|
|
||||||
|
|
||||||
var _title_scene := preload("res://scenes/title.tscn")
|
var _title_scene := preload("res://scenes/title.tscn")
|
||||||
var _main_scene := preload("res://scenes/main.tscn")
|
var _main_scene := preload("res://scenes/main.tscn")
|
||||||
@ -27,7 +27,7 @@ func _ready() -> void:
|
|||||||
|
|
||||||
func _process(_delta: float) -> void:
|
func _process(_delta: float) -> void:
|
||||||
Debugger.text("_local_player_info", _local_player_info)
|
Debugger.text("_local_player_info", _local_player_info)
|
||||||
Debugger.text("_players", _players)
|
Debugger.text("players", players)
|
||||||
|
|
||||||
|
|
||||||
func set_local_player_info(username: String) -> void:
|
func set_local_player_info(username: String) -> void:
|
||||||
@ -52,7 +52,7 @@ func host_game(dedicated: bool = false) -> void:
|
|||||||
_load_main()
|
_load_main()
|
||||||
|
|
||||||
if not dedicated:
|
if not dedicated:
|
||||||
_players[1] = _local_player_info
|
players[1] = _local_player_info
|
||||||
player_connected.emit(1, _local_player_info)
|
player_connected.emit(1, _local_player_info)
|
||||||
_add_player(multiplayer.get_unique_id())
|
_add_player(multiplayer.get_unique_id())
|
||||||
|
|
||||||
@ -75,6 +75,17 @@ func join_game(address: String) -> void:
|
|||||||
_load_main()
|
_load_main()
|
||||||
|
|
||||||
|
|
||||||
|
func is_active() -> bool:
|
||||||
|
return (
|
||||||
|
multiplayer.multiplayer_peer.get_connection_status()
|
||||||
|
== MultiplayerPeer.CONNECTION_CONNECTED
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
func format_player(peer_id: int) -> String:
|
||||||
|
return "[" + str(peer_id) + ": " + players[peer_id]["name"] + "]"
|
||||||
|
|
||||||
|
|
||||||
func _switch_scene(from: Node, to: PackedScene) -> void:
|
func _switch_scene(from: Node, to: PackedScene) -> void:
|
||||||
if from:
|
if from:
|
||||||
from.queue_free()
|
from.queue_free()
|
||||||
@ -106,7 +117,7 @@ func _remove_player(peer_id: int) -> void:
|
|||||||
if not multiplayer.is_server():
|
if not multiplayer.is_server():
|
||||||
return
|
return
|
||||||
|
|
||||||
print("Removing player ", peer_id)
|
print("Removing player ", format_player(peer_id))
|
||||||
var player_holder: Node = $/root/Main/Players
|
var player_holder: Node = $/root/Main/Players
|
||||||
var player := player_holder.get_node_or_null(str(peer_id))
|
var player := player_holder.get_node_or_null(str(peer_id))
|
||||||
if player:
|
if player:
|
||||||
@ -115,31 +126,31 @@ func _remove_player(peer_id: int) -> void:
|
|||||||
|
|
||||||
@rpc("any_peer", "reliable")
|
@rpc("any_peer", "reliable")
|
||||||
func _register_player(player_info: Dictionary) -> void:
|
func _register_player(player_info: Dictionary) -> void:
|
||||||
print("Registering player ", player_info)
|
|
||||||
var peer_id := multiplayer.get_remote_sender_id()
|
var peer_id := multiplayer.get_remote_sender_id()
|
||||||
|
print("Registering player ", peer_id, " ", player_info)
|
||||||
if peer_id == 1 and !player_info["name"]:
|
if peer_id == 1 and !player_info["name"]:
|
||||||
print("Registered player's id is ",peer_id, " and name is empty, so skipping")
|
print("Registered player's id is ", peer_id, " and name is empty, so skipping")
|
||||||
return
|
return
|
||||||
_players[peer_id] = player_info
|
players[peer_id] = player_info
|
||||||
player_connected.emit(peer_id, player_info)
|
player_connected.emit(peer_id, player_info)
|
||||||
|
|
||||||
|
|
||||||
func _on_multiplayer_peer_connected(peer_id: int) -> void:
|
func _on_multiplayer_peer_connected(peer_id: int) -> void:
|
||||||
print("Peer connected ", peer_id)
|
print("Peer connected ", peer_id)
|
||||||
_add_player(peer_id)
|
|
||||||
_register_player.rpc_id(peer_id, _local_player_info)
|
_register_player.rpc_id(peer_id, _local_player_info)
|
||||||
|
_add_player(peer_id)
|
||||||
|
|
||||||
|
|
||||||
func _on_multiplayer_peer_disconnected(peer_id: int) -> void:
|
func _on_multiplayer_peer_disconnected(peer_id: int) -> void:
|
||||||
print("Peer disconnected ", peer_id)
|
print("Peer disconnected ", format_player(peer_id))
|
||||||
_players.erase(peer_id)
|
|
||||||
_remove_player(peer_id)
|
_remove_player(peer_id)
|
||||||
|
players.erase(peer_id)
|
||||||
|
|
||||||
|
|
||||||
func _on_multiplayer_connected_to_server() -> void:
|
func _on_multiplayer_connected_to_server() -> void:
|
||||||
print("Connected to server")
|
print("Connected to server")
|
||||||
var peer_id := multiplayer.get_unique_id()
|
var peer_id := multiplayer.get_unique_id()
|
||||||
_players[peer_id] = _local_player_info
|
players[peer_id] = _local_player_info
|
||||||
player_connected.emit(peer_id, _local_player_info)
|
player_connected.emit(peer_id, _local_player_info)
|
||||||
|
|
||||||
|
|
||||||
@ -151,6 +162,6 @@ func _on_multiplayer_connection_failed() -> void:
|
|||||||
|
|
||||||
func _on_multiplayer_server_disconnected() -> void:
|
func _on_multiplayer_server_disconnected() -> void:
|
||||||
printerr("Server disconnected")
|
printerr("Server disconnected")
|
||||||
_players.clear()
|
players.clear()
|
||||||
_switch_scene($/root/Main, _title_scene)
|
_switch_scene($/root/Main, _title_scene)
|
||||||
network_error.emit("Server disconnected")
|
network_error.emit("Server disconnected")
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
extends Node
|
extends Node
|
||||||
|
|
||||||
var main_camera: Camera3D
|
var camera: Camera3D
|
||||||
var player: Player
|
var player: Player
|
||||||
|
var main: Main
|
||||||
|
|||||||
@ -1,5 +1,9 @@
|
|||||||
|
class_name Main
|
||||||
extends Node
|
extends Node
|
||||||
|
|
||||||
|
func _exit_tree() -> void:
|
||||||
|
Referencer.main = null
|
||||||
|
|
||||||
|
|
||||||
func _unhandled_input(event: InputEvent) -> void:
|
func _unhandled_input(event: InputEvent) -> void:
|
||||||
if event.is_action_pressed("menu"):
|
if event.is_action_pressed("menu"):
|
||||||
|
|||||||
@ -11,6 +11,7 @@ const FALL_ACCELERATION: float = 25
|
|||||||
|
|
||||||
@export var _respawn_height: float = -100
|
@export var _respawn_height: float = -100
|
||||||
|
|
||||||
|
var _peer_id: int = 1
|
||||||
var _respawn_point: Vector3
|
var _respawn_point: Vector3
|
||||||
|
|
||||||
@onready var _camera: Camera3D = $Camera3D
|
@onready var _camera: Camera3D = $Camera3D
|
||||||
@ -18,32 +19,32 @@ var _respawn_point: Vector3
|
|||||||
|
|
||||||
|
|
||||||
func _enter_tree() -> void:
|
func _enter_tree() -> void:
|
||||||
set_multiplayer_authority(str(name).to_int())
|
_peer_id = str(name).to_int()
|
||||||
|
set_multiplayer_authority(_peer_id)
|
||||||
|
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
_name_label.text = str(name)
|
|
||||||
if not is_multiplayer_authority():
|
if not is_multiplayer_authority():
|
||||||
return
|
return
|
||||||
|
|
||||||
_respawn_point = global_position
|
_respawn_point = global_position
|
||||||
_camera.make_current()
|
_camera.make_current()
|
||||||
Referencer.player = self
|
Referencer.player = self
|
||||||
Referencer.main_camera = _camera
|
Referencer.camera = _camera
|
||||||
print("Player ", name, " ready")
|
print("Player ", Networker.format_player(_peer_id), " ready")
|
||||||
|
|
||||||
|
|
||||||
func _exit_tree() -> void:
|
func _exit_tree() -> void:
|
||||||
if not is_multiplayer_authority():
|
if Networker.is_active() and not is_multiplayer_authority():
|
||||||
return
|
return
|
||||||
|
|
||||||
Referencer.player = null
|
Referencer.player = null
|
||||||
Referencer.main_camera = null
|
Referencer.camera = null
|
||||||
print("Player ", name, " exiting tree")
|
print("Player ", Networker.format_player(_peer_id), " exiting tree")
|
||||||
|
|
||||||
|
|
||||||
func _process(delta: float) -> void:
|
func _process(delta: float) -> void:
|
||||||
if not is_multiplayer_authority():
|
if Networker.is_active() and not is_multiplayer_authority():
|
||||||
Debugger.vector(
|
Debugger.vector(
|
||||||
"look" + str(name),
|
"look" + str(name),
|
||||||
_camera.global_position,
|
_camera.global_position,
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user