From 066df2ff3fd48213fe040db364203b8b89be151e Mon Sep 17 00:00:00 2001 From: JohnCorby Date: Wed, 12 Jan 2022 17:02:21 -0800 Subject: [PATCH 01/17] trigger --- QSB/TriggerSync/TriggerLink.cs | 83 +++++++++++++++++++++++++++++++ QSB/TriggerSync/TriggerManager.cs | 32 ++++++++++++ QSB/TriggerSync/TriggerMessage.cs | 48 ++++++++++++++++++ 3 files changed, 163 insertions(+) create mode 100644 QSB/TriggerSync/TriggerLink.cs create mode 100644 QSB/TriggerSync/TriggerManager.cs create mode 100644 QSB/TriggerSync/TriggerMessage.cs diff --git a/QSB/TriggerSync/TriggerLink.cs b/QSB/TriggerSync/TriggerLink.cs new file mode 100644 index 00000000..6d093dd6 --- /dev/null +++ b/QSB/TriggerSync/TriggerLink.cs @@ -0,0 +1,83 @@ +using OWML.Common; +using QSB.Messaging; +using QSB.Player; +using QSB.Utility; +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace QSB.TriggerSync +{ + public class TriggerLink : IDisposable + { + public string LogName => + $"trigger {QSBPlayerManager.LocalPlayerId}.{_id}.{(_trigger ? _trigger.name : "null")}"; + + public readonly List Players = new(); + + private readonly int _id; + private readonly OWTriggerVolume _trigger; + + public TriggerLink(int id, OWTriggerVolume trigger) + { + _id = id; + _trigger = trigger; + + _trigger.OnEntry += OnEntry; + _trigger.OnExit += OnExit; + + if (_trigger._trackedObjects != null && _trigger.IsTrackingObject(Locator.GetPlayerDetector())) + { + OnEntry(Locator.GetPlayerDetector()); + } + + DebugLog.DebugWrite($"{LogName} created"); + } + + public void Dispose() + { + _trigger.OnEntry -= OnEntry; + _trigger.OnExit -= OnExit; + + DebugLog.DebugWrite($"{LogName} disposed"); + } + + private void OnEntry(GameObject hitObj) + { + if (hitObj.CompareTag("PlayerDetector")) + { + new TriggerMessage(_id, true).Send(); + } + } + + private void OnExit(GameObject hitObj) + { + if (hitObj.CompareTag("PlayerDetector")) + { + new TriggerMessage(_id, false).Send(); + } + } + + public void Enter(PlayerInfo player) + { + if (!Players.SafeAdd(player)) + { + DebugLog.DebugWrite($"{LogName} already added {player.PlayerId}", MessageType.Warning); + return; + } + + DebugLog.DebugWrite($"{LogName} + {player.PlayerId}"); + } + + public void Exit(PlayerInfo player) + { + if (!Players.QuickRemove(player)) + { + DebugLog.DebugWrite($"{LogName} already removed {player.PlayerId}", MessageType.Warning); + return; + } + + DebugLog.DebugWrite($"{LogName} - {player.PlayerId}"); + } + } +} diff --git a/QSB/TriggerSync/TriggerManager.cs b/QSB/TriggerSync/TriggerManager.cs new file mode 100644 index 00000000..7ba745c8 --- /dev/null +++ b/QSB/TriggerSync/TriggerManager.cs @@ -0,0 +1,32 @@ +using OWML.Common; +using QSB.Utility; +using QSB.WorldSync; +using System.Linq; + +namespace QSB.TriggerSync +{ + public class TriggerManager : WorldObjectManager + { + public override WorldObjectType WorldObjectType => WorldObjectType.Both; + + private static TriggerLink[] _triggerLinks; + + protected override void RebuildWorldObjects(OWScene scene) + { + _triggerLinks?.ForEach(x => x.Dispose()); + _triggerLinks = QSBWorldSync.GetUnityObjects() + .Select((x, i) => new TriggerLink(i, x)) + .ToArray(); + } + + public static TriggerLink GetTriggerLink(int id) + { + if (!_triggerLinks.TryGet(id, out var triggerLink)) + { + DebugLog.ToConsole($"no trigger link with id {id}", MessageType.Error); + } + + return triggerLink; + } + } +} diff --git a/QSB/TriggerSync/TriggerMessage.cs b/QSB/TriggerSync/TriggerMessage.cs new file mode 100644 index 00000000..e4435657 --- /dev/null +++ b/QSB/TriggerSync/TriggerMessage.cs @@ -0,0 +1,48 @@ +using QSB.Messaging; +using QSB.Player; +using QSB.WorldSync; +using QuantumUNET.Transport; + +namespace QSB.TriggerSync +{ + public class TriggerMessage : QSBBoolMessage + { + private int _id; + + public TriggerMessage(int id, bool entered) + { + _id = id; + Value = entered; + } + + public override void Serialize(QNetworkWriter writer) + { + base.Serialize(writer); + writer.Write(_id); + } + + public override void Deserialize(QNetworkReader reader) + { + base.Deserialize(reader); + _id = reader.ReadInt32(); + } + + public override bool ShouldReceive => WorldObjectManager.AllObjectsReady; + + public override void OnReceiveLocal() => OnReceiveRemote(); + + public override void OnReceiveRemote() + { + var player = QSBPlayerManager.GetPlayer(From); + var triggerLink = TriggerManager.GetTriggerLink(_id); + if (Value) + { + triggerLink.Enter(player); + } + else + { + triggerLink.Exit(player); + } + } + } +} From fafe7617c50fb3367d9b329b9cbd5ad06380e57b Mon Sep 17 00:00:00 2001 From: JohnCorby Date: Wed, 12 Jan 2022 18:43:18 -0800 Subject: [PATCH 02/17] better trigger --- .../Messages/RequestStateResyncMessage.cs | 4 + QSB/TriggerSync/QSBTrigger.cs | 105 ++++++++++++++++++ QSB/TriggerSync/TriggerLink.cs | 83 -------------- QSB/TriggerSync/TriggerManager.cs | 36 +++--- QSB/TriggerSync/TriggerMessage.cs | 31 +----- QSB/TriggerSync/TriggerResyncMessage.cs | 51 +++++++++ 6 files changed, 183 insertions(+), 127 deletions(-) create mode 100644 QSB/TriggerSync/QSBTrigger.cs delete mode 100644 QSB/TriggerSync/TriggerLink.cs create mode 100644 QSB/TriggerSync/TriggerResyncMessage.cs diff --git a/QSB/Player/Messages/RequestStateResyncMessage.cs b/QSB/Player/Messages/RequestStateResyncMessage.cs index 8c927f12..828bb4e4 100644 --- a/QSB/Player/Messages/RequestStateResyncMessage.cs +++ b/QSB/Player/Messages/RequestStateResyncMessage.cs @@ -16,6 +16,7 @@ using QSB.Tools.TranslatorTool.TranslationSync.Messages; using QSB.Tools.TranslatorTool.TranslationSync.WorldObjects; using QSB.TornadoSync.Messages; using QSB.TornadoSync.WorldObjects; +using QSB.TriggerSync; using QSB.Utility; using QSB.WorldSync; using System.Linq; @@ -126,6 +127,9 @@ namespace QSB.Player.Messages QSBWorldSync.GetWorldObjects().ForEach(tornado => tornado.SendMessage(new TornadoFormStateMessage(tornado.FormState) { To = From })); + + QSBWorldSync.GetWorldObjects().ForEach(trigger + => trigger.SendMessage(new TriggerResyncMessage(trigger.Players))); } /// diff --git a/QSB/TriggerSync/QSBTrigger.cs b/QSB/TriggerSync/QSBTrigger.cs new file mode 100644 index 00000000..ac4de97a --- /dev/null +++ b/QSB/TriggerSync/QSBTrigger.cs @@ -0,0 +1,105 @@ +using OWML.Common; +using QSB.Messaging; +using QSB.Player; +using QSB.Utility; +using QSB.WorldSync; +using System.Collections.Generic; +using UnityEngine; + +namespace QSB.TriggerSync +{ + public abstract class QSBTrigger : WorldObject + { + public readonly List Players = new(); + + public override void Init() + { + AttachedObject.OnEntry += OnEntry; + AttachedObject.OnExit += OnExit; + + QSBPlayerManager.OnRemovePlayer += OnPlayerLeave; + + QSBCore.UnityEvents.RunWhen(() => WorldObjectManager.AllObjectsReady, () => + { + if (AttachedObject._trackedObjects == null) + { + DebugLog.DebugWrite($"{LogName} tracked objects == null", MessageType.Warning); + } + else if (AttachedObject._trackedObjects.Contains(Locator.GetPlayerDetector())) + { + this.SendMessage(new TriggerMessage(true)); + } + }); + } + + public override void OnRemoval() + { + AttachedObject.OnEntry -= OnEntry; + AttachedObject.OnExit -= OnExit; + + QSBPlayerManager.OnRemovePlayer -= OnPlayerLeave; + } + + private void OnPlayerLeave(PlayerInfo player) + { + if (Players.Contains(player)) + { + Exit(player); + } + } + + private void OnEntry(GameObject hitObj) + { + if (hitObj.CompareTag("PlayerDetector")) + { + this.SendMessage(new TriggerMessage(true)); + } + } + + private void OnExit(GameObject hitObj) + { + if (hitObj.CompareTag("PlayerDetector")) + { + this.SendMessage(new TriggerMessage(false)); + } + } + + public void Enter(PlayerInfo player) + { + if (!Players.SafeAdd(player)) + { + DebugLog.DebugWrite($"{LogName} + {player.PlayerId}", MessageType.Warning); + return; + } + + DebugLog.DebugWrite($"{LogName} + {player.PlayerId}"); + } + + public void Exit(PlayerInfo player) + { + if (!Players.QuickRemove(player)) + { + DebugLog.DebugWrite($"{LogName} - {player.PlayerId}", MessageType.Warning); + return; + } + + DebugLog.DebugWrite($"{LogName} - {player.PlayerId}"); + } + } + + public class QSBCharacterTrigger : QSBTrigger + { + } + + public class QSBSolanumTrigger : QSBTrigger + { + } + + public class QSBVesselCageTrigger : QSBTrigger + { + } + + public class QSBMaskZoneTrigger : QSBTrigger + { + } +} diff --git a/QSB/TriggerSync/TriggerLink.cs b/QSB/TriggerSync/TriggerLink.cs deleted file mode 100644 index 6d093dd6..00000000 --- a/QSB/TriggerSync/TriggerLink.cs +++ /dev/null @@ -1,83 +0,0 @@ -using OWML.Common; -using QSB.Messaging; -using QSB.Player; -using QSB.Utility; -using System; -using System.Collections.Generic; -using UnityEngine; - -namespace QSB.TriggerSync -{ - public class TriggerLink : IDisposable - { - public string LogName => - $"trigger {QSBPlayerManager.LocalPlayerId}.{_id}.{(_trigger ? _trigger.name : "null")}"; - - public readonly List Players = new(); - - private readonly int _id; - private readonly OWTriggerVolume _trigger; - - public TriggerLink(int id, OWTriggerVolume trigger) - { - _id = id; - _trigger = trigger; - - _trigger.OnEntry += OnEntry; - _trigger.OnExit += OnExit; - - if (_trigger._trackedObjects != null && _trigger.IsTrackingObject(Locator.GetPlayerDetector())) - { - OnEntry(Locator.GetPlayerDetector()); - } - - DebugLog.DebugWrite($"{LogName} created"); - } - - public void Dispose() - { - _trigger.OnEntry -= OnEntry; - _trigger.OnExit -= OnExit; - - DebugLog.DebugWrite($"{LogName} disposed"); - } - - private void OnEntry(GameObject hitObj) - { - if (hitObj.CompareTag("PlayerDetector")) - { - new TriggerMessage(_id, true).Send(); - } - } - - private void OnExit(GameObject hitObj) - { - if (hitObj.CompareTag("PlayerDetector")) - { - new TriggerMessage(_id, false).Send(); - } - } - - public void Enter(PlayerInfo player) - { - if (!Players.SafeAdd(player)) - { - DebugLog.DebugWrite($"{LogName} already added {player.PlayerId}", MessageType.Warning); - return; - } - - DebugLog.DebugWrite($"{LogName} + {player.PlayerId}"); - } - - public void Exit(PlayerInfo player) - { - if (!Players.QuickRemove(player)) - { - DebugLog.DebugWrite($"{LogName} already removed {player.PlayerId}", MessageType.Warning); - return; - } - - DebugLog.DebugWrite($"{LogName} - {player.PlayerId}"); - } - } -} diff --git a/QSB/TriggerSync/TriggerManager.cs b/QSB/TriggerSync/TriggerManager.cs index 7ba745c8..5c2fd473 100644 --- a/QSB/TriggerSync/TriggerManager.cs +++ b/QSB/TriggerSync/TriggerManager.cs @@ -1,6 +1,4 @@ -using OWML.Common; -using QSB.Utility; -using QSB.WorldSync; +using QSB.WorldSync; using System.Linq; namespace QSB.TriggerSync @@ -9,24 +7,28 @@ namespace QSB.TriggerSync { public override WorldObjectType WorldObjectType => WorldObjectType.Both; - private static TriggerLink[] _triggerLinks; - protected override void RebuildWorldObjects(OWScene scene) { - _triggerLinks?.ForEach(x => x.Dispose()); - _triggerLinks = QSBWorldSync.GetUnityObjects() - .Select((x, i) => new TriggerLink(i, x)) - .ToArray(); - } + QSBWorldSync.Init( + QSBWorldSync.GetUnityObjects() + .Where(x => x.playerTrackingZone) + .Select(x => x.playerTrackingZone) + ); - public static TriggerLink GetTriggerLink(int id) - { - if (!_triggerLinks.TryGet(id, out var triggerLink)) - { - DebugLog.ToConsole($"no trigger link with id {id}", MessageType.Error); - } + QSBWorldSync.Init( + QSBWorldSync.GetUnityObjects() + .Select(x => x._watchPlayerVolume) + ); - return triggerLink; + QSBWorldSync.Init( + QSBWorldSync.GetUnityObjects() + .Select(x => x._cageTrigger) + ); + + QSBWorldSync.Init( + QSBWorldSync.GetUnityObjects() + .Select(x => x._maskZoneTrigger) + ); } } } diff --git a/QSB/TriggerSync/TriggerMessage.cs b/QSB/TriggerSync/TriggerMessage.cs index e4435657..8f349dc2 100644 --- a/QSB/TriggerSync/TriggerMessage.cs +++ b/QSB/TriggerSync/TriggerMessage.cs @@ -1,47 +1,24 @@ using QSB.Messaging; using QSB.Player; -using QSB.WorldSync; -using QuantumUNET.Transport; namespace QSB.TriggerSync { - public class TriggerMessage : QSBBoolMessage + public class TriggerMessage : QSBBoolWorldObjectMessage { - private int _id; - - public TriggerMessage(int id, bool entered) - { - _id = id; - Value = entered; - } - - public override void Serialize(QNetworkWriter writer) - { - base.Serialize(writer); - writer.Write(_id); - } - - public override void Deserialize(QNetworkReader reader) - { - base.Deserialize(reader); - _id = reader.ReadInt32(); - } - - public override bool ShouldReceive => WorldObjectManager.AllObjectsReady; + public TriggerMessage(bool entered) => Value = entered; public override void OnReceiveLocal() => OnReceiveRemote(); public override void OnReceiveRemote() { var player = QSBPlayerManager.GetPlayer(From); - var triggerLink = TriggerManager.GetTriggerLink(_id); if (Value) { - triggerLink.Enter(player); + WorldObject.Enter(player); } else { - triggerLink.Exit(player); + WorldObject.Exit(player); } } } diff --git a/QSB/TriggerSync/TriggerResyncMessage.cs b/QSB/TriggerSync/TriggerResyncMessage.cs new file mode 100644 index 00000000..5c005553 --- /dev/null +++ b/QSB/TriggerSync/TriggerResyncMessage.cs @@ -0,0 +1,51 @@ +using QSB.Messaging; +using QSB.Player; +using QSB.Utility; +using QuantumUNET.Transport; +using System.Collections.Generic; +using System.Linq; + +namespace QSB.TriggerSync +{ + /// + /// always sent by host + /// + public class TriggerResyncMessage : QSBWorldObjectMessage + { + private uint[] _playerIds; + + public TriggerResyncMessage(IEnumerable players) => + _playerIds = players.Select(x => x.PlayerId).ToArray(); + + public override void Serialize(QNetworkWriter writer) + { + base.Serialize(writer); + writer.Write(_playerIds.Length); + _playerIds.ForEach(writer.Write); + } + + public override void Deserialize(QNetworkReader reader) + { + base.Deserialize(reader); + _playerIds = new uint[reader.ReadInt32()]; + for (var i = 0; i < _playerIds.Length; i++) + { + _playerIds[i] = reader.ReadUInt32(); + } + } + + public override void OnReceiveRemote() + { + var serverPlayers = _playerIds.Select(QSBPlayerManager.GetPlayer).ToList(); + foreach (var added in serverPlayers.Except(WorldObject.Players)) + { + WorldObject.Enter(added); + } + + foreach (var removed in WorldObject.Players.Except(serverPlayers)) + { + WorldObject.Exit(removed); + } + } + } +} From 2cbff8bb9a25897679c6642b88bbd4f09fb17417 Mon Sep 17 00:00:00 2001 From: JohnCorby Date: Wed, 12 Jan 2022 19:12:37 -0800 Subject: [PATCH 03/17] triggers hold their owners --- .../Messages/RequestStateResyncMessage.cs | 2 +- QSB/TriggerSync/QSBTrigger.cs | 29 +++++++++++++------ QSB/TriggerSync/TriggerManager.cs | 25 +++------------- QSB/TriggerSync/TriggerMessage.cs | 2 +- QSB/TriggerSync/TriggerResyncMessage.cs | 2 +- QSB/WorldSync/QSBWorldSync.cs | 23 +++++++++++++++ 6 files changed, 50 insertions(+), 33 deletions(-) diff --git a/QSB/Player/Messages/RequestStateResyncMessage.cs b/QSB/Player/Messages/RequestStateResyncMessage.cs index 828bb4e4..d5745f27 100644 --- a/QSB/Player/Messages/RequestStateResyncMessage.cs +++ b/QSB/Player/Messages/RequestStateResyncMessage.cs @@ -128,7 +128,7 @@ namespace QSB.Player.Messages QSBWorldSync.GetWorldObjects().ForEach(tornado => tornado.SendMessage(new TornadoFormStateMessage(tornado.FormState) { To = From })); - QSBWorldSync.GetWorldObjects().ForEach(trigger + QSBWorldSync.GetWorldObjects().ForEach(trigger => trigger.SendMessage(new TriggerResyncMessage(trigger.Players))); } diff --git a/QSB/TriggerSync/QSBTrigger.cs b/QSB/TriggerSync/QSBTrigger.cs index ac4de97a..76082505 100644 --- a/QSB/TriggerSync/QSBTrigger.cs +++ b/QSB/TriggerSync/QSBTrigger.cs @@ -8,9 +8,20 @@ using UnityEngine; namespace QSB.TriggerSync { - public abstract class QSBTrigger : WorldObject + public interface IQSBTrigger : IWorldObject { - public readonly List Players = new(); + List Players { get; } + + void Enter(PlayerInfo player); + + void Exit(PlayerInfo player); + } + + public abstract class QSBTrigger : WorldObject, IQSBTrigger + { + public TO TriggerOwner { get; init; } + + public List Players { get; } = new(); public override void Init() { @@ -27,7 +38,7 @@ namespace QSB.TriggerSync } else if (AttachedObject._trackedObjects.Contains(Locator.GetPlayerDetector())) { - this.SendMessage(new TriggerMessage(true)); + ((IQSBTrigger)this).SendMessage(new TriggerMessage(true)); } }); } @@ -52,7 +63,7 @@ namespace QSB.TriggerSync { if (hitObj.CompareTag("PlayerDetector")) { - this.SendMessage(new TriggerMessage(true)); + ((IQSBTrigger)this).SendMessage(new TriggerMessage(true)); } } @@ -60,7 +71,7 @@ namespace QSB.TriggerSync { if (hitObj.CompareTag("PlayerDetector")) { - this.SendMessage(new TriggerMessage(false)); + ((IQSBTrigger)this).SendMessage(new TriggerMessage(false)); } } @@ -87,19 +98,19 @@ namespace QSB.TriggerSync } } - public class QSBCharacterTrigger : QSBTrigger + public class QSBCharacterTrigger : QSBTrigger { } - public class QSBSolanumTrigger : QSBTrigger + public class QSBSolanumTrigger : QSBTrigger { } - public class QSBVesselCageTrigger : QSBTrigger + public class QSBVesselCageTrigger : QSBTrigger { } - public class QSBMaskZoneTrigger : QSBTrigger + public class QSBMaskZoneTrigger : QSBTrigger { } } diff --git a/QSB/TriggerSync/TriggerManager.cs b/QSB/TriggerSync/TriggerManager.cs index 5c2fd473..6f9c490b 100644 --- a/QSB/TriggerSync/TriggerManager.cs +++ b/QSB/TriggerSync/TriggerManager.cs @@ -1,5 +1,4 @@ using QSB.WorldSync; -using System.Linq; namespace QSB.TriggerSync { @@ -9,26 +8,10 @@ namespace QSB.TriggerSync protected override void RebuildWorldObjects(OWScene scene) { - QSBWorldSync.Init( - QSBWorldSync.GetUnityObjects() - .Where(x => x.playerTrackingZone) - .Select(x => x.playerTrackingZone) - ); - - QSBWorldSync.Init( - QSBWorldSync.GetUnityObjects() - .Select(x => x._watchPlayerVolume) - ); - - QSBWorldSync.Init( - QSBWorldSync.GetUnityObjects() - .Select(x => x._cageTrigger) - ); - - QSBWorldSync.Init( - QSBWorldSync.GetUnityObjects() - .Select(x => x._maskZoneTrigger) - ); + QSBWorldSync.Init(x => x.playerTrackingZone); + QSBWorldSync.Init(x => x._watchPlayerVolume); + QSBWorldSync.Init(x => x._cageTrigger); + QSBWorldSync.Init(x => x._maskZoneTrigger); } } } diff --git a/QSB/TriggerSync/TriggerMessage.cs b/QSB/TriggerSync/TriggerMessage.cs index 8f349dc2..a4b7865b 100644 --- a/QSB/TriggerSync/TriggerMessage.cs +++ b/QSB/TriggerSync/TriggerMessage.cs @@ -3,7 +3,7 @@ using QSB.Player; namespace QSB.TriggerSync { - public class TriggerMessage : QSBBoolWorldObjectMessage + public class TriggerMessage : QSBBoolWorldObjectMessage { public TriggerMessage(bool entered) => Value = entered; diff --git a/QSB/TriggerSync/TriggerResyncMessage.cs b/QSB/TriggerSync/TriggerResyncMessage.cs index 5c005553..716d2e35 100644 --- a/QSB/TriggerSync/TriggerResyncMessage.cs +++ b/QSB/TriggerSync/TriggerResyncMessage.cs @@ -10,7 +10,7 @@ namespace QSB.TriggerSync /// /// always sent by host /// - public class TriggerResyncMessage : QSBWorldObjectMessage + public class TriggerResyncMessage : QSBWorldObjectMessage { private uint[] _playerIds; diff --git a/QSB/WorldSync/QSBWorldSync.cs b/QSB/WorldSync/QSBWorldSync.cs index 304e7310..54705cfb 100644 --- a/QSB/WorldSync/QSBWorldSync.cs +++ b/QSB/WorldSync/QSBWorldSync.cs @@ -1,6 +1,7 @@ using OWML.Common; using QSB.ConversationSync.Patches; using QSB.LogSync; +using QSB.TriggerSync; using QSB.Utility; using System; using System.Collections.Generic; @@ -176,6 +177,28 @@ namespace QSB.WorldSync } } + public static void Init(Func triggerSelector) + where TWorldObject : QSBTrigger, new() + where TUnityObject : MonoBehaviour + { + var list = GetUnityObjects() + .Select(x => (triggerSelector(x), x)) + .Where(x => x.Item1); + foreach (var (item, owner) in list) + { + var obj = new TWorldObject + { + AttachedObject = item, + ObjectId = WorldObjects.Count, + TriggerOwner = owner + }; + + obj.Init(); + WorldObjects.Add(obj); + WorldObjectsToUnityObjects.Add(item, obj); + } + } + public static void SetDialogueCondition(string name, bool state) { if (!QSBCore.IsHost) From 1cd97b5ef6a573bbc53cf770c27f40f2224da7dd Mon Sep 17 00:00:00 2001 From: JohnCorby Date: Wed, 12 Jan 2022 19:18:59 -0800 Subject: [PATCH 04/17] move stuff --- .../Messages/RequestStateResyncMessage.cs | 2 ++ .../{ => Messages}/TriggerMessage.cs | 3 ++- .../{ => Messages}/TriggerResyncMessage.cs | 3 ++- QSB/TriggerSync/TriggerManager.cs | 3 ++- .../WorldObjects/QSBCharacterTrigger.cs | 19 +++++++++++++++++++ .../WorldObjects/QSBMaskZoneTrigger.cs | 19 +++++++++++++++++++ .../WorldObjects/QSBSolanumTrigger.cs | 19 +++++++++++++++++++ .../{ => WorldObjects}/QSBTrigger.cs | 19 ++----------------- .../WorldObjects/QSBVesselCageTrigger.cs | 17 +++++++++++++++++ QSB/WorldSync/QSBWorldSync.cs | 1 + 10 files changed, 85 insertions(+), 20 deletions(-) rename QSB/TriggerSync/{ => Messages}/TriggerMessage.cs (86%) rename QSB/TriggerSync/{ => Messages}/TriggerResyncMessage.cs (94%) create mode 100644 QSB/TriggerSync/WorldObjects/QSBCharacterTrigger.cs create mode 100644 QSB/TriggerSync/WorldObjects/QSBMaskZoneTrigger.cs create mode 100644 QSB/TriggerSync/WorldObjects/QSBSolanumTrigger.cs rename QSB/TriggerSync/{ => WorldObjects}/QSBTrigger.cs (86%) create mode 100644 QSB/TriggerSync/WorldObjects/QSBVesselCageTrigger.cs diff --git a/QSB/Player/Messages/RequestStateResyncMessage.cs b/QSB/Player/Messages/RequestStateResyncMessage.cs index d5745f27..351e6f45 100644 --- a/QSB/Player/Messages/RequestStateResyncMessage.cs +++ b/QSB/Player/Messages/RequestStateResyncMessage.cs @@ -17,6 +17,8 @@ using QSB.Tools.TranslatorTool.TranslationSync.WorldObjects; using QSB.TornadoSync.Messages; using QSB.TornadoSync.WorldObjects; using QSB.TriggerSync; +using QSB.TriggerSync.Messages; +using QSB.TriggerSync.WorldObjects; using QSB.Utility; using QSB.WorldSync; using System.Linq; diff --git a/QSB/TriggerSync/TriggerMessage.cs b/QSB/TriggerSync/Messages/TriggerMessage.cs similarity index 86% rename from QSB/TriggerSync/TriggerMessage.cs rename to QSB/TriggerSync/Messages/TriggerMessage.cs index a4b7865b..4f63d4d1 100644 --- a/QSB/TriggerSync/TriggerMessage.cs +++ b/QSB/TriggerSync/Messages/TriggerMessage.cs @@ -1,7 +1,8 @@ using QSB.Messaging; using QSB.Player; +using QSB.TriggerSync.WorldObjects; -namespace QSB.TriggerSync +namespace QSB.TriggerSync.Messages { public class TriggerMessage : QSBBoolWorldObjectMessage { diff --git a/QSB/TriggerSync/TriggerResyncMessage.cs b/QSB/TriggerSync/Messages/TriggerResyncMessage.cs similarity index 94% rename from QSB/TriggerSync/TriggerResyncMessage.cs rename to QSB/TriggerSync/Messages/TriggerResyncMessage.cs index 716d2e35..873e186e 100644 --- a/QSB/TriggerSync/TriggerResyncMessage.cs +++ b/QSB/TriggerSync/Messages/TriggerResyncMessage.cs @@ -1,11 +1,12 @@ using QSB.Messaging; using QSB.Player; +using QSB.TriggerSync.WorldObjects; using QSB.Utility; using QuantumUNET.Transport; using System.Collections.Generic; using System.Linq; -namespace QSB.TriggerSync +namespace QSB.TriggerSync.Messages { /// /// always sent by host diff --git a/QSB/TriggerSync/TriggerManager.cs b/QSB/TriggerSync/TriggerManager.cs index 6f9c490b..c3875967 100644 --- a/QSB/TriggerSync/TriggerManager.cs +++ b/QSB/TriggerSync/TriggerManager.cs @@ -1,4 +1,5 @@ -using QSB.WorldSync; +using QSB.TriggerSync.WorldObjects; +using QSB.WorldSync; namespace QSB.TriggerSync { diff --git a/QSB/TriggerSync/WorldObjects/QSBCharacterTrigger.cs b/QSB/TriggerSync/WorldObjects/QSBCharacterTrigger.cs new file mode 100644 index 00000000..7cf0e9a4 --- /dev/null +++ b/QSB/TriggerSync/WorldObjects/QSBCharacterTrigger.cs @@ -0,0 +1,19 @@ +namespace QSB.TriggerSync.WorldObjects +{ + public class QSBCharacterTrigger : QSBTrigger + { + public override void Init() + { + base.Init(); + AttachedObject.OnEntry -= TriggerOwner.OnZoneEntry; + AttachedObject.OnExit -= TriggerOwner.OnZoneExit; + } + + public override void OnRemoval() + { + base.OnRemoval(); + AttachedObject.OnEntry += TriggerOwner.OnZoneEntry; + AttachedObject.OnExit += TriggerOwner.OnZoneExit; + } + } +} diff --git a/QSB/TriggerSync/WorldObjects/QSBMaskZoneTrigger.cs b/QSB/TriggerSync/WorldObjects/QSBMaskZoneTrigger.cs new file mode 100644 index 00000000..97802ee6 --- /dev/null +++ b/QSB/TriggerSync/WorldObjects/QSBMaskZoneTrigger.cs @@ -0,0 +1,19 @@ +namespace QSB.TriggerSync.WorldObjects +{ + public class QSBMaskZoneTrigger : QSBTrigger + { + public override void Init() + { + base.Init(); + AttachedObject.OnEntry -= TriggerOwner.OnEnterMaskZone; + AttachedObject.OnExit -= TriggerOwner.OnExitMaskZone; + } + + public override void OnRemoval() + { + base.OnRemoval(); + AttachedObject.OnEntry += TriggerOwner.OnEnterMaskZone; + AttachedObject.OnExit += TriggerOwner.OnExitMaskZone; + } + } +} diff --git a/QSB/TriggerSync/WorldObjects/QSBSolanumTrigger.cs b/QSB/TriggerSync/WorldObjects/QSBSolanumTrigger.cs new file mode 100644 index 00000000..90f49928 --- /dev/null +++ b/QSB/TriggerSync/WorldObjects/QSBSolanumTrigger.cs @@ -0,0 +1,19 @@ +namespace QSB.TriggerSync.WorldObjects +{ + public class QSBSolanumTrigger : QSBTrigger + { + public override void Init() + { + base.Init(); + AttachedObject.OnEntry -= TriggerOwner.OnEnterWatchVolume; + AttachedObject.OnExit -= TriggerOwner.OnExitWatchVolume; + } + + public override void OnRemoval() + { + base.OnRemoval(); + AttachedObject.OnEntry += TriggerOwner.OnEnterWatchVolume; + AttachedObject.OnExit += TriggerOwner.OnExitWatchVolume; + } + } +} diff --git a/QSB/TriggerSync/QSBTrigger.cs b/QSB/TriggerSync/WorldObjects/QSBTrigger.cs similarity index 86% rename from QSB/TriggerSync/QSBTrigger.cs rename to QSB/TriggerSync/WorldObjects/QSBTrigger.cs index 76082505..2d6aa97a 100644 --- a/QSB/TriggerSync/QSBTrigger.cs +++ b/QSB/TriggerSync/WorldObjects/QSBTrigger.cs @@ -1,12 +1,13 @@ using OWML.Common; using QSB.Messaging; using QSB.Player; +using QSB.TriggerSync.Messages; using QSB.Utility; using QSB.WorldSync; using System.Collections.Generic; using UnityEngine; -namespace QSB.TriggerSync +namespace QSB.TriggerSync.WorldObjects { public interface IQSBTrigger : IWorldObject { @@ -97,20 +98,4 @@ namespace QSB.TriggerSync DebugLog.DebugWrite($"{LogName} - {player.PlayerId}"); } } - - public class QSBCharacterTrigger : QSBTrigger - { - } - - public class QSBSolanumTrigger : QSBTrigger - { - } - - public class QSBVesselCageTrigger : QSBTrigger - { - } - - public class QSBMaskZoneTrigger : QSBTrigger - { - } } diff --git a/QSB/TriggerSync/WorldObjects/QSBVesselCageTrigger.cs b/QSB/TriggerSync/WorldObjects/QSBVesselCageTrigger.cs new file mode 100644 index 00000000..ae53e048 --- /dev/null +++ b/QSB/TriggerSync/WorldObjects/QSBVesselCageTrigger.cs @@ -0,0 +1,17 @@ +namespace QSB.TriggerSync.WorldObjects +{ + public class QSBVesselCageTrigger : QSBTrigger + { + public override void Init() + { + base.Init(); + AttachedObject.OnExit -= TriggerOwner.OnExitCageTrigger; + } + + public override void OnRemoval() + { + base.OnRemoval(); + AttachedObject.OnExit += TriggerOwner.OnExitCageTrigger; + } + } +} diff --git a/QSB/WorldSync/QSBWorldSync.cs b/QSB/WorldSync/QSBWorldSync.cs index 54705cfb..f472526a 100644 --- a/QSB/WorldSync/QSBWorldSync.cs +++ b/QSB/WorldSync/QSBWorldSync.cs @@ -2,6 +2,7 @@ using QSB.ConversationSync.Patches; using QSB.LogSync; using QSB.TriggerSync; +using QSB.TriggerSync.WorldObjects; using QSB.Utility; using System; using System.Collections.Generic; From 50ffb7de12baf34141dc7aa682dc3a439a44982e Mon Sep 17 00:00:00 2001 From: JohnCorby Date: Wed, 12 Jan 2022 19:43:48 -0800 Subject: [PATCH 05/17] more work --- QSB/TriggerSync/TriggerManager.cs | 2 ++ .../WorldObjects/QSBCharacterTrigger.cs | 17 ++++++++++------- .../WorldObjects/QSBInflationTrigger.cs | 18 ++++++++++++++++++ .../WorldObjects/QSBMaskZoneTrigger.cs | 14 +++++++------- .../WorldObjects/QSBShrineTrigger.cs | 11 +++++++++++ .../WorldObjects/QSBSolanumTrigger.cs | 17 ++++++++++------- QSB/TriggerSync/WorldObjects/QSBTrigger.cs | 6 ++++++ .../WorldObjects/QSBVesselCageTrigger.cs | 13 +++++++------ 8 files changed, 71 insertions(+), 27 deletions(-) create mode 100644 QSB/TriggerSync/WorldObjects/QSBInflationTrigger.cs create mode 100644 QSB/TriggerSync/WorldObjects/QSBShrineTrigger.cs diff --git a/QSB/TriggerSync/TriggerManager.cs b/QSB/TriggerSync/TriggerManager.cs index c3875967..704d857c 100644 --- a/QSB/TriggerSync/TriggerManager.cs +++ b/QSB/TriggerSync/TriggerManager.cs @@ -12,7 +12,9 @@ namespace QSB.TriggerSync QSBWorldSync.Init(x => x.playerTrackingZone); QSBWorldSync.Init(x => x._watchPlayerVolume); QSBWorldSync.Init(x => x._cageTrigger); + QSBWorldSync.Init(x => x._triggerVolume); QSBWorldSync.Init(x => x._maskZoneTrigger); + QSBWorldSync.Init(x => x._smokeSphereTrigger); } } } diff --git a/QSB/TriggerSync/WorldObjects/QSBCharacterTrigger.cs b/QSB/TriggerSync/WorldObjects/QSBCharacterTrigger.cs index 7cf0e9a4..dccb0849 100644 --- a/QSB/TriggerSync/WorldObjects/QSBCharacterTrigger.cs +++ b/QSB/TriggerSync/WorldObjects/QSBCharacterTrigger.cs @@ -1,4 +1,8 @@ -namespace QSB.TriggerSync.WorldObjects +using QSB.Animation.NPC.WorldObjects; +using QSB.Player; +using QSB.WorldSync; + +namespace QSB.TriggerSync.WorldObjects { public class QSBCharacterTrigger : QSBTrigger { @@ -9,11 +13,10 @@ AttachedObject.OnExit -= TriggerOwner.OnZoneExit; } - public override void OnRemoval() - { - base.OnRemoval(); - AttachedObject.OnEntry += TriggerOwner.OnZoneEntry; - AttachedObject.OnExit += TriggerOwner.OnZoneExit; - } + protected override void OnEnter(PlayerInfo player) + => TriggerOwner.GetWorldObject().AddPlayerToHeadZone(player); + + protected override void OnExit(PlayerInfo player) + => TriggerOwner.GetWorldObject().RemovePlayerFromHeadZone(player); } } diff --git a/QSB/TriggerSync/WorldObjects/QSBInflationTrigger.cs b/QSB/TriggerSync/WorldObjects/QSBInflationTrigger.cs new file mode 100644 index 00000000..492d5c6f --- /dev/null +++ b/QSB/TriggerSync/WorldObjects/QSBInflationTrigger.cs @@ -0,0 +1,18 @@ +using QSB.EyeOfTheUniverse.CosmicInflation; +using QSB.Player; + +namespace QSB.TriggerSync.WorldObjects +{ + public class QSBInflationTrigger : QSBTrigger + { + public override void Init() + { + base.Init(); + AttachedObject.OnEntry -= TriggerOwner.OnEnterFogSphere; + } + + protected override void OnEnter(PlayerInfo player) => InflationManager.Instance.Enter(player); + + protected override void OnExit(PlayerInfo player) { } + } +} diff --git a/QSB/TriggerSync/WorldObjects/QSBMaskZoneTrigger.cs b/QSB/TriggerSync/WorldObjects/QSBMaskZoneTrigger.cs index 97802ee6..d27647a8 100644 --- a/QSB/TriggerSync/WorldObjects/QSBMaskZoneTrigger.cs +++ b/QSB/TriggerSync/WorldObjects/QSBMaskZoneTrigger.cs @@ -1,4 +1,7 @@ -namespace QSB.TriggerSync.WorldObjects +using QSB.EyeOfTheUniverse.MaskSync; +using QSB.Player; + +namespace QSB.TriggerSync.WorldObjects { public class QSBMaskZoneTrigger : QSBTrigger { @@ -9,11 +12,8 @@ AttachedObject.OnExit -= TriggerOwner.OnExitMaskZone; } - public override void OnRemoval() - { - base.OnRemoval(); - AttachedObject.OnEntry += TriggerOwner.OnEnterMaskZone; - AttachedObject.OnExit += TriggerOwner.OnExitMaskZone; - } + protected override void OnEnter(PlayerInfo player) => MaskManager.Instance.Enter(player); + + protected override void OnExit(PlayerInfo player) => MaskManager.Instance.Exit(player); } } diff --git a/QSB/TriggerSync/WorldObjects/QSBShrineTrigger.cs b/QSB/TriggerSync/WorldObjects/QSBShrineTrigger.cs new file mode 100644 index 00000000..61420721 --- /dev/null +++ b/QSB/TriggerSync/WorldObjects/QSBShrineTrigger.cs @@ -0,0 +1,11 @@ +using QSB.Player; + +namespace QSB.TriggerSync.WorldObjects +{ + public class QSBShrineTrigger : QSBTrigger + { + protected override void OnEnter(PlayerInfo player) => player.IsInShrine = true; + + protected override void OnExit(PlayerInfo player) => player.IsInShrine = false; + } +} diff --git a/QSB/TriggerSync/WorldObjects/QSBSolanumTrigger.cs b/QSB/TriggerSync/WorldObjects/QSBSolanumTrigger.cs index 90f49928..301b3642 100644 --- a/QSB/TriggerSync/WorldObjects/QSBSolanumTrigger.cs +++ b/QSB/TriggerSync/WorldObjects/QSBSolanumTrigger.cs @@ -1,4 +1,8 @@ -namespace QSB.TriggerSync.WorldObjects +using QSB.Animation.NPC.WorldObjects; +using QSB.Player; +using QSB.WorldSync; + +namespace QSB.TriggerSync.WorldObjects { public class QSBSolanumTrigger : QSBTrigger { @@ -9,11 +13,10 @@ AttachedObject.OnExit -= TriggerOwner.OnExitWatchVolume; } - public override void OnRemoval() - { - base.OnRemoval(); - AttachedObject.OnEntry += TriggerOwner.OnEnterWatchVolume; - AttachedObject.OnExit += TriggerOwner.OnExitWatchVolume; - } + protected override void OnEnter(PlayerInfo player) + => TriggerOwner.GetWorldObject().AddPlayerToHeadZone(player); + + protected override void OnExit(PlayerInfo player) + => TriggerOwner.GetWorldObject().RemovePlayerFromHeadZone(player); } } diff --git a/QSB/TriggerSync/WorldObjects/QSBTrigger.cs b/QSB/TriggerSync/WorldObjects/QSBTrigger.cs index 2d6aa97a..9dded159 100644 --- a/QSB/TriggerSync/WorldObjects/QSBTrigger.cs +++ b/QSB/TriggerSync/WorldObjects/QSBTrigger.cs @@ -85,6 +85,7 @@ namespace QSB.TriggerSync.WorldObjects } DebugLog.DebugWrite($"{LogName} + {player.PlayerId}"); + OnEnter(player); } public void Exit(PlayerInfo player) @@ -96,6 +97,11 @@ namespace QSB.TriggerSync.WorldObjects } DebugLog.DebugWrite($"{LogName} - {player.PlayerId}"); + OnExit(player); } + + protected virtual void OnEnter(PlayerInfo player) { } + + protected virtual void OnExit(PlayerInfo player) { } } } diff --git a/QSB/TriggerSync/WorldObjects/QSBVesselCageTrigger.cs b/QSB/TriggerSync/WorldObjects/QSBVesselCageTrigger.cs index ae53e048..8ae991c1 100644 --- a/QSB/TriggerSync/WorldObjects/QSBVesselCageTrigger.cs +++ b/QSB/TriggerSync/WorldObjects/QSBVesselCageTrigger.cs @@ -1,4 +1,7 @@ -namespace QSB.TriggerSync.WorldObjects +using QSB.EyeOfTheUniverse.VesselSync; +using QSB.Player; + +namespace QSB.TriggerSync.WorldObjects { public class QSBVesselCageTrigger : QSBTrigger { @@ -8,10 +11,8 @@ AttachedObject.OnExit -= TriggerOwner.OnExitCageTrigger; } - public override void OnRemoval() - { - base.OnRemoval(); - AttachedObject.OnExit += TriggerOwner.OnExitCageTrigger; - } + protected override void OnEnter(PlayerInfo player) => VesselManager.Instance.Enter(player); + + protected override void OnExit(PlayerInfo player) => VesselManager.Instance.Exit(player); } } From ca7accb962e80da052fc722e594209bc0cee43a6 Mon Sep 17 00:00:00 2001 From: JohnCorby Date: Wed, 12 Jan 2022 20:10:04 -0800 Subject: [PATCH 06/17] rename --- .../Messages/RequestStateResyncMessage.cs | 1 - QSB/TriggerSync/WorldObjects/QSBTrigger.cs | 38 +++++++++---------- QSB/WorldSync/QSBWorldSync.cs | 3 +- 3 files changed, 20 insertions(+), 22 deletions(-) diff --git a/QSB/Player/Messages/RequestStateResyncMessage.cs b/QSB/Player/Messages/RequestStateResyncMessage.cs index 351e6f45..b1f8a84a 100644 --- a/QSB/Player/Messages/RequestStateResyncMessage.cs +++ b/QSB/Player/Messages/RequestStateResyncMessage.cs @@ -16,7 +16,6 @@ using QSB.Tools.TranslatorTool.TranslationSync.Messages; using QSB.Tools.TranslatorTool.TranslationSync.WorldObjects; using QSB.TornadoSync.Messages; using QSB.TornadoSync.WorldObjects; -using QSB.TriggerSync; using QSB.TriggerSync.Messages; using QSB.TriggerSync.WorldObjects; using QSB.Utility; diff --git a/QSB/TriggerSync/WorldObjects/QSBTrigger.cs b/QSB/TriggerSync/WorldObjects/QSBTrigger.cs index 9dded159..0c1bcdac 100644 --- a/QSB/TriggerSync/WorldObjects/QSBTrigger.cs +++ b/QSB/TriggerSync/WorldObjects/QSBTrigger.cs @@ -26,8 +26,8 @@ namespace QSB.TriggerSync.WorldObjects public override void Init() { - AttachedObject.OnEntry += OnEntry; - AttachedObject.OnExit += OnExit; + AttachedObject.OnEntry += OnLocalEnter; + AttachedObject.OnExit += OnLocalExit; QSBPlayerManager.OnRemovePlayer += OnPlayerLeave; @@ -35,32 +35,24 @@ namespace QSB.TriggerSync.WorldObjects { if (AttachedObject._trackedObjects == null) { - DebugLog.DebugWrite($"{LogName} tracked objects == null", MessageType.Warning); + DebugLog.DebugWrite($"{LogName} _trackedObjects == null", MessageType.Warning); } - else if (AttachedObject._trackedObjects.Contains(Locator.GetPlayerDetector())) + else if (AttachedObject.IsTrackingObject(Locator.GetPlayerDetector())) { - ((IQSBTrigger)this).SendMessage(new TriggerMessage(true)); + OnLocalEnter(Locator.GetPlayerDetector()); } }); } public override void OnRemoval() { - AttachedObject.OnEntry -= OnEntry; - AttachedObject.OnExit -= OnExit; + AttachedObject.OnEntry -= OnLocalEnter; + AttachedObject.OnExit -= OnLocalExit; QSBPlayerManager.OnRemovePlayer -= OnPlayerLeave; } - private void OnPlayerLeave(PlayerInfo player) - { - if (Players.Contains(player)) - { - Exit(player); - } - } - - private void OnEntry(GameObject hitObj) + private void OnLocalEnter(GameObject hitObj) { if (hitObj.CompareTag("PlayerDetector")) { @@ -68,7 +60,7 @@ namespace QSB.TriggerSync.WorldObjects } } - private void OnExit(GameObject hitObj) + private void OnLocalExit(GameObject hitObj) { if (hitObj.CompareTag("PlayerDetector")) { @@ -76,6 +68,14 @@ namespace QSB.TriggerSync.WorldObjects } } + private void OnPlayerLeave(PlayerInfo player) + { + if (Players.Contains(player)) + { + Exit(player); + } + } + public void Enter(PlayerInfo player) { if (!Players.SafeAdd(player)) @@ -100,8 +100,8 @@ namespace QSB.TriggerSync.WorldObjects OnExit(player); } - protected virtual void OnEnter(PlayerInfo player) { } + protected abstract void OnEnter(PlayerInfo player); - protected virtual void OnExit(PlayerInfo player) { } + protected abstract void OnExit(PlayerInfo player); } } diff --git a/QSB/WorldSync/QSBWorldSync.cs b/QSB/WorldSync/QSBWorldSync.cs index f472526a..dac20854 100644 --- a/QSB/WorldSync/QSBWorldSync.cs +++ b/QSB/WorldSync/QSBWorldSync.cs @@ -1,7 +1,6 @@ using OWML.Common; using QSB.ConversationSync.Patches; using QSB.LogSync; -using QSB.TriggerSync; using QSB.TriggerSync.WorldObjects; using QSB.Utility; using System; @@ -169,7 +168,7 @@ namespace QSB.WorldSync var obj = new TWorldObject { AttachedObject = item, - ObjectId = WorldObjects.Count, + ObjectId = WorldObjects.Count }; obj.Init(); From 7cdd6994dd3232722b41caea2b06be4eaa61409d Mon Sep 17 00:00:00 2001 From: JohnCorby Date: Wed, 12 Jan 2022 20:26:16 -0800 Subject: [PATCH 07/17] oops --- QSB/TriggerSync/WorldObjects/QSBSolanumTrigger.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/QSB/TriggerSync/WorldObjects/QSBSolanumTrigger.cs b/QSB/TriggerSync/WorldObjects/QSBSolanumTrigger.cs index 301b3642..310b4724 100644 --- a/QSB/TriggerSync/WorldObjects/QSBSolanumTrigger.cs +++ b/QSB/TriggerSync/WorldObjects/QSBSolanumTrigger.cs @@ -14,9 +14,9 @@ namespace QSB.TriggerSync.WorldObjects } protected override void OnEnter(PlayerInfo player) - => TriggerOwner.GetWorldObject().AddPlayerToHeadZone(player); + => TriggerOwner._solanumAnimController.GetWorldObject().AddPlayerToHeadZone(player); protected override void OnExit(PlayerInfo player) - => TriggerOwner.GetWorldObject().RemovePlayerFromHeadZone(player); + => TriggerOwner._solanumAnimController.GetWorldObject().RemovePlayerFromHeadZone(player); } } From 75f87d765950adba73d00907f2198a34c0095f79 Mon Sep 17 00:00:00 2001 From: JohnCorby Date: Wed, 12 Jan 2022 20:58:38 -0800 Subject: [PATCH 08/17] rename + start migration --- .../NPC/Patches/CharacterAnimationPatches.cs | 42 ++++--------------- QSB/Animation/NPC/Patches/SolanumPatches.cs | 32 +------------- .../QSBCharacterAnimController.cs | 30 +------------ .../WorldObjects/QSBSolanumAnimController.cs | 30 ++----------- QSB/Player/EnterLeaveType.cs | 4 -- QSB/Player/Messages/EnterLeaveMessage.cs | 33 --------------- .../Messages/RequestStateResyncMessage.cs | 2 +- .../Messages/TriggerResyncMessage.cs | 10 ++--- .../WorldObjects/QSBCharacterTrigger.cs | 12 +----- .../WorldObjects/QSBSolanumTrigger.cs | 12 +----- QSB/TriggerSync/WorldObjects/QSBTrigger.cs | 14 +++---- 11 files changed, 30 insertions(+), 191 deletions(-) diff --git a/QSB/Animation/NPC/Patches/CharacterAnimationPatches.cs b/QSB/Animation/NPC/Patches/CharacterAnimationPatches.cs index 1c9f6caa..b8e797f7 100644 --- a/QSB/Animation/NPC/Patches/CharacterAnimationPatches.cs +++ b/QSB/Animation/NPC/Patches/CharacterAnimationPatches.cs @@ -6,7 +6,7 @@ using QSB.ConversationSync; using QSB.Messaging; using QSB.Patches; using QSB.Player; -using QSB.Player.Messages; +using QSB.TriggerSync.WorldObjects; using QSB.Utility; using QSB.WorldSync; using System.Linq; @@ -31,7 +31,7 @@ namespace QSB.Animation.NPC.Patches var playerId = ConversationManager.Instance.GetPlayerTalkingToTree(__instance._dialogueTree); var player = QSBPlayerManager.GetPlayer(playerId); - var qsbObj = __instance.GetWorldObject(); // OPTIMIZE : maybe cache this somewhere... or assess how slow this is + var qsbObj = __instance.playerTrackingZone.GetWorldObject(); // OPTIMIZE : maybe cache this somewhere... or assess how slow this is PlayerInfo playerToUse = null; if (__instance._inConversation) @@ -48,9 +48,9 @@ namespace QSB.Animation.NPC.Patches : player; } } - else if (!__instance.lookOnlyWhenTalking && qsbObj.GetPlayersInHeadZone().Count != 0) // IDEA : maybe this would be more fun if characters looked between players at random times? :P + else if (!__instance.lookOnlyWhenTalking && qsbObj.Occupants.Count != 0) // IDEA : maybe this would be more fun if characters looked between players at random times? :P { - playerToUse = QSBPlayerManager.GetClosestPlayerToWorldPoint(qsbObj.GetPlayersInHeadZone(), __instance.transform.position); + playerToUse = QSBPlayerManager.GetClosestPlayerToWorldPoint(qsbObj.Occupants, __instance.transform.position); } else if (QSBPlayerManager.PlayerList.Count != 0) { @@ -65,16 +65,16 @@ namespace QSB.Animation.NPC.Patches if (__instance.lookOnlyWhenTalking) { if (!__instance._inConversation - || qsbObj.GetPlayersInHeadZone().Count == 0 - || !qsbObj.GetPlayersInHeadZone().Contains(playerToUse)) + || qsbObj.Occupants.Count == 0 + || !qsbObj.Occupants.Contains(playerToUse)) { targetWeight *= 0; } } else { - if (qsbObj.GetPlayersInHeadZone().Count == 0 - || !qsbObj.GetPlayersInHeadZone().Contains(playerToUse)) + if (qsbObj.Occupants.Count == 0 + || !qsbObj.Occupants.Contains(playerToUse)) { targetWeight *= 0; } @@ -88,32 +88,6 @@ namespace QSB.Animation.NPC.Patches } - [HarmonyPrefix] - [HarmonyPatch(typeof(CharacterAnimController), nameof(CharacterAnimController.OnZoneExit))] - public static bool HeadZoneExit(CharacterAnimController __instance, GameObject input) - { - if (input.CompareTag("PlayerDetector")) - { - var qsbObj = __instance.GetWorldObject(); - new EnterLeaveMessage(EnterLeaveType.ExitNonNomaiHeadZone, qsbObj.ObjectId).Send(); - } - - return false; - } - - [HarmonyPrefix] - [HarmonyPatch(typeof(CharacterAnimController), nameof(CharacterAnimController.OnZoneEntry))] - public static bool HeadZoneEntry(CharacterAnimController __instance, GameObject input) - { - if (input.CompareTag("PlayerDetector")) - { - var qsbObj = __instance.GetWorldObject(); - new EnterLeaveMessage(EnterLeaveType.EnterNonNomaiHeadZone, qsbObj.ObjectId).Send(); - } - - return false; - } - [HarmonyPrefix] [HarmonyPatch(typeof(FacePlayerWhenTalking), nameof(FacePlayerWhenTalking.OnStartConversation))] public static bool OnStartConversation(FacePlayerWhenTalking __instance) diff --git a/QSB/Animation/NPC/Patches/SolanumPatches.cs b/QSB/Animation/NPC/Patches/SolanumPatches.cs index 08f43fa4..f1150a2f 100644 --- a/QSB/Animation/NPC/Patches/SolanumPatches.cs +++ b/QSB/Animation/NPC/Patches/SolanumPatches.cs @@ -1,9 +1,7 @@ using HarmonyLib; using QSB.Animation.NPC.WorldObjects; -using QSB.Messaging; using QSB.Patches; using QSB.Player; -using QSB.Player.Messages; using QSB.WorldSync; using System.Linq; using UnityEngine; @@ -26,7 +24,7 @@ namespace QSB.Animation.NPC.Patches } var qsbObj = __instance.GetWorldObject(); - var playersInHeadZone = qsbObj.GetPlayersInHeadZone(); + var playersInHeadZone = qsbObj.Trigger.Occupants; var targetCamera = playersInHeadZone == null || playersInHeadZone.Count == 0 ? __instance._playerCameraTransform @@ -41,38 +39,12 @@ namespace QSB.Animation.NPC.Patches return false; } - [HarmonyPrefix] - [HarmonyPatch(typeof(NomaiConversationManager), nameof(NomaiConversationManager.OnEnterWatchVolume))] - public static bool EnterWatchZone(NomaiConversationManager __instance, GameObject hitObj) - { - if (hitObj.CompareTag("PlayerDetector")) - { - var qsbObj = __instance._solanumAnimController.GetWorldObject(); - new EnterLeaveMessage(EnterLeaveType.EnterNomaiHeadZone, qsbObj.ObjectId).Send(); - } - - return false; - } - - [HarmonyPrefix] - [HarmonyPatch(typeof(NomaiConversationManager), nameof(NomaiConversationManager.OnExitWatchVolume))] - public static bool ExitWatchZone(NomaiConversationManager __instance, GameObject hitObj) - { - if (hitObj.CompareTag("PlayerDetector")) - { - var qsbObj = __instance._solanumAnimController.GetWorldObject(); - new EnterLeaveMessage(EnterLeaveType.ExitNomaiHeadZone, qsbObj.ObjectId).Send(); - } - - return false; - } - [HarmonyPrefix] [HarmonyPatch(typeof(NomaiConversationManager), nameof(NomaiConversationManager.Update))] public static bool ReplacementUpdate(NomaiConversationManager __instance) { var qsbObj = __instance._solanumAnimController.GetWorldObject(); - __instance._playerInWatchVolume = qsbObj.GetPlayersInHeadZone().Any(); + __instance._playerInWatchVolume = qsbObj.Trigger.Occupants.Any(); if (!__instance._initialized) { diff --git a/QSB/Animation/NPC/WorldObjects/QSBCharacterAnimController.cs b/QSB/Animation/NPC/WorldObjects/QSBCharacterAnimController.cs index 9144e966..940b9918 100644 --- a/QSB/Animation/NPC/WorldObjects/QSBCharacterAnimController.cs +++ b/QSB/Animation/NPC/WorldObjects/QSBCharacterAnimController.cs @@ -1,35 +1,7 @@ -using QSB.Player; -using System.Collections.Generic; - -namespace QSB.Animation.NPC.WorldObjects +namespace QSB.Animation.NPC.WorldObjects { internal class QSBCharacterAnimController : NpcAnimController { - private readonly List _playersInHeadZone = new(); - - public List GetPlayersInHeadZone() - => _playersInHeadZone; - - public void AddPlayerToHeadZone(PlayerInfo player) - { - if (_playersInHeadZone.Contains(player)) - { - return; - } - - _playersInHeadZone.Add(player); - } - - public void RemovePlayerFromHeadZone(PlayerInfo player) - { - if (!_playersInHeadZone.Contains(player)) - { - return; - } - - _playersInHeadZone.Remove(player); - } - public override CharacterDialogueTree GetDialogueTree() => AttachedObject._dialogueTree; diff --git a/QSB/Animation/NPC/WorldObjects/QSBSolanumAnimController.cs b/QSB/Animation/NPC/WorldObjects/QSBSolanumAnimController.cs index e940c8c9..7e1c78c3 100644 --- a/QSB/Animation/NPC/WorldObjects/QSBSolanumAnimController.cs +++ b/QSB/Animation/NPC/WorldObjects/QSBSolanumAnimController.cs @@ -1,34 +1,12 @@ -using QSB.Player; +using QSB.TriggerSync.WorldObjects; using QSB.WorldSync; -using System.Collections.Generic; +using System.Linq; namespace QSB.Animation.NPC.WorldObjects { internal class QSBSolanumAnimController : WorldObject { - private readonly List _playersInHeadZone = new(); - - public List GetPlayersInHeadZone() - => _playersInHeadZone; - - public void AddPlayerToHeadZone(PlayerInfo player) - { - if (_playersInHeadZone.Contains(player)) - { - return; - } - - _playersInHeadZone.Add(player); - } - - public void RemovePlayerFromHeadZone(PlayerInfo player) - { - if (!_playersInHeadZone.Contains(player)) - { - return; - } - - _playersInHeadZone.Remove(player); - } + private QSBSolanumTrigger _trigger; + public QSBSolanumTrigger Trigger => _trigger ??= QSBWorldSync.GetWorldObjects().Single(); } } diff --git a/QSB/Player/EnterLeaveType.cs b/QSB/Player/EnterLeaveType.cs index 322558ca..9669e840 100644 --- a/QSB/Player/EnterLeaveType.cs +++ b/QSB/Player/EnterLeaveType.cs @@ -8,12 +8,8 @@ ExitShrine, EnterPlatform, ExitPlatform, - EnterNonNomaiHeadZone, - ExitNonNomaiHeadZone, EnterShip, ExitShip, - EnterNomaiHeadZone, - ExitNomaiHeadZone, EnterVesselCage, ExitVesselCage, EnterCosmicFog, diff --git a/QSB/Player/Messages/EnterLeaveMessage.cs b/QSB/Player/Messages/EnterLeaveMessage.cs index fcbb550d..5cf23a5f 100644 --- a/QSB/Player/Messages/EnterLeaveMessage.cs +++ b/QSB/Player/Messages/EnterLeaveMessage.cs @@ -66,12 +66,6 @@ namespace QSB.Player.Messages case EnterLeaveType.ExitMoon: player.IsInMoon = false; break; - case EnterLeaveType.EnterShrine: - player.IsInShrine = true; - break; - case EnterLeaveType.ExitShrine: - player.IsInShrine = false; - break; case EnterLeaveType.EnterPlatform: CustomNomaiRemoteCameraPlatform.CustomPlatformList[ObjectId] .OnRemotePlayerEnter(From); @@ -80,39 +74,12 @@ namespace QSB.Player.Messages CustomNomaiRemoteCameraPlatform.CustomPlatformList[ObjectId] .OnRemotePlayerExit(From); break; - case EnterLeaveType.EnterNonNomaiHeadZone: - ObjectId.GetWorldObject().AddPlayerToHeadZone(player); - break; - case EnterLeaveType.ExitNonNomaiHeadZone: - ObjectId.GetWorldObject().RemovePlayerFromHeadZone(player); - break; - case EnterLeaveType.EnterNomaiHeadZone: - ObjectId.GetWorldObject().AddPlayerToHeadZone(player); - break; - case EnterLeaveType.ExitNomaiHeadZone: - ObjectId.GetWorldObject().RemovePlayerFromHeadZone(player); - break; case EnterLeaveType.EnterShip: ShipManager.Instance.AddPlayerToShip(player); break; case EnterLeaveType.ExitShip: ShipManager.Instance.RemovePlayerFromShip(player); break; - case EnterLeaveType.EnterVesselCage: - VesselManager.Instance.Enter(player); - break; - case EnterLeaveType.ExitVesselCage: - VesselManager.Instance.Exit(player); - break; - case EnterLeaveType.EnterCosmicFog: - InflationManager.Instance.Enter(player); - break; - case EnterLeaveType.EnterMaskZone: - MaskManager.Instance.Enter(player); - break; - case EnterLeaveType.ExitMaskZone: - MaskManager.Instance.Exit(player); - break; default: DebugLog.ToConsole($"Warning - Unknown EnterLeaveType : {Value}", MessageType.Warning); break; diff --git a/QSB/Player/Messages/RequestStateResyncMessage.cs b/QSB/Player/Messages/RequestStateResyncMessage.cs index b1f8a84a..cf7a04b3 100644 --- a/QSB/Player/Messages/RequestStateResyncMessage.cs +++ b/QSB/Player/Messages/RequestStateResyncMessage.cs @@ -130,7 +130,7 @@ namespace QSB.Player.Messages => tornado.SendMessage(new TornadoFormStateMessage(tornado.FormState) { To = From })); QSBWorldSync.GetWorldObjects().ForEach(trigger - => trigger.SendMessage(new TriggerResyncMessage(trigger.Players))); + => trigger.SendMessage(new TriggerResyncMessage(trigger.Occupants))); } /// diff --git a/QSB/TriggerSync/Messages/TriggerResyncMessage.cs b/QSB/TriggerSync/Messages/TriggerResyncMessage.cs index 873e186e..742fd6eb 100644 --- a/QSB/TriggerSync/Messages/TriggerResyncMessage.cs +++ b/QSB/TriggerSync/Messages/TriggerResyncMessage.cs @@ -15,8 +15,8 @@ namespace QSB.TriggerSync.Messages { private uint[] _playerIds; - public TriggerResyncMessage(IEnumerable players) => - _playerIds = players.Select(x => x.PlayerId).ToArray(); + public TriggerResyncMessage(IEnumerable occupants) => + _playerIds = occupants.Select(x => x.PlayerId).ToArray(); public override void Serialize(QNetworkWriter writer) { @@ -37,13 +37,13 @@ namespace QSB.TriggerSync.Messages public override void OnReceiveRemote() { - var serverPlayers = _playerIds.Select(QSBPlayerManager.GetPlayer).ToList(); - foreach (var added in serverPlayers.Except(WorldObject.Players)) + var serverOccupants = _playerIds.Select(QSBPlayerManager.GetPlayer).ToList(); + foreach (var added in serverOccupants.Except(WorldObject.Occupants)) { WorldObject.Enter(added); } - foreach (var removed in WorldObject.Players.Except(serverPlayers)) + foreach (var removed in WorldObject.Occupants.Except(serverOccupants)) { WorldObject.Exit(removed); } diff --git a/QSB/TriggerSync/WorldObjects/QSBCharacterTrigger.cs b/QSB/TriggerSync/WorldObjects/QSBCharacterTrigger.cs index dccb0849..271b213b 100644 --- a/QSB/TriggerSync/WorldObjects/QSBCharacterTrigger.cs +++ b/QSB/TriggerSync/WorldObjects/QSBCharacterTrigger.cs @@ -1,8 +1,4 @@ -using QSB.Animation.NPC.WorldObjects; -using QSB.Player; -using QSB.WorldSync; - -namespace QSB.TriggerSync.WorldObjects +namespace QSB.TriggerSync.WorldObjects { public class QSBCharacterTrigger : QSBTrigger { @@ -12,11 +8,5 @@ namespace QSB.TriggerSync.WorldObjects AttachedObject.OnEntry -= TriggerOwner.OnZoneEntry; AttachedObject.OnExit -= TriggerOwner.OnZoneExit; } - - protected override void OnEnter(PlayerInfo player) - => TriggerOwner.GetWorldObject().AddPlayerToHeadZone(player); - - protected override void OnExit(PlayerInfo player) - => TriggerOwner.GetWorldObject().RemovePlayerFromHeadZone(player); } } diff --git a/QSB/TriggerSync/WorldObjects/QSBSolanumTrigger.cs b/QSB/TriggerSync/WorldObjects/QSBSolanumTrigger.cs index 310b4724..5eb34e0d 100644 --- a/QSB/TriggerSync/WorldObjects/QSBSolanumTrigger.cs +++ b/QSB/TriggerSync/WorldObjects/QSBSolanumTrigger.cs @@ -1,8 +1,4 @@ -using QSB.Animation.NPC.WorldObjects; -using QSB.Player; -using QSB.WorldSync; - -namespace QSB.TriggerSync.WorldObjects +namespace QSB.TriggerSync.WorldObjects { public class QSBSolanumTrigger : QSBTrigger { @@ -12,11 +8,5 @@ namespace QSB.TriggerSync.WorldObjects AttachedObject.OnEntry -= TriggerOwner.OnEnterWatchVolume; AttachedObject.OnExit -= TriggerOwner.OnExitWatchVolume; } - - protected override void OnEnter(PlayerInfo player) - => TriggerOwner._solanumAnimController.GetWorldObject().AddPlayerToHeadZone(player); - - protected override void OnExit(PlayerInfo player) - => TriggerOwner._solanumAnimController.GetWorldObject().RemovePlayerFromHeadZone(player); } } diff --git a/QSB/TriggerSync/WorldObjects/QSBTrigger.cs b/QSB/TriggerSync/WorldObjects/QSBTrigger.cs index 0c1bcdac..1516fb92 100644 --- a/QSB/TriggerSync/WorldObjects/QSBTrigger.cs +++ b/QSB/TriggerSync/WorldObjects/QSBTrigger.cs @@ -11,7 +11,7 @@ namespace QSB.TriggerSync.WorldObjects { public interface IQSBTrigger : IWorldObject { - List Players { get; } + List Occupants { get; } void Enter(PlayerInfo player); @@ -22,7 +22,7 @@ namespace QSB.TriggerSync.WorldObjects { public TO TriggerOwner { get; init; } - public List Players { get; } = new(); + public List Occupants { get; } = new(); public override void Init() { @@ -70,7 +70,7 @@ namespace QSB.TriggerSync.WorldObjects private void OnPlayerLeave(PlayerInfo player) { - if (Players.Contains(player)) + if (Occupants.Contains(player)) { Exit(player); } @@ -78,7 +78,7 @@ namespace QSB.TriggerSync.WorldObjects public void Enter(PlayerInfo player) { - if (!Players.SafeAdd(player)) + if (!Occupants.SafeAdd(player)) { DebugLog.DebugWrite($"{LogName} + {player.PlayerId}", MessageType.Warning); return; @@ -90,7 +90,7 @@ namespace QSB.TriggerSync.WorldObjects public void Exit(PlayerInfo player) { - if (!Players.QuickRemove(player)) + if (!Occupants.QuickRemove(player)) { DebugLog.DebugWrite($"{LogName} - {player.PlayerId}", MessageType.Warning); return; @@ -100,8 +100,8 @@ namespace QSB.TriggerSync.WorldObjects OnExit(player); } - protected abstract void OnEnter(PlayerInfo player); + protected virtual void OnEnter(PlayerInfo player) { } - protected abstract void OnExit(PlayerInfo player); + protected virtual void OnExit(PlayerInfo player) { } } } From 6b831312360ae7092195f73922985faf9b1b3542 Mon Sep 17 00:00:00 2001 From: JohnCorby Date: Wed, 12 Jan 2022 21:00:38 -0800 Subject: [PATCH 09/17] shrine --- QSB/Player/EnterLeaveType.cs | 2 -- QSB/QuantumSync/Patches/QuantumPatches.cs | 3 --- 2 files changed, 5 deletions(-) diff --git a/QSB/Player/EnterLeaveType.cs b/QSB/Player/EnterLeaveType.cs index 9669e840..f48376ac 100644 --- a/QSB/Player/EnterLeaveType.cs +++ b/QSB/Player/EnterLeaveType.cs @@ -4,8 +4,6 @@ { EnterMoon, ExitMoon, - EnterShrine, - ExitShrine, EnterPlatform, ExitPlatform, EnterShip, diff --git a/QSB/QuantumSync/Patches/QuantumPatches.cs b/QSB/QuantumSync/Patches/QuantumPatches.cs index e7fe962d..1b5b54ea 100644 --- a/QSB/QuantumSync/Patches/QuantumPatches.cs +++ b/QSB/QuantumSync/Patches/QuantumPatches.cs @@ -3,7 +3,6 @@ using OWML.Common; using QSB.Messaging; using QSB.Patches; using QSB.Player; -using QSB.Player.Messages; using QSB.QuantumSync.Messages; using QSB.QuantumSync.WorldObjects; using QSB.Utility; @@ -375,7 +374,6 @@ namespace QSB.QuantumSync.Patches __instance._isPlayerInside = true; __instance._fading = true; __instance._exteriorLightController.FadeTo(0f, 1f); - new EnterLeaveMessage(EnterLeaveType.EnterShrine).Send(); } else if (hitObj.CompareTag("ProbeDetector")) { @@ -396,7 +394,6 @@ namespace QSB.QuantumSync.Patches __instance._isPlayerInside = false; __instance._fading = true; __instance._exteriorLightController.FadeTo(1f, 1f); - new EnterLeaveMessage(EnterLeaveType.ExitShrine).Send(); } else if (hitObj.CompareTag("ProbeDetector")) { From 2e0dd541b2d8b75aa0c17b20ae917bf73d6015a0 Mon Sep 17 00:00:00 2001 From: JohnCorby Date: Wed, 12 Jan 2022 21:28:35 -0800 Subject: [PATCH 10/17] inflation trigger --- .../CosmicInflation/InflationManager.cs | 127 ------------------ .../Patches/InflationPatches.cs | 9 -- QSB/Player/EnterLeaveType.cs | 1 - QSB/TriggerSync/TriggerManager.cs | 4 +- .../WorldObjects/QSBInflationTrigger.cs | 88 +++++++++++- QSB/TriggerSync/WorldObjects/QSBTrigger.cs | 29 ++-- 6 files changed, 105 insertions(+), 153 deletions(-) delete mode 100644 QSB/EyeOfTheUniverse/CosmicInflation/InflationManager.cs delete mode 100644 QSB/EyeOfTheUniverse/CosmicInflation/Patches/InflationPatches.cs diff --git a/QSB/EyeOfTheUniverse/CosmicInflation/InflationManager.cs b/QSB/EyeOfTheUniverse/CosmicInflation/InflationManager.cs deleted file mode 100644 index 36739ce2..00000000 --- a/QSB/EyeOfTheUniverse/CosmicInflation/InflationManager.cs +++ /dev/null @@ -1,127 +0,0 @@ -using QSB.Messaging; -using QSB.Player; -using QSB.Player.Messages; -using QSB.Utility; -using QSB.WorldSync; -using System.Collections.Generic; -using System.Linq; -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(PlayerInfo player) - { - _playersInFog.Remove(player); - - // wait 1 frame for player to be removed - QSBCore.UnityEvents.FireOnNextUpdate(() => - { - if (QSBCore.IsInMultiplayer && _playersInFog.Count == QSBPlayerManager.PlayerList.Count) - { - StartCollapse(); - } - }); - } - - protected override void RebuildWorldObjects(OWScene scene) - { - _playersInFog.Clear(); - - if (_controller != null) - { - _controller._smokeSphereTrigger.OnEntry -= OnEntry; - } - - _controller = QSBWorldSync.GetUnityObjects().First(); - _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(); - - DebugLog.DebugWrite("disable input, wait for other players to enter"); - - var repelVolume = (WhiteHoleFluidVolume)_controller._repelVolume; - repelVolume._flowSpeed = -repelVolume._flowSpeed; - repelVolume._massiveFlowSpeed = -repelVolume._massiveFlowSpeed; - repelVolume.SetVolumeActivation(true); - QSBPlayerManager.HideAllPlayers(); - - ReticleController.Hide(); - Locator.GetFlashlight().TurnOff(false); - Locator.GetPromptManager().SetPromptsVisible(false); - OWInput.ChangeInputMode(InputMode.None); - } - } - - public void Enter(PlayerInfo player) - { - _playersInFog.Add(player); - - if (player != QSBPlayerManager.LocalPlayer) - { - DebugLog.DebugWrite($"fade out player {player.PlayerId}"); - player.DitheringAnimator.SetVisible(false, 3); - } - - if (_playersInFog.Count == QSBPlayerManager.PlayerList.Count) - { - StartCollapse(); - } - } - - private void StartCollapse() - { - DebugLog.DebugWrite("fade in everyone, fog sphere collapse"); - - var repelVolume = (WhiteHoleFluidVolume)_controller._repelVolume; - repelVolume.SetVolumeActivation(false); - QSBPlayerManager.ShowAllPlayers(); - - _controller._state = CosmicInflationController.State.Collapsing; - _controller._stateChangeTime = Time.time; - _controller._collapseStartPos = _controller._possibilitySphereRoot.localPosition; - _controller._smokeSphereTrigger.SetTriggerActivation(false); - _controller._inflationLight.FadeTo(1f, 1f); - _controller._possibilitySphereController.OnCollapse(); - if (_controller._campsiteController.GetUseAltPostCollapseSocket()) - { - _controller._playerPostCollapseSocket = _controller._altPlayerPostCollapseSocket; - _controller._altTravelerToHidePostCollapse.SetActive(false); - } - - Locator.GetPlayerBody().SetPosition(_controller._playerPostCollapseSocket.position); - Locator.GetPlayerBody().SetRotation(_controller._playerPostCollapseSocket.rotation); - Locator.GetPlayerBody().SetVelocity(-_controller._playerPostCollapseSocket.forward); - Locator.GetPlayerTransform().GetRequiredComponent().LockOn(_controller._possibilitySphereRoot, 2f); - foreach (var particles in _controller._smokeSphereParticles) - { - particles.Stop(); - } - } - } -} diff --git a/QSB/EyeOfTheUniverse/CosmicInflation/Patches/InflationPatches.cs b/QSB/EyeOfTheUniverse/CosmicInflation/Patches/InflationPatches.cs deleted file mode 100644 index 1d561d09..00000000 --- a/QSB/EyeOfTheUniverse/CosmicInflation/Patches/InflationPatches.cs +++ /dev/null @@ -1,9 +0,0 @@ -using QSB.Patches; - -namespace QSB.EyeOfTheUniverse.CosmicInflation.Patches -{ - internal class InflationPatches : QSBPatch - { - public override QSBPatchTypes Type => QSBPatchTypes.OnClientConnect; - } -} diff --git a/QSB/Player/EnterLeaveType.cs b/QSB/Player/EnterLeaveType.cs index f48376ac..3fdfc8d9 100644 --- a/QSB/Player/EnterLeaveType.cs +++ b/QSB/Player/EnterLeaveType.cs @@ -10,7 +10,6 @@ ExitShip, EnterVesselCage, ExitVesselCage, - EnterCosmicFog, EnterMaskZone, ExitMaskZone } diff --git a/QSB/TriggerSync/TriggerManager.cs b/QSB/TriggerSync/TriggerManager.cs index 704d857c..ec6bc137 100644 --- a/QSB/TriggerSync/TriggerManager.cs +++ b/QSB/TriggerSync/TriggerManager.cs @@ -11,10 +11,10 @@ namespace QSB.TriggerSync { QSBWorldSync.Init(x => x.playerTrackingZone); QSBWorldSync.Init(x => x._watchPlayerVolume); - QSBWorldSync.Init(x => x._cageTrigger); QSBWorldSync.Init(x => x._triggerVolume); - QSBWorldSync.Init(x => x._maskZoneTrigger); + QSBWorldSync.Init(x => x._cageTrigger); QSBWorldSync.Init(x => x._smokeSphereTrigger); + QSBWorldSync.Init(x => x._maskZoneTrigger); } } } diff --git a/QSB/TriggerSync/WorldObjects/QSBInflationTrigger.cs b/QSB/TriggerSync/WorldObjects/QSBInflationTrigger.cs index 492d5c6f..9e79a503 100644 --- a/QSB/TriggerSync/WorldObjects/QSBInflationTrigger.cs +++ b/QSB/TriggerSync/WorldObjects/QSBInflationTrigger.cs @@ -1,18 +1,98 @@ -using QSB.EyeOfTheUniverse.CosmicInflation; -using QSB.Player; +using QSB.Player; +using QSB.Utility; +using UnityEngine; namespace QSB.TriggerSync.WorldObjects { public class QSBInflationTrigger : QSBTrigger { + protected override string CompareTag => "PlayerCameraDetector"; + public override void Init() { base.Init(); AttachedObject.OnEntry -= TriggerOwner.OnEnterFogSphere; } - protected override void OnEnter(PlayerInfo player) => InflationManager.Instance.Enter(player); + protected override void OnEnter(PlayerInfo player) + { + if (TriggerOwner._state != CosmicInflationController.State.ReadyToCollapse) + { + return; + } - protected override void OnExit(PlayerInfo player) { } + if (player == QSBPlayerManager.LocalPlayer) + { + AttachedObject.OnEntry -= OnEnterEvent; + + AttachedObject.SetTriggerActivation(false); + TriggerOwner._probeDestroyTrigger.SetTriggerActivation(false); + + DebugLog.DebugWrite("disable input, wait for other players to enter"); + + var repelVolume = (WhiteHoleFluidVolume)TriggerOwner._repelVolume; + repelVolume._flowSpeed = -repelVolume._flowSpeed; + repelVolume._massiveFlowSpeed = -repelVolume._massiveFlowSpeed; + repelVolume.SetVolumeActivation(true); + QSBPlayerManager.HideAllPlayers(); + + ReticleController.Hide(); + Locator.GetFlashlight().TurnOff(false); + Locator.GetPromptManager().SetPromptsVisible(false); + OWInput.ChangeInputMode(InputMode.None); + } + else + { + DebugLog.DebugWrite($"fade out player {player.PlayerId}"); + player.DitheringAnimator.SetVisible(false, 3); + } + + if (Occupants.Count == QSBPlayerManager.PlayerList.Count) + { + StartCollapse(); + } + } + + protected override void OnExit(PlayerInfo player) + { + // wait 1 frame for player to be removed + QSBCore.UnityEvents.FireOnNextUpdate(() => + { + if (QSBCore.IsInMultiplayer && Occupants.Count == QSBPlayerManager.PlayerList.Count) + { + StartCollapse(); + } + }); + } + + private void StartCollapse() + { + DebugLog.DebugWrite("fade in everyone, fog sphere collapse"); + + var repelVolume = (WhiteHoleFluidVolume)TriggerOwner._repelVolume; + repelVolume.SetVolumeActivation(false); + QSBPlayerManager.ShowAllPlayers(); + + TriggerOwner._state = CosmicInflationController.State.Collapsing; + TriggerOwner._stateChangeTime = Time.time; + TriggerOwner._collapseStartPos = TriggerOwner._possibilitySphereRoot.localPosition; + AttachedObject.SetTriggerActivation(false); + TriggerOwner._inflationLight.FadeTo(1f, 1f); + TriggerOwner._possibilitySphereController.OnCollapse(); + if (TriggerOwner._campsiteController.GetUseAltPostCollapseSocket()) + { + TriggerOwner._playerPostCollapseSocket = TriggerOwner._altPlayerPostCollapseSocket; + TriggerOwner._altTravelerToHidePostCollapse.SetActive(false); + } + + Locator.GetPlayerBody().SetPosition(TriggerOwner._playerPostCollapseSocket.position); + Locator.GetPlayerBody().SetRotation(TriggerOwner._playerPostCollapseSocket.rotation); + Locator.GetPlayerBody().SetVelocity(-TriggerOwner._playerPostCollapseSocket.forward); + Locator.GetPlayerTransform().GetRequiredComponent().LockOn(TriggerOwner._possibilitySphereRoot, 2f); + foreach (var particles in TriggerOwner._smokeSphereParticles) + { + particles.Stop(); + } + } } } diff --git a/QSB/TriggerSync/WorldObjects/QSBTrigger.cs b/QSB/TriggerSync/WorldObjects/QSBTrigger.cs index 1516fb92..e3dc1e55 100644 --- a/QSB/TriggerSync/WorldObjects/QSBTrigger.cs +++ b/QSB/TriggerSync/WorldObjects/QSBTrigger.cs @@ -5,6 +5,7 @@ using QSB.TriggerSync.Messages; using QSB.Utility; using QSB.WorldSync; using System.Collections.Generic; +using System.Linq; using UnityEngine; namespace QSB.TriggerSync.WorldObjects @@ -24,10 +25,12 @@ namespace QSB.TriggerSync.WorldObjects public List Occupants { get; } = new(); + protected virtual string CompareTag => "PlayerDetector"; + public override void Init() { - AttachedObject.OnEntry += OnLocalEnter; - AttachedObject.OnExit += OnLocalExit; + AttachedObject.OnEntry += OnEnterEvent; + AttachedObject.OnExit += OnExitEvent; QSBPlayerManager.OnRemovePlayer += OnPlayerLeave; @@ -37,32 +40,32 @@ namespace QSB.TriggerSync.WorldObjects { DebugLog.DebugWrite($"{LogName} _trackedObjects == null", MessageType.Warning); } - else if (AttachedObject.IsTrackingObject(Locator.GetPlayerDetector())) + else if (AttachedObject._trackedObjects.Any(x => x.CompareTag(CompareTag))) { - OnLocalEnter(Locator.GetPlayerDetector()); + ((IQSBTrigger)this).SendMessage(new TriggerMessage(true)); } }); } public override void OnRemoval() { - AttachedObject.OnEntry -= OnLocalEnter; - AttachedObject.OnExit -= OnLocalExit; + AttachedObject.OnEntry -= OnEnterEvent; + AttachedObject.OnExit -= OnExitEvent; QSBPlayerManager.OnRemovePlayer -= OnPlayerLeave; } - private void OnLocalEnter(GameObject hitObj) + protected void OnEnterEvent(GameObject hitObj) { - if (hitObj.CompareTag("PlayerDetector")) + if (hitObj.CompareTag(CompareTag)) { ((IQSBTrigger)this).SendMessage(new TriggerMessage(true)); } } - private void OnLocalExit(GameObject hitObj) + protected void OnExitEvent(GameObject hitObj) { - if (hitObj.CompareTag("PlayerDetector")) + if (hitObj.CompareTag(CompareTag) || hitObj.CompareTag("PlayerCameraDetector")) { ((IQSBTrigger)this).SendMessage(new TriggerMessage(false)); } @@ -100,8 +103,14 @@ namespace QSB.TriggerSync.WorldObjects OnExit(player); } + /// + /// called when a player enters this trigger + /// protected virtual void OnEnter(PlayerInfo player) { } + /// + /// called when a player exits this trigger or leaves the game + /// protected virtual void OnExit(PlayerInfo player) { } } } From 246c3336f00d45a863cab7dae4f39c738d591cfa Mon Sep 17 00:00:00 2001 From: JohnCorby Date: Wed, 12 Jan 2022 21:35:04 -0800 Subject: [PATCH 11/17] vessel cage --- .../VesselSync/VesselManager.cs | 81 ------------------- QSB/Player/EnterLeaveType.cs | 2 - QSB/Player/Messages/EnterLeaveMessage.cs | 4 - .../WorldObjects/QSBVesselCageTrigger.cs | 19 +++-- 4 files changed, 14 insertions(+), 92 deletions(-) delete mode 100644 QSB/EyeOfTheUniverse/VesselSync/VesselManager.cs diff --git a/QSB/EyeOfTheUniverse/VesselSync/VesselManager.cs b/QSB/EyeOfTheUniverse/VesselSync/VesselManager.cs deleted file mode 100644 index dd445bf0..00000000 --- a/QSB/EyeOfTheUniverse/VesselSync/VesselManager.cs +++ /dev/null @@ -1,81 +0,0 @@ -using QSB.Messaging; -using QSB.Player; -using QSB.Player.Messages; -using QSB.WorldSync; -using System.Collections.Generic; -using System.Linq; -using UnityEngine; - -namespace QSB.EyeOfTheUniverse.VesselSync -{ - internal class VesselManager : WorldObjectManager - { - public static VesselManager Instance { get; private set; } - - private readonly List _playersInCage = new(); - private VesselWarpController _warpController; - - // cage trigger is null in the eye - public override WorldObjectType WorldObjectType => WorldObjectType.SolarSystem; - - public override void Awake() - { - base.Awake(); - Instance = this; - } - - protected override void RebuildWorldObjects(OWScene scene) - { - _playersInCage.Clear(); - - if (_warpController != null) - { - _warpController._cageTrigger.OnEntry -= OnEntry; - _warpController._cageTrigger.OnExit -= OnExit; - } - - _warpController = QSBWorldSync.GetUnityObjects().First(); - _warpController._cageTrigger.OnExit -= _warpController.OnExitCageTrigger; - - _warpController._cageTrigger.OnEntry += OnEntry; - _warpController._cageTrigger.OnExit += OnExit; - } - - private static void OnEntry(GameObject hitObj) - { - if (hitObj.CompareTag("PlayerDetector")) - { - new EnterLeaveMessage(EnterLeaveType.EnterVesselCage).Send(); - } - } - - private static void OnExit(GameObject hitObj) - { - if (hitObj.CompareTag("PlayerDetector")) - { - new EnterLeaveMessage(EnterLeaveType.ExitVesselCage).Send(); - } - } - - public void Enter(PlayerInfo player) - { - _playersInCage.Add(player); - } - - public void Exit(PlayerInfo player) - { - _playersInCage.Remove(player); - - if (_playersInCage.Count == 0 && _warpController._hasPower) - { - var obj = _warpController; - obj._cageClosed = true; - obj._cageAnimator.TranslateToLocalPosition(new Vector3(0f, -8.1f, 0f), 5f); - obj._cageAnimator.RotateToLocalEulerAngles(new Vector3(0f, 180f, 0f), 5f); - obj._cageAnimator.OnTranslationComplete -= obj.OnCageAnimationComplete; - obj._cageAnimator.OnTranslationComplete += obj.OnCageAnimationComplete; - obj._cageLoopingAudio.FadeIn(1f); - } - } - } -} diff --git a/QSB/Player/EnterLeaveType.cs b/QSB/Player/EnterLeaveType.cs index 3fdfc8d9..f0a3f31f 100644 --- a/QSB/Player/EnterLeaveType.cs +++ b/QSB/Player/EnterLeaveType.cs @@ -8,8 +8,6 @@ ExitPlatform, EnterShip, ExitShip, - EnterVesselCage, - ExitVesselCage, EnterMaskZone, ExitMaskZone } diff --git a/QSB/Player/Messages/EnterLeaveMessage.cs b/QSB/Player/Messages/EnterLeaveMessage.cs index 5cf23a5f..954d7602 100644 --- a/QSB/Player/Messages/EnterLeaveMessage.cs +++ b/QSB/Player/Messages/EnterLeaveMessage.cs @@ -1,8 +1,4 @@ using OWML.Common; -using QSB.Animation.NPC.WorldObjects; -using QSB.EyeOfTheUniverse.CosmicInflation; -using QSB.EyeOfTheUniverse.MaskSync; -using QSB.EyeOfTheUniverse.VesselSync; using QSB.Messaging; using QSB.Player.TransformSync; using QSB.PoolSync; diff --git a/QSB/TriggerSync/WorldObjects/QSBVesselCageTrigger.cs b/QSB/TriggerSync/WorldObjects/QSBVesselCageTrigger.cs index 8ae991c1..12838e74 100644 --- a/QSB/TriggerSync/WorldObjects/QSBVesselCageTrigger.cs +++ b/QSB/TriggerSync/WorldObjects/QSBVesselCageTrigger.cs @@ -1,5 +1,5 @@ -using QSB.EyeOfTheUniverse.VesselSync; -using QSB.Player; +using QSB.Player; +using UnityEngine; namespace QSB.TriggerSync.WorldObjects { @@ -11,8 +11,17 @@ namespace QSB.TriggerSync.WorldObjects AttachedObject.OnExit -= TriggerOwner.OnExitCageTrigger; } - protected override void OnEnter(PlayerInfo player) => VesselManager.Instance.Enter(player); - - protected override void OnExit(PlayerInfo player) => VesselManager.Instance.Exit(player); + protected override void OnExit(PlayerInfo player) + { + if (Occupants.Count == 0 && TriggerOwner._hasPower) + { + TriggerOwner._cageClosed = true; + TriggerOwner._cageAnimator.TranslateToLocalPosition(new Vector3(0f, -8.1f, 0f), 5f); + TriggerOwner._cageAnimator.RotateToLocalEulerAngles(new Vector3(0f, 180f, 0f), 5f); + TriggerOwner._cageAnimator.OnTranslationComplete -= TriggerOwner.OnCageAnimationComplete; + TriggerOwner._cageAnimator.OnTranslationComplete += TriggerOwner.OnCageAnimationComplete; + TriggerOwner._cageLoopingAudio.FadeIn(1f); + } + } } } From 20c222d281c7cf9ddfe15d5649e5aea4a8473651 Mon Sep 17 00:00:00 2001 From: JohnCorby Date: Wed, 12 Jan 2022 21:43:57 -0800 Subject: [PATCH 12/17] mask zone --- QSB/EyeOfTheUniverse/MaskSync/MaskManager.cs | 94 ++----------------- .../MaskSync/Patches/MaskPatches.cs | 3 +- QSB/Player/EnterLeaveType.cs | 2 - QSB/QSBCore.cs | 2 + .../WorldObjects/QSBMaskZoneTrigger.cs | 27 +++++- 5 files changed, 35 insertions(+), 93 deletions(-) diff --git a/QSB/EyeOfTheUniverse/MaskSync/MaskManager.cs b/QSB/EyeOfTheUniverse/MaskSync/MaskManager.cs index e30a938f..08e681dc 100644 --- a/QSB/EyeOfTheUniverse/MaskSync/MaskManager.cs +++ b/QSB/EyeOfTheUniverse/MaskSync/MaskManager.cs @@ -1,104 +1,28 @@ using QSB.EyeOfTheUniverse.EyeStateSync.Messages; -using QSB.Messaging; using QSB.Player; -using QSB.Player.Messages; using QSB.WorldSync; -using System.Collections.Generic; using System.Linq; using UnityEngine; namespace QSB.EyeOfTheUniverse.MaskSync { - internal class MaskManager : WorldObjectManager + internal class MaskManager : MonoBehaviour { - public static MaskManager Instance { get; private set; } + private static bool _flickering; + private static float _flickerOutTime; - private readonly List _playersInZone = new(); - private MaskZoneController _controller; - private bool _flickering; - private float _flickerOutTime; + public void Awake() => QSBPlayerManager.OnRemovePlayer += OnPlayerLeave; - public override WorldObjectType WorldObjectType => WorldObjectType.Eye; - - public override void Awake() + private static void OnPlayerLeave(PlayerInfo player) { - base.Awake(); - Instance = this; - - QSBPlayerManager.OnRemovePlayer += OnPlayerLeave; - } - - private void OnPlayerLeave(PlayerInfo player) - { - if (_playersInZone.Contains(player)) + if (player == QSBPlayerManager.LocalPlayer) { - Exit(player); + _flickering = false; + _flickerOutTime = 0f; } } - protected override void RebuildWorldObjects(OWScene scene) - { - _playersInZone.Clear(); - - if (_controller != null) - { - _controller._maskZoneTrigger.OnEntry -= OnEntry; - _controller._maskZoneTrigger.OnExit -= OnExit; - } - - _controller = QSBWorldSync.GetUnityObjects().First(); - _controller._maskZoneTrigger.OnEntry -= _controller.OnEnterMaskZone; - _controller._maskZoneTrigger.OnExit -= _controller.OnExitMaskZone; - - _controller._maskZoneTrigger.OnEntry += OnEntry; - _controller._maskZoneTrigger.OnExit += OnExit; - } - - private static void OnEntry(GameObject hitObj) - { - if (hitObj.CompareTag("PlayerDetector")) - { - new EnterLeaveMessage(EnterLeaveType.EnterMaskZone).Send(); - } - } - - private static void OnExit(GameObject hitObj) - { - if (hitObj.CompareTag("PlayerDetector")) - { - new EnterLeaveMessage(EnterLeaveType.ExitMaskZone).Send(); - } - } - - public void Enter(PlayerInfo player) - { - if (_playersInZone.Count == 0) - { - _controller._whiteSphere.SetActive(true); - _controller._groundSignal.SetSignalActivation(false); - _controller._skySignal.SetSignalActivation(true); - _controller._skeletonTower.SetIsQuantum(_controller._hasPlayerLookedAtSky); - _controller.enabled = true; - } - - _playersInZone.Add(player); - } - - public void Exit(PlayerInfo player) - { - _playersInZone.Remove(player); - - if (_playersInZone.Count == 0 && !_controller._shuttle.HasLaunched()) - { - _controller._whiteSphere.SetActive(false); - _controller._skeletonTower.SetIsQuantum(false); - _controller._groundSignal.SetSignalActivation(true); - _controller._skySignal.SetSignalActivation(false); - _controller.enabled = false; - } - } - - public void FlickerOutShuttle() + public static void FlickerOutShuttle() { FlickerMessage.IgnoreNextMessage = true; GlobalMessenger.FireEvent("FlickerOffAndOn", 0.5f, 0.5f); diff --git a/QSB/EyeOfTheUniverse/MaskSync/Patches/MaskPatches.cs b/QSB/EyeOfTheUniverse/MaskSync/Patches/MaskPatches.cs index 37a10c80..c2cb8843 100644 --- a/QSB/EyeOfTheUniverse/MaskSync/Patches/MaskPatches.cs +++ b/QSB/EyeOfTheUniverse/MaskSync/Patches/MaskPatches.cs @@ -1,6 +1,5 @@ using HarmonyLib; using QSB.Patches; -using QSB.Utility; namespace QSB.EyeOfTheUniverse.MaskSync.Patches { @@ -17,7 +16,7 @@ namespace QSB.EyeOfTheUniverse.MaskSync.Patches return true; } - MaskManager.Instance.FlickerOutShuttle(); + MaskManager.FlickerOutShuttle(); __instance.enabled = false; return false; diff --git a/QSB/Player/EnterLeaveType.cs b/QSB/Player/EnterLeaveType.cs index f0a3f31f..f3d47a36 100644 --- a/QSB/Player/EnterLeaveType.cs +++ b/QSB/Player/EnterLeaveType.cs @@ -8,7 +8,5 @@ ExitPlatform, EnterShip, ExitShip, - EnterMaskZone, - ExitMaskZone } } diff --git a/QSB/QSBCore.cs b/QSB/QSBCore.cs index 9a3bdfbc..9eb0ba44 100644 --- a/QSB/QSBCore.cs +++ b/QSB/QSBCore.cs @@ -2,6 +2,7 @@ using OWML.ModHelper; using OWML.ModHelper.Input; using QSB.EyeOfTheUniverse.GalaxyMap; +using QSB.EyeOfTheUniverse.MaskSync; using QSB.Inputs; using QSB.Menus; using QSB.Patches; @@ -109,6 +110,7 @@ namespace QSB gameObject.AddComponent(); gameObject.AddComponent(); gameObject.AddComponent(); + gameObject.AddComponent(); // WorldObject managers foreach (var type in typeof(WorldObjectManager).GetDerivedTypes()) diff --git a/QSB/TriggerSync/WorldObjects/QSBMaskZoneTrigger.cs b/QSB/TriggerSync/WorldObjects/QSBMaskZoneTrigger.cs index d27647a8..8e78422d 100644 --- a/QSB/TriggerSync/WorldObjects/QSBMaskZoneTrigger.cs +++ b/QSB/TriggerSync/WorldObjects/QSBMaskZoneTrigger.cs @@ -1,5 +1,4 @@ -using QSB.EyeOfTheUniverse.MaskSync; -using QSB.Player; +using QSB.Player; namespace QSB.TriggerSync.WorldObjects { @@ -12,8 +11,28 @@ namespace QSB.TriggerSync.WorldObjects AttachedObject.OnExit -= TriggerOwner.OnExitMaskZone; } - protected override void OnEnter(PlayerInfo player) => MaskManager.Instance.Enter(player); + protected override void OnEnter(PlayerInfo player) + { + if (Occupants.Count == 1) + { + TriggerOwner._whiteSphere.SetActive(true); + TriggerOwner._groundSignal.SetSignalActivation(false); + TriggerOwner._skySignal.SetSignalActivation(true); + TriggerOwner._skeletonTower.SetIsQuantum(TriggerOwner._hasPlayerLookedAtSky); + TriggerOwner.enabled = true; + } + } - protected override void OnExit(PlayerInfo player) => MaskManager.Instance.Exit(player); + protected override void OnExit(PlayerInfo player) + { + if (Occupants.Count == 0 && !TriggerOwner._shuttle.HasLaunched()) + { + TriggerOwner._whiteSphere.SetActive(false); + TriggerOwner._skeletonTower.SetIsQuantum(false); + TriggerOwner._groundSignal.SetSignalActivation(true); + TriggerOwner._skySignal.SetSignalActivation(false); + TriggerOwner.enabled = false; + } + } } } From 15dbf1878f199eef6f070a5ce778c53a8004fb39 Mon Sep 17 00:00:00 2001 From: JohnCorby Date: Wed, 12 Jan 2022 21:46:40 -0800 Subject: [PATCH 13/17] remove unneeded shrine patches --- QSB/QuantumSync/Patches/QuantumPatches.cs | 40 ----------------------- 1 file changed, 40 deletions(-) diff --git a/QSB/QuantumSync/Patches/QuantumPatches.cs b/QSB/QuantumSync/Patches/QuantumPatches.cs index 1b5b54ea..020e4cfd 100644 --- a/QSB/QuantumSync/Patches/QuantumPatches.cs +++ b/QSB/QuantumSync/Patches/QuantumPatches.cs @@ -363,46 +363,6 @@ namespace QSB.QuantumSync.Patches return isInControl; } - [HarmonyPrefix] - [HarmonyPatch(typeof(QuantumShrine), nameof(QuantumShrine.OnEntry))] - public static bool QuantumShrine_OnEntry( - QuantumShrine __instance, - GameObject hitObj) - { - if (hitObj.CompareTag("PlayerDetector")) - { - __instance._isPlayerInside = true; - __instance._fading = true; - __instance._exteriorLightController.FadeTo(0f, 1f); - } - else if (hitObj.CompareTag("ProbeDetector")) - { - __instance._isProbeInside = true; - } - - return false; - } - - [HarmonyPrefix] - [HarmonyPatch(typeof(QuantumShrine), nameof(QuantumShrine.OnExit))] - public static bool QuantumShrine_OnExit( - QuantumShrine __instance, - GameObject hitObj) - { - if (hitObj.CompareTag("PlayerDetector")) - { - __instance._isPlayerInside = false; - __instance._fading = true; - __instance._exteriorLightController.FadeTo(1f, 1f); - } - else if (hitObj.CompareTag("ProbeDetector")) - { - __instance._isProbeInside = false; - } - - return false; - } - [HarmonyPrefix] [HarmonyPatch(typeof(QuantumMoon), nameof(QuantumMoon.CheckPlayerFogProximity))] public static bool QuantumMoon_CheckPlayerFogProximity(QuantumMoon __instance) From 63827f6869825c0d5042e6cce1446f685221a63a Mon Sep 17 00:00:00 2001 From: JohnCorby Date: Wed, 12 Jan 2022 21:51:34 -0800 Subject: [PATCH 14/17] oops --- QSB/Player/Messages/RequestStateResyncMessage.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/QSB/Player/Messages/RequestStateResyncMessage.cs b/QSB/Player/Messages/RequestStateResyncMessage.cs index cf7a04b3..be5a53f2 100644 --- a/QSB/Player/Messages/RequestStateResyncMessage.cs +++ b/QSB/Player/Messages/RequestStateResyncMessage.cs @@ -130,7 +130,7 @@ namespace QSB.Player.Messages => tornado.SendMessage(new TornadoFormStateMessage(tornado.FormState) { To = From })); QSBWorldSync.GetWorldObjects().ForEach(trigger - => trigger.SendMessage(new TriggerResyncMessage(trigger.Occupants))); + => trigger.SendMessage(new TriggerResyncMessage(trigger.Occupants) { To = From })); } /// From c83ae115f562db44fdc2948954dd9a967f43e214 Mon Sep 17 00:00:00 2001 From: JohnCorby Date: Wed, 12 Jan 2022 22:04:50 -0800 Subject: [PATCH 15/17] guh --- QSB/TriggerSync/WorldObjects/QSBTrigger.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/QSB/TriggerSync/WorldObjects/QSBTrigger.cs b/QSB/TriggerSync/WorldObjects/QSBTrigger.cs index e3dc1e55..607d08fe 100644 --- a/QSB/TriggerSync/WorldObjects/QSBTrigger.cs +++ b/QSB/TriggerSync/WorldObjects/QSBTrigger.cs @@ -65,7 +65,7 @@ namespace QSB.TriggerSync.WorldObjects protected void OnExitEvent(GameObject hitObj) { - if (hitObj.CompareTag(CompareTag) || hitObj.CompareTag("PlayerCameraDetector")) + if (hitObj.CompareTag(CompareTag)) { ((IQSBTrigger)this).SendMessage(new TriggerMessage(false)); } From 06326cddb6189826ee4906a9968819ec8daa3a7a Mon Sep 17 00:00:00 2001 From: JohnCorby Date: Wed, 12 Jan 2022 22:08:06 -0800 Subject: [PATCH 16/17] guh 2 --- QSB/EyeOfTheUniverse/MaskSync/MaskManager.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/QSB/EyeOfTheUniverse/MaskSync/MaskManager.cs b/QSB/EyeOfTheUniverse/MaskSync/MaskManager.cs index 08e681dc..5dcf4500 100644 --- a/QSB/EyeOfTheUniverse/MaskSync/MaskManager.cs +++ b/QSB/EyeOfTheUniverse/MaskSync/MaskManager.cs @@ -1,4 +1,5 @@ using QSB.EyeOfTheUniverse.EyeStateSync.Messages; +using QSB.Messaging; using QSB.Player; using QSB.WorldSync; using System.Linq; @@ -25,7 +26,7 @@ namespace QSB.EyeOfTheUniverse.MaskSync public static void FlickerOutShuttle() { FlickerMessage.IgnoreNextMessage = true; - GlobalMessenger.FireEvent("FlickerOffAndOn", 0.5f, 0.5f); + GlobalMessenger.FireEvent(OWEvents.FlickerOffAndOn, 0.5f, 0.5f); _flickerOutTime = Time.time + 0.5f; _flickering = true; } From d4a5a6c636d36ec754462b81477b6b42419d9906 Mon Sep 17 00:00:00 2001 From: JohnCorby Date: Wed, 12 Jan 2022 22:13:39 -0800 Subject: [PATCH 17/17] use scene load instead of player leave --- QSB/EyeOfTheUniverse/MaskSync/MaskManager.cs | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/QSB/EyeOfTheUniverse/MaskSync/MaskManager.cs b/QSB/EyeOfTheUniverse/MaskSync/MaskManager.cs index 5dcf4500..945c98a3 100644 --- a/QSB/EyeOfTheUniverse/MaskSync/MaskManager.cs +++ b/QSB/EyeOfTheUniverse/MaskSync/MaskManager.cs @@ -1,6 +1,5 @@ using QSB.EyeOfTheUniverse.EyeStateSync.Messages; using QSB.Messaging; -using QSB.Player; using QSB.WorldSync; using System.Linq; using UnityEngine; @@ -12,15 +11,12 @@ namespace QSB.EyeOfTheUniverse.MaskSync private static bool _flickering; private static float _flickerOutTime; - public void Awake() => QSBPlayerManager.OnRemovePlayer += OnPlayerLeave; + public void Awake() => QSBSceneManager.OnSceneLoaded += OnSceneLoaded; - private static void OnPlayerLeave(PlayerInfo player) + private static void OnSceneLoaded(OWScene oldScene, OWScene newScene, bool inUniverse) { - if (player == QSBPlayerManager.LocalPlayer) - { - _flickering = false; - _flickerOutTime = 0f; - } + _flickering = false; + _flickerOutTime = 0f; } public static void FlickerOutShuttle()