From 89ace6bee5bb234355a282d09f7631000fde0023 Mon Sep 17 00:00:00 2001 From: Mister_Nebula <41904486+misternebula@users.noreply.github.com> Date: Sat, 15 Jan 2022 16:22:46 +0000 Subject: [PATCH] fix solanum mask weirdness --- .../WorldObjects/QSBQuantumInstrument.cs | 17 +++++++---- QSB/EyeOfTheUniverse/MaskSync/MaskManager.cs | 3 ++ .../MaskSync/Patches/MaskPatches.cs | 29 +++++++++++++++++++ .../WorldObjects/QSBMaskZoneTrigger.cs | 2 +- 4 files changed, 45 insertions(+), 6 deletions(-) diff --git a/QSB/EyeOfTheUniverse/InstrumentSync/WorldObjects/QSBQuantumInstrument.cs b/QSB/EyeOfTheUniverse/InstrumentSync/WorldObjects/QSBQuantumInstrument.cs index cfa76555..bc814d0e 100644 --- a/QSB/EyeOfTheUniverse/InstrumentSync/WorldObjects/QSBQuantumInstrument.cs +++ b/QSB/EyeOfTheUniverse/InstrumentSync/WorldObjects/QSBQuantumInstrument.cs @@ -1,4 +1,4 @@ -using QSB.Player; +using QSB.EyeOfTheUniverse.MaskSync; using QSB.WorldSync; using System.Linq; @@ -8,14 +8,21 @@ namespace QSB.EyeOfTheUniverse.InstrumentSync.WorldObjects { public void Gather() { - AttachedObject.Gather(); - var maskZoneController = QSBWorldSync.GetUnityObjects().First(); if (maskZoneController._maskInstrument == AttachedObject) { - // remote gathering solanum mask - make all players visible - QSBPlayerManager.ShowAllPlayers(); + var shuttleController = QSBWorldSync.GetUnityObjects().First(); + + foreach (var player in MaskManager.WentOnSolanumsWildRide) + { + player.DitheringAnimator.SetVisible(true, 0.5f); + } + + maskZoneController._whiteSphere.SetActive(false); + shuttleController._maskObject.SetActive(true); } + + AttachedObject.Gather(); } } } diff --git a/QSB/EyeOfTheUniverse/MaskSync/MaskManager.cs b/QSB/EyeOfTheUniverse/MaskSync/MaskManager.cs index d9bf5628..fe643629 100644 --- a/QSB/EyeOfTheUniverse/MaskSync/MaskManager.cs +++ b/QSB/EyeOfTheUniverse/MaskSync/MaskManager.cs @@ -3,6 +3,7 @@ using QSB.Messaging; using QSB.Player; using QSB.Utility; using QSB.WorldSync; +using System.Collections.Generic; using System.Linq; using UnityEngine; @@ -13,6 +14,8 @@ namespace QSB.EyeOfTheUniverse.MaskSync private static bool _flickering; private static float _flickerOutTime; + public static List WentOnSolanumsWildRide = new(); + public void Awake() => QSBSceneManager.OnSceneLoaded += OnSceneLoaded; private static void OnSceneLoaded(OWScene oldScene, OWScene newScene, bool inUniverse) diff --git a/QSB/EyeOfTheUniverse/MaskSync/Patches/MaskPatches.cs b/QSB/EyeOfTheUniverse/MaskSync/Patches/MaskPatches.cs index c2cb8843..ca6a3e70 100644 --- a/QSB/EyeOfTheUniverse/MaskSync/Patches/MaskPatches.cs +++ b/QSB/EyeOfTheUniverse/MaskSync/Patches/MaskPatches.cs @@ -1,5 +1,9 @@ using HarmonyLib; using QSB.Patches; +using QSB.Player; +using QSB.Utility; +using System.Linq; +using UnityEngine; namespace QSB.EyeOfTheUniverse.MaskSync.Patches { @@ -11,12 +15,37 @@ namespace QSB.EyeOfTheUniverse.MaskSync.Patches [HarmonyPatch(typeof(EyeShuttleController), nameof(EyeShuttleController.OnLaunchSlotActivated))] public static bool DontLaunch(EyeShuttleController __instance) { + QSBPlayerManager.PlayerList.Where(x => x.IsInEyeShuttle).ForEach(x => MaskManager.WentOnSolanumsWildRide.Add(x)); + if (__instance._isPlayerInside) { return true; } MaskManager.FlickerOutShuttle(); + __instance._hasLaunched = true; + __instance._hasArrivedAtMask = true; + __instance._hasPlayedOneShot = true; + __instance.enabled = false; + + return false; + } + + [HarmonyPrefix] + [HarmonyPatch(typeof(MaskZoneController), nameof(MaskZoneController.OnFinishGather))] + public static bool FinishGather(MaskZoneController __instance) + { + __instance._shuttle.OnFinishGather(); + + if (MaskManager.WentOnSolanumsWildRide.Contains(QSBPlayerManager.LocalPlayer)) + { + Locator.GetPlayerBody().SetPosition(__instance._returnSocket.position); + Locator.GetPlayerBody().SetRotation(__instance._returnSocket.rotation); + Locator.GetPlayerBody().SetVelocity(Vector3.zero); + var component = Locator.GetPlayerCamera().GetComponent(); + component.SetDegreesY(component.GetMinDegreesY()); + } + __instance.enabled = false; return false; diff --git a/QSB/TriggerSync/WorldObjects/QSBMaskZoneTrigger.cs b/QSB/TriggerSync/WorldObjects/QSBMaskZoneTrigger.cs index 8e78422d..1042479d 100644 --- a/QSB/TriggerSync/WorldObjects/QSBMaskZoneTrigger.cs +++ b/QSB/TriggerSync/WorldObjects/QSBMaskZoneTrigger.cs @@ -13,7 +13,7 @@ namespace QSB.TriggerSync.WorldObjects protected override void OnEnter(PlayerInfo player) { - if (Occupants.Count == 1) + if (Occupants.Count == 1 && !TriggerOwner._shuttle.HasLaunched()) { TriggerOwner._whiteSphere.SetActive(true); TriggerOwner._groundSignal.SetSignalActivation(false);