dream rafts: also sync projection visibility, just in case

This commit is contained in:
JohnCorby 2022-03-25 23:27:46 -07:00
parent 288b4ecd17
commit b4db474d0d
8 changed files with 70 additions and 10 deletions

View File

@ -15,6 +15,7 @@ public class DreamRaftManager : WorldObjectManager
QSBWorldSync.Init<QSBDreamRaftController, DreamRaftController>();
QSBWorldSync.Init<QSBSealRaftController, SealRaftController>();
QSBWorldSync.Init<QSBDreamObjectProjector, DreamObjectProjector>();
QSBWorldSync.Init<QSBDreamRaftProjector, DreamRaftProjector>();
QSBWorldSync.Init<QSBDreamRaftProjection, DreamRaftProjection>();
}
}

View File

@ -4,7 +4,7 @@ using QSB.Patches;
namespace QSB.EchoesOfTheEye.DreamRafts.Messages;
public class ExtinguishImmediatelyMessage : QSBWorldObjectMessage<QSBDreamObjectProjector>
public class ExtinguishImmediatelyMessage : QSBWorldObjectMessage<QSBDreamRaftProjector>
{
public override void OnReceiveRemote()
{

View File

@ -4,7 +4,7 @@ using QSB.Patches;
namespace QSB.EchoesOfTheEye.DreamRafts.Messages;
public class RespawnRaftMessage : QSBWorldObjectMessage<QSBDreamObjectProjector>
public class RespawnRaftMessage : QSBWorldObjectMessage<QSBDreamRaftProjector>
{
public override void OnReceiveRemote()
{

View File

@ -4,7 +4,7 @@ using QSB.Patches;
namespace QSB.EchoesOfTheEye.DreamRafts.Messages;
public class SetLitMessage : QSBWorldObjectMessage<QSBDreamObjectProjector, bool>
public class SetLitMessage : QSBWorldObjectMessage<QSBDreamRaftProjector, bool>
{
public SetLitMessage(bool data) : base(data) { }

View File

@ -0,0 +1,13 @@
using QSB.EchoesOfTheEye.DreamRafts.WorldObjects;
using QSB.Messaging;
using QSB.Patches;
namespace QSB.EchoesOfTheEye.DreamRafts.Messages;
public class SetVisibleMessage : QSBWorldObjectMessage<QSBDreamRaftProjection, bool>
{
public SetVisibleMessage(bool data) : base(data) { }
public override void OnReceiveRemote() =>
QSBPatch.RemoteCall(() => WorldObject.AttachedObject.SetVisible(Data));
}

View File

@ -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<QSBDreamObjectProjector>()
__instance.GetWorldObject<QSBDreamRaftProjector>()
.SendMessage(new SetLitMessage(lit));
}
@ -39,7 +44,12 @@ public class DreamRaftPatches : QSBPatch
return;
}
__instance.GetWorldObject<QSBDreamObjectProjector>()
if (!QSBWorldSync.AllObjectsReady)
{
return;
}
__instance.GetWorldObject<QSBDreamRaftProjector>()
.SendMessage(new RespawnRaftMessage());
}
@ -52,7 +62,32 @@ public class DreamRaftPatches : QSBPatch
return;
}
__instance.GetWorldObject<QSBDreamObjectProjector>()
if (!QSBWorldSync.AllObjectsReady)
{
return;
}
__instance.GetWorldObject<QSBDreamRaftProjector>()
.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<QSBDreamRaftProjection>()
.SendMessage(new SetVisibleMessage(visible));
}
}

View File

@ -0,0 +1,11 @@
using QSB.EchoesOfTheEye.DreamRafts.Messages;
using QSB.Messaging;
using QSB.WorldSync;
namespace QSB.EchoesOfTheEye.DreamRafts.WorldObjects;
public class QSBDreamRaftProjection : WorldObject<DreamRaftProjection>
{
public override void SendInitialState(uint to) =>
this.SendMessage(new SetVisibleMessage(AttachedObject._visible));
}

View File

@ -4,7 +4,7 @@ using QSB.WorldSync;
namespace QSB.EchoesOfTheEye.DreamRafts.WorldObjects;
public class QSBDreamObjectProjector : WorldObject<DreamObjectProjector>
public class QSBDreamRaftProjector : WorldObject<DreamRaftProjector>
{
public override void SendInitialState(uint to) =>
this.SendMessage(new SetLitMessage(AttachedObject._lit));