fix some orb stuff, flicker out shuttle when it launches for people not in it

This commit is contained in:
Mister_Nebula 2022-01-12 23:08:07 +00:00
parent 12e35e3b86
commit 6514fb85ed
5 changed files with 70 additions and 10 deletions

View File

@ -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<float, float>.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();

View File

@ -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<PlayerInfo> _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<float, float>.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<EyeShuttleController>().First();
controller._shuttleObject.SetActive(false);
_flickering = false;
_flickerOutTime = 0f;
}
}
}
}

View File

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

View File

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

View File

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