mirror of
https://github.com/misternebula/quantum-space-buddies.git
synced 2025-02-21 00:39:53 +00:00
add projector sync
This commit is contained in:
parent
cbc84950aa
commit
e6227196e4
@ -0,0 +1,12 @@
|
||||
using QSB.EchoesOfTheEye.DreamObjectProjectors.WorldObject;
|
||||
using QSB.Messaging;
|
||||
|
||||
namespace QSB.EchoesOfTheEye.DreamObjectProjectors.Messages;
|
||||
|
||||
internal class ProjectorStatusMessage : QSBWorldObjectMessage<QSBDreamObjectProjector, bool>
|
||||
{
|
||||
public ProjectorStatusMessage(bool lit) : base(lit) { }
|
||||
|
||||
public override void OnReceiveRemote()
|
||||
=> WorldObject.AttachedObject.SetLit(Data);
|
||||
}
|
@ -0,0 +1,34 @@
|
||||
using HarmonyLib;
|
||||
using QSB.EchoesOfTheEye.DreamObjectProjectors.Messages;
|
||||
using QSB.EchoesOfTheEye.DreamObjectProjectors.WorldObject;
|
||||
using QSB.Messaging;
|
||||
using QSB.Patches;
|
||||
using QSB.WorldSync;
|
||||
|
||||
namespace QSB.EchoesOfTheEye.DreamObjectProjectors.Patches;
|
||||
|
||||
internal class ProjectorPatches : QSBPatch
|
||||
{
|
||||
public override QSBPatchTypes Type => QSBPatchTypes.OnClientConnect;
|
||||
|
||||
[HarmonyPostfix]
|
||||
[HarmonyPatch(typeof(DreamObjectProjector), nameof(DreamObjectProjector.OnPressInteract))]
|
||||
public static void OnPressInteract(DreamObjectProjector __instance)
|
||||
=> __instance.GetWorldObject<QSBDreamObjectProjector>().SendMessage(new ProjectorStatusMessage(false));
|
||||
|
||||
[HarmonyPrefix]
|
||||
[HarmonyPatch(typeof(DreamObjectProjector), nameof(DreamObjectProjector.FixedUpdate))]
|
||||
public static bool FixedUpdate(DreamObjectProjector __instance)
|
||||
{
|
||||
var flag = __instance._lightSensor.IsIlluminated();
|
||||
if (!__instance._lit && flag && !__instance._wasSensorIlluminated)
|
||||
{
|
||||
__instance.SetLit(true);
|
||||
__instance.GetWorldObject<QSBDreamObjectProjector>().SendMessage(new ProjectorStatusMessage(true));
|
||||
}
|
||||
|
||||
__instance._wasSensorIlluminated = flag;
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
15
QSB/EchoesOfTheEye/DreamObjectProjectors/ProjectorManager.cs
Normal file
15
QSB/EchoesOfTheEye/DreamObjectProjectors/ProjectorManager.cs
Normal file
@ -0,0 +1,15 @@
|
||||
using Cysharp.Threading.Tasks;
|
||||
using QSB.EchoesOfTheEye.DreamObjectProjectors.WorldObject;
|
||||
using QSB.WorldSync;
|
||||
using System.Threading;
|
||||
|
||||
namespace QSB.EchoesOfTheEye.DreamObjectProjectors;
|
||||
|
||||
internal class ProjectorManager : WorldObjectManager
|
||||
{
|
||||
public override WorldObjectScene WorldObjectScene => WorldObjectScene.SolarSystem;
|
||||
public override bool DlcOnly => true;
|
||||
|
||||
public override async UniTask BuildWorldObjects(OWScene scene, CancellationToken ct)
|
||||
=> QSBWorldSync.Init<QSBDreamObjectProjector, DreamObjectProjector>(typeof(DreamRaftProjector));
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
using QSB.EchoesOfTheEye.DreamObjectProjectors.Messages;
|
||||
using QSB.Messaging;
|
||||
using QSB.WorldSync;
|
||||
|
||||
namespace QSB.EchoesOfTheEye.DreamObjectProjectors.WorldObject;
|
||||
|
||||
public class QSBDreamObjectProjector : WorldObject<DreamObjectProjector>
|
||||
{
|
||||
public override void SendInitialState(uint to)
|
||||
=> this.SendMessage(new ProjectorStatusMessage(AttachedObject.isLit) { To = to });
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user