From 140fefe47593101e5ee1fbb4ecf940f89cf2b494 Mon Sep 17 00:00:00 2001 From: JohnCorby Date: Wed, 16 Feb 2022 23:45:54 -0800 Subject: [PATCH] more stuff --- QSB/Player/JoinLeaveSingularity.cs | 23 ++++++++++++++----- QSB/Player/Messages/PlayerJoinMessage.cs | 2 -- .../TransformSync/PlayerTransformSync.cs | 7 +++--- 3 files changed, 20 insertions(+), 12 deletions(-) diff --git a/QSB/Player/JoinLeaveSingularity.cs b/QSB/Player/JoinLeaveSingularity.cs index e639f752..2cc73d61 100644 --- a/QSB/Player/JoinLeaveSingularity.cs +++ b/QSB/Player/JoinLeaveSingularity.cs @@ -1,4 +1,5 @@ using Cysharp.Threading.Tasks; +using QSB.Player.TransformSync; using QSB.Utility; using QSB.WorldSync; using System.Linq; @@ -10,16 +11,26 @@ namespace QSB.Player { public static async UniTaskVoid Create(PlayerInfo player, bool joining) { + if (!player.IsLocalPlayer) + { + return; + } + + if (joining) + { + if (PlayerTransformSync.LocalInstance == null || + player.PlayerId < QSBPlayerManager.LocalPlayerId) + { + return; + } + + await UniTask.WaitUntil(() => player.TransformSync.IsValid && player.TransformSync.ReferenceTransform); + } + DebugLog.DebugWrite($"WARP {player.TransformSync}"); player.SetVisible(false); - bool Predicate() => player.TransformSync.IsValid && player.TransformSync.ReferenceTransform; - if (!Predicate()) - { - await UniTask.WaitUntil(Predicate); - } - var go = new GameObject(nameof(JoinLeaveSingularity)); go.transform.parent = player.TransformSync.ReferenceTransform; go.transform.localPosition = player.TransformSync.transform.position; diff --git a/QSB/Player/Messages/PlayerJoinMessage.cs b/QSB/Player/Messages/PlayerJoinMessage.cs index 06cb4c86..dc9f5159 100644 --- a/QSB/Player/Messages/PlayerJoinMessage.cs +++ b/QSB/Player/Messages/PlayerJoinMessage.cs @@ -76,8 +76,6 @@ namespace QSB.Player.Messages player.Name = PlayerName; DebugLog.ToAll($"{player.Name} joined!", MessageType.Info); DebugLog.DebugWrite($"{player.Name} joined. id:{player.PlayerId}, qsbVersion:{QSBVersion}, gameVersion:{GameVersion}, dlcInstalled:{DlcInstalled}", MessageType.Info); - - JoinLeaveSingularity.Create(player, true).Forget(); } public override void OnReceiveLocal() diff --git a/QSB/Player/TransformSync/PlayerTransformSync.cs b/QSB/Player/TransformSync/PlayerTransformSync.cs index 4ef939ad..8e0b42a5 100644 --- a/QSB/Player/TransformSync/PlayerTransformSync.cs +++ b/QSB/Player/TransformSync/PlayerTransformSync.cs @@ -44,16 +44,15 @@ namespace QSB.Player.TransformSync base.OnStartClient(); QSBPlayerManager.OnAddPlayer?.Invoke(Player); DebugLog.DebugWrite($"Create Player : id<{Player.PlayerId}>", MessageType.Info); + + JoinLeaveSingularity.Create(Player, true).Forget(); } public override void OnStartLocalPlayer() => LocalInstance = this; public override void OnStopClient() { - if (!isLocalPlayer) - { - JoinLeaveSingularity.Create(Player, false).Forget(); - } + JoinLeaveSingularity.Create(Player, false).Forget(); // TODO : Maybe move this to a leave event...? Would ensure everything could finish up before removing the player QSBPlayerManager.OnRemovePlayer?.Invoke(Player);