diff --git a/QSB/EchoesOfTheEye/VisionTorch/Messages/VisionTorchProjectMessage.cs b/QSB/EchoesOfTheEye/VisionTorch/Messages/VisionTorchProjectMessage.cs new file mode 100644 index 00000000..5ab221c8 --- /dev/null +++ b/QSB/EchoesOfTheEye/VisionTorch/Messages/VisionTorchProjectMessage.cs @@ -0,0 +1,10 @@ +using QSB.EchoesOfTheEye.VisionTorch.WorldObjects; +using QSB.Messaging; + +namespace QSB.EchoesOfTheEye.VisionTorch.Messages; + +public class VisionTorchProjectMessage : QSBWorldObjectMessage +{ + public VisionTorchProjectMessage(bool projecting) : base(projecting) { } + public override void OnReceiveRemote() => WorldObject.AttachedObject._mindProjectorTrigger.SetProjectorActive(Data); +} diff --git a/QSB/EchoesOfTheEye/VisionTorch/Patches/VisionTorchPatches.cs b/QSB/EchoesOfTheEye/VisionTorch/Patches/VisionTorchPatches.cs new file mode 100644 index 00000000..d0badb34 --- /dev/null +++ b/QSB/EchoesOfTheEye/VisionTorch/Patches/VisionTorchPatches.cs @@ -0,0 +1,45 @@ +using HarmonyLib; +using QSB.EchoesOfTheEye.VisionTorch.Messages; +using QSB.EchoesOfTheEye.VisionTorch.WorldObjects; +using QSB.Messaging; +using QSB.Patches; +using QSB.WorldSync; + +namespace QSB.EchoesOfTheEye.VisionTorch.Patches; + +public class VisionTorchPatches : QSBPatch +{ + public override QSBPatchTypes Type => QSBPatchTypes.OnClientConnect; + + [HarmonyPrefix] + [HarmonyPatch(typeof(VisionTorchItem), nameof(VisionTorchItem.Update))] + private static bool Update(VisionTorchItem __instance) + { + if (!QSBWorldSync.AllObjectsReady) + { + return true; + } + + if (PlayerState.IsViewingProjector() && __instance._mindSlideProjector.mindSlideCollection.slideCollectionContainer.slideIndex == 1) + { + OWInput.ChangeInputMode(InputMode.None); + __instance._mindSlideProjector.OnProjectionComplete += __instance.OnProjectionComplete; + __instance.enabled = false; + return false; + } + __instance._wasProjecting = __instance._isProjecting; + __instance._isProjecting = OWInput.IsPressed(InputLibrary.toolActionPrimary, InputMode.Character); + if (__instance._isProjecting && !__instance._wasProjecting) + { + __instance._mindProjectorTrigger.SetProjectorActive(true); + __instance.GetWorldObject().SendMessage(new VisionTorchProjectMessage(true)); + } + else if (!__instance._isProjecting && __instance._wasProjecting) + { + __instance._mindProjectorTrigger.SetProjectorActive(false); + __instance.GetWorldObject().SendMessage(new VisionTorchProjectMessage(false)); + } + + return false; + } +} diff --git a/QSB/EchoesOfTheEye/VisionTorch/WorldObjects/QSBVisionTorchItem.cs b/QSB/EchoesOfTheEye/VisionTorch/WorldObjects/QSBVisionTorchItem.cs index 233e65b0..09b6961a 100644 --- a/QSB/EchoesOfTheEye/VisionTorch/WorldObjects/QSBVisionTorchItem.cs +++ b/QSB/EchoesOfTheEye/VisionTorch/WorldObjects/QSBVisionTorchItem.cs @@ -1,8 +1,13 @@ -using QSB.ItemSync.WorldObjects.Items; +using QSB.EchoesOfTheEye.VisionTorch.Messages; +using QSB.ItemSync.WorldObjects.Items; +using QSB.Messaging; namespace QSB.EchoesOfTheEye.VisionTorch.WorldObjects; -/// -/// TODO: SYNC THIS SHIT LMAOOOOOO -/// -internal class QSBVisionTorchItem : QSBItem { } +public class QSBVisionTorchItem : QSBItem +{ + public override void SendInitialState(uint to) + { + this.SendMessage(new VisionTorchProjectMessage(AttachedObject._isProjecting) { To = to }); + } +}