fix solanum mask weirdness

This commit is contained in:
Mister_Nebula 2022-01-15 16:22:46 +00:00
parent 659ab557ee
commit 89ace6bee5
4 changed files with 45 additions and 6 deletions

View File

@ -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<MaskZoneController>().First();
if (maskZoneController._maskInstrument == AttachedObject)
{
// remote gathering solanum mask - make all players visible
QSBPlayerManager.ShowAllPlayers();
var shuttleController = QSBWorldSync.GetUnityObjects<EyeShuttleController>().First();
foreach (var player in MaskManager.WentOnSolanumsWildRide)
{
player.DitheringAnimator.SetVisible(true, 0.5f);
}
maskZoneController._whiteSphere.SetActive(false);
shuttleController._maskObject.SetActive(true);
}
AttachedObject.Gather();
}
}
}

View File

@ -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<PlayerInfo> WentOnSolanumsWildRide = new();
public void Awake() => QSBSceneManager.OnSceneLoaded += OnSceneLoaded;
private static void OnSceneLoaded(OWScene oldScene, OWScene newScene, bool inUniverse)

View File

@ -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<PlayerCameraController>();
component.SetDegreesY(component.GetMinDegreesY());
}
__instance.enabled = false;
return false;

View File

@ -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);