From 2a339daf544b7bb309cc6e54730de75aa71bc405 Mon Sep 17 00:00:00 2001 From: JohnCorby Date: Fri, 31 Dec 2021 02:52:31 -0800 Subject: [PATCH] oops --- .../CosmicInflation/InflationManager.cs | 84 +++++++++++++++++++ .../Patches/InflationPatches.cs | 2 + .../VesselSync/VesselManager.cs | 2 + QSB/Player/EnterLeaveType.cs | 3 +- QSB/Player/Messages/EnterLeaveMessage.cs | 4 + 5 files changed, 94 insertions(+), 1 deletion(-) create mode 100644 QSB/EyeOfTheUniverse/CosmicInflation/InflationManager.cs diff --git a/QSB/EyeOfTheUniverse/CosmicInflation/InflationManager.cs b/QSB/EyeOfTheUniverse/CosmicInflation/InflationManager.cs new file mode 100644 index 00000000..4c687d4e --- /dev/null +++ b/QSB/EyeOfTheUniverse/CosmicInflation/InflationManager.cs @@ -0,0 +1,84 @@ +using QSB.Messaging; +using QSB.Player; +using QSB.Player.Messages; +using QSB.WorldSync; +using System.Collections.Generic; +using UnityEngine; + +namespace QSB.EyeOfTheUniverse.CosmicInflation +{ + internal class InflationManager : WorldObjectManager + { + public static InflationManager Instance { get; private set; } + + private readonly List _playersInFog = new(); + private CosmicInflationController _controller; + + public override WorldObjectType WorldObjectType => WorldObjectType.Eye; + + public override void Awake() + { + base.Awake(); + Instance = this; + + QSBPlayerManager.OnRemovePlayer += OnPlayerLeave; + } + + private void OnPlayerLeave(uint id) + { + _playersInFog.Remove(QSBPlayerManager.GetPlayer(id)); + + // wait 1 frame since that's when player list will actually be updated + QSBCore.UnityEvents.FireOnNextUpdate(() => + { + if (_playersInFog.Count == QSBPlayerManager.PlayerList.Count) + { + StartCollapse(); + } + }); + } + + protected override void RebuildWorldObjects(OWScene scene) + { + _playersInFog.Clear(); + + if (_controller != null) + { + _controller._smokeSphereTrigger.OnEntry -= OnEntry; + } + + _controller = FindObjectOfType(); + _controller._smokeSphereTrigger.OnEntry += _controller.OnEnterFogSphere; + + _controller._smokeSphereTrigger.OnEntry += OnEntry; + } + + private void OnEntry(GameObject hitObj) + { + if (hitObj.CompareTag("PlayerCameraDetector") && _controller._state == CosmicInflationController.State.ReadyToCollapse) + { + _controller._smokeSphereTrigger.SetTriggerActivation(false); + _controller._probeDestroyTrigger.SetTriggerActivation(false); + new EnterLeaveMessage(EnterLeaveType.EnterCosmicFog).Send(); + + // the pausing and stuff happens here + } + } + + + public void Enter(PlayerInfo player) + { + _playersInFog.Add(player); + + if (_playersInFog.Count == QSBPlayerManager.PlayerList.Count) + { + StartCollapse(); + } + } + + private void StartCollapse() + { + // the actual collapsing happens here + } + } +} diff --git a/QSB/EyeOfTheUniverse/CosmicInflation/Patches/InflationPatches.cs b/QSB/EyeOfTheUniverse/CosmicInflation/Patches/InflationPatches.cs index defae678..6ff6e86f 100644 --- a/QSB/EyeOfTheUniverse/CosmicInflation/Patches/InflationPatches.cs +++ b/QSB/EyeOfTheUniverse/CosmicInflation/Patches/InflationPatches.cs @@ -14,6 +14,8 @@ namespace QSB.EyeOfTheUniverse.CosmicInflation.Patches [HarmonyPatch(typeof(CosmicInflationController), nameof(CosmicInflationController.OnEnterFogSphere))] public static bool OnEnterFogSphere(CosmicInflationController __instance, GameObject obj) { + return true; // remove this patch later lol + if (obj.CompareTag("PlayerCameraDetector") && __instance._state == CosmicInflationController.State.ReadyToCollapse) { __instance._smokeSphereTrigger.SetTriggerActivation(false); diff --git a/QSB/EyeOfTheUniverse/VesselSync/VesselManager.cs b/QSB/EyeOfTheUniverse/VesselSync/VesselManager.cs index 867a4990..5744d488 100644 --- a/QSB/EyeOfTheUniverse/VesselSync/VesselManager.cs +++ b/QSB/EyeOfTheUniverse/VesselSync/VesselManager.cs @@ -24,6 +24,8 @@ namespace QSB.EyeOfTheUniverse.VesselSync protected override void RebuildWorldObjects(OWScene scene) { + _playersInCage.Clear(); + if (_warpController != null) { _warpController._cageTrigger.OnEntry -= OnEntry; diff --git a/QSB/Player/EnterLeaveType.cs b/QSB/Player/EnterLeaveType.cs index eef74267..672dc875 100644 --- a/QSB/Player/EnterLeaveType.cs +++ b/QSB/Player/EnterLeaveType.cs @@ -15,6 +15,7 @@ EnterNomaiHeadZone = 10, ExitNomaiHeadZone = 11, EnterVesselCage = 12, - ExitVesselCage = 13 + ExitVesselCage = 13, + EnterCosmicFog = 14, } } diff --git a/QSB/Player/Messages/EnterLeaveMessage.cs b/QSB/Player/Messages/EnterLeaveMessage.cs index 4e7be642..827616cd 100644 --- a/QSB/Player/Messages/EnterLeaveMessage.cs +++ b/QSB/Player/Messages/EnterLeaveMessage.cs @@ -1,5 +1,6 @@ using OWML.Common; using QSB.Animation.NPC.WorldObjects; +using QSB.EyeOfTheUniverse.CosmicInflation; using QSB.EyeOfTheUniverse.VesselSync; using QSB.Messaging; using QSB.Player.TransformSync; @@ -103,6 +104,9 @@ namespace QSB.Player.Messages case EnterLeaveType.ExitVesselCage: VesselManager.Instance.Exit(player); break; + case EnterLeaveType.EnterCosmicFog: + InflationManager.Instance.Enter(player); + break; default: DebugLog.ToConsole($"Warning - Unknown EnterLeaveType : {Value}", MessageType.Warning); break;