mirror of
https://github.com/misternebula/quantum-space-buddies.git
synced 2025-03-12 04:14:08 +00:00
raft: make SetDock async
This commit is contained in:
parent
cd42606d3b
commit
07fc30f9d5
@ -10,5 +10,5 @@ public class RaftSetDockMessage : QSBWorldObjectMessage<QSBRaft, int>
|
||||
base(raftCarrier != null ? raftCarrier.GetWorldObject<IQSBRaftCarrier>().ObjectId : -1) { }
|
||||
|
||||
public override void OnReceiveRemote() =>
|
||||
WorldObject.SetDock(Data != -1 ? Data.GetWorldObject<IQSBRaftCarrier>() : null);
|
||||
WorldObject.SetDock(Data != -1 ? Data.GetWorldObject<IQSBRaftCarrier>() : null).Forget();
|
||||
}
|
||||
|
@ -21,6 +21,8 @@ public class QSBRaft : WorldObject<RaftController>
|
||||
|
||||
private QSBLightSensor[] _lightSensors;
|
||||
|
||||
private readonly CancellationTokenSource _cts = new();
|
||||
|
||||
public override async UniTask Init(CancellationToken ct)
|
||||
{
|
||||
if (QSBCore.IsHost)
|
||||
@ -50,6 +52,8 @@ public class QSBRaft : WorldObject<RaftController>
|
||||
{
|
||||
lightSensor.OnDetectLocalLight -= OnDetectLocalLight;
|
||||
}
|
||||
|
||||
_cts.Cancel();
|
||||
}
|
||||
|
||||
private void OnDetectLocalLight()
|
||||
@ -63,8 +67,25 @@ public class QSBRaft : WorldObject<RaftController>
|
||||
public override void SendInitialState(uint to) =>
|
||||
this.SendMessage(new RaftSetDockMessage(AttachedObject._dock));
|
||||
|
||||
public void SetDock(IQSBRaftCarrier qsbRaftCarrier)
|
||||
public async UniTaskVoid SetDock(IQSBRaftCarrier qsbRaftCarrier)
|
||||
{
|
||||
if (qsbRaftCarrier?.AttachedObject == AttachedObject._dock)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
DebugLog.DebugWrite($"TODO: {this} dock = {qsbRaftCarrier}");
|
||||
|
||||
// undock from current dock
|
||||
if (AttachedObject._dock != null)
|
||||
{
|
||||
await AttachedObject._dock.GetWorldObject<IQSBRaftCarrier>().Undock(this, _cts.Token);
|
||||
}
|
||||
|
||||
// dock to new dock
|
||||
if (qsbRaftCarrier != null)
|
||||
{
|
||||
await qsbRaftCarrier.Dock(this, _cts.Token);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,4 +1,8 @@
|
||||
using QSB.WorldSync;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using QSB.Utility;
|
||||
using QSB.WorldSync;
|
||||
using System;
|
||||
using System.Threading;
|
||||
|
||||
namespace QSB.EchoesOfTheEye.RaftSync.WorldObjects;
|
||||
|
||||
@ -8,6 +12,22 @@ public abstract class QSBRaftCarrier<T> : WorldObject<T>, IQSBRaftCarrier where
|
||||
{
|
||||
// todo SendInitialState
|
||||
}
|
||||
|
||||
public async UniTask Undock(QSBRaft qsbRaft, CancellationToken ct)
|
||||
{
|
||||
DebugLog.DebugWrite($"TODO: {this} undock {qsbRaft}");
|
||||
await UniTask.Delay(TimeSpan.FromSeconds(3), cancellationToken: ct);
|
||||
}
|
||||
|
||||
public interface IQSBRaftCarrier : IWorldObject { }
|
||||
public async UniTask Dock(QSBRaft qsbRaft, CancellationToken ct)
|
||||
{
|
||||
DebugLog.DebugWrite($"TODO: {this} undock {qsbRaft}");
|
||||
await UniTask.Delay(TimeSpan.FromSeconds(3), cancellationToken: ct);
|
||||
}
|
||||
}
|
||||
|
||||
public interface IQSBRaftCarrier : IWorldObject
|
||||
{
|
||||
UniTask Undock(QSBRaft qsbRaft, CancellationToken ct);
|
||||
UniTask Dock(QSBRaft qsbRaft, CancellationToken ct);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user