diff --git a/QSB/EchoesOfTheEye/DreamRafts/DreamRaftManager.cs b/QSB/EchoesOfTheEye/DreamRafts/DreamRaftManager.cs index f7f77fca..9369cfcd 100644 --- a/QSB/EchoesOfTheEye/DreamRafts/DreamRaftManager.cs +++ b/QSB/EchoesOfTheEye/DreamRafts/DreamRaftManager.cs @@ -15,6 +15,7 @@ public class DreamRaftManager : WorldObjectManager QSBWorldSync.Init(); QSBWorldSync.Init(); - QSBWorldSync.Init(); + QSBWorldSync.Init(); + QSBWorldSync.Init(); } } diff --git a/QSB/EchoesOfTheEye/DreamRafts/Messages/ExtinguishImmediatelyMessage.cs b/QSB/EchoesOfTheEye/DreamRafts/Messages/ExtinguishImmediatelyMessage.cs index da64d28a..4d1f4684 100644 --- a/QSB/EchoesOfTheEye/DreamRafts/Messages/ExtinguishImmediatelyMessage.cs +++ b/QSB/EchoesOfTheEye/DreamRafts/Messages/ExtinguishImmediatelyMessage.cs @@ -4,7 +4,7 @@ using QSB.Patches; namespace QSB.EchoesOfTheEye.DreamRafts.Messages; -public class ExtinguishImmediatelyMessage : QSBWorldObjectMessage +public class ExtinguishImmediatelyMessage : QSBWorldObjectMessage { public override void OnReceiveRemote() { diff --git a/QSB/EchoesOfTheEye/DreamRafts/Messages/RespawnRaftMessage.cs b/QSB/EchoesOfTheEye/DreamRafts/Messages/RespawnRaftMessage.cs index 49c0de03..51eea533 100644 --- a/QSB/EchoesOfTheEye/DreamRafts/Messages/RespawnRaftMessage.cs +++ b/QSB/EchoesOfTheEye/DreamRafts/Messages/RespawnRaftMessage.cs @@ -4,7 +4,7 @@ using QSB.Patches; namespace QSB.EchoesOfTheEye.DreamRafts.Messages; -public class RespawnRaftMessage : QSBWorldObjectMessage +public class RespawnRaftMessage : QSBWorldObjectMessage { public override void OnReceiveRemote() { diff --git a/QSB/EchoesOfTheEye/DreamRafts/Messages/SetLitMessage.cs b/QSB/EchoesOfTheEye/DreamRafts/Messages/SetLitMessage.cs index 93b578e9..0d18cb08 100644 --- a/QSB/EchoesOfTheEye/DreamRafts/Messages/SetLitMessage.cs +++ b/QSB/EchoesOfTheEye/DreamRafts/Messages/SetLitMessage.cs @@ -4,7 +4,7 @@ using QSB.Patches; namespace QSB.EchoesOfTheEye.DreamRafts.Messages; -public class SetLitMessage : QSBWorldObjectMessage +public class SetLitMessage : QSBWorldObjectMessage { public SetLitMessage(bool data) : base(data) { } diff --git a/QSB/EchoesOfTheEye/DreamRafts/Messages/SetVisibleMessage.cs b/QSB/EchoesOfTheEye/DreamRafts/Messages/SetVisibleMessage.cs new file mode 100644 index 00000000..a9b5d495 --- /dev/null +++ b/QSB/EchoesOfTheEye/DreamRafts/Messages/SetVisibleMessage.cs @@ -0,0 +1,13 @@ +using QSB.EchoesOfTheEye.DreamRafts.WorldObjects; +using QSB.Messaging; +using QSB.Patches; + +namespace QSB.EchoesOfTheEye.DreamRafts.Messages; + +public class SetVisibleMessage : QSBWorldObjectMessage +{ + public SetVisibleMessage(bool data) : base(data) { } + + public override void OnReceiveRemote() => + QSBPatch.RemoteCall(() => WorldObject.AttachedObject.SetVisible(Data)); +} diff --git a/QSB/EchoesOfTheEye/DreamRafts/Patches/DreamRaftPatches.cs b/QSB/EchoesOfTheEye/DreamRafts/Patches/DreamRaftPatches.cs index 7a5781f0..b003f2a9 100644 --- a/QSB/EchoesOfTheEye/DreamRafts/Patches/DreamRaftPatches.cs +++ b/QSB/EchoesOfTheEye/DreamRafts/Patches/DreamRaftPatches.cs @@ -12,8 +12,8 @@ public class DreamRaftPatches : QSBPatch public override QSBPatchTypes Type => QSBPatchTypes.OnClientConnect; [HarmonyPrefix] - [HarmonyPatch(typeof(DreamObjectProjector), nameof(DreamObjectProjector.SetLit))] - private static void SetLit(DreamObjectProjector __instance, + [HarmonyPatch(typeof(DreamRaftProjector), nameof(DreamRaftProjector.SetLit))] + private static void SetLit(DreamRaftProjector __instance, bool lit) { if (Remote) @@ -21,12 +21,17 @@ public class DreamRaftPatches : QSBPatch return; } + if (!QSBWorldSync.AllObjectsReady) + { + return; + } + if (__instance._lit == lit) { return; } - __instance.GetWorldObject() + __instance.GetWorldObject() .SendMessage(new SetLitMessage(lit)); } @@ -39,7 +44,12 @@ public class DreamRaftPatches : QSBPatch return; } - __instance.GetWorldObject() + if (!QSBWorldSync.AllObjectsReady) + { + return; + } + + __instance.GetWorldObject() .SendMessage(new RespawnRaftMessage()); } @@ -52,7 +62,32 @@ public class DreamRaftPatches : QSBPatch return; } - __instance.GetWorldObject() + if (!QSBWorldSync.AllObjectsReady) + { + return; + } + + __instance.GetWorldObject() .SendMessage(new ExtinguishImmediatelyMessage()); } + + [HarmonyPrefix] + [HarmonyPatch(typeof(DreamRaftProjection), nameof(DreamRaftProjection.SetVisible))] + [HarmonyPatch(typeof(DreamRaftProjection), nameof(DreamRaftProjection.SetVisibleImmediate))] + private static void SetVisible(DreamRaftProjection __instance, + bool visible) + { + if (Remote) + { + return; + } + + if (!QSBWorldSync.AllObjectsReady) + { + return; + } + + __instance.GetWorldObject() + .SendMessage(new SetVisibleMessage(visible)); + } } diff --git a/QSB/EchoesOfTheEye/DreamRafts/WorldObjects/QSBDreamRaftProjection.cs b/QSB/EchoesOfTheEye/DreamRafts/WorldObjects/QSBDreamRaftProjection.cs new file mode 100644 index 00000000..f0ede54c --- /dev/null +++ b/QSB/EchoesOfTheEye/DreamRafts/WorldObjects/QSBDreamRaftProjection.cs @@ -0,0 +1,11 @@ +using QSB.EchoesOfTheEye.DreamRafts.Messages; +using QSB.Messaging; +using QSB.WorldSync; + +namespace QSB.EchoesOfTheEye.DreamRafts.WorldObjects; + +public class QSBDreamRaftProjection : WorldObject +{ + public override void SendInitialState(uint to) => + this.SendMessage(new SetVisibleMessage(AttachedObject._visible)); +} diff --git a/QSB/EchoesOfTheEye/DreamRafts/WorldObjects/QSBDreamObjectProjector.cs b/QSB/EchoesOfTheEye/DreamRafts/WorldObjects/QSBDreamRaftProjector.cs similarity index 78% rename from QSB/EchoesOfTheEye/DreamRafts/WorldObjects/QSBDreamObjectProjector.cs rename to QSB/EchoesOfTheEye/DreamRafts/WorldObjects/QSBDreamRaftProjector.cs index 99926515..1718fd87 100644 --- a/QSB/EchoesOfTheEye/DreamRafts/WorldObjects/QSBDreamObjectProjector.cs +++ b/QSB/EchoesOfTheEye/DreamRafts/WorldObjects/QSBDreamRaftProjector.cs @@ -4,7 +4,7 @@ using QSB.WorldSync; namespace QSB.EchoesOfTheEye.DreamRafts.WorldObjects; -public class QSBDreamObjectProjector : WorldObject +public class QSBDreamRaftProjector : WorldObject { public override void SendInitialState(uint to) => this.SendMessage(new SetLitMessage(AttachedObject._lit));