From 6514fb85ede1d6fa7b9857366c0a06dc290fd378 Mon Sep 17 00:00:00 2001 From: Mister_Nebula <41904486+misternebula@users.noreply.github.com> Date: Wed, 12 Jan 2022 23:08:07 +0000 Subject: [PATCH] fix some orb stuff, flicker out shuttle when it launches for people not in it --- .../EyeStateSync/Messages/FlickerMessage.cs | 9 +++++- QSB/EyeOfTheUniverse/MaskSync/MaskManager.cs | 29 +++++++++++++++---- .../MaskSync/Patches/MaskPatches.cs | 26 +++++++++++++++++ .../TransformSync/NomaiOrbTransformSync.cs | 2 ++ QSB/Syncs/SyncBase.cs | 14 +++++++-- 5 files changed, 70 insertions(+), 10 deletions(-) create mode 100644 QSB/EyeOfTheUniverse/MaskSync/Patches/MaskPatches.cs diff --git a/QSB/EyeOfTheUniverse/EyeStateSync/Messages/FlickerMessage.cs b/QSB/EyeOfTheUniverse/EyeStateSync/Messages/FlickerMessage.cs index 8fe4543c..f3b4abe1 100644 --- a/QSB/EyeOfTheUniverse/EyeStateSync/Messages/FlickerMessage.cs +++ b/QSB/EyeOfTheUniverse/EyeStateSync/Messages/FlickerMessage.cs @@ -1,6 +1,5 @@ using QSB.Messaging; using QSB.Player.TransformSync; -using QSB.Utility; using QSB.WorldSync; using QuantumUNET.Transport; using System; @@ -10,10 +9,18 @@ namespace QSB.EyeOfTheUniverse.EyeStateSync.Messages { internal class FlickerMessage : QSBMessage { + public static bool IgnoreNextMessage; + static FlickerMessage() => GlobalMessenger.AddListener(OWEvents.FlickerOffAndOn, Handler); private static void Handler(float offDuration, float onDuration) { + if (IgnoreNextMessage) + { + IgnoreNextMessage = false; + return; + } + if (PlayerTransformSync.LocalInstance) { new FlickerMessage(offDuration, onDuration).Send(); diff --git a/QSB/EyeOfTheUniverse/MaskSync/MaskManager.cs b/QSB/EyeOfTheUniverse/MaskSync/MaskManager.cs index 937f90ed..e30a938f 100644 --- a/QSB/EyeOfTheUniverse/MaskSync/MaskManager.cs +++ b/QSB/EyeOfTheUniverse/MaskSync/MaskManager.cs @@ -1,7 +1,7 @@ -using QSB.Messaging; +using QSB.EyeOfTheUniverse.EyeStateSync.Messages; +using QSB.Messaging; using QSB.Player; using QSB.Player.Messages; -using QSB.Utility; using QSB.WorldSync; using System.Collections.Generic; using System.Linq; @@ -15,6 +15,8 @@ namespace QSB.EyeOfTheUniverse.MaskSync private readonly List _playersInZone = new(); private MaskZoneController _controller; + private bool _flickering; + private float _flickerOutTime; public override WorldObjectType WorldObjectType => WorldObjectType.Eye; @@ -70,8 +72,6 @@ namespace QSB.EyeOfTheUniverse.MaskSync public void Enter(PlayerInfo player) { - DebugLog.DebugWrite($"{player.PlayerId} enter mask zone"); - if (_playersInZone.Count == 0) { _controller._whiteSphere.SetActive(true); @@ -86,8 +86,6 @@ namespace QSB.EyeOfTheUniverse.MaskSync public void Exit(PlayerInfo player) { - DebugLog.DebugWrite($"{player.PlayerId} exit mask zone"); - _playersInZone.Remove(player); if (_playersInZone.Count == 0 && !_controller._shuttle.HasLaunched()) @@ -99,5 +97,24 @@ namespace QSB.EyeOfTheUniverse.MaskSync _controller.enabled = false; } } + + public void FlickerOutShuttle() + { + FlickerMessage.IgnoreNextMessage = true; + GlobalMessenger.FireEvent("FlickerOffAndOn", 0.5f, 0.5f); + _flickerOutTime = Time.time + 0.5f; + _flickering = true; + } + + private void Update() + { + if (_flickering && Time.time > _flickerOutTime) + { + var controller = QSBWorldSync.GetUnityObjects().First(); + controller._shuttleObject.SetActive(false); + _flickering = false; + _flickerOutTime = 0f; + } + } } } diff --git a/QSB/EyeOfTheUniverse/MaskSync/Patches/MaskPatches.cs b/QSB/EyeOfTheUniverse/MaskSync/Patches/MaskPatches.cs new file mode 100644 index 00000000..37a10c80 --- /dev/null +++ b/QSB/EyeOfTheUniverse/MaskSync/Patches/MaskPatches.cs @@ -0,0 +1,26 @@ +using HarmonyLib; +using QSB.Patches; +using QSB.Utility; + +namespace QSB.EyeOfTheUniverse.MaskSync.Patches +{ + internal class MaskPatches : QSBPatch + { + public override QSBPatchTypes Type => QSBPatchTypes.OnClientConnect; + + [HarmonyPrefix] + [HarmonyPatch(typeof(EyeShuttleController), nameof(EyeShuttleController.OnLaunchSlotActivated))] + public static bool DontLaunch(EyeShuttleController __instance) + { + if (__instance._isPlayerInside) + { + return true; + } + + MaskManager.Instance.FlickerOutShuttle(); + __instance.enabled = false; + + return false; + } + } +} diff --git a/QSB/OrbSync/TransformSync/NomaiOrbTransformSync.cs b/QSB/OrbSync/TransformSync/NomaiOrbTransformSync.cs index 3e737119..8dd902ec 100644 --- a/QSB/OrbSync/TransformSync/NomaiOrbTransformSync.cs +++ b/QSB/OrbSync/TransformSync/NomaiOrbTransformSync.cs @@ -59,12 +59,14 @@ namespace QSB.OrbSync.TransformSync _attachedBody = AttachedObject.GetAttachedOWRigidbody(); SetReferenceTransform(_attachedBody.GetOrigParent()); + /* if (_attachedBody.GetOrigParent() == Locator.GetRootTransform()) { DebugLog.DebugWrite($"{LogName} with AttachedObject {AttachedObject.name} had it's original parent as SolarSystemRoot - Disabling..."); enabled = false; return; } + */ if (QSBCore.IsHost) { diff --git a/QSB/Syncs/SyncBase.cs b/QSB/Syncs/SyncBase.cs index c5738b93..3b645f86 100644 --- a/QSB/Syncs/SyncBase.cs +++ b/QSB/Syncs/SyncBase.cs @@ -157,12 +157,20 @@ namespace QSB.Syncs return; } - if (ReferenceTransform != null && ReferenceTransform.position == Vector3.zero) + if (!AttachedObject.gameObject.activeInHierarchy && !IgnoreDisabledAttachedObject) { - DebugLog.ToConsole($"Warning - {LogName}'s ReferenceTransform is at (0,0,0). ReferenceTransform:{ReferenceTransform.name}, AttachedObject:{AttachedObject.name}", MessageType.Warning); + base.Update(); + return; + } + else + { + 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:{AttachedObject.name}", MessageType.Warning); + } } - if (!AttachedObject.gameObject.activeInHierarchy && !IgnoreDisabledAttachedObject) + if (ReferenceTransform == Locator.GetRootTransform()) { base.Update(); return;