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/Anglerfish/TransformSync/AnglerTransformSync.cs b/QSB/Anglerfish/TransformSync/AnglerTransformSync.cs index a073503f..c92be663 100644 --- a/QSB/Anglerfish/TransformSync/AnglerTransformSync.cs +++ b/QSB/Anglerfish/TransformSync/AnglerTransformSync.cs @@ -19,16 +19,16 @@ 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() + 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 d53591e7..594f8e75 100644 --- a/QSB/JellyfishSync/TransformSync/JellyfishTransformSync.cs +++ b/QSB/JellyfishSync/TransformSync/JellyfishTransformSync.cs @@ -21,16 +21,16 @@ 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() + public override void OnStopClient() { _instances.Remove(this); - base.OnDestroy(); + base.OnStopClient(); if (QSBCore.IsHost) { diff --git a/QSB/Menus/MenuManager.cs b/QSB/Menus/MenuManager.cs index 3b6a25ba..f60cf39f 100644 --- a/QSB/Menus/MenuManager.cs +++ b/QSB/Menus/MenuManager.cs @@ -232,7 +232,7 @@ namespace QSB.Menus if (QSBCore.IsHost) { - SetButtonActive(ResumeGameButton, StandaloneProfileManager.SharedInstance.currentProfileGameSave.loopCount > 1); + QSBCore.UnityEvents.RunWhen(PlayerData.IsLoaded, () => SetButtonActive(ResumeGameButton, PlayerData.LoadLoopCount() > 1)); SetButtonActive(NewGameButton, true); } else @@ -244,7 +244,7 @@ namespace QSB.Menus else { SetButtonActive(ClientButton, true); - SetButtonActive(ResumeGameButton, StandaloneProfileManager.SharedInstance.currentProfileGameSave.loopCount > 1); + QSBCore.UnityEvents.RunWhen(PlayerData.IsLoaded, () => SetButtonActive(ResumeGameButton, PlayerData.LoadLoopCount() > 1)); SetButtonActive(NewGameButton, true); } @@ -343,7 +343,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)", 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.", @@ -370,7 +370,7 @@ namespace QSB.Menus SetButtonActive(ClientButton, true); SetButtonActive(QuitButton, true); SetButtonActive(HostButton, true); - SetButtonActive(ResumeGameButton, StandaloneProfileManager.SharedInstance.currentProfileGameSave.loopCount > 1); + SetButtonActive(ResumeGameButton, PlayerData.LoadLoopCount() > 1); SetButtonActive(NewGameButton, true); } } diff --git a/QSB/OrbSync/TransformSync/NomaiOrbTransformSync.cs b/QSB/OrbSync/TransformSync/NomaiOrbTransformSync.cs index 17f36aab..84b47634 100644 --- a/QSB/OrbSync/TransformSync/NomaiOrbTransformSync.cs +++ b/QSB/OrbSync/TransformSync/NomaiOrbTransformSync.cs @@ -22,16 +22,16 @@ 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() + public override void OnStopClient() { _instances.Remove(this); - base.OnDestroy(); + base.OnStopClient(); if (QSBCore.IsHost) { diff --git a/QSB/Player/GamePlatform.cs b/QSB/Player/GamePlatform.cs index 0b3c8f52..6fab0005 100644 --- a/QSB/Player/GamePlatform.cs +++ b/QSB/Player/GamePlatform.cs @@ -3,6 +3,7 @@ public enum GamePlatform { Steam, - Epic + Epic, + Xbox } } diff --git a/QSB/Player/TransformSync/PlayerTransformSync.cs b/QSB/Player/TransformSync/PlayerTransformSync.cs index 546c04df..28175bef 100644 --- a/QSB/Player/TransformSync/PlayerTransformSync.cs +++ b/QSB/Player/TransformSync/PlayerTransformSync.cs @@ -43,53 +43,44 @@ 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() + public override void OnStartClient() { 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); - } - - 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() { base.Init(); - Player.IsReady = true; - new PlayerReadyMessage(true).Send(); + if (isLocalPlayer) + { + Player.IsReady = true; + new PlayerReadyMessage(true).Send(); + } } - 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/QSBCore.cs b/QSB/QSBCore.cs index d70aaffa..9600e009 100644 --- a/QSB/QSBCore.cs +++ b/QSB/QSBCore.cs @@ -1,21 +1,23 @@ 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; using QSB.TimeSync; using QSB.Utility; using QSB.WorldSync; +using System; using System.Linq; using UnityEngine; +using UnityEngine.InputSystem; /* Copyright (C) 2020 - 2021 @@ -60,13 +62,11 @@ namespace QSB public static bool IsInMultiplayer => QSBNetworkManager.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 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,6 +80,23 @@ 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; + } + MenuApi = ModHelper.Interaction.GetModApi("_nebula.MenuFramework"); NetworkAssetBundle = Helper.Assets.LoadBundle("AssetBundles/network"); @@ -88,7 +105,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 +166,22 @@ namespace QSB QSBNetworkManager.singleton.Port = Port; } } + + private void Update() + { + 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; + + GetComponent().enabled = DebugMode; + GetComponent().enabled = DebugMode; + QuantumManager.UpdateFromDebugSetting(); + DebugCameraSettings.UpdateFromDebugSetting(); + + DebugLog.ToConsole($"DEBUG MODE = {DebugMode}"); + } + } } } diff --git a/QSB/QSBNetworkManager.cs b/QSB/QSBNetworkManager.cs index 0ac1fd23..052181c4 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; @@ -68,7 +67,7 @@ namespace QSB transport = gameObject.AddComponent(); base.Awake(); - PlayerName = GetPlayerName(); + InitPlayerName(); playerPrefab = QSBCore.NetworkAssetBundle.LoadAsset("Assets/Prefabs/NETWORK_Player_Body.prefab"); playerPrefab.GetRequiredComponent().SetValue("m_AssetId", 1.ToGuid().ToString("N")); @@ -94,21 +93,29 @@ namespace QSB ConfigureNetworkManager(); } - private string GetPlayerName() + private void InitPlayerName() { - try + QSBCore.UnityEvents.RunWhen(PlayerData.IsLoaded, () => { - 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. 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/SaveSync/Messages/GameStateMessage.cs b/QSB/SaveSync/Messages/GameStateMessage.cs index 102c6573..2c0988dd 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 e8427a1f..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 = StandaloneProfileManager.SharedInstance.currentProfileGameSave; + var gameSave = PlayerData._currentGameSave; var factSaves = gameSave.shipLogFactSaves; foreach (var item in factSaves) 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..8a2345ba 100644 --- a/QSB/Syncs/Sectored/BaseSectoredSync.cs +++ b/QSB/Syncs/Sectored/BaseSectoredSync.cs @@ -14,16 +14,16 @@ 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() + 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 0c14aaeb..c2188e18 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; @@ -26,7 +25,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); @@ -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; } @@ -88,7 +92,7 @@ namespace QSB.Syncs protected abstract void GetFromAttached(); protected abstract void ApplyToAttached(); - public virtual void Start() + public override void OnStartClient() { if (IsPlayerObject) { @@ -103,7 +107,7 @@ namespace QSB.Syncs QSBSceneManager.OnSceneLoaded += OnSceneLoaded; } - protected virtual void OnDestroy() + public override void OnStopClient() { if (IsPlayerObject && !hasAuthority && AttachedTransform != null) { 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..773f390c 100644 --- a/QSB/Utility/DebugActions.cs +++ b/QSB/Utility/DebugActions.cs @@ -31,13 +31,7 @@ namespace QSB.Utility private void DamageShipElectricalSystem() => ShipManager.Instance.ShipElectricalComponent.SetDamaged(true); - private void Awake() - { - if (!QSBCore.DebugMode) - { - Destroy(this); - } - } + private void Awake() => enabled = QSBCore.DebugMode; public void Update() { @@ -51,7 +45,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 +109,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..b8ed780d 100644 --- a/QSB/Utility/DebugGUI.cs +++ b/QSB/Utility/DebugGUI.cs @@ -32,11 +32,7 @@ namespace QSB.Utility private void Awake() { - if (!QSBCore.DebugMode) - { - Destroy(this); - return; - } + enabled = QSBCore.DebugMode; guiGUIStyle.fontSize = 9; } 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/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(); } } diff --git a/QSB/WorldSync/QSBWorldSync.cs b/QSB/WorldSync/QSBWorldSync.cs index 02bd4d51..d99eebef 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); } @@ -78,6 +78,11 @@ namespace QSB.WorldSync public static void RemoveWorldObjects() { + if (!AllObjectsReady) + { + return; + } + GameReset(); AllObjectsAdded = false; diff --git a/QSB/debugsettings.json b/QSB/debugsettings.json index b26280ff..ce6eeea8 100644 --- a/QSB/debugsettings.json +++ b/QSB/debugsettings.json @@ -1,8 +1,8 @@ { - "debugMode": true, - "drawLines": true, - "showQuantumVisibilityObjects": true, - "showDebugLabels": true, + "debugMode": false, + "drawLines": false, + "showQuantumVisibilityObjects": false, + "showDebugLabels": false, "avoidTimeSync": false, "skipTitleScreen": true, "greySkybox": true 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" ] }