From dbb88d991ebca6f81c275a4e9d955bc92ebb492c Mon Sep 17 00:00:00 2001 From: JohnCorby Date: Fri, 11 Mar 2022 08:43:38 -0800 Subject: [PATCH] okay okay lets take a step back --- .../RaftSync/Messages/DockRaftMessage.cs | 11 ++++++ .../RaftDockOnPressInteractMessage.cs | 9 ----- .../RaftSync/Messages/RaftSetDockMessage.cs | 6 ++-- .../RaftSync/Messages/UndockRaftMessage.cs | 9 +++++ .../RaftSync/Patches/RaftPatches.cs | 2 +- QSB/EchoesOfTheEye/RaftSync/RaftManager.cs | 4 ++- .../RaftSync/WorldObjects/QSBDamRaftLift.cs | 3 -- .../RaftSync/WorldObjects/QSBRaft.cs | 29 +++++++++------ .../RaftSync/WorldObjects/QSBRaftCarrier.cs | 35 ------------------- .../RaftSync/WorldObjects/QSBRaftDock.cs | 12 +++++-- 10 files changed, 55 insertions(+), 65 deletions(-) create mode 100644 QSB/EchoesOfTheEye/RaftSync/Messages/DockRaftMessage.cs delete mode 100644 QSB/EchoesOfTheEye/RaftSync/Messages/RaftDockOnPressInteractMessage.cs create mode 100644 QSB/EchoesOfTheEye/RaftSync/Messages/UndockRaftMessage.cs delete mode 100644 QSB/EchoesOfTheEye/RaftSync/WorldObjects/QSBDamRaftLift.cs delete mode 100644 QSB/EchoesOfTheEye/RaftSync/WorldObjects/QSBRaftCarrier.cs diff --git a/QSB/EchoesOfTheEye/RaftSync/Messages/DockRaftMessage.cs b/QSB/EchoesOfTheEye/RaftSync/Messages/DockRaftMessage.cs new file mode 100644 index 00000000..3e102f05 --- /dev/null +++ b/QSB/EchoesOfTheEye/RaftSync/Messages/DockRaftMessage.cs @@ -0,0 +1,11 @@ +using QSB.EchoesOfTheEye.RaftSync.WorldObjects; +using QSB.Messaging; +using QSB.WorldSync; + +namespace QSB.EchoesOfTheEye.RaftSync.Messages; + +public class RaftDockMessage : QSBWorldObjectMessage +{ + public RaftDockMessage(QSBRaft qsbRaft) : base(qsbRaft.ObjectId) { } + public override void OnReceiveRemote() => WorldObject.Dock(Data.GetWorldObject()); +} diff --git a/QSB/EchoesOfTheEye/RaftSync/Messages/RaftDockOnPressInteractMessage.cs b/QSB/EchoesOfTheEye/RaftSync/Messages/RaftDockOnPressInteractMessage.cs deleted file mode 100644 index 2632d551..00000000 --- a/QSB/EchoesOfTheEye/RaftSync/Messages/RaftDockOnPressInteractMessage.cs +++ /dev/null @@ -1,9 +0,0 @@ -using QSB.EchoesOfTheEye.RaftSync.WorldObjects; -using QSB.Messaging; - -namespace QSB.EchoesOfTheEye.RaftSync.Messages; - -public class RaftDockOnPressInteractMessage : QSBWorldObjectMessage -{ - public override void OnReceiveRemote() => WorldObject.OnPressInteract(); -} \ No newline at end of file diff --git a/QSB/EchoesOfTheEye/RaftSync/Messages/RaftSetDockMessage.cs b/QSB/EchoesOfTheEye/RaftSync/Messages/RaftSetDockMessage.cs index 9d67481d..c8c1892d 100644 --- a/QSB/EchoesOfTheEye/RaftSync/Messages/RaftSetDockMessage.cs +++ b/QSB/EchoesOfTheEye/RaftSync/Messages/RaftSetDockMessage.cs @@ -6,9 +6,9 @@ namespace QSB.EchoesOfTheEye.RaftSync.Messages; public class RaftSetDockMessage : QSBWorldObjectMessage { - public RaftSetDockMessage(RaftCarrier raftCarrier) : - base(raftCarrier != null ? raftCarrier.GetWorldObject().ObjectId : -1) { } + public RaftSetDockMessage(RaftDock raftDock) : + base(raftDock != null ? raftDock.GetWorldObject().ObjectId : -1) { } public override void OnReceiveRemote() => - WorldObject.SetDock(Data != -1 ? Data.GetWorldObject() : null).Forget(); + WorldObject.SetDock(Data != -1 ? Data.GetWorldObject().AttachedObject : null); } diff --git a/QSB/EchoesOfTheEye/RaftSync/Messages/UndockRaftMessage.cs b/QSB/EchoesOfTheEye/RaftSync/Messages/UndockRaftMessage.cs new file mode 100644 index 00000000..bdd71ff2 --- /dev/null +++ b/QSB/EchoesOfTheEye/RaftSync/Messages/UndockRaftMessage.cs @@ -0,0 +1,9 @@ +using QSB.EchoesOfTheEye.RaftSync.WorldObjects; +using QSB.Messaging; + +namespace QSB.EchoesOfTheEye.RaftSync.Messages; + +public class UndockRaftMessage : QSBWorldObjectMessage +{ + public override void OnReceiveRemote() => WorldObject.Undock(); +} diff --git a/QSB/EchoesOfTheEye/RaftSync/Patches/RaftPatches.cs b/QSB/EchoesOfTheEye/RaftSync/Patches/RaftPatches.cs index 00212cc1..57cbcdab 100644 --- a/QSB/EchoesOfTheEye/RaftSync/Patches/RaftPatches.cs +++ b/QSB/EchoesOfTheEye/RaftSync/Patches/RaftPatches.cs @@ -36,5 +36,5 @@ public class RaftPatches : QSBPatch [HarmonyPostfix] [HarmonyPatch(typeof(RaftDock), nameof(RaftDock.OnPressInteract))] private static void RaftDock_OnPressInteract(RaftDock __instance) => - __instance.GetWorldObject().SendMessage(new RaftDockOnPressInteractMessage()); + __instance.GetWorldObject().SendMessage(new UndockRaftMessage()); } diff --git a/QSB/EchoesOfTheEye/RaftSync/RaftManager.cs b/QSB/EchoesOfTheEye/RaftSync/RaftManager.cs index 50f73237..78a36d11 100644 --- a/QSB/EchoesOfTheEye/RaftSync/RaftManager.cs +++ b/QSB/EchoesOfTheEye/RaftSync/RaftManager.cs @@ -3,6 +3,7 @@ using QSB.EchoesOfTheEye.RaftSync.WorldObjects; using QSB.Utility; using QSB.WorldSync; using System.Collections.Generic; +using System.Linq; using System.Threading; namespace QSB.EchoesOfTheEye.RaftSync; @@ -12,6 +13,7 @@ public class RaftManager : WorldObjectManager public override WorldObjectScene WorldObjectScene => WorldObjectScene.SolarSystem; public static readonly List Rafts = new(); + public static DamRaftLift DamRaftLift { get; private set; } public override async UniTask BuildWorldObjects(OWScene scene, CancellationToken ct) { @@ -20,6 +22,6 @@ public class RaftManager : WorldObjectManager QSBWorldSync.Init(Rafts); QSBWorldSync.Init(); - QSBWorldSync.Init(); + DamRaftLift = QSBWorldSync.GetUnityObjects().First(); } } diff --git a/QSB/EchoesOfTheEye/RaftSync/WorldObjects/QSBDamRaftLift.cs b/QSB/EchoesOfTheEye/RaftSync/WorldObjects/QSBDamRaftLift.cs deleted file mode 100644 index 65dff69d..00000000 --- a/QSB/EchoesOfTheEye/RaftSync/WorldObjects/QSBDamRaftLift.cs +++ /dev/null @@ -1,3 +0,0 @@ -namespace QSB.EchoesOfTheEye.RaftSync.WorldObjects; - -public class QSBDamRaftLift : QSBRaftCarrier { } diff --git a/QSB/EchoesOfTheEye/RaftSync/WorldObjects/QSBRaft.cs b/QSB/EchoesOfTheEye/RaftSync/WorldObjects/QSBRaft.cs index 00bebd84..e9831bae 100644 --- a/QSB/EchoesOfTheEye/RaftSync/WorldObjects/QSBRaft.cs +++ b/QSB/EchoesOfTheEye/RaftSync/WorldObjects/QSBRaft.cs @@ -20,8 +20,6 @@ public class QSBRaft : WorldObject private QSBLightSensor[] _lightSensors; - private readonly CancellationTokenSource _cts = new(); - public override async UniTask Init(CancellationToken ct) { if (QSBCore.IsHost) @@ -40,6 +38,8 @@ public class QSBRaft : WorldObject } } + private readonly CancellationTokenSource _cts = new(); + public override void OnRemoval() { if (QSBCore.IsHost) @@ -63,12 +63,21 @@ public class QSBRaft : WorldObject } } - public override void SendInitialState(uint to) => - this.SendMessage(new RaftSetDockMessage(AttachedObject._dock)); - - public async UniTaskVoid SetDock(IQSBRaftCarrier qsbRaftCarrier) + public override void SendInitialState(uint to) { - if (qsbRaftCarrier?.AttachedObject == AttachedObject._dock) + if (RaftManager.DamRaftLift._raft == AttachedObject) + { + // todo dam raft lift + } + else + { + this.SendMessage(new RaftSetDockMessage(AttachedObject._dock)); + } + } + + public void SetDock(RaftDock raftDock) + { + if (raftDock == AttachedObject._dock) { return; } @@ -76,13 +85,13 @@ public class QSBRaft : WorldObject // undock from current dock if (AttachedObject._dock != null) { - await AttachedObject._dock.GetWorldObject().Undock(_cts.Token); + // todo } // dock to new dock - if (qsbRaftCarrier != null) + if (raftDock != null) { - await qsbRaftCarrier.Dock(this, _cts.Token); + // todo } } } diff --git a/QSB/EchoesOfTheEye/RaftSync/WorldObjects/QSBRaftCarrier.cs b/QSB/EchoesOfTheEye/RaftSync/WorldObjects/QSBRaftCarrier.cs deleted file mode 100644 index bd71f2c4..00000000 --- a/QSB/EchoesOfTheEye/RaftSync/WorldObjects/QSBRaftCarrier.cs +++ /dev/null @@ -1,35 +0,0 @@ -using Cysharp.Threading.Tasks; -using QSB.Utility; -using QSB.WorldSync; -using System; -using System.Threading; - -namespace QSB.EchoesOfTheEye.RaftSync.WorldObjects; - -public abstract class QSBRaftCarrier : WorldObject, IQSBRaftCarrier where T : RaftCarrier -{ - public override void SendInitialState(uint to) - { - // todo SendInitialState - } - - public async UniTask Undock(CancellationToken ct) - { - var qsbRaft = AttachedObject._raft.GetWorldObject(); - - DebugLog.DebugWrite($"TODO: {this} undock {qsbRaft}"); - await UniTask.Delay(TimeSpan.FromSeconds(3), cancellationToken: ct); - } - - public async UniTask Dock(QSBRaft qsbRaft, CancellationToken ct) - { - DebugLog.DebugWrite($"TODO: {this} dock {qsbRaft}"); - await UniTask.Delay(TimeSpan.FromSeconds(3), cancellationToken: ct); - } -} - -public interface IQSBRaftCarrier : IWorldObject -{ - UniTask Undock(CancellationToken ct); - UniTask Dock(QSBRaft qsbRaft, CancellationToken ct); -} diff --git a/QSB/EchoesOfTheEye/RaftSync/WorldObjects/QSBRaftDock.cs b/QSB/EchoesOfTheEye/RaftSync/WorldObjects/QSBRaftDock.cs index 1b81602e..4e1000c1 100644 --- a/QSB/EchoesOfTheEye/RaftSync/WorldObjects/QSBRaftDock.cs +++ b/QSB/EchoesOfTheEye/RaftSync/WorldObjects/QSBRaftDock.cs @@ -1,8 +1,12 @@ -namespace QSB.EchoesOfTheEye.RaftSync.WorldObjects; +using QSB.WorldSync; -public class QSBRaftDock : QSBRaftCarrier +namespace QSB.EchoesOfTheEye.RaftSync.WorldObjects; + +public class QSBRaftDock : WorldObject { - public void OnPressInteract() + public override void SendInitialState(uint to) { } + + public void Undock() { if (AttachedObject._raft != null && AttachedObject._state == RaftCarrier.DockState.Docked) { @@ -23,4 +27,6 @@ public class QSBRaftDock : QSBRaftCarrier AttachedObject._gearInterface.PlayFailure(); } } + + public void Dock(QSBRaft qsbRaft) { } }