From eb3929a5bbc3584c77ac53a78fe6fd55e45cb55d Mon Sep 17 00:00:00 2001 From: JohnCorby Date: Tue, 18 Jan 2022 10:06:15 -0800 Subject: [PATCH 01/15] generic variable syncer --- MirrorWeaver/Weaver/Extensions.cs | 4 ++++ QSB/Utility/VariableSync/BaseVariableSyncer.cs | 17 +++++++++++++++-- QSB/Utility/VariableSync/BoolVariableSyncer.cs | 15 ++------------- QSB/Utility/VariableSync/FloatVariableSyncer.cs | 15 ++------------- .../VariableSync/Vector3VariableSyncer.cs | 14 ++------------ 5 files changed, 25 insertions(+), 40 deletions(-) diff --git a/MirrorWeaver/Weaver/Extensions.cs b/MirrorWeaver/Weaver/Extensions.cs index 5ba4718a..8b424555 100644 --- a/MirrorWeaver/Weaver/Extensions.cs +++ b/MirrorWeaver/Weaver/Extensions.cs @@ -22,7 +22,11 @@ namespace Mirror.Weaver public static bool IsDerivedFrom(this TypeReference tr, Type baseClass) { + if (tr == null) + return false; TypeDefinition td = tr.Resolve(); + if (td == null) + return false; if (!td.IsClass) return false; diff --git a/QSB/Utility/VariableSync/BaseVariableSyncer.cs b/QSB/Utility/VariableSync/BaseVariableSyncer.cs index 7906bb50..140e73df 100644 --- a/QSB/Utility/VariableSync/BaseVariableSyncer.cs +++ b/QSB/Utility/VariableSync/BaseVariableSyncer.cs @@ -1,7 +1,20 @@ -namespace QSB.Utility.VariableSync +using Mirror; +using System; +using System.Collections.Generic; + +namespace QSB.Utility.VariableSync { - public abstract class BaseVariableSyncer : QSBNetworkBehaviour + public abstract class BaseVariableSyncer : QSBNetworkBehaviour { protected override float SendInterval => 0.1f; + + private T _prevValue; + [NonSerialized] + public T Value; + + protected override bool HasChanged() => !EqualityComparer.Default.Equals(_prevValue, Value); + protected override void UpdatePrevData() => _prevValue = Value; + protected override void Serialize(NetworkWriter writer, bool initialState) => writer.Write(Value); + protected override void Deserialize(NetworkReader reader, bool initialState) => Value = reader.Read(); } } diff --git a/QSB/Utility/VariableSync/BoolVariableSyncer.cs b/QSB/Utility/VariableSync/BoolVariableSyncer.cs index 0a7ed44e..e3525d5c 100644 --- a/QSB/Utility/VariableSync/BoolVariableSyncer.cs +++ b/QSB/Utility/VariableSync/BoolVariableSyncer.cs @@ -1,17 +1,6 @@ -using Mirror; -using System; - -namespace QSB.Utility.VariableSync +namespace QSB.Utility.VariableSync { - public class BoolVariableSyncer : BaseVariableSyncer + public class BoolVariableSyncer : BaseVariableSyncer { - private bool _prevValue; - [NonSerialized] - public bool Value; - - protected override bool HasChanged() => Value != _prevValue; - protected override void UpdatePrevData() => _prevValue = Value; - protected override void Serialize(NetworkWriter writer, bool initialState) => writer.Write(Value); - protected override void Deserialize(NetworkReader reader, bool initialState) => Value = reader.Read(); } } diff --git a/QSB/Utility/VariableSync/FloatVariableSyncer.cs b/QSB/Utility/VariableSync/FloatVariableSyncer.cs index 7903f479..39206e50 100644 --- a/QSB/Utility/VariableSync/FloatVariableSyncer.cs +++ b/QSB/Utility/VariableSync/FloatVariableSyncer.cs @@ -1,17 +1,6 @@ -using Mirror; -using System; - -namespace QSB.Utility.VariableSync +namespace QSB.Utility.VariableSync { - public class FloatVariableSyncer : BaseVariableSyncer + public class FloatVariableSyncer : BaseVariableSyncer { - private float _prevValue; - [NonSerialized] - public float Value; - - protected override bool HasChanged() => Value != _prevValue; - protected override void UpdatePrevData() => _prevValue = Value; - protected override void Serialize(NetworkWriter writer, bool initialState) => writer.Write(Value); - protected override void Deserialize(NetworkReader reader, bool initialState) => Value = reader.Read(); } } diff --git a/QSB/Utility/VariableSync/Vector3VariableSyncer.cs b/QSB/Utility/VariableSync/Vector3VariableSyncer.cs index 66748086..9f21ebc1 100644 --- a/QSB/Utility/VariableSync/Vector3VariableSyncer.cs +++ b/QSB/Utility/VariableSync/Vector3VariableSyncer.cs @@ -1,18 +1,8 @@ -using Mirror; -using System; -using UnityEngine; +using UnityEngine; namespace QSB.Utility.VariableSync { - public class Vector3VariableSyncer : BaseVariableSyncer + public class Vector3VariableSyncer : BaseVariableSyncer { - private Vector3 _prevValue; - [NonSerialized] - public Vector3 Value; - - protected override bool HasChanged() => Value != _prevValue; - protected override void UpdatePrevData() => _prevValue = Value; - protected override void Serialize(NetworkWriter writer, bool initialState) => writer.Write(Value); - protected override void Deserialize(NetworkReader reader, bool initialState) => Value = reader.Read(); } } From 4604830ecf1940a111e600056df5a4bbbfce3a23 Mon Sep 17 00:00:00 2001 From: JohnCorby Date: Tue, 18 Jan 2022 10:30:34 -0800 Subject: [PATCH 02/15] 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 03/15] 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 04/15] 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 05/15] 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 06/15] 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 07/15] 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 08/15] 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 09/15] 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 10/15] 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 11/15] 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 12/15] 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 13/15] 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 14/15] 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 15/15] 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;