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.Messaging;
using QSB.Player.TransformSync; using QSB.Player.TransformSync;
using QSB.Utility;
using QSB.WorldSync; using QSB.WorldSync;
using QuantumUNET.Transport; using QuantumUNET.Transport;
using System; using System;
@ -10,10 +9,18 @@ namespace QSB.EyeOfTheUniverse.EyeStateSync.Messages
{ {
internal class FlickerMessage : QSBMessage internal class FlickerMessage : QSBMessage
{ {
public static bool IgnoreNextMessage;
static FlickerMessage() => GlobalMessenger<float, float>.AddListener(OWEvents.FlickerOffAndOn, Handler); static FlickerMessage() => GlobalMessenger<float, float>.AddListener(OWEvents.FlickerOffAndOn, Handler);
private static void Handler(float offDuration, float onDuration) private static void Handler(float offDuration, float onDuration)
{ {
if (IgnoreNextMessage)
{
IgnoreNextMessage = false;
return;
}
if (PlayerTransformSync.LocalInstance) if (PlayerTransformSync.LocalInstance)
{ {
new FlickerMessage(offDuration, onDuration).Send(); 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;
using QSB.Player.Messages; using QSB.Player.Messages;
using QSB.Utility;
using QSB.WorldSync; using QSB.WorldSync;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
@ -15,6 +15,8 @@ namespace QSB.EyeOfTheUniverse.MaskSync
private readonly List<PlayerInfo> _playersInZone = new(); private readonly List<PlayerInfo> _playersInZone = new();
private MaskZoneController _controller; private MaskZoneController _controller;
private bool _flickering;
private float _flickerOutTime;
public override WorldObjectType WorldObjectType => WorldObjectType.Eye; public override WorldObjectType WorldObjectType => WorldObjectType.Eye;
@ -70,8 +72,6 @@ namespace QSB.EyeOfTheUniverse.MaskSync
public void Enter(PlayerInfo player) public void Enter(PlayerInfo player)
{ {
DebugLog.DebugWrite($"{player.PlayerId} enter mask zone");
if (_playersInZone.Count == 0) if (_playersInZone.Count == 0)
{ {
_controller._whiteSphere.SetActive(true); _controller._whiteSphere.SetActive(true);
@ -86,8 +86,6 @@ namespace QSB.EyeOfTheUniverse.MaskSync
public void Exit(PlayerInfo player) public void Exit(PlayerInfo player)
{ {
DebugLog.DebugWrite($"{player.PlayerId} exit mask zone");
_playersInZone.Remove(player); _playersInZone.Remove(player);
if (_playersInZone.Count == 0 && !_controller._shuttle.HasLaunched()) if (_playersInZone.Count == 0 && !_controller._shuttle.HasLaunched())
@ -99,5 +97,24 @@ namespace QSB.EyeOfTheUniverse.MaskSync
_controller.enabled = false; _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(); _attachedBody = AttachedObject.GetAttachedOWRigidbody();
SetReferenceTransform(_attachedBody.GetOrigParent()); SetReferenceTransform(_attachedBody.GetOrigParent());
/*
if (_attachedBody.GetOrigParent() == Locator.GetRootTransform()) if (_attachedBody.GetOrigParent() == Locator.GetRootTransform())
{ {
DebugLog.DebugWrite($"{LogName} with AttachedObject {AttachedObject.name} had it's original parent as SolarSystemRoot - Disabling..."); DebugLog.DebugWrite($"{LogName} with AttachedObject {AttachedObject.name} had it's original parent as SolarSystemRoot - Disabling...");
enabled = false; enabled = false;
return; return;
} }
*/
if (QSBCore.IsHost) if (QSBCore.IsHost)
{ {

View File

@ -157,12 +157,20 @@ namespace QSB.Syncs
return; 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(); base.Update();
return; return;