From 4604830ecf1940a111e600056df5a4bbbfce3a23 Mon Sep 17 00:00:00 2001 From: JohnCorby Date: Tue, 18 Jan 2022 10:30:34 -0800 Subject: [PATCH 01/23] set LocalInstance in Start to attempt to alleviate some bs --- QSB/Player/TransformSync/PlayerTransformSync.cs | 8 +++++--- QSB/Syncs/SyncBase.cs | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/QSB/Player/TransformSync/PlayerTransformSync.cs b/QSB/Player/TransformSync/PlayerTransformSync.cs index 546c04df..4a7e1cf8 100644 --- a/QSB/Player/TransformSync/PlayerTransformSync.cs +++ b/QSB/Player/TransformSync/PlayerTransformSync.cs @@ -43,11 +43,13 @@ namespace QSB.Player.TransformSync private Transform GetStickPivot() => QSBWorldSync.GetUnityObjects().First().transform.Find("Stick_Root/Stick_Pivot"); - public override void OnStartLocalPlayer() - => LocalInstance = this; - public override void Start() { + if (isLocalPlayer) + { + LocalInstance = this; + } + var player = new PlayerInfo(this); QSBPlayerManager.PlayerList.SafeAdd(player); base.Start(); diff --git a/QSB/Syncs/SyncBase.cs b/QSB/Syncs/SyncBase.cs index 0c14aaeb..48e622b4 100644 --- a/QSB/Syncs/SyncBase.cs +++ b/QSB/Syncs/SyncBase.cs @@ -26,7 +26,7 @@ namespace QSB.Syncs { if (_player == null) { - DebugLog.ToConsole("Error - trying to get SyncBase.Player before Start has been called! " + DebugLog.ToConsole($"Error - trying to get SyncBase.Player for {netId} before Start has been called! " + "this really should not be happening!\n" + $"{Environment.StackTrace}", MessageType.Error); From dba1e3a0da2747d8db6cbf78c5923a7f5885f17e Mon Sep 17 00:00:00 2001 From: JohnCorby Date: Tue, 18 Jan 2022 12:19:58 -0800 Subject: [PATCH 02/23] use OnStartClient instead of Start --- QSB/Anglerfish/TransformSync/AnglerTransformSync.cs | 4 ++-- .../TransformSync/JellyfishTransformSync.cs | 4 ++-- QSB/OrbSync/TransformSync/NomaiOrbTransformSync.cs | 4 ++-- QSB/Player/TransformSync/PlayerTransformSync.cs | 12 +++++------- QSB/ShipSync/TransformSync/ShipTransformSync.cs | 4 ++-- QSB/Syncs/Sectored/BaseSectoredSync.cs | 4 ++-- QSB/Syncs/SyncBase.cs | 7 ++++++- QSB/WorldSync/QSBWorldSync.cs | 4 ++-- 8 files changed, 23 insertions(+), 20 deletions(-) diff --git a/QSB/Anglerfish/TransformSync/AnglerTransformSync.cs b/QSB/Anglerfish/TransformSync/AnglerTransformSync.cs index a073503f..4745572d 100644 --- a/QSB/Anglerfish/TransformSync/AnglerTransformSync.cs +++ b/QSB/Anglerfish/TransformSync/AnglerTransformSync.cs @@ -19,10 +19,10 @@ namespace QSB.Anglerfish.TransformSync protected override OWRigidbody InitAttachedRigidbody() => _qsbAngler.AttachedObject._anglerBody; - public override void Start() + public override void OnStartClient() { _instances.Add(this); - base.Start(); + base.OnStartClient(); } protected override void OnDestroy() diff --git a/QSB/JellyfishSync/TransformSync/JellyfishTransformSync.cs b/QSB/JellyfishSync/TransformSync/JellyfishTransformSync.cs index d53591e7..3e5ba4d8 100644 --- a/QSB/JellyfishSync/TransformSync/JellyfishTransformSync.cs +++ b/QSB/JellyfishSync/TransformSync/JellyfishTransformSync.cs @@ -21,10 +21,10 @@ namespace QSB.JellyfishSync.TransformSync protected override OWRigidbody InitAttachedRigidbody() => _qsbJellyfish.AttachedObject._jellyfishBody; - public override void Start() + public override void OnStartClient() { _instances.Add(this); - base.Start(); + base.OnStartClient(); } protected override void OnDestroy() diff --git a/QSB/OrbSync/TransformSync/NomaiOrbTransformSync.cs b/QSB/OrbSync/TransformSync/NomaiOrbTransformSync.cs index 17f36aab..8804c6a7 100644 --- a/QSB/OrbSync/TransformSync/NomaiOrbTransformSync.cs +++ b/QSB/OrbSync/TransformSync/NomaiOrbTransformSync.cs @@ -22,10 +22,10 @@ namespace QSB.OrbSync.TransformSync private QSBOrb _qsbOrb; private static readonly List _instances = new(); - public override void Start() + public override void OnStartClient() { _instances.Add(this); - base.Start(); + base.OnStartClient(); } protected override void OnDestroy() diff --git a/QSB/Player/TransformSync/PlayerTransformSync.cs b/QSB/Player/TransformSync/PlayerTransformSync.cs index 4a7e1cf8..35f80860 100644 --- a/QSB/Player/TransformSync/PlayerTransformSync.cs +++ b/QSB/Player/TransformSync/PlayerTransformSync.cs @@ -43,25 +43,23 @@ namespace QSB.Player.TransformSync private Transform GetStickPivot() => QSBWorldSync.GetUnityObjects().First().transform.Find("Stick_Root/Stick_Pivot"); - public override void Start() + public override void OnStartClient() { - if (isLocalPlayer) - { - LocalInstance = this; - } - var player = new PlayerInfo(this); QSBPlayerManager.PlayerList.SafeAdd(player); - base.Start(); + base.OnStartClient(); QSBPlayerManager.OnAddPlayer?.Invoke(Player); DebugLog.DebugWrite($"Create Player : id<{Player.PlayerId}>", MessageType.Info); } + public override void OnStartLocalPlayer() => LocalInstance = this; + protected override void OnSceneLoaded(OWScene oldScene, OWScene newScene, bool isInUniverse) { if (!hasAuthority) { base.OnSceneLoaded(oldScene, newScene, isInUniverse); + return; } if (isInUniverse && !IsInitialized) diff --git a/QSB/ShipSync/TransformSync/ShipTransformSync.cs b/QSB/ShipSync/TransformSync/ShipTransformSync.cs index 9876dbc2..15592695 100644 --- a/QSB/ShipSync/TransformSync/ShipTransformSync.cs +++ b/QSB/ShipSync/TransformSync/ShipTransformSync.cs @@ -15,9 +15,9 @@ namespace QSB.ShipSync.TransformSync protected override bool IsReady => Locator.GetShipBody() != null; - public override void Start() + public override void OnStartClient() { - base.Start(); + base.OnStartClient(); LocalInstance = this; } diff --git a/QSB/Syncs/Sectored/BaseSectoredSync.cs b/QSB/Syncs/Sectored/BaseSectoredSync.cs index 37daa440..2c2bc0df 100644 --- a/QSB/Syncs/Sectored/BaseSectoredSync.cs +++ b/QSB/Syncs/Sectored/BaseSectoredSync.cs @@ -14,11 +14,11 @@ namespace QSB.Syncs.Sectored private int _sectorId = -1; - public override void Start() + public override void OnStartClient() { SectorSync = gameObject.AddComponent(); QSBSectorManager.Instance.TransformSyncs.Add(this); - base.Start(); + base.OnStartClient(); } protected override void OnDestroy() diff --git a/QSB/Syncs/SyncBase.cs b/QSB/Syncs/SyncBase.cs index 48e622b4..694fee81 100644 --- a/QSB/Syncs/SyncBase.cs +++ b/QSB/Syncs/SyncBase.cs @@ -88,7 +88,7 @@ namespace QSB.Syncs protected abstract void GetFromAttached(); protected abstract void ApplyToAttached(); - public virtual void Start() + public override void OnStartClient() { if (IsPlayerObject) { @@ -144,6 +144,11 @@ namespace QSB.Syncs protected sealed override void Update() { + if (!isClient) + { + return; + } + if (!IsInitialized && IsReady && _baseIsReady) { try diff --git a/QSB/WorldSync/QSBWorldSync.cs b/QSB/WorldSync/QSBWorldSync.cs index 02bd4d51..881cf12a 100644 --- a/QSB/WorldSync/QSBWorldSync.cs +++ b/QSB/WorldSync/QSBWorldSync.cs @@ -26,8 +26,6 @@ namespace QSB.WorldSync public static void BuildWorldObjects(OWScene scene) { - GameInit(); - if (PlayerTransformSync.LocalInstance == null) { DebugLog.ToConsole($"Warning - Tried to build WorldObjects when LocalPlayer is not ready! Building when ready...", MessageType.Warning); @@ -35,6 +33,8 @@ namespace QSB.WorldSync return; } + GameInit(); + DoBuild(scene); } From 10081ee8d182eeea24443bc1a8c482af2b1fef6e Mon Sep 17 00:00:00 2001 From: JohnCorby Date: Tue, 18 Jan 2022 12:54:19 -0800 Subject: [PATCH 03/23] okay NOW IsReady should be fixed --- QSB/Player/TransformSync/PlayerTransformSync.cs | 9 ++++++--- QSB/Syncs/SyncBase.cs | 13 ++++++------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/QSB/Player/TransformSync/PlayerTransformSync.cs b/QSB/Player/TransformSync/PlayerTransformSync.cs index 35f80860..409e5da3 100644 --- a/QSB/Player/TransformSync/PlayerTransformSync.cs +++ b/QSB/Player/TransformSync/PlayerTransformSync.cs @@ -56,7 +56,7 @@ namespace QSB.Player.TransformSync protected override void OnSceneLoaded(OWScene oldScene, OWScene newScene, bool isInUniverse) { - if (!hasAuthority) + if (!isLocalPlayer) { base.OnSceneLoaded(oldScene, newScene, isInUniverse); return; @@ -81,8 +81,11 @@ namespace QSB.Player.TransformSync { base.Init(); - Player.IsReady = true; - new PlayerReadyMessage(true).Send(); + if (isLocalPlayer) + { + Player.IsReady = true; + new PlayerReadyMessage(true).Send(); + } } protected override void OnDestroy() diff --git a/QSB/Syncs/SyncBase.cs b/QSB/Syncs/SyncBase.cs index 694fee81..88733060 100644 --- a/QSB/Syncs/SyncBase.cs +++ b/QSB/Syncs/SyncBase.cs @@ -1,7 +1,6 @@ using Mirror; using OWML.Common; using QSB.Player; -using QSB.Player.TransformSync; using QSB.Utility; using QSB.WorldSync; using System; @@ -54,7 +53,12 @@ namespace QSB.Syncs if (IsPlayerObject) { - if (!Player.IsReady && this is not PlayerTransformSync) + if (_player == null) + { + return false; + } + + if (!isLocalPlayer && !Player.IsReady) { return false; } @@ -144,11 +148,6 @@ namespace QSB.Syncs protected sealed override void Update() { - if (!isClient) - { - return; - } - if (!IsInitialized && IsReady && _baseIsReady) { try From 10108ff871e31389873d6540f81b0fe99aaa0f9b Mon Sep 17 00:00:00 2001 From: JohnCorby Date: Tue, 18 Jan 2022 13:14:58 -0800 Subject: [PATCH 04/23] always set to not ready --- .../TransformSync/PlayerTransformSync.cs | 24 +++++-------------- 1 file changed, 6 insertions(+), 18 deletions(-) diff --git a/QSB/Player/TransformSync/PlayerTransformSync.cs b/QSB/Player/TransformSync/PlayerTransformSync.cs index 409e5da3..b7f568ea 100644 --- a/QSB/Player/TransformSync/PlayerTransformSync.cs +++ b/QSB/Player/TransformSync/PlayerTransformSync.cs @@ -56,25 +56,13 @@ namespace QSB.Player.TransformSync protected override void OnSceneLoaded(OWScene oldScene, OWScene newScene, bool isInUniverse) { - if (!isLocalPlayer) - { - base.OnSceneLoaded(oldScene, newScene, isInUniverse); - return; - } - - if (isInUniverse && !IsInitialized) - { - Player.IsReady = false; - new PlayerReadyMessage(false).Send(); - } - - if (!isInUniverse) - { - Player.IsReady = false; - new PlayerReadyMessage(false).Send(); - } - base.OnSceneLoaded(oldScene, newScene, isInUniverse); + + if (isLocalPlayer) + { + Player.IsReady = false; + new PlayerReadyMessage(false).Send(); + } } protected override void Init() From 47b98f2a1c59de0f885d5e77e25793fc6684f558 Mon Sep 17 00:00:00 2001 From: JohnCorby Date: Tue, 18 Jan 2022 15:02:48 -0800 Subject: [PATCH 05/23] tweak --- QSB/Utility/QSBNetworkBehaviour.cs | 9 ++++----- QSB/WorldSync/QSBWorldSync.cs | 5 +++++ 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/QSB/Utility/QSBNetworkBehaviour.cs b/QSB/Utility/QSBNetworkBehaviour.cs index 696a18ee..72f5a9ca 100644 --- a/QSB/Utility/QSBNetworkBehaviour.cs +++ b/QSB/Utility/QSBNetworkBehaviour.cs @@ -12,20 +12,19 @@ namespace QSB.Utility public sealed override bool OnSerialize(NetworkWriter writer, bool initialState) { - var changed = base.OnSerialize(writer, initialState); - if (initialState && isServer) + if (initialState) { Serialize(writer, true); UpdatePrevData(); + return true; } - return changed; + return false; } public sealed override void OnDeserialize(NetworkReader reader, bool initialState) { - base.OnDeserialize(reader, initialState); - if (initialState && !isServer) + if (initialState) { UpdatePrevData(); Deserialize(reader, true); diff --git a/QSB/WorldSync/QSBWorldSync.cs b/QSB/WorldSync/QSBWorldSync.cs index 881cf12a..d99eebef 100644 --- a/QSB/WorldSync/QSBWorldSync.cs +++ b/QSB/WorldSync/QSBWorldSync.cs @@ -78,6 +78,11 @@ namespace QSB.WorldSync public static void RemoveWorldObjects() { + if (!AllObjectsReady) + { + return; + } + GameReset(); AllObjectsAdded = false; From 573ee72d86d6dd418edbbac9cff0e62965935d0f Mon Sep 17 00:00:00 2001 From: JohnCorby Date: Tue, 18 Jan 2022 15:06:45 -0800 Subject: [PATCH 06/23] use OnStopClient instead of OnDestroy --- QSB/Anglerfish/TransformSync/AnglerTransformSync.cs | 4 ++-- QSB/JellyfishSync/TransformSync/JellyfishTransformSync.cs | 4 ++-- QSB/OrbSync/TransformSync/NomaiOrbTransformSync.cs | 4 ++-- QSB/Player/TransformSync/PlayerTransformSync.cs | 4 ++-- QSB/Syncs/Sectored/BaseSectoredSync.cs | 4 ++-- QSB/Syncs/SyncBase.cs | 2 +- 6 files changed, 11 insertions(+), 11 deletions(-) diff --git a/QSB/Anglerfish/TransformSync/AnglerTransformSync.cs b/QSB/Anglerfish/TransformSync/AnglerTransformSync.cs index 4745572d..c92be663 100644 --- a/QSB/Anglerfish/TransformSync/AnglerTransformSync.cs +++ b/QSB/Anglerfish/TransformSync/AnglerTransformSync.cs @@ -25,10 +25,10 @@ namespace QSB.Anglerfish.TransformSync base.OnStartClient(); } - protected override void OnDestroy() + public override void OnStopClient() { _instances.Remove(this); - base.OnDestroy(); + base.OnStopClient(); if (QSBCore.IsHost) { diff --git a/QSB/JellyfishSync/TransformSync/JellyfishTransformSync.cs b/QSB/JellyfishSync/TransformSync/JellyfishTransformSync.cs index 3e5ba4d8..594f8e75 100644 --- a/QSB/JellyfishSync/TransformSync/JellyfishTransformSync.cs +++ b/QSB/JellyfishSync/TransformSync/JellyfishTransformSync.cs @@ -27,10 +27,10 @@ namespace QSB.JellyfishSync.TransformSync base.OnStartClient(); } - protected override void OnDestroy() + public override void OnStopClient() { _instances.Remove(this); - base.OnDestroy(); + base.OnStopClient(); if (QSBCore.IsHost) { diff --git a/QSB/OrbSync/TransformSync/NomaiOrbTransformSync.cs b/QSB/OrbSync/TransformSync/NomaiOrbTransformSync.cs index 8804c6a7..84b47634 100644 --- a/QSB/OrbSync/TransformSync/NomaiOrbTransformSync.cs +++ b/QSB/OrbSync/TransformSync/NomaiOrbTransformSync.cs @@ -28,10 +28,10 @@ namespace QSB.OrbSync.TransformSync base.OnStartClient(); } - protected override void OnDestroy() + public override void OnStopClient() { _instances.Remove(this); - base.OnDestroy(); + base.OnStopClient(); if (QSBCore.IsHost) { diff --git a/QSB/Player/TransformSync/PlayerTransformSync.cs b/QSB/Player/TransformSync/PlayerTransformSync.cs index b7f568ea..28175bef 100644 --- a/QSB/Player/TransformSync/PlayerTransformSync.cs +++ b/QSB/Player/TransformSync/PlayerTransformSync.cs @@ -76,11 +76,11 @@ namespace QSB.Player.TransformSync } } - protected override void OnDestroy() + public override void OnStopClient() { // TODO : Maybe move this to a leave event...? Would ensure everything could finish up before removing the player QSBPlayerManager.OnRemovePlayer?.Invoke(Player); - base.OnDestroy(); + base.OnStopClient(); Player.HudMarker?.Remove(); QSBPlayerManager.PlayerList.Remove(Player); DebugLog.DebugWrite($"Remove Player : id<{Player.PlayerId}>", MessageType.Info); diff --git a/QSB/Syncs/Sectored/BaseSectoredSync.cs b/QSB/Syncs/Sectored/BaseSectoredSync.cs index 2c2bc0df..8a2345ba 100644 --- a/QSB/Syncs/Sectored/BaseSectoredSync.cs +++ b/QSB/Syncs/Sectored/BaseSectoredSync.cs @@ -21,9 +21,9 @@ namespace QSB.Syncs.Sectored base.OnStartClient(); } - protected override void OnDestroy() + public override void OnStopClient() { - base.OnDestroy(); + base.OnStopClient(); QSBSectorManager.Instance.TransformSyncs.Remove(this); Destroy(SectorSync); } diff --git a/QSB/Syncs/SyncBase.cs b/QSB/Syncs/SyncBase.cs index 88733060..c2188e18 100644 --- a/QSB/Syncs/SyncBase.cs +++ b/QSB/Syncs/SyncBase.cs @@ -107,7 +107,7 @@ namespace QSB.Syncs QSBSceneManager.OnSceneLoaded += OnSceneLoaded; } - protected virtual void OnDestroy() + public override void OnStopClient() { if (IsPlayerObject && !hasAuthority && AttachedTransform != null) { From ae90014137d1a6438f64435b7cf021f150efd7c1 Mon Sep 17 00:00:00 2001 From: JohnCorby Date: Tue, 18 Jan 2022 15:50:20 -0800 Subject: [PATCH 07/23] toggle-able DebugMode --- QSB/QSBCore.cs | 18 ++++- QSB/QuantumSync/QuantumManager.cs | 81 ++++++++++++++++++- .../WorldObjects/QSBQuantumObject.cs | 51 ------------ QSB/TimeSync/WakeUpSync.cs | 2 +- QSB/Utility/DebugActions.cs | 25 +++--- QSB/Utility/DebugCameraSettings.cs | 17 +++- QSB/Utility/DebugGUI.cs | 14 +--- 7 files changed, 129 insertions(+), 79 deletions(-) diff --git a/QSB/QSBCore.cs b/QSB/QSBCore.cs index d70aaffa..e4b670e2 100644 --- a/QSB/QSBCore.cs +++ b/QSB/QSBCore.cs @@ -1,13 +1,13 @@ using Mirror; using OWML.Common; using OWML.ModHelper; -using OWML.ModHelper.Input; using QSB.EyeOfTheUniverse.GalaxyMap; using QSB.EyeOfTheUniverse.MaskSync; using QSB.Inputs; using QSB.Menus; using QSB.Patches; using QSB.Player; +using QSB.QuantumSync; using QSB.RespawnSync; using QSB.SatelliteSync; using QSB.StatueSync; @@ -66,7 +66,7 @@ namespace QSB public static bool DLCInstalled => EntitlementsManager.IsDlcOwned() == EntitlementsManager.AsyncOwnershipStatus.Owned; public static IMenuAPI MenuApi { get; private set; } - private static DebugSettings DebugSettings { get; set; } = new DebugSettings(); + private static DebugSettings DebugSettings { get; set; } = new(); public void Awake() { @@ -80,7 +80,7 @@ namespace QSB Helper = ModHelper; DebugLog.ToConsole($"* Start of QSB version {QSBVersion} - authored by {Helper.Manifest.Author}", MessageType.Info); - MenuApi = ModHelper.Interaction.GetModApi("_nebula.MenuFramework"); + MenuApi = Helper.Interaction.GetModApi("_nebula.MenuFramework"); NetworkAssetBundle = Helper.Assets.LoadBundle("AssetBundles/network"); InstrumentAssetBundle = Helper.Assets.LoadBundle("AssetBundles/instruments"); @@ -88,7 +88,7 @@ namespace QSB DebugAssetBundle = Helper.Assets.LoadBundle("AssetBundles/debug"); TextAssetsBundle = Helper.Assets.LoadBundle("AssetBundles/textassets"); - DebugSettings = ModHelper.Storage.Load("debugsettings.json"); + DebugSettings = Helper.Storage.Load("debugsettings.json"); if (DebugSettings == null) { @@ -149,6 +149,16 @@ namespace QSB QSBNetworkManager.singleton.Port = Port; } } + + public static void ToggleDebug() + { + DebugSettings.DebugMode = !DebugSettings.DebugMode; + + QuantumManager.UpdateFromDebugSetting(); + DebugCameraSettings.UpdateFromDebugSetting(); + + DebugLog.ToConsole($"DEBUG MODE = {DebugMode}"); + } } } diff --git a/QSB/QuantumSync/QuantumManager.cs b/QSB/QuantumSync/QuantumManager.cs index f5967332..fff9367b 100644 --- a/QSB/QuantumSync/QuantumManager.cs +++ b/QSB/QuantumSync/QuantumManager.cs @@ -35,6 +35,8 @@ namespace QSB.QuantumSync { Shrine = QSBWorldSync.GetUnityObjects().First(); } + + UpdateFromDebugSetting(); } public void PlayerLeave(PlayerInfo player) @@ -121,5 +123,82 @@ namespace QSB.QuantumSync var worldObj = obj.GetWorldObject(); return QSBPlayerManager.PlayerList.Where(x => x.EntangledObject == worldObj); } + + #region debug shapes + + private static GameObject _debugSphere, _debugCube, _debugCapsule; + + private class DebugShape : MonoBehaviour { } + + public static void UpdateFromDebugSetting() + { + if (QSBCore.ShowQuantumVisibilityObjects) + { + if (_debugSphere == null) + { + _debugSphere = QSBCore.DebugAssetBundle.LoadAsset("Assets/Prefabs/Sphere.prefab"); + } + + if (_debugCube == null) + { + _debugCube = QSBCore.DebugAssetBundle.LoadAsset("Assets/Prefabs/Cube.prefab"); + } + + if (_debugCapsule == null) + { + _debugCapsule = QSBCore.DebugAssetBundle.LoadAsset("Assets/Prefabs/Capsule.prefab"); + } + + foreach (var quantumObject in QSBWorldSync.GetWorldObjects()) + { + foreach (var shape in quantumObject.GetAttachedShapes()) + { + if (shape is BoxShape boxShape) + { + var newCube = Instantiate(_debugCube); + newCube.transform.parent = shape.transform; + newCube.transform.localPosition = Vector3.zero; + newCube.transform.localRotation = Quaternion.Euler(0, 0, 0); + newCube.transform.localScale = boxShape.size; + newCube.AddComponent(); + } + else if (shape is SphereShape sphereShape) + { + var newSphere = Instantiate(_debugSphere); + newSphere.transform.parent = shape.transform; + newSphere.transform.localPosition = Vector3.zero; + newSphere.transform.localRotation = Quaternion.Euler(0, 0, 0); + newSphere.transform.localScale = Vector3.one * (sphereShape.radius * 2); + newSphere.AddComponent(); + } + else if (shape is CapsuleShape capsuleShape) + { + var newCapsule = Instantiate(_debugCapsule); + newCapsule.transform.parent = shape.transform; + newCapsule.transform.localPosition = Vector3.zero; + newCapsule.transform.localRotation = Quaternion.Euler(0, 0, 0); + newCapsule.transform.localScale = new Vector3(capsuleShape.radius * 2, capsuleShape.height, capsuleShape.radius * 2); + newCapsule.AddComponent(); + } + } + } + } + else + { + foreach (var quantumObject in QSBWorldSync.GetWorldObjects()) + { + foreach (var shape in quantumObject.GetAttachedShapes()) + { + var debugShape = shape.GetComponentInChildren(); + if (debugShape) + { + Destroy(debugShape.gameObject); + } + } + } + } + } + + #endregion } -} \ No newline at end of file +} diff --git a/QSB/QuantumSync/WorldObjects/QSBQuantumObject.cs b/QSB/QuantumSync/WorldObjects/QSBQuantumObject.cs index 66c4b9a8..01cf5a7c 100644 --- a/QSB/QuantumSync/WorldObjects/QSBQuantumObject.cs +++ b/QSB/QuantumSync/WorldObjects/QSBQuantumObject.cs @@ -38,57 +38,6 @@ namespace QSB.QuantumSync.WorldObjects public override void Init() { - if (QSBCore.ShowQuantumVisibilityObjects) - { - var debugBundle = QSBCore.DebugAssetBundle; - var sphere = debugBundle.LoadAsset("Assets/Prefabs/Sphere.prefab"); - var cube = debugBundle.LoadAsset("Assets/Prefabs/Cube.prefab"); - var capsule = debugBundle.LoadAsset("Assets/Prefabs/Capsule.prefab"); - - if (cube == null) - { - DebugLog.DebugWrite($"CUBE IS NULL"); - } - - if (sphere == null) - { - DebugLog.DebugWrite($"SPHERE IS NULL"); - } - - if (capsule == null) - { - DebugLog.DebugWrite($"CAPSULE IS NULL"); - } - - foreach (var shape in GetAttachedShapes()) - { - if (shape is BoxShape boxShape) - { - var newCube = Object.Instantiate(cube); - newCube.transform.parent = shape.transform; - newCube.transform.localPosition = Vector3.zero; - newCube.transform.localRotation = Quaternion.Euler(0, 0, 0); - newCube.transform.localScale = boxShape.size; - } - else if (shape is SphereShape sphereShape) - { - var newSphere = Object.Instantiate(sphere); - newSphere.transform.parent = shape.transform; - newSphere.transform.localPosition = Vector3.zero; - newSphere.transform.localRotation = Quaternion.Euler(0, 0, 0); - newSphere.transform.localScale = Vector3.one * (sphereShape.radius * 2); - } - else if (shape is CapsuleShape capsuleShape) - { - var newCapsule = Object.Instantiate(capsule); - newCapsule.transform.parent = shape.transform; - newCapsule.transform.localPosition = Vector3.zero; - newCapsule.transform.localRotation = Quaternion.Euler(0, 0, 0); - newCapsule.transform.localScale = new Vector3(capsuleShape.radius * 2, capsuleShape.height, capsuleShape.radius * 2); - } - } - } - StartDelayedReady(); QSBCore.UnityEvents.FireInNUpdates(LateInit, 5); } diff --git a/QSB/TimeSync/WakeUpSync.cs b/QSB/TimeSync/WakeUpSync.cs index 8bb8b663..c6e96e45 100644 --- a/QSB/TimeSync/WakeUpSync.cs +++ b/QSB/TimeSync/WakeUpSync.cs @@ -121,7 +121,7 @@ namespace QSB.TimeSync } else { - if (!QSBCore.SkipTitleScreen) + if (!QSBCore.AvoidTimeSync) { WakeUpOrSleep(); } diff --git a/QSB/Utility/DebugActions.cs b/QSB/Utility/DebugActions.cs index 4b6608d0..8466e55f 100644 --- a/QSB/Utility/DebugActions.cs +++ b/QSB/Utility/DebugActions.cs @@ -31,16 +31,18 @@ namespace QSB.Utility private void DamageShipElectricalSystem() => ShipManager.Instance.ShipElectricalComponent.SetDamaged(true); - private void Awake() - { - if (!QSBCore.DebugMode) - { - Destroy(this); - } - } - public void Update() { + if (Keyboard.current[Key.Q].isPressed && Keyboard.current[Key.D].wasPressedThisFrame) + { + QSBCore.ToggleDebug(); + } + + if (!QSBCore.DebugMode) + { + return; + } + /* * 1 - Warp to first non local player * 2 - Set time flowing @@ -51,7 +53,7 @@ namespace QSB.Utility * 7 - Warp to vessel * 8 - Place warp core into vessel * 9 - Load eye scene - * 0 - + * 0 - Die */ if (Keyboard.current[Key.Numpad1].wasPressedThisFrame) @@ -115,6 +117,11 @@ namespace QSB.Utility LoadManager.LoadSceneAsync(OWScene.EyeOfTheUniverse, true, LoadManager.FadeType.ToWhite); } } + + if (Keyboard.current[Key.Numpad0].wasPressedThisFrame) + { + Locator.GetDeathManager().KillPlayer(DeathType.Default); + } } } } diff --git a/QSB/Utility/DebugCameraSettings.cs b/QSB/Utility/DebugCameraSettings.cs index d3f86e1f..30776767 100644 --- a/QSB/Utility/DebugCameraSettings.cs +++ b/QSB/Utility/DebugCameraSettings.cs @@ -4,16 +4,29 @@ namespace QSB.Utility { internal class DebugCameraSettings : MonoBehaviour { - void Start() + public static void UpdateFromDebugSetting() { if (QSBCore.GreySkybox) { QSBSceneManager.OnSceneLoaded += OnSceneLoaded; Camera.main.backgroundColor = Color.gray; } + else + { + QSBSceneManager.OnSceneLoaded -= OnSceneLoaded; + Camera.main.backgroundColor = _origColor; + } } - private void OnSceneLoaded(OWScene arg1, OWScene arg2, bool arg3) + private static Color _origColor; + + private void Start() + { + _origColor = Camera.main.backgroundColor; + UpdateFromDebugSetting(); + } + + private static void OnSceneLoaded(OWScene arg1, OWScene arg2, bool arg3) => Camera.main.backgroundColor = Color.gray; } } diff --git a/QSB/Utility/DebugGUI.cs b/QSB/Utility/DebugGUI.cs index ba9b73ec..490e9c6e 100644 --- a/QSB/Utility/DebugGUI.cs +++ b/QSB/Utility/DebugGUI.cs @@ -30,16 +30,7 @@ namespace QSB.Utility private readonly GUIStyle guiGUIStyle = new(); private static readonly GUIStyle labelGUIStyle = new(); - private void Awake() - { - if (!QSBCore.DebugMode) - { - Destroy(this); - return; - } - - guiGUIStyle.fontSize = 9; - } + private void Awake() => guiGUIStyle.fontSize = 9; private void WriteLine(int columnID, string text) { @@ -81,7 +72,8 @@ namespace QSB.Utility public void OnGUI() { - if (Event.current.type != EventType.Repaint) + if (!QSBCore.DebugMode || + Event.current.type != EventType.Repaint) { return; } From a9ed275eb8646469e47c9e8b3356e142c4bfac6a Mon Sep 17 00:00:00 2001 From: JohnCorby Date: Tue, 18 Jan 2022 16:19:49 -0800 Subject: [PATCH 08/23] disable and enable debug stuff --- QSB/QSBCore.cs | 18 +++++++++++++----- QSB/Utility/DebugActions.cs | 13 +++---------- QSB/Utility/DebugGUI.cs | 10 +++++++--- 3 files changed, 23 insertions(+), 18 deletions(-) diff --git a/QSB/QSBCore.cs b/QSB/QSBCore.cs index e4b670e2..60bfd4a5 100644 --- a/QSB/QSBCore.cs +++ b/QSB/QSBCore.cs @@ -14,8 +14,10 @@ using QSB.StatueSync; using QSB.TimeSync; using QSB.Utility; using QSB.WorldSync; +using System; using System.Linq; using UnityEngine; +using UnityEngine.InputSystem; /* Copyright (C) 2020 - 2021 @@ -150,14 +152,20 @@ namespace QSB } } - public static void ToggleDebug() + private void Update() { - DebugSettings.DebugMode = !DebugSettings.DebugMode; + if (Keyboard.current[Key.Q].isPressed && Keyboard.current[Key.D].isPressed && + (Keyboard.current[Key.Q].wasPressedThisFrame || Keyboard.current[Key.D].wasPressedThisFrame)) + { + DebugSettings.DebugMode = !DebugSettings.DebugMode; - QuantumManager.UpdateFromDebugSetting(); - DebugCameraSettings.UpdateFromDebugSetting(); + GetComponent().enabled = DebugMode; + GetComponent().enabled = DebugMode; + QuantumManager.UpdateFromDebugSetting(); + DebugCameraSettings.UpdateFromDebugSetting(); - DebugLog.ToConsole($"DEBUG MODE = {DebugMode}"); + DebugLog.ToConsole($"DEBUG MODE = {DebugMode}"); + } } } } diff --git a/QSB/Utility/DebugActions.cs b/QSB/Utility/DebugActions.cs index 8466e55f..3dfbe160 100644 --- a/QSB/Utility/DebugActions.cs +++ b/QSB/Utility/DebugActions.cs @@ -2,6 +2,7 @@ using QSB.Player; using QSB.ShipSync; using QSB.Utility.Messages; +using System; using System.Linq; using UnityEngine; using UnityEngine.InputSystem; @@ -31,18 +32,10 @@ namespace QSB.Utility private void DamageShipElectricalSystem() => ShipManager.Instance.ShipElectricalComponent.SetDamaged(true); + private void Awake() => enabled = QSBCore.DebugMode; + public void Update() { - if (Keyboard.current[Key.Q].isPressed && Keyboard.current[Key.D].wasPressedThisFrame) - { - QSBCore.ToggleDebug(); - } - - if (!QSBCore.DebugMode) - { - return; - } - /* * 1 - Warp to first non local player * 2 - Set time flowing diff --git a/QSB/Utility/DebugGUI.cs b/QSB/Utility/DebugGUI.cs index 490e9c6e..b8ed780d 100644 --- a/QSB/Utility/DebugGUI.cs +++ b/QSB/Utility/DebugGUI.cs @@ -30,7 +30,12 @@ namespace QSB.Utility private readonly GUIStyle guiGUIStyle = new(); private static readonly GUIStyle labelGUIStyle = new(); - private void Awake() => guiGUIStyle.fontSize = 9; + private void Awake() + { + enabled = QSBCore.DebugMode; + + guiGUIStyle.fontSize = 9; + } private void WriteLine(int columnID, string text) { @@ -72,8 +77,7 @@ namespace QSB.Utility public void OnGUI() { - if (!QSBCore.DebugMode || - Event.current.type != EventType.Repaint) + if (Event.current.type != EventType.Repaint) { return; } From 080f72cb5bcf21f2342683d5d0eff4ba5ccccc8e Mon Sep 17 00:00:00 2001 From: JohnCorby Date: Tue, 18 Jan 2022 17:34:26 -0800 Subject: [PATCH 09/23] better profile/platform handling --- QSB/Menus/MenuManager.cs | 10 +++--- QSB/Player/GamePlatform.cs | 4 ++- QSB/QSBCore.cs | 34 ++++++++++++++++--- QSB/QSBNetworkManager.cs | 24 ++++++++++--- .../Messages/RequestGameStateMessage.cs | 2 +- QSB/debugsettings.json | 2 +- 6 files changed, 60 insertions(+), 16 deletions(-) diff --git a/QSB/Menus/MenuManager.cs b/QSB/Menus/MenuManager.cs index bcef3789..c7f5e443 100644 --- a/QSB/Menus/MenuManager.cs +++ b/QSB/Menus/MenuManager.cs @@ -235,7 +235,7 @@ namespace QSB.Menus if (QSBCore.IsHost) { - SetButtonActive(ResumeGameButton, StandaloneProfileManager.SharedInstance.currentProfileGameSave.loopCount > 1); + SetButtonActive(ResumeGameButton, QSBCore.ProfileManager.currentProfileGameSave.loopCount > 1); SetButtonActive(NewGameButton, true); } else @@ -247,7 +247,7 @@ namespace QSB.Menus else { SetButtonActive(ClientButton, true); - SetButtonActive(ResumeGameButton, StandaloneProfileManager.SharedInstance.currentProfileGameSave.loopCount > 1); + SetButtonActive(ResumeGameButton, QSBCore.ProfileManager.currentProfileGameSave.loopCount > 1); SetButtonActive(NewGameButton, true); } @@ -351,7 +351,7 @@ namespace QSB.Menus { KickReason.QSBVersionNotMatching => "Server refused connection as QSB version does not match.", KickReason.GameVersionNotMatching => "Server refused connection as Outer Wilds version does not match.", - KickReason.GamePlatformNotMatching => "Server refused connection as Outer Wilds platform does not match. (Steam/Epic)", + KickReason.GamePlatformNotMatching => "Server refused connection as Outer Wilds platform does not match. (Steam/Epic/Xbox/PS4)", KickReason.DLCNotMatching => "Server refused connection as DLC installation state does not match.", KickReason.InEye => "Server refused connection as game has progressed too far.", KickReason.None => "Kicked from server. No reason given.", @@ -383,7 +383,7 @@ namespace QSB.Menus SetButtonActive(ClientButton, true); SetButtonActive(QuitButton, true); SetButtonActive(HostButton, true); - SetButtonActive(ResumeGameButton, StandaloneProfileManager.SharedInstance.currentProfileGameSave.loopCount > 1); + SetButtonActive(ResumeGameButton, QSBCore.ProfileManager.currentProfileGameSave.loopCount > 1); SetButtonActive(NewGameButton, true); } @@ -404,7 +404,7 @@ namespace QSB.Menus SetButtonActive(DisconnectButton, false); SetButtonActive(ClientButton, true); SetButtonActive(HostButton, true); - SetButtonActive(ResumeGameButton, StandaloneProfileManager.SharedInstance.currentProfileGameSave.loopCount > 1); + SetButtonActive(ResumeGameButton, QSBCore.ProfileManager.currentProfileGameSave.loopCount > 1); SetButtonActive(NewGameButton, true); SetButtonActive(QuitButton, true); break; diff --git a/QSB/Player/GamePlatform.cs b/QSB/Player/GamePlatform.cs index 0b3c8f52..e9ee7026 100644 --- a/QSB/Player/GamePlatform.cs +++ b/QSB/Player/GamePlatform.cs @@ -3,6 +3,8 @@ public enum GamePlatform { Steam, - Epic + Epic, + Xbox, + PS4 } } diff --git a/QSB/QSBCore.cs b/QSB/QSBCore.cs index 9eb0ba44..c2d8fa85 100644 --- a/QSB/QSBCore.cs +++ b/QSB/QSBCore.cs @@ -15,7 +15,7 @@ using QSB.Utility; using QSB.WorldSync; using QuantumUNET; using QuantumUNET.Components; -using System.Linq; +using System.Reflection; using UnityEngine; /* @@ -61,9 +61,8 @@ namespace QSB public static bool IsInMultiplayer => QNetworkManager.singleton.isNetworkActive; public static string QSBVersion => Helper.Manifest.Version; public static string GameVersion => Application.version; - public static GamePlatform Platform => typeof(Achievements).Assembly.GetTypes().Any(x => x.Name == "EpicEntitlementRetriever") - ? GamePlatform.Epic - : GamePlatform.Steam; + public static GamePlatform Platform { get; private set; } + public static IProfileManager ProfileManager { get; private set; } public static bool DLCInstalled => EntitlementsManager.IsDlcOwned() == EntitlementsManager.AsyncOwnershipStatus.Owned; public static IMenuAPI MenuApi { get; private set; } @@ -81,6 +80,33 @@ namespace QSB Helper = ModHelper; DebugLog.ToConsole($"* Start of QSB version {QSBVersion} - authored by {Helper.Manifest.Author}", MessageType.Info); + switch (EntitlementsManager.instance._entitlementRetriever.GetType().Name) + { + case "EpicEntitlementRetriever": + Platform = GamePlatform.Epic; + break; + case "SteamEntitlementRetriever": + Platform = GamePlatform.Steam; + break; + case "MSStoreEntitlementRetriever": + Platform = GamePlatform.Xbox; + break; + case var other: + DebugLog.ToConsole($"Cannot get game platform (entitlement retriever name = {other})\nTell a QSB Dev!", MessageType.Error); + enabled = false; + return; + } + + if (Platform == GamePlatform.Xbox) + { + ProfileManager = (IProfileManager)typeof(IProfileManager).Assembly.GetType("MSStoreProfileManager") + .GetProperty("SharedInstance", BindingFlags.Public | BindingFlags.Static).GetValue(null); + } + else + { + ProfileManager = StandaloneProfileManager.SharedInstance; + } + MenuApi = ModHelper.Interaction.GetModApi("_nebula.MenuFramework"); NetworkAssetBundle = Helper.Assets.LoadBundle("AssetBundles/network"); diff --git a/QSB/QSBNetworkManager.cs b/QSB/QSBNetworkManager.cs index 13e98317..ab33194c 100644 --- a/QSB/QSBNetworkManager.cs +++ b/QSB/QSBNetworkManager.cs @@ -1,4 +1,5 @@ using OWML.Common; +using OWML.Utils; using QSB.Anglerfish.TransformSync; using QSB.AuthoritySync; using QSB.ClientServerStateSync; @@ -22,6 +23,7 @@ using QSB.WorldSync; using QuantumUNET; using QuantumUNET.Components; using System; +using System.Reflection; using UnityEngine; using UnityEngine.Networking; @@ -84,11 +86,25 @@ namespace QSB { try { - var profileManager = StandaloneProfileManager.SharedInstance; + var profileManager = QSBCore.ProfileManager; profileManager.Initialize(); - var profile = profileManager._currentProfile; - var profileName = profile.profileName; - return profileName; + + if (profileManager.GetType().Name == "MSStoreProfileManager") + { + return (string)profileManager.GetType() + .GetProperty("userDisplayName", BindingFlags.Public | BindingFlags.Instance) + .GetValue(profileManager); + } + + if (profileManager is StandaloneProfileManager standaloneProfileManager) + { + var profile = standaloneProfileManager._currentProfile; + var profileName = profile.profileName; + return profileName; + } + + DebugLog.ToConsole($"Cannot get player name (profile manager type = {profileManager.GetType().Name})\nTell a QSB Dev!", MessageType.Error); + return "Player"; } catch (Exception ex) { diff --git a/QSB/SaveSync/Messages/RequestGameStateMessage.cs b/QSB/SaveSync/Messages/RequestGameStateMessage.cs index e8427a1f..0586b5ad 100644 --- a/QSB/SaveSync/Messages/RequestGameStateMessage.cs +++ b/QSB/SaveSync/Messages/RequestGameStateMessage.cs @@ -16,7 +16,7 @@ namespace QSB.SaveSync.Messages { new GameStateMessage(From).Send(); - var gameSave = StandaloneProfileManager.SharedInstance.currentProfileGameSave; + var gameSave = QSBCore.ProfileManager.currentProfileGameSave; var factSaves = gameSave.shipLogFactSaves; foreach (var item in factSaves) diff --git a/QSB/debugsettings.json b/QSB/debugsettings.json index 83450b52..c0e634d9 100644 --- a/QSB/debugsettings.json +++ b/QSB/debugsettings.json @@ -1,5 +1,5 @@ { - "debugMode": true, + "debugMode": false, "drawLines": false, "showQuantumVisibilityObjects": false, "showDebugLabels": false, From ba452fad2da60629a478051f03af1c4017452f36 Mon Sep 17 00:00:00 2001 From: JohnCorby Date: Tue, 18 Jan 2022 17:53:10 -0800 Subject: [PATCH 10/23] use PlayerData instead of profile manager --- QSB/Menus/MenuManager.cs | 9 ++++---- QSB/QSBCore.cs | 12 ---------- QSB/QSBNetworkManager.cs | 23 ++++--------------- QSB/SaveSync/Messages/GameStateMessage.cs | 4 ++-- .../Messages/RequestGameStateMessage.cs | 2 +- 5 files changed, 12 insertions(+), 38 deletions(-) diff --git a/QSB/Menus/MenuManager.cs b/QSB/Menus/MenuManager.cs index c7f5e443..06ed803f 100644 --- a/QSB/Menus/MenuManager.cs +++ b/QSB/Menus/MenuManager.cs @@ -3,7 +3,6 @@ using QSB.Player; using QSB.Player.TransformSync; using QSB.SaveSync.Messages; using QSB.Utility; -using System.Linq; using System.Text; using System.Text.RegularExpressions; using UnityEngine; @@ -235,7 +234,7 @@ namespace QSB.Menus if (QSBCore.IsHost) { - SetButtonActive(ResumeGameButton, QSBCore.ProfileManager.currentProfileGameSave.loopCount > 1); + QSBCore.UnityEvents.RunWhen(PlayerData.IsLoaded, () => SetButtonActive(ResumeGameButton, PlayerData.LoadLoopCount() > 1)); SetButtonActive(NewGameButton, true); } else @@ -247,7 +246,7 @@ namespace QSB.Menus else { SetButtonActive(ClientButton, true); - SetButtonActive(ResumeGameButton, QSBCore.ProfileManager.currentProfileGameSave.loopCount > 1); + QSBCore.UnityEvents.RunWhen(PlayerData.IsLoaded, () => SetButtonActive(ResumeGameButton, PlayerData.LoadLoopCount() > 1)); SetButtonActive(NewGameButton, true); } @@ -383,7 +382,7 @@ namespace QSB.Menus SetButtonActive(ClientButton, true); SetButtonActive(QuitButton, true); SetButtonActive(HostButton, true); - SetButtonActive(ResumeGameButton, QSBCore.ProfileManager.currentProfileGameSave.loopCount > 1); + SetButtonActive(ResumeGameButton, PlayerData.LoadLoopCount() > 1); SetButtonActive(NewGameButton, true); } @@ -404,7 +403,7 @@ namespace QSB.Menus SetButtonActive(DisconnectButton, false); SetButtonActive(ClientButton, true); SetButtonActive(HostButton, true); - SetButtonActive(ResumeGameButton, QSBCore.ProfileManager.currentProfileGameSave.loopCount > 1); + SetButtonActive(ResumeGameButton, PlayerData.LoadLoopCount() > 1); SetButtonActive(NewGameButton, true); SetButtonActive(QuitButton, true); break; diff --git a/QSB/QSBCore.cs b/QSB/QSBCore.cs index c2d8fa85..ca557c37 100644 --- a/QSB/QSBCore.cs +++ b/QSB/QSBCore.cs @@ -15,7 +15,6 @@ using QSB.Utility; using QSB.WorldSync; using QuantumUNET; using QuantumUNET.Components; -using System.Reflection; using UnityEngine; /* @@ -62,7 +61,6 @@ namespace QSB public static string QSBVersion => Helper.Manifest.Version; public static string GameVersion => Application.version; public static GamePlatform Platform { get; private set; } - public static IProfileManager ProfileManager { get; private set; } public static bool DLCInstalled => EntitlementsManager.IsDlcOwned() == EntitlementsManager.AsyncOwnershipStatus.Owned; public static IMenuAPI MenuApi { get; private set; } @@ -97,16 +95,6 @@ namespace QSB return; } - if (Platform == GamePlatform.Xbox) - { - ProfileManager = (IProfileManager)typeof(IProfileManager).Assembly.GetType("MSStoreProfileManager") - .GetProperty("SharedInstance", BindingFlags.Public | BindingFlags.Static).GetValue(null); - } - else - { - ProfileManager = StandaloneProfileManager.SharedInstance; - } - MenuApi = ModHelper.Interaction.GetModApi("_nebula.MenuFramework"); NetworkAssetBundle = Helper.Assets.LoadBundle("AssetBundles/network"); diff --git a/QSB/QSBNetworkManager.cs b/QSB/QSBNetworkManager.cs index ab33194c..0e8f7c54 100644 --- a/QSB/QSBNetworkManager.cs +++ b/QSB/QSBNetworkManager.cs @@ -86,25 +86,12 @@ namespace QSB { try { - var profileManager = QSBCore.ProfileManager; + // BUG: this doesnt work for xbox + var profileManager = StandaloneProfileManager.SharedInstance; profileManager.Initialize(); - - if (profileManager.GetType().Name == "MSStoreProfileManager") - { - return (string)profileManager.GetType() - .GetProperty("userDisplayName", BindingFlags.Public | BindingFlags.Instance) - .GetValue(profileManager); - } - - if (profileManager is StandaloneProfileManager standaloneProfileManager) - { - var profile = standaloneProfileManager._currentProfile; - var profileName = profile.profileName; - return profileName; - } - - DebugLog.ToConsole($"Cannot get player name (profile manager type = {profileManager.GetType().Name})\nTell a QSB Dev!", MessageType.Error); - return "Player"; + var profile = profileManager._currentProfile; + var profileName = profile.profileName; + return profileName; } catch (Exception ex) { diff --git a/QSB/SaveSync/Messages/GameStateMessage.cs b/QSB/SaveSync/Messages/GameStateMessage.cs index 825e851c..12f6355a 100644 --- a/QSB/SaveSync/Messages/GameStateMessage.cs +++ b/QSB/SaveSync/Messages/GameStateMessage.cs @@ -22,7 +22,7 @@ namespace QSB.SaveSync.Messages public GameStateMessage(uint toId) { To = toId; - var gameSave = StandaloneProfileManager.SharedInstance.currentProfileGameSave; + var gameSave = PlayerData._currentGameSave; WarpedToTheEye = gameSave.warpedToTheEye; SecondsRemainingOnWarp = gameSave.secondsRemainingOnWarp; LaunchCodesGiven = PlayerData.KnowsLaunchCodes(); @@ -89,7 +89,7 @@ namespace QSB.SaveSync.Messages PlayerData.ResetGame(); - var gameSave = StandaloneProfileManager.SharedInstance.currentProfileGameSave; + var gameSave = PlayerData._currentGameSave; gameSave.loopCount = LoopCount; gameSave.knownFrequencies = KnownFrequencies; gameSave.knownSignals = KnownSignals; diff --git a/QSB/SaveSync/Messages/RequestGameStateMessage.cs b/QSB/SaveSync/Messages/RequestGameStateMessage.cs index 0586b5ad..c0223096 100644 --- a/QSB/SaveSync/Messages/RequestGameStateMessage.cs +++ b/QSB/SaveSync/Messages/RequestGameStateMessage.cs @@ -16,7 +16,7 @@ namespace QSB.SaveSync.Messages { new GameStateMessage(From).Send(); - var gameSave = QSBCore.ProfileManager.currentProfileGameSave; + var gameSave = PlayerData._currentGameSave; var factSaves = gameSave.shipLogFactSaves; foreach (var item in factSaves) From 1d7cb4bf91def9251d9348e694888ae8fa8bc144 Mon Sep 17 00:00:00 2001 From: JohnCorby Date: Tue, 18 Jan 2022 17:54:41 -0800 Subject: [PATCH 11/23] remove ps4 platform --- QSB/Menus/MenuManager.cs | 2 +- QSB/Player/GamePlatform.cs | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/QSB/Menus/MenuManager.cs b/QSB/Menus/MenuManager.cs index 06ed803f..9f02ef5c 100644 --- a/QSB/Menus/MenuManager.cs +++ b/QSB/Menus/MenuManager.cs @@ -350,7 +350,7 @@ namespace QSB.Menus { KickReason.QSBVersionNotMatching => "Server refused connection as QSB version does not match.", KickReason.GameVersionNotMatching => "Server refused connection as Outer Wilds version does not match.", - KickReason.GamePlatformNotMatching => "Server refused connection as Outer Wilds platform does not match. (Steam/Epic/Xbox/PS4)", + KickReason.GamePlatformNotMatching => "Server refused connection as Outer Wilds platform does not match. (Steam/Epic/Xbox)", KickReason.DLCNotMatching => "Server refused connection as DLC installation state does not match.", KickReason.InEye => "Server refused connection as game has progressed too far.", KickReason.None => "Kicked from server. No reason given.", diff --git a/QSB/Player/GamePlatform.cs b/QSB/Player/GamePlatform.cs index e9ee7026..6fab0005 100644 --- a/QSB/Player/GamePlatform.cs +++ b/QSB/Player/GamePlatform.cs @@ -4,7 +4,6 @@ { Steam, Epic, - Xbox, - PS4 + Xbox } } From 6c2a933c4fa0079157a650a21480ec5cf678d362 Mon Sep 17 00:00:00 2001 From: JohnCorby Date: Tue, 18 Jan 2022 18:29:14 -0800 Subject: [PATCH 12/23] player name --- QSB/QSBNetworkManager.cs | 37 ++++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/QSB/QSBNetworkManager.cs b/QSB/QSBNetworkManager.cs index 0e8f7c54..ff4e4f3c 100644 --- a/QSB/QSBNetworkManager.cs +++ b/QSB/QSBNetworkManager.cs @@ -57,7 +57,7 @@ namespace QSB base.Awake(); Instance = this; - PlayerName = GetPlayerName(); + InitPlayerName(); playerPrefab = QSBCore.NetworkAssetBundle.LoadAsset("Assets/Prefabs/NETWORK_Player_Body.prefab"); @@ -82,22 +82,29 @@ namespace QSB ConfigureNetworkManager(); } - private string GetPlayerName() + private void InitPlayerName() { - try + QSBCore.UnityEvents.RunWhen(PlayerData.IsLoaded, () => { - // BUG: this doesnt work for xbox - var profileManager = StandaloneProfileManager.SharedInstance; - profileManager.Initialize(); - var profile = profileManager._currentProfile; - var profileName = profile.profileName; - return profileName; - } - catch (Exception ex) - { - DebugLog.ToConsole($"Error - Exception when getting player name : {ex}", MessageType.Error); - return "Player"; - } + try + { + var titleScreenManager = FindObjectOfType(); + var profileManager = titleScreenManager._profileManager; + if (profileManager.GetType().Name == "MSStoreProfileManager") + { + PlayerName = (string)profileManager.GetType().GetProperty("userDisplayName").GetValue(profileManager); + } + else + { + PlayerName = StandaloneProfileManager.SharedInstance.currentProfile.profileName; + } + } + catch (Exception ex) + { + DebugLog.ToConsole($"Error - Exception when getting player name : {ex}", MessageType.Error); + PlayerName = "Player"; + } + }); } /// create a new network prefab from the network object prefab template. From 32234eb3572e8ba70f83026feea3ed2f535b219a Mon Sep 17 00:00:00 2001 From: JohnCorby Date: Tue, 18 Jan 2022 18:30:07 -0800 Subject: [PATCH 13/23] version bump --- QSB/manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/QSB/manifest.json b/QSB/manifest.json index e694ff9d..caa64568 100644 --- a/QSB/manifest.json +++ b/QSB/manifest.json @@ -7,7 +7,7 @@ "body": "- Disable *all* other mods. (Can heavily affect performance)\n- Make sure you are not running any other network-intensive applications.\n- Make sure you have forwarded/opened the correct ports. (See the GitHub readme.)" }, "uniqueName": "Raicuparta.QuantumSpaceBuddies", - "version": "0.15.0", + "version": "0.15.1", "owmlVersion": "2.3.1", "dependencies": [ "_nebula.MenuFramework" ] } From 986ce105ed175f865c02253b74a4f446a179a9a4 Mon Sep 17 00:00:00 2001 From: JohnCorby Date: Tue, 18 Jan 2022 18:47:45 -0800 Subject: [PATCH 14/23] oops --- QSB/QSBNetworkManager.cs | 1 - QSB/Utility/DebugActions.cs | 1 - 2 files changed, 2 deletions(-) diff --git a/QSB/QSBNetworkManager.cs b/QSB/QSBNetworkManager.cs index 0ac1fd23..f6714e46 100644 --- a/QSB/QSBNetworkManager.cs +++ b/QSB/QSBNetworkManager.cs @@ -14,7 +14,6 @@ using QSB.Patches; using QSB.Player; using QSB.Player.Messages; using QSB.Player.TransformSync; -using QSB.PoolSync; using QSB.ShipSync.TransformSync; using QSB.TimeSync; using QSB.Tools.ProbeTool.TransformSync; diff --git a/QSB/Utility/DebugActions.cs b/QSB/Utility/DebugActions.cs index 3dfbe160..773f390c 100644 --- a/QSB/Utility/DebugActions.cs +++ b/QSB/Utility/DebugActions.cs @@ -2,7 +2,6 @@ using QSB.Player; using QSB.ShipSync; using QSB.Utility.Messages; -using System; using System.Linq; using UnityEngine; using UnityEngine.InputSystem; From a40a660b5821e52f0a78c66c4de441e224b353a1 Mon Sep 17 00:00:00 2001 From: JohnCorby Date: Thu, 20 Jan 2022 12:31:19 -0800 Subject: [PATCH 15/23] you have to press q before pressing debug button --- QSB/QSBCore.cs | 3 +-- QSB/Utility/DebugActions.cs | 5 +++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/QSB/QSBCore.cs b/QSB/QSBCore.cs index 9600e009..ee753386 100644 --- a/QSB/QSBCore.cs +++ b/QSB/QSBCore.cs @@ -169,8 +169,7 @@ namespace QSB private void Update() { - if (Keyboard.current[Key.Q].isPressed && Keyboard.current[Key.D].isPressed && - (Keyboard.current[Key.Q].wasPressedThisFrame || Keyboard.current[Key.D].wasPressedThisFrame)) + if (Keyboard.current[Key.Q].isPressed && Keyboard.current[Key.D].wasPressedThisFrame) { DebugSettings.DebugMode = !DebugSettings.DebugMode; diff --git a/QSB/Utility/DebugActions.cs b/QSB/Utility/DebugActions.cs index 773f390c..d1b59e55 100644 --- a/QSB/Utility/DebugActions.cs +++ b/QSB/Utility/DebugActions.cs @@ -35,6 +35,11 @@ namespace QSB.Utility public void Update() { + if (!Keyboard.current[Key.Q].isPressed) + { + return; + } + /* * 1 - Warp to first non local player * 2 - Set time flowing From e3887af5556cb43f53032fcc97ecc40dad9dca36 Mon Sep 17 00:00:00 2001 From: JohnCorby Date: Tue, 18 Jan 2022 01:16:24 -0800 Subject: [PATCH 16/23] SafeInvoke: print whole exception --- QSB/Utility/Extensions.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/QSB/Utility/Extensions.cs b/QSB/Utility/Extensions.cs index 8f4becab..2bdca246 100644 --- a/QSB/Utility/Extensions.cs +++ b/QSB/Utility/Extensions.cs @@ -51,7 +51,7 @@ namespace QSB.Utility } catch (TargetInvocationException ex) { - DebugLog.ToConsole($"Error invoking delegate! Message : {ex.InnerException!.Message} Stack Trace : {ex.InnerException.StackTrace}", MessageType.Error); + DebugLog.ToConsole($"Error invoking delegate! {ex.InnerException}", MessageType.Error); } } } From d6315a06bf403c539f1bd2231052f180cb9e0d4c Mon Sep 17 00:00:00 2001 From: JohnCorby Date: Thu, 20 Jan 2022 12:48:22 -0800 Subject: [PATCH 17/23] use Exception.ToString since that prints message and stacktrace --- QSB/WorldSync/QSBWorldSync.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/QSB/WorldSync/QSBWorldSync.cs b/QSB/WorldSync/QSBWorldSync.cs index d99eebef..b563c939 100644 --- a/QSB/WorldSync/QSBWorldSync.cs +++ b/QSB/WorldSync/QSBWorldSync.cs @@ -57,7 +57,7 @@ namespace QSB.WorldSync } catch (Exception ex) { - DebugLog.ToConsole($"Exception - Exception when trying to build WorldObjects of manager {manager.GetType().Name} : {ex.Message} Stacktrace :\r\n{ex.StackTrace}", MessageType.Error); + DebugLog.ToConsole($"Exception - Exception when trying to build WorldObjects of manager {manager.GetType().Name} : {ex}", MessageType.Error); } } @@ -96,7 +96,7 @@ namespace QSB.WorldSync } catch (Exception e) { - DebugLog.ToConsole($"Error - Exception in OnRemoval() for {item.GetType()}. Message : {e.Message}, Stack trace : {e.StackTrace}", MessageType.Error); + DebugLog.ToConsole($"Error - Exception in OnRemoval() for {item.GetType()}. {e}", MessageType.Error); } } From 44b1a8714eb83f9ae7e1dcf88e467b767e5fe62b Mon Sep 17 00:00:00 2001 From: JohnCorby Date: Thu, 20 Jan 2022 13:22:58 -0800 Subject: [PATCH 18/23] ship probe launcher --- QSB/Tools/ProbeLauncherTool/ProbeLauncherManager.cs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/QSB/Tools/ProbeLauncherTool/ProbeLauncherManager.cs b/QSB/Tools/ProbeLauncherTool/ProbeLauncherManager.cs index 7417773e..2005f1f8 100644 --- a/QSB/Tools/ProbeLauncherTool/ProbeLauncherManager.cs +++ b/QSB/Tools/ProbeLauncherTool/ProbeLauncherManager.cs @@ -1,5 +1,6 @@ using QSB.Tools.ProbeLauncherTool.WorldObjects; using QSB.WorldSync; +using System.Linq; namespace QSB.Tools.ProbeLauncherTool { @@ -8,6 +9,12 @@ namespace QSB.Tools.ProbeLauncherTool public override WorldObjectType WorldObjectType => WorldObjectType.Both; public override void BuildWorldObjects(OWScene scene) - => QSBWorldSync.Init(typeof(PlayerProbeLauncher)); + { + QSBWorldSync.Init(typeof(PlayerProbeLauncher)); + QSBWorldSync.Init(new[] + { + QSBWorldSync.GetUnityObjects().First().GetShipProbeLauncher() + }); + } } } \ No newline at end of file From 20083188c139e71f07c539fc164b0b33bc6f2926 Mon Sep 17 00:00:00 2001 From: JohnCorby Date: Thu, 20 Jan 2022 15:25:34 -0800 Subject: [PATCH 19/23] change state to lurking when setting target to null --- ...geStateMessage.cs => AnglerDataMessage.cs} | 7 +++-- QSB/Anglerfish/Patches/AnglerPatches.cs | 26 ++++++++++--------- 2 files changed, 19 insertions(+), 14 deletions(-) rename QSB/Anglerfish/Messages/{AnglerChangeStateMessage.cs => AnglerDataMessage.cs} (85%) diff --git a/QSB/Anglerfish/Messages/AnglerChangeStateMessage.cs b/QSB/Anglerfish/Messages/AnglerDataMessage.cs similarity index 85% rename from QSB/Anglerfish/Messages/AnglerChangeStateMessage.cs rename to QSB/Anglerfish/Messages/AnglerDataMessage.cs index 02295add..38615142 100644 --- a/QSB/Anglerfish/Messages/AnglerChangeStateMessage.cs +++ b/QSB/Anglerfish/Messages/AnglerDataMessage.cs @@ -6,12 +6,15 @@ using UnityEngine; namespace QSB.Anglerfish.Messages { - public class AnglerChangeStateMessage : QSBEnumWorldObjectMessage + /// + /// angler state, target transform, and local disturbance pos + /// + public class AnglerDataMessage : QSBEnumWorldObjectMessage { private uint TargetId; private Vector3 LocalDisturbancePos; - public AnglerChangeStateMessage(QSBAngler qsbAngler) + public AnglerDataMessage(QSBAngler qsbAngler) { Value = qsbAngler.AttachedObject._currentState; TargetId = TargetToId(qsbAngler.TargetTransform); diff --git a/QSB/Anglerfish/Patches/AnglerPatches.cs b/QSB/Anglerfish/Patches/AnglerPatches.cs index 7f7abfb4..2ac3c575 100644 --- a/QSB/Anglerfish/Patches/AnglerPatches.cs +++ b/QSB/Anglerfish/Patches/AnglerPatches.cs @@ -39,7 +39,8 @@ namespace QSB.Anglerfish.Patches if (qsbAngler.TargetTransform != null && sectorDetector.GetAttachedOWRigidbody().transform == qsbAngler.TargetTransform) { qsbAngler.TargetTransform = null; - qsbAngler.SendMessage(new AnglerChangeStateMessage(qsbAngler)); + __instance.ChangeState(AnglerfishController.AnglerState.Lurking); + qsbAngler.SendMessage(new AnglerDataMessage(qsbAngler)); } return false; @@ -62,7 +63,7 @@ namespace QSB.Anglerfish.Patches if ((__instance._brambleBody.transform.TransformPoint(__instance._localDisturbancePos) - __instance._anglerBody.GetPosition()).sqrMagnitude < __instance._arrivalDistance * __instance._arrivalDistance) { __instance.ChangeState(AnglerfishController.AnglerState.Lurking); - qsbAngler.SendMessage(new AnglerChangeStateMessage(qsbAngler)); + qsbAngler.SendMessage(new AnglerDataMessage(qsbAngler)); return false; } @@ -71,7 +72,7 @@ namespace QSB.Anglerfish.Patches if (qsbAngler.TargetTransform == null) { __instance.ChangeState(AnglerfishController.AnglerState.Lurking); - qsbAngler.SendMessage(new AnglerChangeStateMessage(qsbAngler)); + qsbAngler.SendMessage(new AnglerDataMessage(qsbAngler)); return false; } @@ -79,7 +80,7 @@ namespace QSB.Anglerfish.Patches { qsbAngler.TargetTransform = null; __instance.ChangeState(AnglerfishController.AnglerState.Lurking); - qsbAngler.SendMessage(new AnglerChangeStateMessage(qsbAngler)); + qsbAngler.SendMessage(new AnglerDataMessage(qsbAngler)); return false; } @@ -90,7 +91,7 @@ namespace QSB.Anglerfish.Patches if (qsbAngler.TargetTransform == null) { __instance.ChangeState(AnglerfishController.AnglerState.Lurking); - qsbAngler.SendMessage(new AnglerChangeStateMessage(qsbAngler)); + qsbAngler.SendMessage(new AnglerDataMessage(qsbAngler)); return false; } @@ -124,7 +125,8 @@ namespace QSB.Anglerfish.Patches else { qsbAngler.TargetTransform = null; - qsbAngler.SendMessage(new AnglerChangeStateMessage(qsbAngler)); + __instance.ChangeState(AnglerfishController.AnglerState.Lurking); + qsbAngler.SendMessage(new AnglerDataMessage(qsbAngler)); } break; @@ -135,12 +137,12 @@ namespace QSB.Anglerfish.Patches if (qsbAngler.TargetTransform != null) { __instance.ChangeState(AnglerfishController.AnglerState.Chasing); - qsbAngler.SendMessage(new AnglerChangeStateMessage(qsbAngler)); + qsbAngler.SendMessage(new AnglerDataMessage(qsbAngler)); return false; } __instance.ChangeState(AnglerfishController.AnglerState.Lurking); - qsbAngler.SendMessage(new AnglerChangeStateMessage(qsbAngler)); + qsbAngler.SendMessage(new AnglerDataMessage(qsbAngler)); } break; @@ -252,7 +254,7 @@ namespace QSB.Anglerfish.Patches { qsbAngler.TargetTransform = attachedOWRigidbody.transform; __instance.ChangeState(AnglerfishController.AnglerState.Chasing); - qsbAngler.SendMessage(new AnglerChangeStateMessage(qsbAngler)); + qsbAngler.SendMessage(new AnglerDataMessage(qsbAngler)); return false; } @@ -281,7 +283,7 @@ namespace QSB.Anglerfish.Patches __instance.ChangeState(AnglerfishController.AnglerState.Chasing); } - qsbAngler.SendMessage(new AnglerChangeStateMessage(qsbAngler)); + qsbAngler.SendMessage(new AnglerDataMessage(qsbAngler)); return false; } } @@ -293,7 +295,7 @@ namespace QSB.Anglerfish.Patches __instance.ChangeState(AnglerfishController.AnglerState.Investigating); } - qsbAngler.SendMessage(new AnglerChangeStateMessage(qsbAngler)); + qsbAngler.SendMessage(new AnglerDataMessage(qsbAngler)); } return false; @@ -321,7 +323,7 @@ namespace QSB.Anglerfish.Patches qsbAngler.TargetTransform = caughtBody.transform; __instance._consumeStartTime = Time.time; __instance.ChangeState(AnglerfishController.AnglerState.Consuming); - qsbAngler.SendMessage(new AnglerChangeStateMessage(qsbAngler)); + qsbAngler.SendMessage(new AnglerDataMessage(qsbAngler)); } return false; From c621761c25b561bc65c1fa1f9aedb8c621e7d673 Mon Sep 17 00:00:00 2001 From: JohnCorby Date: Thu, 20 Jan 2022 16:02:23 -0800 Subject: [PATCH 20/23] dont set IsRising in the transform sync. instead, do it in resync. --- .../Messages/JellyfishRisingMessage.cs | 3 +- QSB/JellyfishSync/Patches/JellyfishPatches.cs | 16 +++++----- .../TransformSync/JellyfishTransformSync.cs | 30 +------------------ .../WorldObjects/QSBJellyfish.cs | 19 ++++-------- .../Messages/RequestStateResyncMessage.cs | 24 +++++++++++++++ 5 files changed, 39 insertions(+), 53 deletions(-) diff --git a/QSB/JellyfishSync/Messages/JellyfishRisingMessage.cs b/QSB/JellyfishSync/Messages/JellyfishRisingMessage.cs index 01d60b8e..c571cf4a 100644 --- a/QSB/JellyfishSync/Messages/JellyfishRisingMessage.cs +++ b/QSB/JellyfishSync/Messages/JellyfishRisingMessage.cs @@ -7,7 +7,6 @@ namespace QSB.JellyfishSync.Messages { public JellyfishRisingMessage(bool isRising) => Value = isRising; - public override void OnReceiveRemote() => WorldObject.IsRising = Value; - + public override void OnReceiveRemote() => WorldObject.SetIsRising(Value); } } diff --git a/QSB/JellyfishSync/Patches/JellyfishPatches.cs b/QSB/JellyfishSync/Patches/JellyfishPatches.cs index 61eacaea..a4dfeb07 100644 --- a/QSB/JellyfishSync/Patches/JellyfishPatches.cs +++ b/QSB/JellyfishSync/Patches/JellyfishPatches.cs @@ -20,17 +20,16 @@ namespace QSB.JellyfishSync.Patches return true; } - var qsbJellyfish = __instance.GetWorldObject(); - var sqrMagnitude = (__instance._jellyfishBody.GetPosition() - __instance._planetBody.GetPosition()).sqrMagnitude; - if (qsbJellyfish.IsRising) + if (__instance._isRising) { __instance._jellyfishBody.AddAcceleration(__instance.transform.up * __instance._upwardsAcceleration); if (sqrMagnitude > __instance._upperLimit * __instance._upperLimit) { - qsbJellyfish.IsRising = false; - - qsbJellyfish.SendMessage(new JellyfishRisingMessage(qsbJellyfish.IsRising)); + __instance._isRising = false; + __instance._attractiveFluidVolume.SetVolumeActivation(true); + __instance.GetWorldObject().SendMessage(new JellyfishRisingMessage(false)); + return false; } } else @@ -38,8 +37,9 @@ namespace QSB.JellyfishSync.Patches __instance._jellyfishBody.AddAcceleration(-__instance.transform.up * __instance._downwardsAcceleration); if (sqrMagnitude < __instance._lowerLimit * __instance._lowerLimit) { - qsbJellyfish.IsRising = true; - qsbJellyfish.SendMessage(new JellyfishRisingMessage(qsbJellyfish.IsRising)); + __instance._isRising = true; + __instance._attractiveFluidVolume.SetVolumeActivation(false); + __instance.GetWorldObject().SendMessage(new JellyfishRisingMessage(true)); } } diff --git a/QSB/JellyfishSync/TransformSync/JellyfishTransformSync.cs b/QSB/JellyfishSync/TransformSync/JellyfishTransformSync.cs index 594f8e75..dde234a9 100644 --- a/QSB/JellyfishSync/TransformSync/JellyfishTransformSync.cs +++ b/QSB/JellyfishSync/TransformSync/JellyfishTransformSync.cs @@ -1,5 +1,4 @@ -using Mirror; -using QSB.AuthoritySync; +using QSB.AuthoritySync; using QSB.JellyfishSync.WorldObjects; using QSB.Syncs.Unsectored.Rigidbodies; using QSB.Utility; @@ -65,36 +64,9 @@ namespace QSB.JellyfishSync.TransformSync private void OnUnsuspend(OWRigidbody suspendedBody) => netIdentity.SendAuthQueueMessage(AuthQueueAction.Add); private void OnSuspend(OWRigidbody suspendedBody) => netIdentity.SendAuthQueueMessage(AuthQueueAction.Remove); - private bool _isRising; - - protected override void Serialize(NetworkWriter writer, bool initialState) - { - base.Serialize(writer, initialState); - - writer.Write(_isRising); - } - - protected override void Deserialize(NetworkReader reader, bool initialState) - { - base.Deserialize(reader, initialState); - - _isRising = reader.ReadBool(); - } - - protected override void GetFromAttached() - { - base.GetFromAttached(); - - _qsbJellyfish.Align = true; - _isRising = _qsbJellyfish.IsRising; - } - /// replacement using SetPosition/Rotation instead of Move protected override void ApplyToAttached() { - _qsbJellyfish.Align = false; - _qsbJellyfish.IsRising = _isRising; - var pos = ReferenceTransform.FromRelPos(transform.position); AttachedRigidbody.SetPosition(pos); AttachedRigidbody.SetRotation(ReferenceTransform.FromRelRot(transform.rotation)); diff --git a/QSB/JellyfishSync/WorldObjects/QSBJellyfish.cs b/QSB/JellyfishSync/WorldObjects/QSBJellyfish.cs index fc3130ef..1691da86 100644 --- a/QSB/JellyfishSync/WorldObjects/QSBJellyfish.cs +++ b/QSB/JellyfishSync/WorldObjects/QSBJellyfish.cs @@ -32,24 +32,15 @@ namespace QSB.JellyfishSync.WorldObjects } } - public bool IsRising + public void SetIsRising(bool value) { - get => AttachedObject._isRising; - set + if (AttachedObject._isRising == value) { - if (AttachedObject._isRising == value) - { - return; - } - - AttachedObject._isRising = value; - AttachedObject._attractiveFluidVolume.SetVolumeActivation(!value); + return; } - } - public bool Align - { - set => _alignWithTargetBody.enabled = value; + AttachedObject._isRising = value; + AttachedObject._attractiveFluidVolume.SetVolumeActivation(!value); } } } diff --git a/QSB/Player/Messages/RequestStateResyncMessage.cs b/QSB/Player/Messages/RequestStateResyncMessage.cs index deb3362b..15619a66 100644 --- a/QSB/Player/Messages/RequestStateResyncMessage.cs +++ b/QSB/Player/Messages/RequestStateResyncMessage.cs @@ -1,9 +1,13 @@ using OWML.Common; +using QSB.Anglerfish.Messages; +using QSB.Anglerfish.WorldObjects; using QSB.CampfireSync.Messages; using QSB.CampfireSync.WorldObjects; using QSB.ClientServerStateSync; using QSB.ClientServerStateSync.Messages; using QSB.ConversationSync.Messages; +using QSB.JellyfishSync.Messages; +using QSB.JellyfishSync.WorldObjects; using QSB.LogSync.Messages; using QSB.Messaging; using QSB.MeteorSync.Messages; @@ -148,6 +152,26 @@ namespace QSB.Player.Messages qsbOrb.SendMessage(new OrbDragMessage(qsbOrb.AttachedObject._isBeingDragged) { To = From }); qsbOrb.SendMessage(new OrbSlotMessage(qsbOrb.AttachedObject._slots.IndexOf(qsbOrb.AttachedObject._occupiedSlot)) { To = From }); } + + foreach (var qsbJellyfish in QSBWorldSync.GetWorldObjects()) + { + if (!qsbJellyfish.TransformSync.hasAuthority) + { + continue; + } + + qsbJellyfish.SendMessage(new JellyfishRisingMessage(qsbJellyfish.AttachedObject._isRising)); + } + + foreach (var qsbAngler in QSBWorldSync.GetWorldObjects()) + { + if (!qsbAngler.TransformSync.hasAuthority) + { + continue; + } + + qsbAngler.SendMessage(new AnglerDataMessage(qsbAngler)); + } } } } From f035f64d10077513ffae47c857a15b278b30657d Mon Sep 17 00:00:00 2001 From: JohnCorby Date: Thu, 20 Jan 2022 22:36:23 -0800 Subject: [PATCH 21/23] some cleanup --- QSB/Syncs/SyncBase.cs | 15 +++++++-------- QSB/WorldSync/WorldObject.cs | 5 ++--- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/QSB/Syncs/SyncBase.cs b/QSB/Syncs/SyncBase.cs index c2188e18..d71a3450 100644 --- a/QSB/Syncs/SyncBase.cs +++ b/QSB/Syncs/SyncBase.cs @@ -27,7 +27,7 @@ namespace QSB.Syncs { DebugLog.ToConsole($"Error - trying to get SyncBase.Player for {netId} before Start has been called! " + "this really should not be happening!\n" - + $"{Environment.StackTrace}", + + Environment.StackTrace, MessageType.Error); } @@ -173,8 +173,7 @@ namespace QSB.Syncs if (AttachedTransform == null) { - DebugLog.ToConsole($"Warning - AttachedObject {LogName} is null.", MessageType.Warning); - IsInitialized = false; + DebugLog.ToConsole($"Error - AttachedObject {LogName} is null!", MessageType.Error); return; } @@ -189,16 +188,16 @@ namespace QSB.Syncs return; } - if (ReferenceTransform != null && ReferenceTransform.position == Vector3.zero && ReferenceTransform != Locator.GetRootTransform()) - { - DebugLog.ToConsole($"Warning - {LogName}'s ReferenceTransform is at (0,0,0). ReferenceTransform:{ReferenceTransform.name}, AttachedObject:{AttachedTransform.name}", MessageType.Warning); - } - if (ReferenceTransform == Locator.GetRootTransform()) { return; } + if (ReferenceTransform != null && ReferenceTransform.position == Vector3.zero) + { + DebugLog.ToConsole($"Warning - {LogName}'s ReferenceTransform is at (0,0,0). ReferenceTransform:{ReferenceTransform.name}, AttachedObject:{AttachedTransform.name}", MessageType.Warning); + } + if (UseInterpolation) { SmoothPosition = SmartSmoothDamp(SmoothPosition, transform.position); diff --git a/QSB/WorldSync/WorldObject.cs b/QSB/WorldSync/WorldObject.cs index bff9a4c9..082cf670 100644 --- a/QSB/WorldSync/WorldObject.cs +++ b/QSB/WorldSync/WorldObject.cs @@ -1,5 +1,4 @@ -using QSB.Player; -using UnityEngine; +using UnityEngine; namespace QSB.WorldSync { @@ -9,7 +8,7 @@ namespace QSB.WorldSync public int ObjectId { get; init; } public T AttachedObject { get; init; } public string Name => AttachedObject == null ? "" : AttachedObject.name; - public string LogName => $"{QSBPlayerManager.LocalPlayerId}.{ObjectId}:{GetType().Name} ({Name})"; + public string LogName => $"{ObjectId}:{GetType().Name} ({Name})"; public virtual void Init() { } public virtual void OnRemoval() { } From c3422177ab71ee65097bfbd55d5827d81ddc82a3 Mon Sep 17 00:00:00 2001 From: JohnCorby Date: Thu, 20 Jan 2022 22:40:28 -0800 Subject: [PATCH 22/23] simplify ReferenceTransform check --- .../TransformSync/ShipTransformSync.cs | 3 +- QSB/Syncs/Sectored/BaseSectoredSync.cs | 9 +----- .../Rigidbodies/SectoredRigidbodySync.cs | 25 ++++++--------- .../Transforms/SectoredTransformSync.cs | 31 +++++-------------- 4 files changed, 19 insertions(+), 49 deletions(-) diff --git a/QSB/ShipSync/TransformSync/ShipTransformSync.cs b/QSB/ShipSync/TransformSync/ShipTransformSync.cs index 15592695..770110b7 100644 --- a/QSB/ShipSync/TransformSync/ShipTransformSync.cs +++ b/QSB/ShipSync/TransformSync/ShipTransformSync.cs @@ -31,8 +31,7 @@ namespace QSB.ShipSync.TransformSync protected override void ApplyToAttached() { ApplyToSector(); - - if (ReferenceTransform == null || transform.position == Vector3.zero) + if (!ReferenceTransform) { return; } diff --git a/QSB/Syncs/Sectored/BaseSectoredSync.cs b/QSB/Syncs/Sectored/BaseSectoredSync.cs index 8a2345ba..1c55d4ed 100644 --- a/QSB/Syncs/Sectored/BaseSectoredSync.cs +++ b/QSB/Syncs/Sectored/BaseSectoredSync.cs @@ -48,14 +48,7 @@ namespace QSB.Syncs.Sectored protected void GetFromSector() { - if (ReferenceSector != null) - { - _sectorId = ReferenceSector.ObjectId; - } - else - { - _sectorId = -1; - } + _sectorId = ReferenceSector?.ObjectId ?? -1; } protected void ApplyToSector() diff --git a/QSB/Syncs/Sectored/Rigidbodies/SectoredRigidbodySync.cs b/QSB/Syncs/Sectored/Rigidbodies/SectoredRigidbodySync.cs index 9c806564..c41d1bef 100644 --- a/QSB/Syncs/Sectored/Rigidbodies/SectoredRigidbodySync.cs +++ b/QSB/Syncs/Sectored/Rigidbodies/SectoredRigidbodySync.cs @@ -50,28 +50,21 @@ namespace QSB.Syncs.Sectored.Rigidbodies protected override void GetFromAttached() { GetFromSector(); + if (!ReferenceTransform) + { + return; + } - if (ReferenceTransform != null) - { - transform.position = ReferenceTransform.ToRelPos(AttachedRigidbody.GetPosition()); - transform.rotation = ReferenceTransform.ToRelRot(AttachedRigidbody.GetRotation()); - _relativeVelocity = ReferenceTransform.GetAttachedOWRigidbody().ToRelVel(AttachedRigidbody.GetVelocity(), AttachedRigidbody.GetPosition()); - _relativeAngularVelocity = ReferenceTransform.GetAttachedOWRigidbody().ToRelAngVel(AttachedRigidbody.GetAngularVelocity()); - } - else - { - transform.position = Vector3.zero; - transform.rotation = Quaternion.identity; - _relativeVelocity = Vector3.zero; - _relativeAngularVelocity = Vector3.zero; - } + transform.position = ReferenceTransform.ToRelPos(AttachedRigidbody.GetPosition()); + transform.rotation = ReferenceTransform.ToRelRot(AttachedRigidbody.GetRotation()); + _relativeVelocity = ReferenceTransform.GetAttachedOWRigidbody().ToRelVel(AttachedRigidbody.GetVelocity(), AttachedRigidbody.GetPosition()); + _relativeAngularVelocity = ReferenceTransform.GetAttachedOWRigidbody().ToRelAngVel(AttachedRigidbody.GetAngularVelocity()); } protected override void ApplyToAttached() { ApplyToSector(); - - if (ReferenceTransform == null || transform.position == Vector3.zero) + if (!ReferenceTransform) { return; } diff --git a/QSB/Syncs/Sectored/Transforms/SectoredTransformSync.cs b/QSB/Syncs/Sectored/Transforms/SectoredTransformSync.cs index c6fe7eb4..0f296acb 100644 --- a/QSB/Syncs/Sectored/Transforms/SectoredTransformSync.cs +++ b/QSB/Syncs/Sectored/Transforms/SectoredTransformSync.cs @@ -1,5 +1,4 @@ -using Mirror; -using QSB.Utility; +using QSB.Utility; using UnityEngine; namespace QSB.Syncs.Sectored.Transforms @@ -12,36 +11,22 @@ namespace QSB.Syncs.Sectored.Transforms protected override Transform InitAttachedTransform() => hasAuthority ? InitLocalTransform() : InitRemoteTransform(); - protected override void Deserialize(NetworkReader reader, bool initialState) - { - base.Deserialize(reader, initialState); - - if (transform.position == Vector3.zero) - { - } - } - protected override void GetFromAttached() { GetFromSector(); + if (!ReferenceTransform) + { + return; + } - if (ReferenceTransform != null) - { - transform.position = ReferenceTransform.ToRelPos(AttachedTransform.position); - transform.rotation = ReferenceTransform.ToRelRot(AttachedTransform.rotation); - } - else - { - transform.position = Vector3.zero; - transform.rotation = Quaternion.identity; - } + transform.position = ReferenceTransform.ToRelPos(AttachedTransform.position); + transform.rotation = ReferenceTransform.ToRelRot(AttachedTransform.rotation); } protected override void ApplyToAttached() { ApplyToSector(); - - if (ReferenceTransform == null || transform.position == Vector3.zero) + if (!ReferenceTransform) { return; } From 840ce8119e6c7599bc9117d3e803bd4e7dc01941 Mon Sep 17 00:00:00 2001 From: JohnCorby Date: Thu, 20 Jan 2022 22:41:21 -0800 Subject: [PATCH 23/23] dont move probe back to launcher when it's retrieved. it actually looks better this way for non-player-launchers --- QSB/Syncs/SyncBase.cs | 3 +- .../TransformSync/PlayerProbeSync.cs | 32 ------------------- 2 files changed, 1 insertion(+), 34 deletions(-) diff --git a/QSB/Syncs/SyncBase.cs b/QSB/Syncs/SyncBase.cs index d71a3450..390b95c3 100644 --- a/QSB/Syncs/SyncBase.cs +++ b/QSB/Syncs/SyncBase.cs @@ -70,7 +70,6 @@ namespace QSB.Syncs protected abstract bool IsReady { get; } protected abstract bool UseInterpolation { get; } - protected virtual bool AllowDisabledAttachedObject => false; protected abstract bool AllowNullReferenceTransform { get; } protected virtual bool IsPlayerObject => false; protected virtual bool OnlyApplyOnDeserialize => false; @@ -177,7 +176,7 @@ namespace QSB.Syncs return; } - if (!AttachedTransform.gameObject.activeInHierarchy && !AllowDisabledAttachedObject) + if (!AttachedTransform.gameObject.activeInHierarchy) { return; } diff --git a/QSB/Tools/ProbeTool/TransformSync/PlayerProbeSync.cs b/QSB/Tools/ProbeTool/TransformSync/PlayerProbeSync.cs index 1c533f73..e61516d3 100644 --- a/QSB/Tools/ProbeTool/TransformSync/PlayerProbeSync.cs +++ b/QSB/Tools/ProbeTool/TransformSync/PlayerProbeSync.cs @@ -11,7 +11,6 @@ namespace QSB.Tools.ProbeTool.TransformSync { protected override float DistanceLeeway => 10f; protected override bool UseInterpolation => true; - protected override bool AllowDisabledAttachedObject => true; protected override bool IsPlayerObject => true; public static PlayerProbeSync LocalInstance { get; private set; } @@ -63,37 +62,6 @@ namespace QSB.Tools.ProbeTool.TransformSync return body; } - protected override void GetFromAttached() - { - if (AttachedTransform.gameObject.activeInHierarchy) - { - base.GetFromAttached(); - return; - } - - var probeOWRigidbody = Locator.GetProbe().GetOWRigidbody(); - if (probeOWRigidbody == null) - { - DebugLog.ToConsole($"Warning - Could not find OWRigidbody of local probe.", MessageType.Warning); - } - - var probeLauncher = Player.LocalProbeLauncher; - // TODO : make this sync to the *active* probe launcher's _launcherTransform - var launcherTransform = probeLauncher._launcherTransform; - probeOWRigidbody.SetPosition(launcherTransform.position); - probeOWRigidbody.SetRotation(launcherTransform.rotation); - - base.GetFromAttached(); - - var currentReferenceSector = ReferenceSector; - var playerReferenceSector = Player.TransformSync.ReferenceSector; - - if (currentReferenceSector != playerReferenceSector) - { - SetReferenceSector(playerReferenceSector); - } - } - protected override bool IsReady => AttachedTransform != null || Locator.GetProbe() != null; } }