mirror of
https://github.com/misternebula/quantum-space-buddies.git
synced 2025-02-24 00:39:52 +00:00
okay okay lets take a step back
This commit is contained in:
parent
c9f01fc269
commit
dbb88d991e
11
QSB/EchoesOfTheEye/RaftSync/Messages/DockRaftMessage.cs
Normal file
11
QSB/EchoesOfTheEye/RaftSync/Messages/DockRaftMessage.cs
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
using QSB.EchoesOfTheEye.RaftSync.WorldObjects;
|
||||||
|
using QSB.Messaging;
|
||||||
|
using QSB.WorldSync;
|
||||||
|
|
||||||
|
namespace QSB.EchoesOfTheEye.RaftSync.Messages;
|
||||||
|
|
||||||
|
public class RaftDockMessage : QSBWorldObjectMessage<QSBRaftDock, int>
|
||||||
|
{
|
||||||
|
public RaftDockMessage(QSBRaft qsbRaft) : base(qsbRaft.ObjectId) { }
|
||||||
|
public override void OnReceiveRemote() => WorldObject.Dock(Data.GetWorldObject<QSBRaft>());
|
||||||
|
}
|
@ -1,9 +0,0 @@
|
|||||||
using QSB.EchoesOfTheEye.RaftSync.WorldObjects;
|
|
||||||
using QSB.Messaging;
|
|
||||||
|
|
||||||
namespace QSB.EchoesOfTheEye.RaftSync.Messages;
|
|
||||||
|
|
||||||
public class RaftDockOnPressInteractMessage : QSBWorldObjectMessage<QSBRaftDock>
|
|
||||||
{
|
|
||||||
public override void OnReceiveRemote() => WorldObject.OnPressInteract();
|
|
||||||
}
|
|
@ -6,9 +6,9 @@ namespace QSB.EchoesOfTheEye.RaftSync.Messages;
|
|||||||
|
|
||||||
public class RaftSetDockMessage : QSBWorldObjectMessage<QSBRaft, int>
|
public class RaftSetDockMessage : QSBWorldObjectMessage<QSBRaft, int>
|
||||||
{
|
{
|
||||||
public RaftSetDockMessage(RaftCarrier raftCarrier) :
|
public RaftSetDockMessage(RaftDock raftDock) :
|
||||||
base(raftCarrier != null ? raftCarrier.GetWorldObject<IQSBRaftCarrier>().ObjectId : -1) { }
|
base(raftDock != null ? raftDock.GetWorldObject<QSBRaftDock>().ObjectId : -1) { }
|
||||||
|
|
||||||
public override void OnReceiveRemote() =>
|
public override void OnReceiveRemote() =>
|
||||||
WorldObject.SetDock(Data != -1 ? Data.GetWorldObject<IQSBRaftCarrier>() : null).Forget();
|
WorldObject.SetDock(Data != -1 ? Data.GetWorldObject<QSBRaftDock>().AttachedObject : null);
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,9 @@
|
|||||||
|
using QSB.EchoesOfTheEye.RaftSync.WorldObjects;
|
||||||
|
using QSB.Messaging;
|
||||||
|
|
||||||
|
namespace QSB.EchoesOfTheEye.RaftSync.Messages;
|
||||||
|
|
||||||
|
public class UndockRaftMessage : QSBWorldObjectMessage<QSBRaftDock>
|
||||||
|
{
|
||||||
|
public override void OnReceiveRemote() => WorldObject.Undock();
|
||||||
|
}
|
@ -36,5 +36,5 @@ public class RaftPatches : QSBPatch
|
|||||||
[HarmonyPostfix]
|
[HarmonyPostfix]
|
||||||
[HarmonyPatch(typeof(RaftDock), nameof(RaftDock.OnPressInteract))]
|
[HarmonyPatch(typeof(RaftDock), nameof(RaftDock.OnPressInteract))]
|
||||||
private static void RaftDock_OnPressInteract(RaftDock __instance) =>
|
private static void RaftDock_OnPressInteract(RaftDock __instance) =>
|
||||||
__instance.GetWorldObject<QSBRaftDock>().SendMessage(new RaftDockOnPressInteractMessage());
|
__instance.GetWorldObject<QSBRaftDock>().SendMessage(new UndockRaftMessage());
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@ using QSB.EchoesOfTheEye.RaftSync.WorldObjects;
|
|||||||
using QSB.Utility;
|
using QSB.Utility;
|
||||||
using QSB.WorldSync;
|
using QSB.WorldSync;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
|
|
||||||
namespace QSB.EchoesOfTheEye.RaftSync;
|
namespace QSB.EchoesOfTheEye.RaftSync;
|
||||||
@ -12,6 +13,7 @@ public class RaftManager : WorldObjectManager
|
|||||||
public override WorldObjectScene WorldObjectScene => WorldObjectScene.SolarSystem;
|
public override WorldObjectScene WorldObjectScene => WorldObjectScene.SolarSystem;
|
||||||
|
|
||||||
public static readonly List<RaftController> Rafts = new();
|
public static readonly List<RaftController> Rafts = new();
|
||||||
|
public static DamRaftLift DamRaftLift { get; private set; }
|
||||||
|
|
||||||
public override async UniTask BuildWorldObjects(OWScene scene, CancellationToken ct)
|
public override async UniTask BuildWorldObjects(OWScene scene, CancellationToken ct)
|
||||||
{
|
{
|
||||||
@ -20,6 +22,6 @@ public class RaftManager : WorldObjectManager
|
|||||||
QSBWorldSync.Init<QSBRaft, RaftController>(Rafts);
|
QSBWorldSync.Init<QSBRaft, RaftController>(Rafts);
|
||||||
|
|
||||||
QSBWorldSync.Init<QSBRaftDock, RaftDock>();
|
QSBWorldSync.Init<QSBRaftDock, RaftDock>();
|
||||||
QSBWorldSync.Init<QSBDamRaftLift, DamRaftLift>();
|
DamRaftLift = QSBWorldSync.GetUnityObjects<DamRaftLift>().First();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,3 +0,0 @@
|
|||||||
namespace QSB.EchoesOfTheEye.RaftSync.WorldObjects;
|
|
||||||
|
|
||||||
public class QSBDamRaftLift : QSBRaftCarrier<DamRaftLift> { }
|
|
@ -20,8 +20,6 @@ public class QSBRaft : WorldObject<RaftController>
|
|||||||
|
|
||||||
private QSBLightSensor[] _lightSensors;
|
private QSBLightSensor[] _lightSensors;
|
||||||
|
|
||||||
private readonly CancellationTokenSource _cts = new();
|
|
||||||
|
|
||||||
public override async UniTask Init(CancellationToken ct)
|
public override async UniTask Init(CancellationToken ct)
|
||||||
{
|
{
|
||||||
if (QSBCore.IsHost)
|
if (QSBCore.IsHost)
|
||||||
@ -40,6 +38,8 @@ public class QSBRaft : WorldObject<RaftController>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private readonly CancellationTokenSource _cts = new();
|
||||||
|
|
||||||
public override void OnRemoval()
|
public override void OnRemoval()
|
||||||
{
|
{
|
||||||
if (QSBCore.IsHost)
|
if (QSBCore.IsHost)
|
||||||
@ -63,12 +63,21 @@ public class QSBRaft : WorldObject<RaftController>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void SendInitialState(uint to) =>
|
public override void SendInitialState(uint to)
|
||||||
this.SendMessage(new RaftSetDockMessage(AttachedObject._dock));
|
|
||||||
|
|
||||||
public async UniTaskVoid SetDock(IQSBRaftCarrier qsbRaftCarrier)
|
|
||||||
{
|
{
|
||||||
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;
|
return;
|
||||||
}
|
}
|
||||||
@ -76,13 +85,13 @@ public class QSBRaft : WorldObject<RaftController>
|
|||||||
// undock from current dock
|
// undock from current dock
|
||||||
if (AttachedObject._dock != null)
|
if (AttachedObject._dock != null)
|
||||||
{
|
{
|
||||||
await AttachedObject._dock.GetWorldObject<IQSBRaftCarrier>().Undock(_cts.Token);
|
// todo
|
||||||
}
|
}
|
||||||
|
|
||||||
// dock to new dock
|
// dock to new dock
|
||||||
if (qsbRaftCarrier != null)
|
if (raftDock != null)
|
||||||
{
|
{
|
||||||
await qsbRaftCarrier.Dock(this, _cts.Token);
|
// todo
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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<T> : WorldObject<T>, IQSBRaftCarrier where T : RaftCarrier
|
|
||||||
{
|
|
||||||
public override void SendInitialState(uint to)
|
|
||||||
{
|
|
||||||
// todo SendInitialState
|
|
||||||
}
|
|
||||||
|
|
||||||
public async UniTask Undock(CancellationToken ct)
|
|
||||||
{
|
|
||||||
var qsbRaft = AttachedObject._raft.GetWorldObject<QSBRaft>();
|
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
|
@ -1,8 +1,12 @@
|
|||||||
namespace QSB.EchoesOfTheEye.RaftSync.WorldObjects;
|
using QSB.WorldSync;
|
||||||
|
|
||||||
public class QSBRaftDock : QSBRaftCarrier<RaftDock>
|
namespace QSB.EchoesOfTheEye.RaftSync.WorldObjects;
|
||||||
|
|
||||||
|
public class QSBRaftDock : WorldObject<RaftDock>
|
||||||
{
|
{
|
||||||
public void OnPressInteract()
|
public override void SendInitialState(uint to) { }
|
||||||
|
|
||||||
|
public void Undock()
|
||||||
{
|
{
|
||||||
if (AttachedObject._raft != null && AttachedObject._state == RaftCarrier.DockState.Docked)
|
if (AttachedObject._raft != null && AttachedObject._state == RaftCarrier.DockState.Docked)
|
||||||
{
|
{
|
||||||
@ -23,4 +27,6 @@ public class QSBRaftDock : QSBRaftCarrier<RaftDock>
|
|||||||
AttachedObject._gearInterface.PlayFailure();
|
AttachedObject._gearInterface.PlayFailure();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void Dock(QSBRaft qsbRaft) { }
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user