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_height=1080
|
||||
window/size/always_on_top=true
|
||||
window/size/window_width_override=1280
|
||||
window/size/window_height_override=720
|
||||
window/stretch/mode="canvas_items"
|
||||
|
||||
@ -23,6 +23,7 @@ properties/2/replication_mode = 1
|
||||
[node name="Player" type="CharacterBody3D"]
|
||||
collision_layer = 2
|
||||
script = ExtResource("1_82m0t")
|
||||
_respawn_height = null
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||
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:
|
||||
return Referencer.main_camera.unproject_position(pos)
|
||||
return Referencer.camera.unproject_position(pos)
|
||||
|
||||
|
||||
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:
|
||||
if (
|
||||
not Referencer.main_camera.is_position_in_frustum(from)
|
||||
and not Referencer.main_camera.is_position_in_frustum(to)
|
||||
not Referencer.camera.is_position_in_frustum(from)
|
||||
and not Referencer.camera.is_position_in_frustum(to)
|
||||
):
|
||||
return
|
||||
|
||||
@ -223,7 +223,7 @@ func _draw_triangle(
|
||||
|
||||
|
||||
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
|
||||
|
||||
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:
|
||||
if not Referencer.main_camera.is_position_in_frustum(pos):
|
||||
if not Referencer.camera.is_position_in_frustum(pos):
|
||||
return
|
||||
|
||||
var point := _unproject(pos)
|
||||
@ -284,7 +284,7 @@ func _on_control_draw() -> void:
|
||||
|
||||
_set_label_texts()
|
||||
|
||||
if !Referencer.main_camera:
|
||||
if !Referencer.camera:
|
||||
return
|
||||
|
||||
for v: Dictionary in _vectors_to_draw.values():
|
||||
|
||||
@ -7,10 +7,10 @@ signal network_error(message: String)
|
||||
const DEFAULT_PORT: int = 10567
|
||||
const MAX_PEERS: int = 20
|
||||
|
||||
var _peer: ENetMultiplayerPeer
|
||||
var players := {}
|
||||
|
||||
var _peer: ENetMultiplayerPeer
|
||||
var _local_player_info := {"name": ""}
|
||||
var _players := {}
|
||||
|
||||
var _title_scene := preload("res://scenes/title.tscn")
|
||||
var _main_scene := preload("res://scenes/main.tscn")
|
||||
@ -27,7 +27,7 @@ func _ready() -> void:
|
||||
|
||||
func _process(_delta: float) -> void:
|
||||
Debugger.text("_local_player_info", _local_player_info)
|
||||
Debugger.text("_players", _players)
|
||||
Debugger.text("players", players)
|
||||
|
||||
|
||||
func set_local_player_info(username: String) -> void:
|
||||
@ -52,7 +52,7 @@ func host_game(dedicated: bool = false) -> void:
|
||||
_load_main()
|
||||
|
||||
if not dedicated:
|
||||
_players[1] = _local_player_info
|
||||
players[1] = _local_player_info
|
||||
player_connected.emit(1, _local_player_info)
|
||||
_add_player(multiplayer.get_unique_id())
|
||||
|
||||
@ -75,6 +75,17 @@ func join_game(address: String) -> void:
|
||||
_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:
|
||||
if from:
|
||||
from.queue_free()
|
||||
@ -106,7 +117,7 @@ func _remove_player(peer_id: int) -> void:
|
||||
if not multiplayer.is_server():
|
||||
return
|
||||
|
||||
print("Removing player ", peer_id)
|
||||
print("Removing player ", format_player(peer_id))
|
||||
var player_holder: Node = $/root/Main/Players
|
||||
var player := player_holder.get_node_or_null(str(peer_id))
|
||||
if player:
|
||||
@ -115,31 +126,31 @@ func _remove_player(peer_id: int) -> void:
|
||||
|
||||
@rpc("any_peer", "reliable")
|
||||
func _register_player(player_info: Dictionary) -> void:
|
||||
print("Registering player ", player_info)
|
||||
var peer_id := multiplayer.get_remote_sender_id()
|
||||
print("Registering player ", peer_id, " ", player_info)
|
||||
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
|
||||
_players[peer_id] = player_info
|
||||
players[peer_id] = player_info
|
||||
player_connected.emit(peer_id, player_info)
|
||||
|
||||
|
||||
func _on_multiplayer_peer_connected(peer_id: int) -> void:
|
||||
print("Peer connected ", peer_id)
|
||||
_add_player(peer_id)
|
||||
_register_player.rpc_id(peer_id, _local_player_info)
|
||||
_add_player(peer_id)
|
||||
|
||||
|
||||
func _on_multiplayer_peer_disconnected(peer_id: int) -> void:
|
||||
print("Peer disconnected ", peer_id)
|
||||
_players.erase(peer_id)
|
||||
print("Peer disconnected ", format_player(peer_id))
|
||||
_remove_player(peer_id)
|
||||
players.erase(peer_id)
|
||||
|
||||
|
||||
func _on_multiplayer_connected_to_server() -> void:
|
||||
print("Connected to server")
|
||||
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)
|
||||
|
||||
|
||||
@ -151,6 +162,6 @@ func _on_multiplayer_connection_failed() -> void:
|
||||
|
||||
func _on_multiplayer_server_disconnected() -> void:
|
||||
printerr("Server disconnected")
|
||||
_players.clear()
|
||||
players.clear()
|
||||
_switch_scene($/root/Main, _title_scene)
|
||||
network_error.emit("Server disconnected")
|
||||
|
||||
@ -1,4 +1,5 @@
|
||||
extends Node
|
||||
|
||||
var main_camera: Camera3D
|
||||
var camera: Camera3D
|
||||
var player: Player
|
||||
var main: Main
|
||||
|
||||
@ -1,5 +1,9 @@
|
||||
class_name Main
|
||||
extends Node
|
||||
|
||||
func _exit_tree() -> void:
|
||||
Referencer.main = null
|
||||
|
||||
|
||||
func _unhandled_input(event: InputEvent) -> void:
|
||||
if event.is_action_pressed("menu"):
|
||||
|
||||
@ -11,6 +11,7 @@ const FALL_ACCELERATION: float = 25
|
||||
|
||||
@export var _respawn_height: float = -100
|
||||
|
||||
var _peer_id: int = 1
|
||||
var _respawn_point: Vector3
|
||||
|
||||
@onready var _camera: Camera3D = $Camera3D
|
||||
@ -18,32 +19,32 @@ var _respawn_point: Vector3
|
||||
|
||||
|
||||
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:
|
||||
_name_label.text = str(name)
|
||||
if not is_multiplayer_authority():
|
||||
return
|
||||
|
||||
_respawn_point = global_position
|
||||
_camera.make_current()
|
||||
Referencer.player = self
|
||||
Referencer.main_camera = _camera
|
||||
print("Player ", name, " ready")
|
||||
Referencer.camera = _camera
|
||||
print("Player ", Networker.format_player(_peer_id), " ready")
|
||||
|
||||
|
||||
func _exit_tree() -> void:
|
||||
if not is_multiplayer_authority():
|
||||
if Networker.is_active() and not is_multiplayer_authority():
|
||||
return
|
||||
|
||||
Referencer.player = null
|
||||
Referencer.main_camera = null
|
||||
print("Player ", name, " exiting tree")
|
||||
Referencer.camera = null
|
||||
print("Player ", Networker.format_player(_peer_id), " exiting tree")
|
||||
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
if not is_multiplayer_authority():
|
||||
if Networker.is_active() and not is_multiplayer_authority():
|
||||
Debugger.vector(
|
||||
"look" + str(name),
|
||||
_camera.global_position,
|
||||
|
||||
Loading…
Reference in New Issue
Block a user