From 13a36bd56c27d8bcb0f444643ba76af7f3004e63 Mon Sep 17 00:00:00 2001 From: JohnCorby Date: Fri, 1 Apr 2022 02:23:59 -0700 Subject: [PATCH] alarm totems: idk --- .../AlarmTotemSync/AlarmTotemSyncManager.cs | 15 ++++++++ .../Messages/SetEnabledMessage.cs | 17 +++++++++ .../Messages/SetFaceOpenMessage.cs | 13 +++++++ .../Patches/AlarmTotemPatches.cs | 36 +++++++++++++++++++ .../WorldObjects/QSBAlarmTotem.cs | 13 +++++++ 5 files changed, 94 insertions(+) create mode 100644 QSB/EchoesOfTheEye/AlarmTotemSync/AlarmTotemSyncManager.cs create mode 100644 QSB/EchoesOfTheEye/AlarmTotemSync/Messages/SetEnabledMessage.cs create mode 100644 QSB/EchoesOfTheEye/AlarmTotemSync/Messages/SetFaceOpenMessage.cs create mode 100644 QSB/EchoesOfTheEye/AlarmTotemSync/Patches/AlarmTotemPatches.cs create mode 100644 QSB/EchoesOfTheEye/AlarmTotemSync/WorldObjects/QSBAlarmTotem.cs diff --git a/QSB/EchoesOfTheEye/AlarmTotemSync/AlarmTotemSyncManager.cs b/QSB/EchoesOfTheEye/AlarmTotemSync/AlarmTotemSyncManager.cs new file mode 100644 index 00000000..29ababc5 --- /dev/null +++ b/QSB/EchoesOfTheEye/AlarmTotemSync/AlarmTotemSyncManager.cs @@ -0,0 +1,15 @@ +using Cysharp.Threading.Tasks; +using QSB.EchoesOfTheEye.AlarmTotemSync.WorldObjects; +using QSB.WorldSync; +using System.Threading; + +namespace QSB.EchoesOfTheEye.AlarmTotemSync; + +public class SarcophagusManager : WorldObjectManager +{ + public override WorldObjectScene WorldObjectScene => WorldObjectScene.SolarSystem; + public override bool DlcOnly => true; + + public override async UniTask BuildWorldObjects(OWScene scene, CancellationToken ct) => + QSBWorldSync.Init(); +} diff --git a/QSB/EchoesOfTheEye/AlarmTotemSync/Messages/SetEnabledMessage.cs b/QSB/EchoesOfTheEye/AlarmTotemSync/Messages/SetEnabledMessage.cs new file mode 100644 index 00000000..c08f7097 --- /dev/null +++ b/QSB/EchoesOfTheEye/AlarmTotemSync/Messages/SetEnabledMessage.cs @@ -0,0 +1,17 @@ +using QSB.EchoesOfTheEye.AlarmTotemSync.WorldObjects; +using QSB.Messaging; +using QSB.Patches; + +namespace QSB.EchoesOfTheEye.AlarmTotemSync.Messages; + +public class SetEnabledMessage : QSBWorldObjectMessage +{ + public SetEnabledMessage(bool data) : base(data) { } + + public override void OnReceiveRemote() + { + if (!Data && ) + + QSBPatch.RemoteCall(() => WorldObject.AttachedObject.SetFaceOpen(Data)); + } +} diff --git a/QSB/EchoesOfTheEye/AlarmTotemSync/Messages/SetFaceOpenMessage.cs b/QSB/EchoesOfTheEye/AlarmTotemSync/Messages/SetFaceOpenMessage.cs new file mode 100644 index 00000000..7cc0a6a2 --- /dev/null +++ b/QSB/EchoesOfTheEye/AlarmTotemSync/Messages/SetFaceOpenMessage.cs @@ -0,0 +1,13 @@ +using QSB.EchoesOfTheEye.AlarmTotemSync.WorldObjects; +using QSB.Messaging; +using QSB.Patches; + +namespace QSB.EchoesOfTheEye.AlarmTotemSync.Messages; + +public class SetFaceOpenMessage : QSBWorldObjectMessage +{ + public SetFaceOpenMessage(bool data) : base(data) { } + + public override void OnReceiveRemote() => + QSBPatch.RemoteCall(() => WorldObject.AttachedObject.SetFaceOpen(Data)); +} diff --git a/QSB/EchoesOfTheEye/AlarmTotemSync/Patches/AlarmTotemPatches.cs b/QSB/EchoesOfTheEye/AlarmTotemSync/Patches/AlarmTotemPatches.cs new file mode 100644 index 00000000..7e3b29cc --- /dev/null +++ b/QSB/EchoesOfTheEye/AlarmTotemSync/Patches/AlarmTotemPatches.cs @@ -0,0 +1,36 @@ +using HarmonyLib; +using QSB.EchoesOfTheEye.AlarmTotemSync.Messages; +using QSB.EchoesOfTheEye.AlarmTotemSync.WorldObjects; +using QSB.Messaging; +using QSB.Patches; +using QSB.WorldSync; + +namespace QSB.EchoesOfTheEye.AlarmTotemSync.Patches; + +public class AlarmTotemPatches : QSBPatch +{ + public override QSBPatchTypes Type => QSBPatchTypes.OnClientConnect; + + [HarmonyPrefix] + [HarmonyPatch(typeof(AlarmTotem), nameof(AlarmTotem.SetFaceOpen))] + private static void SetFaceOpen(AlarmTotem __instance, bool open) + { + if (Remote) + { + return; + } + + if (__instance._isFaceOpen == open) + { + return; + } + + if (!QSBWorldSync.AllObjectsReady) + { + return; + } + + __instance.GetWorldObject() + .SendMessage(new SetFaceOpenMessage(open)); + } +} diff --git a/QSB/EchoesOfTheEye/AlarmTotemSync/WorldObjects/QSBAlarmTotem.cs b/QSB/EchoesOfTheEye/AlarmTotemSync/WorldObjects/QSBAlarmTotem.cs new file mode 100644 index 00000000..1c6094a9 --- /dev/null +++ b/QSB/EchoesOfTheEye/AlarmTotemSync/WorldObjects/QSBAlarmTotem.cs @@ -0,0 +1,13 @@ +using QSB.EchoesOfTheEye.AlarmTotemSync.Messages; +using QSB.Messaging; +using QSB.WorldSync; + +namespace QSB.EchoesOfTheEye.AlarmTotemSync.WorldObjects; + +public class QSBAlarmTotem : WorldObject +{ + public override void SendInitialState(uint to) + { + this.SendMessage(new SetFaceOpenMessage(AttachedObject._isFaceOpen) { To = to }); + } +}