mirror of
https://github.com/misternebula/quantum-space-buddies.git
synced 2025-02-28 12:40:28 +00:00
make BuildWorldObjects async
This commit is contained in:
parent
961e12d2f3
commit
2f99dec87f
@ -1,7 +1,9 @@
|
||||
using QSB.Anglerfish.WorldObjects;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using QSB.Anglerfish.WorldObjects;
|
||||
using QSB.Utility;
|
||||
using QSB.WorldSync;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading;
|
||||
|
||||
namespace QSB.Anglerfish
|
||||
{
|
||||
@ -11,7 +13,7 @@ namespace QSB.Anglerfish
|
||||
|
||||
public static readonly List<AnglerfishController> Anglers = new();
|
||||
|
||||
public override void BuildWorldObjects(OWScene scene)
|
||||
public override async UniTask BuildWorldObjects(OWScene scene, CancellationToken cancellationToken)
|
||||
{
|
||||
Anglers.Clear();
|
||||
Anglers.AddRange(QSBWorldSync.GetUnityObjects<AnglerfishController>().SortDeterministic());
|
||||
|
@ -1,8 +1,10 @@
|
||||
using Mirror;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using Mirror;
|
||||
using QSB.Anglerfish.Messages;
|
||||
using QSB.Anglerfish.TransformSync;
|
||||
using QSB.Messaging;
|
||||
using QSB.WorldSync;
|
||||
using System.Threading;
|
||||
using UnityEngine;
|
||||
|
||||
namespace QSB.Anglerfish.WorldObjects
|
||||
@ -17,15 +19,14 @@ namespace QSB.Anglerfish.WorldObjects
|
||||
|
||||
private Vector3 _lastTargetPosition;
|
||||
|
||||
public override void Init()
|
||||
public override async UniTask Init(CancellationToken cancellationToken)
|
||||
{
|
||||
if (QSBCore.IsHost)
|
||||
{
|
||||
NetworkServer.Spawn(Object.Instantiate(QSBNetworkManager.singleton.AnglerPrefab));
|
||||
}
|
||||
|
||||
StartDelayedReady();
|
||||
QSBCore.UnityEvents.RunWhen(() => TransformSync, FinishDelayedReady);
|
||||
await UniTask.WaitUntil(() => TransformSync, cancellationToken: cancellationToken);
|
||||
}
|
||||
|
||||
public override void OnRemoval()
|
||||
|
@ -1,5 +1,7 @@
|
||||
using QSB.Animation.NPC.WorldObjects;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using QSB.Animation.NPC.WorldObjects;
|
||||
using QSB.WorldSync;
|
||||
using System.Threading;
|
||||
|
||||
namespace QSB.Animation.NPC
|
||||
{
|
||||
@ -8,7 +10,7 @@ namespace QSB.Animation.NPC
|
||||
// im assuming this is used in the eye as well
|
||||
public override WorldObjectType WorldObjectType => WorldObjectType.Both;
|
||||
|
||||
public override void BuildWorldObjects(OWScene scene)
|
||||
public override async UniTask BuildWorldObjects(OWScene scene, CancellationToken cancellationToken)
|
||||
{
|
||||
QSBWorldSync.Init<QSBCharacterAnimController, CharacterAnimController>();
|
||||
QSBWorldSync.Init<QSBTravelerController, TravelerController>();
|
||||
|
@ -1,5 +1,7 @@
|
||||
using QSB.CampfireSync.WorldObjects;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using QSB.CampfireSync.WorldObjects;
|
||||
using QSB.WorldSync;
|
||||
using System.Threading;
|
||||
|
||||
namespace QSB.CampfireSync
|
||||
{
|
||||
@ -7,7 +9,7 @@ namespace QSB.CampfireSync
|
||||
{
|
||||
public override WorldObjectType WorldObjectType => WorldObjectType.Both;
|
||||
|
||||
public override void BuildWorldObjects(OWScene scene)
|
||||
public override async UniTask BuildWorldObjects(OWScene scene, CancellationToken cancellationToken)
|
||||
=> QSBWorldSync.Init<QSBCampfire, Campfire>();
|
||||
}
|
||||
}
|
||||
|
@ -1,4 +1,5 @@
|
||||
using OWML.Common;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using OWML.Common;
|
||||
using QSB.ConversationSync.Messages;
|
||||
using QSB.ConversationSync.WorldObjects;
|
||||
using QSB.Messaging;
|
||||
@ -7,6 +8,7 @@ using QSB.Utility;
|
||||
using QSB.WorldSync;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
@ -37,7 +39,7 @@ namespace QSB.ConversationSync
|
||||
_boxPrefab.GetComponent<Text>().color = Color.white;
|
||||
}
|
||||
|
||||
public override void BuildWorldObjects(OWScene scene)
|
||||
public override async UniTask BuildWorldObjects(OWScene scene, CancellationToken cancellationToken)
|
||||
=> QSBWorldSync.Init<QSBRemoteDialogueTrigger, RemoteDialogueTrigger>();
|
||||
|
||||
public uint GetPlayerTalkingToTree(CharacterDialogueTree tree)
|
||||
|
@ -1,5 +1,7 @@
|
||||
using QSB.EchoesOfTheEye.AirlockSync.WorldObjects;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using QSB.EchoesOfTheEye.AirlockSync.WorldObjects;
|
||||
using QSB.WorldSync;
|
||||
using System.Threading;
|
||||
|
||||
namespace QSB.EchoesOfTheEye.AirlockSync
|
||||
{
|
||||
@ -8,6 +10,6 @@ namespace QSB.EchoesOfTheEye.AirlockSync
|
||||
// is this used in the prisoner sequence in the eye?
|
||||
public override WorldObjectType WorldObjectType => WorldObjectType.SolarSystem;
|
||||
|
||||
public override void BuildWorldObjects(OWScene scene) => QSBWorldSync.Init<QSBGhostAirlock, GhostAirlock>();
|
||||
public override async UniTask BuildWorldObjects(OWScene scene, CancellationToken cancellationToken) => QSBWorldSync.Init<QSBGhostAirlock, GhostAirlock>();
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,7 @@
|
||||
using QSB.EchoesOfTheEye.LightSensorSync.WorldObjects;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using QSB.EchoesOfTheEye.LightSensorSync.WorldObjects;
|
||||
using QSB.WorldSync;
|
||||
using System.Threading;
|
||||
|
||||
namespace QSB.EchoesOfTheEye.LightSensorSync
|
||||
{
|
||||
@ -8,6 +10,6 @@ namespace QSB.EchoesOfTheEye.LightSensorSync
|
||||
// see AirlockManager question
|
||||
public override WorldObjectType WorldObjectType => WorldObjectType.SolarSystem;
|
||||
|
||||
public override void BuildWorldObjects(OWScene scene) => QSBWorldSync.Init<QSBSingleLightSensor, SingleLightSensor>();
|
||||
public override async UniTask BuildWorldObjects(OWScene scene, CancellationToken cancellationToken) => QSBWorldSync.Init<QSBSingleLightSensor, SingleLightSensor>();
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,7 @@
|
||||
using QSB.ElevatorSync.WorldObjects;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using QSB.ElevatorSync.WorldObjects;
|
||||
using QSB.WorldSync;
|
||||
using System.Threading;
|
||||
|
||||
namespace QSB.ElevatorSync
|
||||
{
|
||||
@ -7,7 +9,7 @@ namespace QSB.ElevatorSync
|
||||
{
|
||||
public override WorldObjectType WorldObjectType => WorldObjectType.SolarSystem;
|
||||
|
||||
public override void BuildWorldObjects(OWScene scene)
|
||||
public override async UniTask BuildWorldObjects(OWScene scene, CancellationToken cancellationToken)
|
||||
=> QSBWorldSync.Init<QSBElevator, Elevator>();
|
||||
}
|
||||
}
|
@ -1,6 +1,8 @@
|
||||
using QSB.ElevatorSync.Messages;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using QSB.ElevatorSync.Messages;
|
||||
using QSB.Messaging;
|
||||
using QSB.WorldSync;
|
||||
using System.Threading;
|
||||
using UnityEngine;
|
||||
|
||||
namespace QSB.ElevatorSync.WorldObjects
|
||||
@ -9,21 +11,15 @@ namespace QSB.ElevatorSync.WorldObjects
|
||||
{
|
||||
private OWTriggerVolume _elevatorTrigger;
|
||||
|
||||
public override void Init()
|
||||
public override async UniTask Init(CancellationToken cancellationToken)
|
||||
{
|
||||
StartDelayedReady();
|
||||
QSBCore.UnityEvents.RunWhen(() => AttachedObject._interactVolume, () =>
|
||||
{
|
||||
FinishDelayedReady();
|
||||
// BUG : This won't work for the log lift! need to make a different trigger for that
|
||||
|
||||
// BUG : This won't work for the log lift! need to make a different trigger for that
|
||||
var boxShape = AttachedObject.gameObject.GetAddComponent<BoxShape>();
|
||||
boxShape.center = new Vector3(0, 1.75f, 0.25f);
|
||||
boxShape.size = new Vector3(3, 3.5f, 3);
|
||||
|
||||
var boxShape = AttachedObject.gameObject.GetAddComponent<BoxShape>();
|
||||
boxShape.center = new Vector3(0, 1.75f, 0.25f);
|
||||
boxShape.size = new Vector3(3, 3.5f, 3);
|
||||
|
||||
_elevatorTrigger = AttachedObject.gameObject.GetAddComponent<OWTriggerVolume>();
|
||||
});
|
||||
_elevatorTrigger = AttachedObject.gameObject.GetAddComponent<OWTriggerVolume>();
|
||||
}
|
||||
|
||||
public override void SendInitialState(uint to)
|
||||
|
@ -1,5 +1,7 @@
|
||||
using QSB.EyeOfTheUniverse.InstrumentSync.WorldObjects;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using QSB.EyeOfTheUniverse.InstrumentSync.WorldObjects;
|
||||
using QSB.WorldSync;
|
||||
using System.Threading;
|
||||
|
||||
namespace QSB.EyeOfTheUniverse.InstrumentSync
|
||||
{
|
||||
@ -7,7 +9,7 @@ namespace QSB.EyeOfTheUniverse.InstrumentSync
|
||||
{
|
||||
public override WorldObjectType WorldObjectType => WorldObjectType.Eye;
|
||||
|
||||
public override void BuildWorldObjects(OWScene scene)
|
||||
public override async UniTask BuildWorldObjects(OWScene scene, CancellationToken cancellationToken)
|
||||
=> QSBWorldSync.Init<QSBQuantumInstrument, QuantumInstrument>();
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,7 @@
|
||||
using QSB.GeyserSync.WorldObjects;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using QSB.GeyserSync.WorldObjects;
|
||||
using QSB.WorldSync;
|
||||
using System.Threading;
|
||||
|
||||
namespace QSB.GeyserSync
|
||||
{
|
||||
@ -7,7 +9,7 @@ namespace QSB.GeyserSync
|
||||
{
|
||||
public override WorldObjectType WorldObjectType => WorldObjectType.SolarSystem;
|
||||
|
||||
public override void BuildWorldObjects(OWScene scene)
|
||||
public override async UniTask BuildWorldObjects(OWScene scene, CancellationToken cancellationToken)
|
||||
=> QSBWorldSync.Init<QSBGeyser, GeyserController>();
|
||||
}
|
||||
}
|
@ -1,12 +1,14 @@
|
||||
using QSB.GeyserSync.Messages;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using QSB.GeyserSync.Messages;
|
||||
using QSB.Messaging;
|
||||
using QSB.WorldSync;
|
||||
using System.Threading;
|
||||
|
||||
namespace QSB.GeyserSync.WorldObjects
|
||||
{
|
||||
public class QSBGeyser : WorldObject<GeyserController>
|
||||
{
|
||||
public override void Init()
|
||||
public override async UniTask Init(CancellationToken cancellationToken)
|
||||
{
|
||||
if (QSBCore.IsHost)
|
||||
{
|
||||
|
@ -1,8 +1,10 @@
|
||||
using OWML.Common;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using OWML.Common;
|
||||
using QSB.ItemSync.WorldObjects.Items;
|
||||
using QSB.ItemSync.WorldObjects.Sockets;
|
||||
using QSB.Utility;
|
||||
using QSB.WorldSync;
|
||||
using System.Threading;
|
||||
|
||||
namespace QSB.ItemSync
|
||||
{
|
||||
@ -10,7 +12,7 @@ namespace QSB.ItemSync
|
||||
{
|
||||
public override WorldObjectType WorldObjectType => WorldObjectType.Both;
|
||||
|
||||
public override void BuildWorldObjects(OWScene scene)
|
||||
public override async UniTask BuildWorldObjects(OWScene scene, CancellationToken cancellationToken)
|
||||
{
|
||||
DebugLog.DebugWrite("Building OWItems...", MessageType.Info);
|
||||
|
||||
|
@ -1,8 +1,10 @@
|
||||
using QSB.ItemSync.WorldObjects.Sockets;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using QSB.ItemSync.WorldObjects.Sockets;
|
||||
using QSB.Player;
|
||||
using QSB.SectorSync.WorldObjects;
|
||||
using QSB.Utility;
|
||||
using QSB.WorldSync;
|
||||
using System.Threading;
|
||||
using UnityEngine;
|
||||
|
||||
namespace QSB.ItemSync.WorldObjects.Items
|
||||
@ -16,7 +18,7 @@ namespace QSB.ItemSync.WorldObjects.Items
|
||||
private Quaternion InitialRotation { get; set; }
|
||||
private QSBSector InitialSector { get; set; }
|
||||
|
||||
public override void Init()
|
||||
public override async UniTask Init(CancellationToken cancellationToken)
|
||||
{
|
||||
if (AttachedObject == null)
|
||||
{
|
||||
|
@ -1,7 +1,9 @@
|
||||
using QSB.JellyfishSync.WorldObjects;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using QSB.JellyfishSync.WorldObjects;
|
||||
using QSB.Utility;
|
||||
using QSB.WorldSync;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading;
|
||||
|
||||
namespace QSB.JellyfishSync
|
||||
{
|
||||
@ -11,7 +13,7 @@ namespace QSB.JellyfishSync
|
||||
|
||||
public static readonly List<JellyfishController> Jellyfish = new();
|
||||
|
||||
public override void BuildWorldObjects(OWScene scene)
|
||||
public override async UniTask BuildWorldObjects(OWScene scene, CancellationToken cancellationToken)
|
||||
{
|
||||
Jellyfish.Clear();
|
||||
Jellyfish.AddRange(QSBWorldSync.GetUnityObjects<JellyfishController>().SortDeterministic());
|
||||
|
@ -1,8 +1,10 @@
|
||||
using Mirror;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using Mirror;
|
||||
using QSB.JellyfishSync.Messages;
|
||||
using QSB.JellyfishSync.TransformSync;
|
||||
using QSB.Messaging;
|
||||
using QSB.WorldSync;
|
||||
using System.Threading;
|
||||
using UnityEngine;
|
||||
|
||||
namespace QSB.JellyfishSync.WorldObjects
|
||||
@ -13,7 +15,7 @@ namespace QSB.JellyfishSync.WorldObjects
|
||||
|
||||
public JellyfishTransformSync TransformSync;
|
||||
|
||||
public override void Init()
|
||||
public override async UniTask Init(CancellationToken cancellationToken)
|
||||
{
|
||||
if (QSBCore.IsHost)
|
||||
{
|
||||
|
@ -1,6 +1,8 @@
|
||||
using QSB.MeteorSync.WorldObjects;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using QSB.MeteorSync.WorldObjects;
|
||||
using QSB.WorldSync;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
|
||||
namespace QSB.MeteorSync
|
||||
{
|
||||
@ -10,7 +12,7 @@ namespace QSB.MeteorSync
|
||||
|
||||
public static WhiteHoleVolume WhiteHoleVolume;
|
||||
|
||||
public override void BuildWorldObjects(OWScene scene)
|
||||
public override async UniTask BuildWorldObjects(OWScene scene, CancellationToken cancellationToken)
|
||||
{
|
||||
// wait for all late initializers (which includes meteor launchers) to finish
|
||||
StartDelayedReady();
|
||||
|
@ -1,13 +1,15 @@
|
||||
using QSB.Messaging;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using QSB.Messaging;
|
||||
using QSB.MeteorSync.Messages;
|
||||
using QSB.WorldSync;
|
||||
using System.Threading;
|
||||
using UnityEngine;
|
||||
|
||||
namespace QSB.MeteorSync.WorldObjects
|
||||
{
|
||||
public class QSBFragment : WorldObject<FragmentIntegrity>
|
||||
{
|
||||
public override void Init()
|
||||
public override async UniTask Init(CancellationToken cancellationToken)
|
||||
{
|
||||
DetachableFragment = AttachedObject.GetComponent<DetachableFragment>();
|
||||
|
||||
|
@ -1,7 +1,9 @@
|
||||
using QSB.OrbSync.WorldObjects;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using QSB.OrbSync.WorldObjects;
|
||||
using QSB.Utility;
|
||||
using QSB.WorldSync;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading;
|
||||
|
||||
namespace QSB.OrbSync
|
||||
{
|
||||
@ -11,7 +13,7 @@ namespace QSB.OrbSync
|
||||
|
||||
public static readonly List<NomaiInterfaceOrb> Orbs = new();
|
||||
|
||||
public override void BuildWorldObjects(OWScene scene)
|
||||
public override async UniTask BuildWorldObjects(OWScene scene, CancellationToken cancellationToken)
|
||||
{
|
||||
Orbs.Clear();
|
||||
Orbs.AddRange(QSBWorldSync.GetUnityObjects<NomaiInterfaceOrb>().SortDeterministic());
|
||||
|
@ -1,9 +1,11 @@
|
||||
using Mirror;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using Mirror;
|
||||
using QSB.Messaging;
|
||||
using QSB.OrbSync.Messages;
|
||||
using QSB.OrbSync.TransformSync;
|
||||
using QSB.Utility;
|
||||
using QSB.WorldSync;
|
||||
using System.Threading;
|
||||
using UnityEngine;
|
||||
|
||||
namespace QSB.OrbSync.WorldObjects
|
||||
@ -14,7 +16,7 @@ namespace QSB.OrbSync.WorldObjects
|
||||
|
||||
public NomaiOrbTransformSync TransformSync;
|
||||
|
||||
public override void Init()
|
||||
public override async UniTask Init(CancellationToken cancellationToken)
|
||||
{
|
||||
if (QSBCore.IsHost)
|
||||
{
|
||||
|
@ -1,4 +1,6 @@
|
||||
using QSB.WorldSync;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using QSB.WorldSync;
|
||||
using System.Threading;
|
||||
|
||||
namespace QSB.PoolSync
|
||||
{
|
||||
@ -6,7 +8,7 @@ namespace QSB.PoolSync
|
||||
{
|
||||
public override WorldObjectType WorldObjectType => WorldObjectType.SolarSystem;
|
||||
|
||||
public override void BuildWorldObjects(OWScene scene)
|
||||
public override async UniTask BuildWorldObjects(OWScene scene, CancellationToken cancellationToken)
|
||||
{
|
||||
foreach (var streaming in QSBWorldSync.GetUnityObjects<NomaiRemoteCameraStreaming>())
|
||||
{
|
||||
|
@ -1,4 +1,5 @@
|
||||
using OWML.Common;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using OWML.Common;
|
||||
using QSB.Messaging;
|
||||
using QSB.Player;
|
||||
using QSB.QuantumSync.Messages;
|
||||
@ -8,6 +9,7 @@ using QSB.WorldSync;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using UnityEngine;
|
||||
|
||||
namespace QSB.QuantumSync
|
||||
@ -20,7 +22,7 @@ namespace QSB.QuantumSync
|
||||
|
||||
public void Awake() => QSBPlayerManager.OnRemovePlayer += PlayerLeave;
|
||||
|
||||
public override void BuildWorldObjects(OWScene scene)
|
||||
public override async UniTask BuildWorldObjects(OWScene scene, CancellationToken cancellationToken)
|
||||
{
|
||||
DebugLog.DebugWrite("Building quantum objects...", MessageType.Info);
|
||||
QSBWorldSync.Init<QSBQuantumState, QuantumState>();
|
||||
|
@ -1,8 +1,10 @@
|
||||
using QSB.Utility;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using QSB.Utility;
|
||||
using QSB.WorldSync;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
|
||||
namespace QSB.QuantumSync.WorldObjects
|
||||
{
|
||||
@ -11,9 +13,9 @@ namespace QSB.QuantumSync.WorldObjects
|
||||
public List<QSBQuantumState> QuantumStates { get; private set; }
|
||||
public int CurrentState => AttachedObject._stateIndex;
|
||||
|
||||
public override void Init()
|
||||
public override async UniTask Init(CancellationToken cancellationToken)
|
||||
{
|
||||
base.Init();
|
||||
base.Init(cancellationToken);
|
||||
|
||||
StartDelayedReady();
|
||||
QSBCore.UnityEvents.RunWhen(() => QSBWorldSync.AllObjectsAdded, () =>
|
||||
|
@ -1,4 +1,5 @@
|
||||
using OWML.Common;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using OWML.Common;
|
||||
using QSB.Messaging;
|
||||
using QSB.Player;
|
||||
using QSB.QuantumSync.Messages;
|
||||
@ -6,6 +7,7 @@ using QSB.Utility;
|
||||
using QSB.WorldSync;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using UnityEngine;
|
||||
|
||||
namespace QSB.QuantumSync.WorldObjects
|
||||
@ -35,7 +37,7 @@ namespace QSB.QuantumSync.WorldObjects
|
||||
}
|
||||
}
|
||||
|
||||
public override void Init()
|
||||
public override async UniTask Init(CancellationToken cancellationToken)
|
||||
{
|
||||
StartDelayedReady();
|
||||
QSBCore.UnityEvents.FireInNUpdates(LateInit, 5);
|
||||
|
@ -1,17 +1,19 @@
|
||||
using OWML.Common;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using OWML.Common;
|
||||
using QSB.Player;
|
||||
using QSB.Utility;
|
||||
using QSB.WorldSync;
|
||||
using System;
|
||||
using System.Threading;
|
||||
using UnityEngine;
|
||||
|
||||
namespace QSB.QuantumSync.WorldObjects
|
||||
{
|
||||
internal class QSBSocketedQuantumObject : QSBQuantumObject<SocketedQuantumObject>
|
||||
{
|
||||
public override void Init()
|
||||
public override async UniTask Init(CancellationToken cancellationToken)
|
||||
{
|
||||
base.Init();
|
||||
base.Init(cancellationToken);
|
||||
AttachedObject._randomYRotation = false;
|
||||
}
|
||||
|
||||
|
@ -1,10 +1,12 @@
|
||||
using OWML.Common;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using OWML.Common;
|
||||
using QSB.SectorSync.WorldObjects;
|
||||
using QSB.Syncs.Sectored;
|
||||
using QSB.Utility;
|
||||
using QSB.WorldSync;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using UnityEngine;
|
||||
|
||||
namespace QSB.SectorSync
|
||||
@ -68,7 +70,7 @@ namespace QSB.SectorSync
|
||||
DebugLog.DebugWrite("Sector Manager ready.", MessageType.Success);
|
||||
}
|
||||
|
||||
public override void BuildWorldObjects(OWScene scene)
|
||||
public override async UniTask BuildWorldObjects(OWScene scene, CancellationToken cancellationToken)
|
||||
{
|
||||
DebugLog.DebugWrite("Building sectors...", MessageType.Info);
|
||||
if (QSBSceneManager.CurrentScene == OWScene.SolarSystem)
|
||||
|
@ -1,8 +1,10 @@
|
||||
using OWML.Common;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using OWML.Common;
|
||||
using QSB.Utility;
|
||||
using QSB.WorldSync;
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using UnityEngine;
|
||||
|
||||
namespace QSB.SectorSync.WorldObjects
|
||||
@ -27,7 +29,7 @@ namespace QSB.SectorSync.WorldObjects
|
||||
public bool IsFakeSector => AttachedObject is FakeSector;
|
||||
public FakeSector FakeSector => (FakeSector)AttachedObject;
|
||||
|
||||
public override void Init()
|
||||
public override async UniTask Init(CancellationToken cancellationToken)
|
||||
{
|
||||
if (IsFakeSector)
|
||||
{
|
||||
|
@ -1,4 +1,5 @@
|
||||
using Mirror;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using Mirror;
|
||||
using OWML.Common;
|
||||
using QSB.Player;
|
||||
using QSB.ShipSync.TransformSync;
|
||||
@ -7,6 +8,7 @@ using QSB.Utility;
|
||||
using QSB.WorldSync;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using UnityEngine;
|
||||
|
||||
namespace QSB.ShipSync
|
||||
@ -43,7 +45,7 @@ namespace QSB.ShipSync
|
||||
public void Start()
|
||||
=> Instance = this;
|
||||
|
||||
public override void BuildWorldObjects(OWScene scene)
|
||||
public override async UniTask BuildWorldObjects(OWScene scene, CancellationToken cancellationToken)
|
||||
{
|
||||
var shipTransform = GameObject.Find("Ship_Body");
|
||||
if (shipTransform == null)
|
||||
|
@ -1,6 +1,8 @@
|
||||
using QSB.Tools.ProbeLauncherTool.WorldObjects;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using QSB.Tools.ProbeLauncherTool.WorldObjects;
|
||||
using QSB.WorldSync;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
|
||||
namespace QSB.Tools.ProbeLauncherTool
|
||||
{
|
||||
@ -8,7 +10,7 @@ namespace QSB.Tools.ProbeLauncherTool
|
||||
{
|
||||
public override WorldObjectType WorldObjectType => WorldObjectType.Both;
|
||||
|
||||
public override void BuildWorldObjects(OWScene scene)
|
||||
public override async UniTask BuildWorldObjects(OWScene scene, CancellationToken cancellationToken)
|
||||
{
|
||||
QSBWorldSync.Init<QSBProbeLauncher, ProbeLauncher>(typeof(PlayerProbeLauncher));
|
||||
if (scene == OWScene.SolarSystem)
|
||||
|
@ -1,12 +1,14 @@
|
||||
using QSB.Messaging;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using QSB.Messaging;
|
||||
using QSB.Tools.ProbeLauncherTool.Messages;
|
||||
using QSB.WorldSync;
|
||||
using System.Threading;
|
||||
|
||||
namespace QSB.Tools.ProbeLauncherTool.WorldObjects
|
||||
{
|
||||
internal class QSBProbeLauncher : WorldObject<ProbeLauncher>
|
||||
{
|
||||
public override void Init() =>
|
||||
public override async UniTask Init(CancellationToken cancellationToken) =>
|
||||
AttachedObject.OnLaunchProbe += OnLaunchProbe;
|
||||
|
||||
public override void OnRemoval() =>
|
||||
|
@ -1,5 +1,7 @@
|
||||
using QSB.Tools.TranslatorTool.TranslationSync.WorldObjects;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using QSB.Tools.TranslatorTool.TranslationSync.WorldObjects;
|
||||
using QSB.WorldSync;
|
||||
using System.Threading;
|
||||
|
||||
namespace QSB.Tools.TranslatorTool.TranslationSync
|
||||
{
|
||||
@ -7,7 +9,7 @@ namespace QSB.Tools.TranslatorTool.TranslationSync
|
||||
{
|
||||
public override WorldObjectType WorldObjectType => WorldObjectType.Both;
|
||||
|
||||
public override void BuildWorldObjects(OWScene scene)
|
||||
public override async UniTask BuildWorldObjects(OWScene scene, CancellationToken cancellationToken)
|
||||
{
|
||||
// wait for all late initializers (which includes nomai text) to finish
|
||||
StartDelayedReady();
|
||||
|
@ -1,8 +1,10 @@
|
||||
using Mirror;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using Mirror;
|
||||
using QSB.TornadoSync.TransformSync;
|
||||
using QSB.TornadoSync.WorldObjects;
|
||||
using QSB.Utility;
|
||||
using QSB.WorldSync;
|
||||
using System.Threading;
|
||||
|
||||
namespace QSB.TornadoSync
|
||||
{
|
||||
@ -10,7 +12,7 @@ namespace QSB.TornadoSync
|
||||
{
|
||||
public override WorldObjectType WorldObjectType => WorldObjectType.SolarSystem;
|
||||
|
||||
public override void BuildWorldObjects(OWScene scene)
|
||||
public override async UniTask BuildWorldObjects(OWScene scene, CancellationToken cancellationToken)
|
||||
{
|
||||
QSBWorldSync.Init<QSBTornado, TornadoController>();
|
||||
|
||||
|
@ -1,5 +1,7 @@
|
||||
using QSB.TriggerSync.WorldObjects;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using QSB.TriggerSync.WorldObjects;
|
||||
using QSB.WorldSync;
|
||||
using System.Threading;
|
||||
|
||||
namespace QSB.TriggerSync
|
||||
{
|
||||
@ -7,7 +9,7 @@ namespace QSB.TriggerSync
|
||||
{
|
||||
public override WorldObjectType WorldObjectType => WorldObjectType.Both;
|
||||
|
||||
public override void BuildWorldObjects(OWScene scene)
|
||||
public override async UniTask BuildWorldObjects(OWScene scene, CancellationToken cancellationToken)
|
||||
{
|
||||
QSBWorldSync.Init<QSBCharacterTrigger, CharacterAnimController>(x => x.playerTrackingZone);
|
||||
QSBWorldSync.Init<QSBSolanumTrigger, NomaiConversationManager>(x => x._watchPlayerVolume);
|
||||
|
@ -1,10 +1,13 @@
|
||||
namespace QSB.TriggerSync.WorldObjects
|
||||
using Cysharp.Threading.Tasks;
|
||||
using System.Threading;
|
||||
|
||||
namespace QSB.TriggerSync.WorldObjects
|
||||
{
|
||||
public class QSBCharacterTrigger : QSBTrigger<CharacterAnimController>
|
||||
{
|
||||
public override void Init()
|
||||
public override async UniTask Init(CancellationToken cancellationToken)
|
||||
{
|
||||
base.Init();
|
||||
await base.Init(cancellationToken);
|
||||
AttachedObject.OnEntry -= TriggerOwner.OnZoneEntry;
|
||||
AttachedObject.OnExit -= TriggerOwner.OnZoneExit;
|
||||
}
|
||||
|
@ -1,4 +1,6 @@
|
||||
using QSB.Player;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using QSB.Player;
|
||||
using System.Threading;
|
||||
using UnityEngine;
|
||||
|
||||
namespace QSB.TriggerSync.WorldObjects
|
||||
@ -7,9 +9,9 @@ namespace QSB.TriggerSync.WorldObjects
|
||||
{
|
||||
protected override string CompareTag => "PlayerCameraDetector";
|
||||
|
||||
public override void Init()
|
||||
public override async UniTask Init(CancellationToken cancellationToken)
|
||||
{
|
||||
base.Init();
|
||||
base.Init(cancellationToken);
|
||||
AttachedObject.OnEntry -= TriggerOwner.OnEnterFogSphere;
|
||||
AttachedObject.OnExit -= OnExitEvent;
|
||||
}
|
||||
|
@ -1,12 +1,14 @@
|
||||
using QSB.Player;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using QSB.Player;
|
||||
using System.Threading;
|
||||
|
||||
namespace QSB.TriggerSync.WorldObjects
|
||||
{
|
||||
public class QSBMaskZoneTrigger : QSBTrigger<MaskZoneController>
|
||||
{
|
||||
public override void Init()
|
||||
public override async UniTask Init(CancellationToken cancellationToken)
|
||||
{
|
||||
base.Init();
|
||||
base.Init(cancellationToken);
|
||||
AttachedObject.OnEntry -= TriggerOwner.OnEnterMaskZone;
|
||||
AttachedObject.OnExit -= TriggerOwner.OnExitMaskZone;
|
||||
}
|
||||
|
@ -1,10 +1,13 @@
|
||||
namespace QSB.TriggerSync.WorldObjects
|
||||
using Cysharp.Threading.Tasks;
|
||||
using System.Threading;
|
||||
|
||||
namespace QSB.TriggerSync.WorldObjects
|
||||
{
|
||||
public class QSBSolanumTrigger : QSBTrigger<NomaiConversationManager>
|
||||
{
|
||||
public override void Init()
|
||||
public override async UniTask Init(CancellationToken cancellationToken)
|
||||
{
|
||||
base.Init();
|
||||
base.Init(cancellationToken);
|
||||
AttachedObject.OnEntry -= TriggerOwner.OnEnterWatchVolume;
|
||||
AttachedObject.OnExit -= TriggerOwner.OnExitWatchVolume;
|
||||
}
|
||||
|
@ -1,9 +1,11 @@
|
||||
using QSB.Messaging;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using QSB.Messaging;
|
||||
using QSB.Player;
|
||||
using QSB.TriggerSync.Messages;
|
||||
using QSB.WorldSync;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using UnityEngine;
|
||||
|
||||
namespace QSB.TriggerSync.WorldObjects
|
||||
@ -25,7 +27,7 @@ namespace QSB.TriggerSync.WorldObjects
|
||||
|
||||
protected virtual string CompareTag => "PlayerDetector";
|
||||
|
||||
public override void Init()
|
||||
public override async UniTask Init(CancellationToken cancellationToken)
|
||||
{
|
||||
AttachedObject.OnEntry += OnEnterEvent;
|
||||
AttachedObject.OnExit += OnExitEvent;
|
||||
|
@ -1,13 +1,15 @@
|
||||
using QSB.Player;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using QSB.Player;
|
||||
using System.Threading;
|
||||
using UnityEngine;
|
||||
|
||||
namespace QSB.TriggerSync.WorldObjects
|
||||
{
|
||||
public class QSBVesselCageTrigger : QSBTrigger<VesselWarpController>
|
||||
{
|
||||
public override void Init()
|
||||
public override async UniTask Init(CancellationToken cancellationToken)
|
||||
{
|
||||
base.Init();
|
||||
base.Init(cancellationToken);
|
||||
AttachedObject.OnExit -= TriggerOwner.OnExitCageTrigger;
|
||||
}
|
||||
|
||||
|
@ -1,4 +1,5 @@
|
||||
using Mirror;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using Mirror;
|
||||
using OWML.Common;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
@ -125,6 +126,18 @@ namespace QSB.Utility
|
||||
}
|
||||
}
|
||||
|
||||
public static async UniTask Try(this object self, string description, Func<UniTask> func)
|
||||
{
|
||||
try
|
||||
{
|
||||
await func();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
DebugLog.ToConsole($"{self} - error {description} : {e}", MessageType.Error);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
@ -1,4 +1,5 @@
|
||||
using OWML.Common;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using OWML.Common;
|
||||
using QSB.ConversationSync.Patches;
|
||||
using QSB.LogSync;
|
||||
using QSB.Messaging;
|
||||
@ -8,6 +9,7 @@ using QSB.Utility;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using UnityEngine;
|
||||
|
||||
namespace QSB.WorldSync
|
||||
@ -36,11 +38,16 @@ namespace QSB.WorldSync
|
||||
|
||||
GameInit();
|
||||
|
||||
DoBuild(scene);
|
||||
DoBuild(scene).Forget();
|
||||
}
|
||||
|
||||
private static void DoBuild(OWScene scene)
|
||||
private static CancellationTokenSource _cts;
|
||||
private static readonly List<UniTask> _managerTasks = new();
|
||||
private static readonly List<UniTask> _objectTasks = new();
|
||||
|
||||
private static async UniTaskVoid DoBuild(OWScene scene)
|
||||
{
|
||||
_cts = new CancellationTokenSource();
|
||||
foreach (var manager in Managers)
|
||||
{
|
||||
switch (manager.WorldObjectType)
|
||||
@ -51,39 +58,40 @@ namespace QSB.WorldSync
|
||||
continue;
|
||||
}
|
||||
|
||||
DebugLog.DebugWrite($"Building {manager}", MessageType.Info);
|
||||
manager.Try("building world objects", () => manager.BuildWorldObjects(scene));
|
||||
var task = UniTask.Create(async () =>
|
||||
{
|
||||
await manager.BuildWorldObjects(scene, _cts.Token);
|
||||
DebugLog.DebugWrite($"Built {manager}", MessageType.Info);
|
||||
});
|
||||
_managerTasks.Add(task);
|
||||
}
|
||||
|
||||
QSBCore.UnityEvents.RunWhen(() => _numManagersReadying == 0, () =>
|
||||
await _managerTasks;
|
||||
AllObjectsAdded = true;
|
||||
DebugLog.DebugWrite("World Objects added.", MessageType.Success);
|
||||
|
||||
await _objectTasks;
|
||||
AllObjectsReady = true;
|
||||
DebugLog.DebugWrite("World Objects ready.", MessageType.Success);
|
||||
|
||||
DeterministicManager.WorldObjectsReady();
|
||||
|
||||
if (!QSBCore.IsHost)
|
||||
{
|
||||
AllObjectsAdded = true;
|
||||
DebugLog.DebugWrite("World Objects added.", MessageType.Success);
|
||||
QSBCore.UnityEvents.RunWhen(() => _numObjectsReadying == 0, () =>
|
||||
{
|
||||
AllObjectsReady = true;
|
||||
DebugLog.DebugWrite("World Objects ready.", MessageType.Success);
|
||||
DeterministicManager.WorldObjectsReady();
|
||||
|
||||
if (!QSBCore.IsHost)
|
||||
{
|
||||
new RequestInitialStatesMessage().Send();
|
||||
}
|
||||
});
|
||||
});
|
||||
new RequestInitialStatesMessage().Send();
|
||||
}
|
||||
}
|
||||
|
||||
internal static uint _numManagersReadying;
|
||||
internal static uint _numObjectsReadying;
|
||||
|
||||
public static void RemoveWorldObjects()
|
||||
{
|
||||
GameReset();
|
||||
|
||||
_cts?.Cancel();
|
||||
_cts?.Dispose();
|
||||
_managerTasks.Clear();
|
||||
_objectTasks.Clear();
|
||||
AllObjectsAdded = false;
|
||||
AllObjectsReady = false;
|
||||
_numManagersReadying = 0;
|
||||
_numObjectsReadying = 0;
|
||||
|
||||
foreach (var item in WorldObjects)
|
||||
{
|
||||
@ -232,7 +240,8 @@ namespace QSB.WorldSync
|
||||
ObjectId = WorldObjects.Count
|
||||
};
|
||||
|
||||
obj.Init();
|
||||
var task = obj.Try("initing", async () => await obj.Init(_cts.Token));
|
||||
_objectTasks.Add(task);
|
||||
WorldObjects.Add(obj);
|
||||
UnityObjectsToWorldObjects.Add(item, obj);
|
||||
}
|
||||
@ -258,7 +267,8 @@ namespace QSB.WorldSync
|
||||
TriggerOwner = owner
|
||||
};
|
||||
|
||||
obj.Init();
|
||||
var task = obj.Try("initing", async () => await obj.Init(_cts.Token));
|
||||
_objectTasks.Add(task);
|
||||
WorldObjects.Add(obj);
|
||||
UnityObjectsToWorldObjects.Add(item, obj);
|
||||
}
|
||||
|
@ -1,4 +1,6 @@
|
||||
using UnityEngine;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using System.Threading;
|
||||
using UnityEngine;
|
||||
|
||||
namespace QSB.WorldSync
|
||||
{
|
||||
@ -11,18 +13,12 @@ namespace QSB.WorldSync
|
||||
public string Name => AttachedObject ? AttachedObject.name : "<NullObject!>";
|
||||
public override string ToString() => $"{ObjectId}:{GetType().Name} ({Name})";
|
||||
|
||||
public virtual void Init() { }
|
||||
public virtual async UniTask Init(CancellationToken cancellationToken) { }
|
||||
public virtual void OnRemoval() { }
|
||||
public virtual bool ShouldDisplayDebug() => QSBWorldSync.AllObjectsReady && AttachedObject && AttachedObject.gameObject.activeInHierarchy;
|
||||
public virtual string ReturnLabel() => ToString();
|
||||
public virtual void DisplayLines() { }
|
||||
|
||||
public abstract void SendInitialState(uint to);
|
||||
|
||||
/// indicates that this won't become ready immediately
|
||||
protected void StartDelayedReady() => QSBWorldSync._numObjectsReadying++;
|
||||
|
||||
/// indicates that this is now ready
|
||||
protected void FinishDelayedReady() => QSBWorldSync._numObjectsReadying--;
|
||||
}
|
||||
}
|
||||
|
@ -1,4 +1,6 @@
|
||||
using UnityEngine;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using System.Threading;
|
||||
using UnityEngine;
|
||||
|
||||
namespace QSB.WorldSync
|
||||
{
|
||||
@ -16,16 +18,10 @@ namespace QSB.WorldSync
|
||||
/// </summary>
|
||||
public abstract WorldObjectType WorldObjectType { get; }
|
||||
|
||||
public abstract void BuildWorldObjects(OWScene scene);
|
||||
public abstract UniTask BuildWorldObjects(OWScene scene, CancellationToken cancellationToken);
|
||||
|
||||
public virtual void UnbuildWorldObjects() { }
|
||||
|
||||
/// indicates that this won't become ready immediately
|
||||
protected void StartDelayedReady() => QSBWorldSync._numManagersReadying++;
|
||||
|
||||
/// indicates that this is now ready
|
||||
protected void FinishDelayedReady() => QSBWorldSync._numManagersReadying--;
|
||||
|
||||
public override string ToString() => GetType().Name;
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,7 @@
|
||||
using QSB.WorldSync;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using QSB.WorldSync;
|
||||
using QSB.ZeroGCaveSync.WorldObjects;
|
||||
using System.Threading;
|
||||
|
||||
namespace QSB.ZeroGCaveSync
|
||||
{
|
||||
@ -7,7 +9,7 @@ namespace QSB.ZeroGCaveSync
|
||||
{
|
||||
public override WorldObjectType WorldObjectType => WorldObjectType.SolarSystem;
|
||||
|
||||
public override void BuildWorldObjects(OWScene scene)
|
||||
public override async UniTask BuildWorldObjects(OWScene scene, CancellationToken cancellationToken)
|
||||
=> QSBWorldSync.Init<QSBSatelliteNode, SatelliteNode>();
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user