move a bunch of WorldObjectManager stuff to QSBWorldSync

This commit is contained in:
JohnCorby 2022-01-18 00:27:32 -08:00
parent 347cde2978
commit 2743c8ffa9
80 changed files with 208 additions and 229 deletions

View File

@ -10,7 +10,7 @@ namespace QSB.Anglerfish
public static readonly List<AnglerfishController> Anglers = new(); public static readonly List<AnglerfishController> Anglers = new();
protected override void RebuildWorldObjects(OWScene scene) public override void RebuildWorldObjects(OWScene scene)
{ {
Anglers.Clear(); Anglers.Clear();
Anglers.AddRange(QSBWorldSync.GetUnityObjects<AnglerfishController>()); Anglers.AddRange(QSBWorldSync.GetUnityObjects<AnglerfishController>());

View File

@ -49,7 +49,7 @@ namespace QSB.Anglerfish.Patches
[HarmonyPatch(typeof(AnglerfishController), nameof(AnglerfishController.UpdateState))] [HarmonyPatch(typeof(AnglerfishController), nameof(AnglerfishController.UpdateState))]
public static bool UpdateState(AnglerfishController __instance) public static bool UpdateState(AnglerfishController __instance)
{ {
if (!WorldObjectManager.AllObjectsReady) if (!QSBWorldSync.AllObjectsReady)
{ {
return true; return true;
} }
@ -155,7 +155,7 @@ namespace QSB.Anglerfish.Patches
[HarmonyPatch(typeof(AnglerfishController), nameof(AnglerfishController.UpdateMovement))] [HarmonyPatch(typeof(AnglerfishController), nameof(AnglerfishController.UpdateMovement))]
public static bool UpdateMovement(AnglerfishController __instance) public static bool UpdateMovement(AnglerfishController __instance)
{ {
if (!WorldObjectManager.AllObjectsReady) if (!QSBWorldSync.AllObjectsReady)
{ {
return true; return true;
} }

View File

@ -9,7 +9,7 @@ namespace QSB.Anglerfish.TransformSync
{ {
public class AnglerTransformSync : UnsectoredRigidbodySync public class AnglerTransformSync : UnsectoredRigidbodySync
{ {
protected override bool IsReady => WorldObjectManager.AllObjectsAdded; protected override bool IsReady => QSBWorldSync.AllObjectsAdded;
protected override bool UseInterpolation => false; protected override bool UseInterpolation => false;
protected override bool OnlyApplyOnDeserialize => true; protected override bool OnlyApplyOnDeserialize => true;

View File

@ -8,7 +8,7 @@ namespace QSB.Animation.NPC
// im assuming this is used in the eye as well // im assuming this is used in the eye as well
public override WorldObjectType WorldObjectType => WorldObjectType.Both; public override WorldObjectType WorldObjectType => WorldObjectType.Both;
protected override void RebuildWorldObjects(OWScene scene) public override void RebuildWorldObjects(OWScene scene)
{ {
QSBWorldSync.Init<QSBCharacterAnimController, CharacterAnimController>(); QSBWorldSync.Init<QSBCharacterAnimController, CharacterAnimController>();
QSBWorldSync.Init<QSBTravelerController, TravelerController>(); QSBWorldSync.Init<QSBTravelerController, TravelerController>();

View File

@ -24,7 +24,7 @@ namespace QSB.Animation.NPC.Patches
public static bool AnimatorIKReplacement( public static bool AnimatorIKReplacement(
CharacterAnimController __instance) CharacterAnimController __instance)
{ {
if (!WorldObjectManager.AllObjectsReady || ConversationManager.Instance == null) if (!QSBWorldSync.AllObjectsReady || ConversationManager.Instance == null)
{ {
return true; return true;
} }
@ -151,7 +151,7 @@ namespace QSB.Animation.NPC.Patches
[HarmonyPatch(typeof(KidRockController), nameof(KidRockController.Update))] [HarmonyPatch(typeof(KidRockController), nameof(KidRockController.Update))]
public static bool UpdateReplacement(KidRockController __instance) public static bool UpdateReplacement(KidRockController __instance)
{ {
if (!WorldObjectManager.AllObjectsReady) if (!QSBWorldSync.AllObjectsReady)
{ {
return true; return true;
} }

View File

@ -30,7 +30,7 @@ namespace QSB.Animation.Player.Messages
Name = reader.ReadString(); Name = reader.ReadString();
} }
public override bool ShouldReceive => WorldObjectManager.AllObjectsReady; public override bool ShouldReceive => QSBWorldSync.AllObjectsReady;
public override void OnReceiveRemote() public override void OnReceiveRemote()
{ {

View File

@ -27,7 +27,7 @@ namespace QSB.Animation.Player.Messages
PlayerId = reader.Read<uint>(); PlayerId = reader.Read<uint>();
} }
public override bool ShouldReceive => WorldObjectManager.AllObjectsReady; public override bool ShouldReceive => QSBWorldSync.AllObjectsReady;
public override void OnReceiveRemote() public override void OnReceiveRemote()
{ {

View File

@ -86,7 +86,7 @@ namespace QSB.Animation.Player.Thrusters
private void OnRenderObject() private void OnRenderObject()
{ {
if (!QSBCore.ShowLinesInDebug || !WorldObjectManager.AllObjectsReady) if (!QSBCore.ShowLinesInDebug || !QSBWorldSync.AllObjectsReady)
{ {
return; return;
} }

View File

@ -30,7 +30,7 @@ namespace QSB.AuthoritySync
NetId = reader.ReadUInt(); NetId = reader.ReadUInt();
} }
public override bool ShouldReceive => WorldObjectManager.AllObjectsReady; public override bool ShouldReceive => QSBWorldSync.AllObjectsReady;
public override void OnReceiveLocal() => OnReceiveRemote(); public override void OnReceiveLocal() => OnReceiveRemote();
public override void OnReceiveRemote() => NetworkServer.spawned[NetId].UpdateAuthQueue(From, Value); public override void OnReceiveRemote() => NetworkServer.spawned[NetId].UpdateAuthQueue(From, Value);
} }

View File

@ -7,7 +7,7 @@ namespace QSB.CampfireSync
{ {
public override WorldObjectType WorldObjectType => WorldObjectType.Both; public override WorldObjectType WorldObjectType => WorldObjectType.Both;
protected override void RebuildWorldObjects(OWScene scene) public override void RebuildWorldObjects(OWScene scene)
=> QSBWorldSync.Init<QSBCampfire, Campfire>(); => QSBWorldSync.Init<QSBCampfire, Campfire>();
} }
} }

View File

@ -37,7 +37,7 @@ namespace QSB.ConversationSync
_boxPrefab.GetComponent<Text>().color = Color.white; _boxPrefab.GetComponent<Text>().color = Color.white;
} }
protected override void RebuildWorldObjects(OWScene scene) public override void RebuildWorldObjects(OWScene scene)
=> QSBWorldSync.Init<QSBRemoteDialogueTrigger, RemoteDialogueTrigger>(); => QSBWorldSync.Init<QSBRemoteDialogueTrigger, RemoteDialogueTrigger>();
public uint GetPlayerTalkingToTree(CharacterDialogueTree tree) public uint GetPlayerTalkingToTree(CharacterDialogueTree tree)

View File

@ -33,7 +33,7 @@ namespace QSB.ConversationSync.Messages
Message = reader.ReadString(); Message = reader.ReadString();
} }
public override bool ShouldReceive => WorldObjectManager.AllObjectsReady; public override bool ShouldReceive => QSBWorldSync.AllObjectsReady;
public override void OnReceiveRemote() public override void OnReceiveRemote()
{ {

View File

@ -35,7 +35,7 @@ namespace QSB.ConversationSync.Messages
Value = reader.Read<bool>(); Value = reader.Read<bool>();
} }
public override bool ShouldReceive => WorldObjectManager.AllObjectsReady; public override bool ShouldReceive => QSBWorldSync.AllObjectsReady;
public override void OnReceiveRemote() public override void OnReceiveRemote()
{ {

View File

@ -8,6 +8,6 @@ namespace QSB.EchoesOfTheEye.AirlockSync
// is this used in the prisoner sequence in the eye? // is this used in the prisoner sequence in the eye?
public override WorldObjectType WorldObjectType => WorldObjectType.SolarSystem; public override WorldObjectType WorldObjectType => WorldObjectType.SolarSystem;
protected override void RebuildWorldObjects(OWScene scene) => QSBWorldSync.Init<QSBGhostAirlock, GhostAirlock>(); public override void RebuildWorldObjects(OWScene scene) => QSBWorldSync.Init<QSBGhostAirlock, GhostAirlock>();
} }
} }

View File

@ -8,6 +8,6 @@ namespace QSB.EchoesOfTheEye.LightSensorSync
// see AirlockManager question // see AirlockManager question
public override WorldObjectType WorldObjectType => WorldObjectType.SolarSystem; public override WorldObjectType WorldObjectType => WorldObjectType.SolarSystem;
protected override void RebuildWorldObjects(OWScene scene) => QSBWorldSync.Init<QSBSingleLightSensor, SingleLightSensor>(); public override void RebuildWorldObjects(OWScene scene) => QSBWorldSync.Init<QSBSingleLightSensor, SingleLightSensor>();
} }
} }

View File

@ -7,7 +7,7 @@ namespace QSB.ElevatorSync
{ {
public override WorldObjectType WorldObjectType => WorldObjectType.SolarSystem; public override WorldObjectType WorldObjectType => WorldObjectType.SolarSystem;
protected override void RebuildWorldObjects(OWScene scene) public override void RebuildWorldObjects(OWScene scene)
=> QSBWorldSync.Init<QSBElevator, Elevator>(); => QSBWorldSync.Init<QSBElevator, Elevator>();
} }
} }

View File

@ -19,7 +19,7 @@ namespace QSB.EyeOfTheUniverse.EyeStateSync.Messages
private EyeStateMessage(EyeState state) => Value = state; private EyeStateMessage(EyeState state) => Value = state;
public override bool ShouldReceive => WorldObjectManager.AllObjectsReady; public override bool ShouldReceive => QSBWorldSync.AllObjectsReady;
public override void OnReceiveLocal() public override void OnReceiveLocal()
{ {

View File

@ -50,7 +50,7 @@ namespace QSB.EyeOfTheUniverse.EyeStateSync.Messages
_onDuration = reader.Read<float>(); _onDuration = reader.Read<float>();
} }
public override bool ShouldReceive => WorldObjectManager.AllObjectsReady; public override bool ShouldReceive => QSBWorldSync.AllObjectsReady;
public override void OnReceiveRemote() public override void OnReceiveRemote()
{ {

View File

@ -8,7 +8,7 @@ namespace QSB.EyeOfTheUniverse.ForestOfGalaxies.Messages
internal class EyeCloneSeenMessage : QSBMessage internal class EyeCloneSeenMessage : QSBMessage
{ {
public override bool ShouldReceive => WorldObjectManager.AllObjectsReady; public override bool ShouldReceive => QSBWorldSync.AllObjectsReady;
public override void OnReceiveRemote() public override void OnReceiveRemote()
{ {

View File

@ -34,7 +34,7 @@ namespace QSB.EyeOfTheUniverse.ForestOfGalaxies.Messages
} }
} }
public override bool ShouldReceive => WorldObjectManager.AllObjectsReady; public override bool ShouldReceive => QSBWorldSync.AllObjectsReady;
public override void OnReceiveRemote() public override void OnReceiveRemote()
{ {

View File

@ -6,7 +6,7 @@ namespace QSB.EyeOfTheUniverse.GalaxyMap.Messages
{ {
internal class ZoomOutMessage : QSBMessage internal class ZoomOutMessage : QSBMessage
{ {
public override bool ShouldReceive => WorldObjectManager.AllObjectsReady; public override bool ShouldReceive => QSBWorldSync.AllObjectsReady;
public override void OnReceiveRemote() public override void OnReceiveRemote()
{ {

View File

@ -7,7 +7,7 @@ namespace QSB.EyeOfTheUniverse.InstrumentSync
{ {
public override WorldObjectType WorldObjectType => WorldObjectType.Eye; public override WorldObjectType WorldObjectType => WorldObjectType.Eye;
protected override void RebuildWorldObjects(OWScene scene) public override void RebuildWorldObjects(OWScene scene)
=> QSBWorldSync.Init<QSBQuantumInstrument, QuantumInstrument>(); => QSBWorldSync.Init<QSBQuantumInstrument, QuantumInstrument>();
} }
} }

View File

@ -7,7 +7,7 @@ namespace QSB.GeyserSync
{ {
public override WorldObjectType WorldObjectType => WorldObjectType.SolarSystem; public override WorldObjectType WorldObjectType => WorldObjectType.SolarSystem;
protected override void RebuildWorldObjects(OWScene scene) public override void RebuildWorldObjects(OWScene scene)
=> QSBWorldSync.Init<QSBGeyser, GeyserController>(); => QSBWorldSync.Init<QSBGeyser, GeyserController>();
} }
} }

View File

@ -10,7 +10,7 @@ namespace QSB.ItemSync
{ {
public override WorldObjectType WorldObjectType => WorldObjectType.Both; public override WorldObjectType WorldObjectType => WorldObjectType.Both;
protected override void RebuildWorldObjects(OWScene scene) public override void RebuildWorldObjects(OWScene scene)
{ {
DebugLog.DebugWrite("Rebuilding OWItems...", MessageType.Info); DebugLog.DebugWrite("Rebuilding OWItems...", MessageType.Info);

View File

@ -34,7 +34,7 @@ namespace QSB.ItemSync.Messages
ItemId = reader.Read<int>(); ItemId = reader.Read<int>();
} }
public override bool ShouldReceive => WorldObjectManager.AllObjectsReady; public override bool ShouldReceive => QSBWorldSync.AllObjectsReady;
public override void OnReceiveRemote() public override void OnReceiveRemote()
{ {

View File

@ -26,7 +26,7 @@ namespace QSB.ItemSync.WorldObjects.Items
} }
StartDelayedReady(); StartDelayedReady();
QSBCore.UnityEvents.RunWhen(() => WorldObjectManager.AllObjectsAdded, () => QSBCore.UnityEvents.RunWhen(() => QSBWorldSync.AllObjectsAdded, () =>
{ {
FinishDelayedReady(); FinishDelayedReady();

View File

@ -10,7 +10,7 @@ namespace QSB.JellyfishSync
public static readonly List<JellyfishController> Jellyfish = new(); public static readonly List<JellyfishController> Jellyfish = new();
protected override void RebuildWorldObjects(OWScene scene) public override void RebuildWorldObjects(OWScene scene)
{ {
Jellyfish.Clear(); Jellyfish.Clear();
Jellyfish.AddRange(QSBWorldSync.GetUnityObjects<JellyfishController>()); Jellyfish.AddRange(QSBWorldSync.GetUnityObjects<JellyfishController>());

View File

@ -15,7 +15,7 @@ namespace QSB.JellyfishSync.Patches
[HarmonyPatch(typeof(JellyfishController), nameof(JellyfishController.FixedUpdate))] [HarmonyPatch(typeof(JellyfishController), nameof(JellyfishController.FixedUpdate))]
public static bool FixedUpdate(JellyfishController __instance) public static bool FixedUpdate(JellyfishController __instance)
{ {
if (!WorldObjectManager.AllObjectsReady) if (!QSBWorldSync.AllObjectsReady)
{ {
return true; return true;
} }

View File

@ -11,7 +11,7 @@ namespace QSB.JellyfishSync.TransformSync
{ {
public class JellyfishTransformSync : UnsectoredRigidbodySync public class JellyfishTransformSync : UnsectoredRigidbodySync
{ {
protected override bool IsReady => WorldObjectManager.AllObjectsAdded; protected override bool IsReady => QSBWorldSync.AllObjectsAdded;
protected override bool UseInterpolation => false; protected override bool UseInterpolation => false;
protected override bool OnlyApplyOnDeserialize => true; protected override bool OnlyApplyOnDeserialize => true;

View File

@ -33,7 +33,7 @@ namespace QSB.LogSync.Messages
ShowNotification = reader.Read<bool>(); ShowNotification = reader.Read<bool>();
} }
public override bool ShouldReceive => WorldObjectManager.AllObjectsReady; public override bool ShouldReceive => QSBWorldSync.AllObjectsReady;
public override void OnReceiveLocal() public override void OnReceiveLocal()
{ {
@ -50,7 +50,7 @@ namespace QSB.LogSync.Messages
QSBWorldSync.AddFactReveal(FactId, SaveGame); QSBWorldSync.AddFactReveal(FactId, SaveGame);
} }
if (!WorldObjectManager.AllObjectsReady) if (!QSBWorldSync.AllObjectsReady)
{ {
return; return;
} }

View File

@ -31,7 +31,7 @@ namespace QSB.Messaging
{ {
get get
{ {
if (!WorldObjectManager.AllObjectsReady) if (!QSBWorldSync.AllObjectsReady)
{ {
return false; return false;
} }

View File

@ -10,7 +10,7 @@ namespace QSB.MeteorSync
public static WhiteHoleVolume WhiteHoleVolume; public static WhiteHoleVolume WhiteHoleVolume;
protected override void RebuildWorldObjects(OWScene scene) public override void RebuildWorldObjects(OWScene scene)
{ {
// wait for all late initializers (which includes meteor launchers) to finish // wait for all late initializers (which includes meteor launchers) to finish
StartDelayedReady(); StartDelayedReady();

View File

@ -21,7 +21,7 @@ namespace QSB.MeteorSync.Patches
[HarmonyPatch(typeof(MeteorLauncher), nameof(MeteorLauncher.FixedUpdate))] [HarmonyPatch(typeof(MeteorLauncher), nameof(MeteorLauncher.FixedUpdate))]
public static bool FixedUpdate(MeteorLauncher __instance) public static bool FixedUpdate(MeteorLauncher __instance)
{ {
if (!WorldObjectManager.AllObjectsReady) if (!QSBWorldSync.AllObjectsReady)
{ {
return true; return true;
} }
@ -319,7 +319,7 @@ namespace QSB.MeteorSync.Patches
return true; return true;
} }
if (!WorldObjectManager.AllObjectsReady) if (!QSBWorldSync.AllObjectsReady)
{ {
return true; return true;
} }

View File

@ -10,7 +10,7 @@ namespace QSB.OrbSync
public static readonly List<NomaiInterfaceOrb> Orbs = new(); public static readonly List<NomaiInterfaceOrb> Orbs = new();
protected override void RebuildWorldObjects(OWScene scene) public override void RebuildWorldObjects(OWScene scene)
{ {
Orbs.Clear(); Orbs.Clear();
Orbs.AddRange(QSBWorldSync.GetUnityObjects<NomaiInterfaceOrb>()); Orbs.AddRange(QSBWorldSync.GetUnityObjects<NomaiInterfaceOrb>());

View File

@ -17,7 +17,7 @@ namespace QSB.OrbSync.Patches
[HarmonyPatch(nameof(NomaiInterfaceOrb.StartDragFromPosition))] [HarmonyPatch(nameof(NomaiInterfaceOrb.StartDragFromPosition))]
public static void StartDragFromPosition(NomaiInterfaceOrb __instance) public static void StartDragFromPosition(NomaiInterfaceOrb __instance)
{ {
if (!WorldObjectManager.AllObjectsReady) if (!QSBWorldSync.AllObjectsReady)
{ {
return; return;
} }
@ -35,7 +35,7 @@ namespace QSB.OrbSync.Patches
[HarmonyPatch(nameof(NomaiInterfaceOrb.CancelDrag))] [HarmonyPatch(nameof(NomaiInterfaceOrb.CancelDrag))]
public static bool CancelDrag(NomaiInterfaceOrb __instance) public static bool CancelDrag(NomaiInterfaceOrb __instance)
{ {
if (!WorldObjectManager.AllObjectsReady) if (!QSBWorldSync.AllObjectsReady)
{ {
return true; return true;
} }
@ -59,7 +59,7 @@ namespace QSB.OrbSync.Patches
[HarmonyPatch(nameof(NomaiInterfaceOrb.CheckSlotCollision))] [HarmonyPatch(nameof(NomaiInterfaceOrb.CheckSlotCollision))]
public static bool CheckSlotCollision(NomaiInterfaceOrb __instance) public static bool CheckSlotCollision(NomaiInterfaceOrb __instance)
{ {
if (!WorldObjectManager.AllObjectsReady) if (!QSBWorldSync.AllObjectsReady)
{ {
return true; return true;
} }

View File

@ -11,7 +11,7 @@ namespace QSB.OrbSync.TransformSync
{ {
public class NomaiOrbTransformSync : UnsectoredTransformSync public class NomaiOrbTransformSync : UnsectoredTransformSync
{ {
protected override bool IsReady => WorldObjectManager.AllObjectsAdded; protected override bool IsReady => QSBWorldSync.AllObjectsAdded;
protected override bool UseInterpolation => true; protected override bool UseInterpolation => true;
protected override float DistanceLeeway => 1f; protected override float DistanceLeeway => 1f;

View File

@ -47,7 +47,7 @@ namespace QSB.Player.Messages
ObjectId = reader.Read<int>(); ObjectId = reader.Read<int>();
} }
public override bool ShouldReceive => WorldObjectManager.AllObjectsReady; public override bool ShouldReceive => QSBWorldSync.AllObjectsReady;
public override void OnReceiveLocal() => OnReceiveRemote(); public override void OnReceiveLocal() => OnReceiveRemote();

View File

@ -5,7 +5,7 @@ namespace QSB.Player.Messages
{ {
internal class LaunchCodesMessage : QSBMessage internal class LaunchCodesMessage : QSBMessage
{ {
public override bool ShouldReceive => WorldObjectManager.AllObjectsReady; public override bool ShouldReceive => QSBWorldSync.AllObjectsReady;
public override void OnReceiveRemote() public override void OnReceiveRemote()
{ {

View File

@ -12,7 +12,7 @@ namespace QSB.Player.Messages
public PlayerEntangledMessage(int objectId) => ObjectId = objectId; public PlayerEntangledMessage(int objectId) => ObjectId = objectId;
public override bool ShouldReceive => WorldObjectManager.AllObjectsReady; public override bool ShouldReceive => QSBWorldSync.AllObjectsReady;
public override void OnReceiveLocal() public override void OnReceiveLocal()
{ {

View File

@ -68,7 +68,7 @@ namespace QSB.Player.Messages
new ServerStateMessage(ServerStateManager.Instance.GetServerState()) { To = From }.Send(); new ServerStateMessage(ServerStateManager.Instance.GetServerState()) { To = From }.Send();
new PlayerInformationMessage { To = From }.Send(); new PlayerInformationMessage { To = From }.Send();
if (WorldObjectManager.AllObjectsReady) if (QSBWorldSync.AllObjectsReady)
{ {
SendWorldObjectInfo(); SendWorldObjectInfo();
} }
@ -79,7 +79,7 @@ namespace QSB.Player.Messages
new PlayerInformationMessage { To = From }.Send(); new PlayerInformationMessage { To = From }.Send();
} }
if (WorldObjectManager.AllObjectsReady) if (QSBWorldSync.AllObjectsReady)
{ {
SendAuthorityObjectInfo(); SendAuthorityObjectInfo();
} }

View File

@ -17,7 +17,7 @@ namespace QSB.Player
return; return;
} }
if (!WorldObjectManager.AllObjectsReady) if (!QSBWorldSync.AllObjectsReady)
{ {
return; return;
} }

View File

@ -6,7 +6,7 @@ namespace QSB.PoolSync
{ {
public override WorldObjectType WorldObjectType => WorldObjectType.SolarSystem; public override WorldObjectType WorldObjectType => WorldObjectType.SolarSystem;
protected override void RebuildWorldObjects(OWScene scene) public override void RebuildWorldObjects(OWScene scene)
{ {
foreach (var streaming in QSBWorldSync.GetUnityObjects<NomaiRemoteCameraStreaming>()) foreach (var streaming in QSBWorldSync.GetUnityObjects<NomaiRemoteCameraStreaming>())
{ {

View File

@ -112,10 +112,7 @@ namespace QSB
gameObject.AddComponent<MaskManager>(); gameObject.AddComponent<MaskManager>();
// WorldObject managers // WorldObject managers
foreach (var type in typeof(WorldObjectManager).GetDerivedTypes()) QSBWorldSync.Init(this);
{
gameObject.AddComponent(type);
}
Helper.HarmonyHelper.EmptyMethod<ModCommandListener>("Update"); Helper.HarmonyHelper.EmptyMethod<ModCommandListener>("Update");

View File

@ -196,8 +196,8 @@ namespace QSB
if (QSBSceneManager.IsInUniverse) if (QSBSceneManager.IsInUniverse)
{ {
WorldObjectManager.Rebuild(QSBSceneManager.CurrentScene); QSBWorldSync.Rebuild(QSBSceneManager.CurrentScene);
QSBWorldSync.Init(); QSBWorldSync.GameInit();
} }
var specificType = QSBCore.IsHost ? QSBPatchTypes.OnServerClientConnect : QSBPatchTypes.OnNonServerClientConnect; var specificType = QSBCore.IsHost ? QSBPatchTypes.OnServerClientConnect : QSBPatchTypes.OnNonServerClientConnect;
@ -327,7 +327,7 @@ namespace QSB
Destroy(streaming); Destroy(streaming);
} }
WorldObjectManager.SetNotReady(); QSBWorldSync.SetNotReady();
} }
} }
} }

View File

@ -29,8 +29,8 @@ namespace QSB
// So objects have time to be deleted, made, whatever // So objects have time to be deleted, made, whatever
QSBCore.UnityEvents.FireOnNextUpdate(() => QSBCore.UnityEvents.FireOnNextUpdate(() =>
{ {
WorldObjectManager.Rebuild(newScene); QSBWorldSync.Rebuild(newScene);
QSBWorldSync.Init(); QSBWorldSync.GameInit();
}); });
} }

View File

@ -35,7 +35,7 @@ namespace QSB.QuantumSync.Messages
OrbitAngle = reader.Read<int>(); OrbitAngle = reader.Read<int>();
} }
public override bool ShouldReceive => WorldObjectManager.AllObjectsReady; public override bool ShouldReceive => QSBWorldSync.AllObjectsReady;
public override void OnReceiveRemote() public override void OnReceiveRemote()
{ {

View File

@ -31,7 +31,7 @@ namespace QSB.QuantumSync.Patches
[HarmonyPatch(typeof(QuantumObject), nameof(QuantumObject.SetIsQuantum))] [HarmonyPatch(typeof(QuantumObject), nameof(QuantumObject.SetIsQuantum))]
public static void QuantumObject_SetIsQuantum(QuantumObject __instance) public static void QuantumObject_SetIsQuantum(QuantumObject __instance)
{ {
if (WorldObjectManager.AllObjectsReady) if (QSBWorldSync.AllObjectsReady)
{ {
__instance.GetWorldObject<IQSBQuantumObject>().SendMessage(new SetIsQuantumMessage(__instance.IsQuantum())); __instance.GetWorldObject<IQSBQuantumObject>().SendMessage(new SetIsQuantumMessage(__instance.IsQuantum()));
} }
@ -44,7 +44,7 @@ namespace QSB.QuantumSync.Patches
ref bool __result, ref bool __result,
bool skipInstantVisibilityCheck) bool skipInstantVisibilityCheck)
{ {
if (WorldObjectManager.AllObjectsReady) if (QSBWorldSync.AllObjectsReady)
{ {
var socketedWorldObject = __instance.GetWorldObject<QSBSocketedQuantumObject>(); var socketedWorldObject = __instance.GetWorldObject<QSBSocketedQuantumObject>();
if (socketedWorldObject.ControllingPlayer != QSBPlayerManager.LocalPlayerId) if (socketedWorldObject.ControllingPlayer != QSBPlayerManager.LocalPlayerId)
@ -149,7 +149,7 @@ namespace QSB.QuantumSync.Patches
[HarmonyPatch(typeof(SocketedQuantumObject), nameof(SocketedQuantumObject.MoveToSocket))] [HarmonyPatch(typeof(SocketedQuantumObject), nameof(SocketedQuantumObject.MoveToSocket))]
public static void SocketedQuantumObject_MoveToSocket(SocketedQuantumObject __instance, QuantumSocket socket) public static void SocketedQuantumObject_MoveToSocket(SocketedQuantumObject __instance, QuantumSocket socket)
{ {
if (!WorldObjectManager.AllObjectsReady) if (!QSBWorldSync.AllObjectsReady)
{ {
return; return;
} }
@ -186,7 +186,7 @@ namespace QSB.QuantumSync.Patches
ref bool __result) ref bool __result)
{ {
QSBQuantumShuffleObject shuffleWorldObject = default; QSBQuantumShuffleObject shuffleWorldObject = default;
if (WorldObjectManager.AllObjectsReady) if (QSBWorldSync.AllObjectsReady)
{ {
shuffleWorldObject = __instance.GetWorldObject<QSBQuantumShuffleObject>(); shuffleWorldObject = __instance.GetWorldObject<QSBQuantumShuffleObject>();
if (shuffleWorldObject.ControllingPlayer != QSBPlayerManager.LocalPlayerId) if (shuffleWorldObject.ControllingPlayer != QSBPlayerManager.LocalPlayerId)
@ -210,7 +210,7 @@ namespace QSB.QuantumSync.Patches
__instance._shuffledObjects[j].localPosition = __instance._localPositions[__instance._indexList[j]]; __instance._shuffledObjects[j].localPosition = __instance._localPositions[__instance._indexList[j]];
} }
if (WorldObjectManager.AllObjectsReady) if (QSBWorldSync.AllObjectsReady)
{ {
shuffleWorldObject.SendMessage(new QuantumShuffleMessage(__instance._indexList.ToArray())); shuffleWorldObject.SendMessage(new QuantumShuffleMessage(__instance._indexList.ToArray()));
__result = true; __result = true;
@ -223,7 +223,7 @@ namespace QSB.QuantumSync.Patches
[HarmonyPatch(typeof(MultiStateQuantumObject), nameof(MultiStateQuantumObject.Start))] [HarmonyPatch(typeof(MultiStateQuantumObject), nameof(MultiStateQuantumObject.Start))]
public static bool MultiStateQuantumObject_Start(MultiStateQuantumObject __instance) public static bool MultiStateQuantumObject_Start(MultiStateQuantumObject __instance)
{ {
if (!WorldObjectManager.AllObjectsReady) if (!QSBWorldSync.AllObjectsReady)
{ {
return true; return true;
} }
@ -259,7 +259,7 @@ namespace QSB.QuantumSync.Patches
[HarmonyPatch(typeof(MultiStateQuantumObject), nameof(MultiStateQuantumObject.ChangeQuantumState))] [HarmonyPatch(typeof(MultiStateQuantumObject), nameof(MultiStateQuantumObject.ChangeQuantumState))]
public static bool MultiStateQuantumObject_ChangeQuantumState(MultiStateQuantumObject __instance) public static bool MultiStateQuantumObject_ChangeQuantumState(MultiStateQuantumObject __instance)
{ {
if (!WorldObjectManager.AllObjectsReady) if (!QSBWorldSync.AllObjectsReady)
{ {
return true; return true;
} }
@ -278,7 +278,7 @@ namespace QSB.QuantumSync.Patches
[HarmonyPatch(typeof(QuantumState), nameof(QuantumState.SetVisible))] [HarmonyPatch(typeof(QuantumState), nameof(QuantumState.SetVisible))]
public static void QuantumState_SetVisible(QuantumState __instance, bool visible) public static void QuantumState_SetVisible(QuantumState __instance, bool visible)
{ {
if (!WorldObjectManager.AllObjectsReady) if (!QSBWorldSync.AllObjectsReady)
{ {
return; return;
} }
@ -434,7 +434,7 @@ namespace QSB.QuantumSync.Patches
[HarmonyPatch(typeof(QuantumSkeletonTower), nameof(QuantumSkeletonTower.ChangeQuantumState))] [HarmonyPatch(typeof(QuantumSkeletonTower), nameof(QuantumSkeletonTower.ChangeQuantumState))]
public static bool QuantumSkeletonTower_ChangeQuantumState(QuantumSkeletonTower __instance, ref bool __result) public static bool QuantumSkeletonTower_ChangeQuantumState(QuantumSkeletonTower __instance, ref bool __result)
{ {
if (!WorldObjectManager.AllObjectsReady) if (!QSBWorldSync.AllObjectsReady)
{ {
return true; return true;
} }

View File

@ -19,7 +19,7 @@ namespace QSB.QuantumSync.Patches
[HarmonyPatch(typeof(EyeProxyQuantumMoon), nameof(EyeProxyQuantumMoon.ChangeQuantumState))] [HarmonyPatch(typeof(EyeProxyQuantumMoon), nameof(EyeProxyQuantumMoon.ChangeQuantumState))]
public static bool EyeProxyQuantumMoon_ChangeQuantumState(EyeProxyQuantumMoon __instance, ref bool __result, bool skipInstantVisibilityCheck) public static bool EyeProxyQuantumMoon_ChangeQuantumState(EyeProxyQuantumMoon __instance, ref bool __result, bool skipInstantVisibilityCheck)
{ {
if (!WorldObjectManager.AllObjectsReady) if (!QSBWorldSync.AllObjectsReady)
{ {
return true; return true;
} }

View File

@ -18,19 +18,9 @@ namespace QSB.QuantumSync
public static QuantumShrine Shrine { get; private set; } public static QuantumShrine Shrine { get; private set; }
public override void Awake() public void Awake() => QSBPlayerManager.OnRemovePlayer += PlayerLeave;
{
base.Awake();
QSBPlayerManager.OnRemovePlayer += PlayerLeave;
}
public override void OnDestroy() public override void RebuildWorldObjects(OWScene scene)
{
base.OnDestroy();
QSBPlayerManager.OnRemovePlayer -= PlayerLeave;
}
protected override void RebuildWorldObjects(OWScene scene)
{ {
DebugLog.DebugWrite("Rebuilding quantum objects...", MessageType.Info); DebugLog.DebugWrite("Rebuilding quantum objects...", MessageType.Info);
QSBWorldSync.Init<QSBQuantumState, QuantumState>(); QSBWorldSync.Init<QSBQuantumState, QuantumState>();
@ -78,7 +68,7 @@ namespace QSB.QuantumSync
public static Tuple<bool, List<PlayerInfo>> IsVisibleUsingCameraFrustum(ShapeVisibilityTracker tracker, bool ignoreLocalCamera) public static Tuple<bool, List<PlayerInfo>> IsVisibleUsingCameraFrustum(ShapeVisibilityTracker tracker, bool ignoreLocalCamera)
{ {
if (!AllObjectsReady) if (!QSBWorldSync.AllObjectsReady)
{ {
return new Tuple<bool, List<PlayerInfo>>(false, new List<PlayerInfo>()); return new Tuple<bool, List<PlayerInfo>>(false, new List<PlayerInfo>());
} }
@ -123,7 +113,7 @@ namespace QSB.QuantumSync
public static IEnumerable<PlayerInfo> GetEntangledPlayers(QuantumObject obj) public static IEnumerable<PlayerInfo> GetEntangledPlayers(QuantumObject obj)
{ {
if (!AllObjectsReady) if (!QSBWorldSync.AllObjectsReady)
{ {
return Enumerable.Empty<PlayerInfo>(); return Enumerable.Empty<PlayerInfo>();
} }

View File

@ -16,7 +16,7 @@ namespace QSB.QuantumSync.WorldObjects
base.Init(); base.Init();
StartDelayedReady(); StartDelayedReady();
QSBCore.UnityEvents.RunWhen(() => WorldObjectManager.AllObjectsAdded, () => QSBCore.UnityEvents.RunWhen(() => QSBWorldSync.AllObjectsAdded, () =>
{ {
FinishDelayedReady(); FinishDelayedReady();

View File

@ -175,7 +175,7 @@ namespace QSB.QuantumSync.WorldObjects
} }
IsEnabled = true; IsEnabled = true;
if (!WorldObjectManager.AllObjectsReady && !QSBCore.IsHost) if (!QSBWorldSync.AllObjectsReady && !QSBCore.IsHost)
{ {
return; return;
} }
@ -205,7 +205,7 @@ namespace QSB.QuantumSync.WorldObjects
} }
IsEnabled = false; IsEnabled = false;
if (!WorldObjectManager.AllObjectsReady && !QSBCore.IsHost) if (!QSBWorldSync.AllObjectsReady && !QSBCore.IsHost)
{ {
return; return;
} }

View File

@ -48,7 +48,7 @@ namespace QSB.RoastingSync.Messages
ObjectId = reader.Read<int>(); ObjectId = reader.Read<int>();
} }
public override bool ShouldReceive => WorldObjectManager.AllObjectsReady; public override bool ShouldReceive => QSBWorldSync.AllObjectsReady;
public override void OnReceiveRemote() public override void OnReceiveRemote()
{ {

View File

@ -12,7 +12,7 @@ namespace QSB.RoastingSync.Messages
{ {
public MarshmallowEventMessage(MarshmallowMessageType type) => Value = type; public MarshmallowEventMessage(MarshmallowMessageType type) => Value = type;
public override bool ShouldReceive => WorldObjectManager.AllObjectsReady; public override bool ShouldReceive => QSBWorldSync.AllObjectsReady;
public override void OnReceiveRemote() public override void OnReceiveRemote()
{ {

View File

@ -36,7 +36,7 @@ namespace QSB.SectorSync
public void UpdateReferenceSectors() public void UpdateReferenceSectors()
{ {
if (!Instance.IsReady || !AllObjectsReady) if (!Instance.IsReady || !QSBWorldSync.AllObjectsReady)
{ {
return; return;
} }
@ -58,14 +58,13 @@ namespace QSB.SectorSync
} }
} }
public override void Awake() public void Awake()
{ {
base.Awake();
Instance = this; Instance = this;
DebugLog.DebugWrite("Sector Manager ready.", MessageType.Success); DebugLog.DebugWrite("Sector Manager ready.", MessageType.Success);
} }
protected override void RebuildWorldObjects(OWScene scene) public override void RebuildWorldObjects(OWScene scene)
{ {
DebugLog.DebugWrite("Rebuilding sectors...", MessageType.Info); DebugLog.DebugWrite("Rebuilding sectors...", MessageType.Info);
if (QSBSceneManager.CurrentScene == OWScene.SolarSystem) if (QSBSceneManager.CurrentScene == OWScene.SolarSystem)

View File

@ -26,7 +26,7 @@ namespace QSB.ShipSync.Messages
public FlyShipMessage(bool flying) => Value = flying; public FlyShipMessage(bool flying) => Value = flying;
public override bool ShouldReceive => WorldObjectManager.AllObjectsReady; public override bool ShouldReceive => QSBWorldSync.AllObjectsReady;
public override void OnReceiveLocal() => SetCurrentFlyer(From, Value); public override void OnReceiveLocal() => SetCurrentFlyer(From, Value);

View File

@ -5,7 +5,7 @@ namespace QSB.ShipSync.Messages
{ {
internal class FunnelEnableMessage : QSBMessage internal class FunnelEnableMessage : QSBMessage
{ {
public override bool ShouldReceive => WorldObjectManager.AllObjectsReady; public override bool ShouldReceive => QSBWorldSync.AllObjectsReady;
public override void OnReceiveRemote() public override void OnReceiveRemote()
=> ShipManager.Instance.ShipTractorBeam.ActivateTractorBeam(); => ShipManager.Instance.ShipTractorBeam.ActivateTractorBeam();

View File

@ -7,7 +7,7 @@ namespace QSB.ShipSync.Messages
{ {
public HatchMessage(bool open) => Value = open; public HatchMessage(bool open) => Value = open;
public override bool ShouldReceive => WorldObjectManager.AllObjectsReady; public override bool ShouldReceive => QSBWorldSync.AllObjectsReady;
public override void OnReceiveRemote() public override void OnReceiveRemote()
{ {

View File

@ -77,7 +77,7 @@ namespace QSB.ShipSync.Patches
* *
*/ */
if (!WorldObjectManager.AllObjectsReady || __instance != ShipManager.Instance.HatchInteractZone) if (!QSBWorldSync.AllObjectsReady || __instance != ShipManager.Instance.HatchInteractZone)
{ {
return true; return true;
} }

View File

@ -43,7 +43,7 @@ namespace QSB.ShipSync
public void Start() public void Start()
=> Instance = this; => Instance = this;
protected override void RebuildWorldObjects(OWScene scene) public override void RebuildWorldObjects(OWScene scene)
{ {
var shipTransform = GameObject.Find("Ship_Body"); var shipTransform = GameObject.Find("Ship_Body");
if (shipTransform == null) if (shipTransform == null)

View File

@ -35,7 +35,7 @@ namespace QSB.StatueSync.Messages
CameraDegrees = reader.Read<float>(); CameraDegrees = reader.Read<float>();
} }
public override bool ShouldReceive => WorldObjectManager.AllObjectsReady; public override bool ShouldReceive => QSBWorldSync.AllObjectsReady;
public override void OnReceiveLocal() public override void OnReceiveLocal()
{ {

View File

@ -45,7 +45,7 @@ namespace QSB.Syncs
return false; return false;
} }
if (!WorldObjectManager.AllObjectsAdded) if (!QSBWorldSync.AllObjectsAdded)
{ {
return false; return false;
} }

View File

@ -6,7 +6,7 @@ namespace QSB.Tools.ProbeLauncherTool.Messages
{ {
internal class PlayerLaunchProbeMessage : QSBMessage internal class PlayerLaunchProbeMessage : QSBMessage
{ {
public override bool ShouldReceive => WorldObjectManager.AllObjectsReady; public override bool ShouldReceive => QSBWorldSync.AllObjectsReady;
public override void OnReceiveRemote() public override void OnReceiveRemote()
{ {

View File

@ -8,7 +8,7 @@ namespace QSB.Tools.ProbeLauncherTool.Messages
{ {
public PlayerRetrieveProbeMessage(bool playEffects) => Value = playEffects; public PlayerRetrieveProbeMessage(bool playEffects) => Value = playEffects;
public override bool ShouldReceive => WorldObjectManager.AllObjectsReady; public override bool ShouldReceive => QSBWorldSync.AllObjectsReady;
public override void OnReceiveRemote() public override void OnReceiveRemote()
{ {

View File

@ -7,7 +7,7 @@ namespace QSB.Tools.ProbeLauncherTool
{ {
public override WorldObjectType WorldObjectType => WorldObjectType.Both; public override WorldObjectType WorldObjectType => WorldObjectType.Both;
protected override void RebuildWorldObjects(OWScene scene) public override void RebuildWorldObjects(OWScene scene)
=> QSBWorldSync.Init<QSBProbeLauncher, ProbeLauncher>(typeof(PlayerProbeLauncher)); => QSBWorldSync.Init<QSBProbeLauncher, ProbeLauncher>(typeof(PlayerProbeLauncher));
} }
} }

View File

@ -8,7 +8,7 @@ namespace QSB.Tools.ProbeTool.Messages
{ {
public PlayerProbeEventMessage(ProbeEvent probeEvent) => Value = probeEvent; public PlayerProbeEventMessage(ProbeEvent probeEvent) => Value = probeEvent;
public override bool ShouldReceive => WorldObjectManager.AllObjectsReady; public override bool ShouldReceive => QSBWorldSync.AllObjectsReady;
public override void OnReceiveRemote() public override void OnReceiveRemote()
{ {

View File

@ -8,7 +8,7 @@ namespace QSB.Tools.ProbeTool.Messages
{ {
public ProbeStartRetrieveMessage(float duration) => Value = duration; public ProbeStartRetrieveMessage(float duration) => Value = duration;
public override bool ShouldReceive => WorldObjectManager.AllObjectsReady; public override bool ShouldReceive => QSBWorldSync.AllObjectsReady;
public override void OnReceiveRemote() public override void OnReceiveRemote()
{ {

View File

@ -7,7 +7,7 @@ namespace QSB.Tools.SignalscopeTool.FrequencySync.Messages
{ {
public IdentifyFrequencyMessage(SignalFrequency frequency) => Value = frequency; public IdentifyFrequencyMessage(SignalFrequency frequency) => Value = frequency;
public override bool ShouldReceive => WorldObjectManager.AllObjectsReady; public override bool ShouldReceive => QSBWorldSync.AllObjectsReady;
public override void OnReceiveRemote() public override void OnReceiveRemote()
{ {

View File

@ -7,7 +7,7 @@ namespace QSB.Tools.SignalscopeTool.FrequencySync.Messages
{ {
public IdentifySignalMessage(SignalName name) => Value = name; public IdentifySignalMessage(SignalName name) => Value = name;
public override bool ShouldReceive => WorldObjectManager.AllObjectsReady; public override bool ShouldReceive => QSBWorldSync.AllObjectsReady;
public override void OnReceiveRemote() public override void OnReceiveRemote()
{ {

View File

@ -77,7 +77,7 @@ namespace QSB.Tools.TranslatorTool
private void OnRenderObject() private void OnRenderObject()
{ {
if (!QSBCore.ShowLinesInDebug || !WorldObjectManager.AllObjectsReady) if (!QSBCore.ShowLinesInDebug || !QSBWorldSync.AllObjectsReady)
{ {
return; return;
} }

View File

@ -7,7 +7,7 @@ namespace QSB.Tools.TranslatorTool.TranslationSync
{ {
public override WorldObjectType WorldObjectType => WorldObjectType.Both; public override WorldObjectType WorldObjectType => WorldObjectType.Both;
protected override void RebuildWorldObjects(OWScene scene) public override void RebuildWorldObjects(OWScene scene)
{ {
// wait for all late initializers (which includes nomai text) to finish // wait for all late initializers (which includes nomai text) to finish
StartDelayedReady(); StartDelayedReady();

View File

@ -10,7 +10,7 @@ namespace QSB.TornadoSync
{ {
public override WorldObjectType WorldObjectType => WorldObjectType.SolarSystem; public override WorldObjectType WorldObjectType => WorldObjectType.SolarSystem;
protected override void RebuildWorldObjects(OWScene scene) public override void RebuildWorldObjects(OWScene scene)
{ {
QSBWorldSync.Init<QSBTornado, TornadoController>(); QSBWorldSync.Init<QSBTornado, TornadoController>();

View File

@ -13,7 +13,7 @@ namespace QSB.TornadoSync.TransformSync
{ {
public class OccasionalTransformSync : UnsectoredRigidbodySync public class OccasionalTransformSync : UnsectoredRigidbodySync
{ {
protected override bool IsReady => WorldObjectManager.AllObjectsReady protected override bool IsReady => QSBWorldSync.AllObjectsReady
&& CenterOfTheUniverse.s_rigidbodies.IsInRange(_bodyIndex) && CenterOfTheUniverse.s_rigidbodies.IsInRange(_bodyIndex)
&& CenterOfTheUniverse.s_rigidbodies.IsInRange(_refBodyIndex); && CenterOfTheUniverse.s_rigidbodies.IsInRange(_refBodyIndex);
protected override bool UseInterpolation => false; protected override bool UseInterpolation => false;

View File

@ -7,7 +7,7 @@ namespace QSB.TriggerSync
{ {
public override WorldObjectType WorldObjectType => WorldObjectType.Both; public override WorldObjectType WorldObjectType => WorldObjectType.Both;
protected override void RebuildWorldObjects(OWScene scene) public override void RebuildWorldObjects(OWScene scene)
{ {
QSBWorldSync.Init<QSBCharacterTrigger, CharacterAnimController>(x => x.playerTrackingZone); QSBWorldSync.Init<QSBCharacterTrigger, CharacterAnimController>(x => x.playerTrackingZone);
QSBWorldSync.Init<QSBSolanumTrigger, NomaiConversationManager>(x => x._watchPlayerVolume); QSBWorldSync.Init<QSBSolanumTrigger, NomaiConversationManager>(x => x._watchPlayerVolume);

View File

@ -32,7 +32,7 @@ namespace QSB.TriggerSync.WorldObjects
QSBPlayerManager.OnRemovePlayer += OnPlayerLeave; QSBPlayerManager.OnRemovePlayer += OnPlayerLeave;
QSBCore.UnityEvents.RunWhen(() => WorldObjectManager.AllObjectsReady, () => QSBCore.UnityEvents.RunWhen(() => QSBWorldSync.AllObjectsReady, () =>
{ {
if (AttachedObject._trackedObjects != null && AttachedObject._trackedObjects.Any(x => x.CompareTag(CompareTag))) if (AttachedObject._trackedObjects != null && AttachedObject._trackedObjects.Any(x => x.CompareTag(CompareTag)))
{ {

View File

@ -62,7 +62,7 @@ namespace QSB.Utility
private void FixedUpdate() private void FixedUpdate()
{ {
if (!WorldObjectManager.AllObjectsReady || !_isReady) if (!QSBWorldSync.AllObjectsReady || !_isReady)
{ {
return; return;
} }

View File

@ -97,7 +97,7 @@ namespace QSB.Utility
#region Column1 - Server data #region Column1 - Server data
WriteLine(1, $"FPS : {Mathf.Round(1f / Time.smoothDeltaTime)}"); WriteLine(1, $"FPS : {Mathf.Round(1f / Time.smoothDeltaTime)}");
WriteLine(1, $"HasWokenUp : {WorldObjectManager.AllObjectsReady}"); WriteLine(1, $"HasWokenUp : {QSBWorldSync.AllObjectsReady}");
if (WakeUpSync.LocalInstance != null) if (WakeUpSync.LocalInstance != null)
{ {
WriteLine(1, $"Server State : {ServerStateManager.Instance.GetServerState()}"); WriteLine(1, $"Server State : {ServerStateManager.Instance.GetServerState()}");
@ -145,7 +145,7 @@ namespace QSB.Utility
WriteLine(2, $"Ready : {player.IsReady}"); WriteLine(2, $"Ready : {player.IsReady}");
WriteLine(2, $"Suited Up : {player.SuitedUp}"); WriteLine(2, $"Suited Up : {player.SuitedUp}");
if (player.IsReady && WorldObjectManager.AllObjectsReady) if (player.IsReady && QSBWorldSync.AllObjectsReady)
{ {
var networkTransform = player.TransformSync; var networkTransform = player.TransformSync;
var referenceSector = networkTransform.ReferenceSector; var referenceSector = networkTransform.ReferenceSector;

View File

@ -1,6 +1,7 @@
using OWML.Common; using OWML.Common;
using QSB.ConversationSync.Patches; using QSB.ConversationSync.Patches;
using QSB.LogSync; using QSB.LogSync;
using QSB.Player.TransformSync;
using QSB.TriggerSync.WorldObjects; using QSB.TriggerSync.WorldObjects;
using QSB.Utility; using QSB.Utility;
using System; using System;
@ -12,15 +13,111 @@ namespace QSB.WorldSync
{ {
public static class QSBWorldSync public static class QSBWorldSync
{ {
public static List<CharacterDialogueTree> OldDialogueTrees { get; private set; } = new(); private static WorldObjectManager[] _managers;
public static void Init(QSBCore qsbCore)
{
_managers = typeof(WorldObjectManager).GetDerivedTypes()
.Select(x => (WorldObjectManager)qsbCore.gameObject.AddComponent(x))
.ToArray();
QSBSceneManager.OnSceneLoaded -= OnSceneLoaded;
}
private static void OnSceneLoaded(OWScene oldScene, OWScene newScene, bool inUniverse)
{
AllObjectsAdded = false;
AllObjectsReady = false;
}
/// <summary>
/// Set when all WorldObjectManagers have called Init() on all their objects (AKA all the objects are created)
/// </summary>
public static bool AllObjectsAdded { get; private set; }
/// <summary>
/// Set when all WorldObjects have finished running Init()
/// </summary>
public static bool AllObjectsReady { get; private set; }
public static void SetNotReady()
{
AllObjectsAdded = false;
AllObjectsReady = false;
}
public static void Rebuild(OWScene scene)
{
if (!QSBNetworkManager.singleton.IsReady)
{
DebugLog.ToConsole($"Warning - Tried to rebuild WorldObjects when Network Manager not ready! Building when ready...", MessageType.Warning);
QSBCore.UnityEvents.RunWhen(() => QSBNetworkManager.singleton.IsReady, () => Rebuild(scene));
return;
}
if (PlayerTransformSync.LocalInstance == null)
{
DebugLog.ToConsole($"Warning - Tried to rebuild WorldObjects when LocalPlayer is not ready! Building when ready...", MessageType.Warning);
QSBCore.UnityEvents.RunWhen(() => PlayerTransformSync.LocalInstance, () => Rebuild(scene));
return;
}
DoRebuild(scene);
}
private static void DoRebuild(OWScene scene)
{
RemoveWorldObjects();
_numManagersReadying = 0;
_numObjectsReadying = 0;
AllObjectsAdded = false;
AllObjectsReady = false;
foreach (var manager in _managers)
{
switch (manager.WorldObjectType)
{
case WorldObjectType.SolarSystem when QSBSceneManager.CurrentScene != OWScene.SolarSystem:
case WorldObjectType.Eye when QSBSceneManager.CurrentScene != OWScene.EyeOfTheUniverse:
DebugLog.DebugWrite($"skipping {manager.GetType().Name} as it is type {manager.WorldObjectType} and scene is {QSBSceneManager.CurrentScene}");
continue;
}
try
{
DebugLog.DebugWrite($"Rebuilding {manager.GetType().Name}", MessageType.Info);
manager.RebuildWorldObjects(scene);
}
catch (Exception ex)
{
DebugLog.ToConsole($"Exception - Exception when trying to rebuild WorldObjects of manager {manager.GetType().Name} : {ex.Message} Stacktrace :\r\n{ex.StackTrace}", MessageType.Error);
}
}
QSBCore.UnityEvents.RunWhen(() => _numManagersReadying == 0, () =>
{
AllObjectsAdded = true;
DebugLog.DebugWrite("World Objects added.", MessageType.Success);
QSBCore.UnityEvents.RunWhen(() => _numObjectsReadying == 0, () =>
{
AllObjectsReady = true;
DebugLog.DebugWrite("World Objects ready.", MessageType.Success);
});
});
}
internal static uint _numManagersReadying;
internal static uint _numObjectsReadying;
// =======================================================================================================
public static List<CharacterDialogueTree> OldDialogueTrees { get; } = new();
public static Dictionary<string, bool> DialogueConditions { get; private set; } = new(); public static Dictionary<string, bool> DialogueConditions { get; private set; } = new();
public static Dictionary<string, bool> PersistentConditions { get; private set; } = new(); public static Dictionary<string, bool> PersistentConditions { get; private set; } = new();
public static List<FactReveal> ShipLogFacts { get; private set; } = new(); public static List<FactReveal> ShipLogFacts { get; } = new();
private static readonly List<IWorldObject> WorldObjects = new(); private static readonly List<IWorldObject> WorldObjects = new();
private static readonly Dictionary<MonoBehaviour, IWorldObject> WorldObjectsToUnityObjects = new(); private static readonly Dictionary<MonoBehaviour, IWorldObject> WorldObjectsToUnityObjects = new();
public static void Init() public static void GameInit()
{ {
DebugLog.DebugWrite($"Init QSBWorldSync", MessageType.Info); DebugLog.DebugWrite($"Init QSBWorldSync", MessageType.Info);

View File

@ -19,9 +19,9 @@ namespace QSB.WorldSync
public virtual void DisplayLines() { } public virtual void DisplayLines() { }
/// indicates that this won't become ready immediately /// indicates that this won't become ready immediately
protected void StartDelayedReady() => WorldObjectManager._numObjectsReadying++; protected void StartDelayedReady() => QSBWorldSync._numObjectsReadying++;
/// indicates that this is now ready /// indicates that this is now ready
protected void FinishDelayedReady() => WorldObjectManager._numObjectsReadying--; protected void FinishDelayedReady() => QSBWorldSync._numObjectsReadying--;
} }
} }

View File

@ -1,10 +1,4 @@
using OWML.Common; using UnityEngine;
using QSB.Player;
using QSB.Player.TransformSync;
using QSB.Utility;
using System;
using System.Collections.Generic;
using UnityEngine;
namespace QSB.WorldSync namespace QSB.WorldSync
{ {
@ -17,115 +11,17 @@ namespace QSB.WorldSync
public abstract class WorldObjectManager : MonoBehaviour public abstract class WorldObjectManager : MonoBehaviour
{ {
private static readonly List<WorldObjectManager> _managers = new();
/// <summary>
/// Set when all WorldObjectManagers have called Init() on all their objects (AKA all the objects are created)
/// </summary>
public static bool AllObjectsAdded { get; private set; }
/// <summary>
/// Set when all WorldObjects have finished running Init()
/// </summary>
public static bool AllObjectsReady { get; private set; }
/// <summary> /// <summary>
/// when the scene does not match the type, this manager will not build its world objects /// when the scene does not match the type, this manager will not build its world objects
/// </summary> /// </summary>
public abstract WorldObjectType WorldObjectType { get; } public abstract WorldObjectType WorldObjectType { get; }
public virtual void Awake() public abstract void RebuildWorldObjects(OWScene scene);
{
QSBSceneManager.OnSceneLoaded += OnSceneLoaded;
_managers.Add(this);
}
public virtual void OnDestroy()
{
QSBSceneManager.OnSceneLoaded -= OnSceneLoaded;
_managers.Remove(this);
}
public static void SetNotReady()
{
AllObjectsAdded = false;
AllObjectsReady = false;
}
private void OnSceneLoaded(OWScene oldScene, OWScene newScene, bool inUniverse)
{
AllObjectsAdded = false;
AllObjectsReady = false;
}
public static void Rebuild(OWScene scene)
{
if (!QSBNetworkManager.singleton.IsReady)
{
DebugLog.ToConsole($"Warning - Tried to rebuild WorldObjects when Network Manager not ready! Building when ready...", MessageType.Warning);
QSBCore.UnityEvents.RunWhen(() => QSBNetworkManager.singleton.IsReady, () => Rebuild(scene));
return;
}
if (PlayerTransformSync.LocalInstance == null)
{
DebugLog.ToConsole($"Warning - Tried to rebuild WorldObjects when LocalPlayer is not ready! Building when ready...", MessageType.Warning);
QSBCore.UnityEvents.RunWhen(() => PlayerTransformSync.LocalInstance, () => Rebuild(scene));
return;
}
DoRebuild(scene);
}
private static void DoRebuild(OWScene scene)
{
QSBWorldSync.RemoveWorldObjects();
_numManagersReadying = 0;
_numObjectsReadying = 0;
AllObjectsAdded = false;
AllObjectsReady = false;
foreach (var manager in _managers)
{
switch (manager.WorldObjectType)
{
case WorldObjectType.SolarSystem when QSBSceneManager.CurrentScene != OWScene.SolarSystem:
case WorldObjectType.Eye when QSBSceneManager.CurrentScene != OWScene.EyeOfTheUniverse:
DebugLog.DebugWrite($"skipping {manager.GetType().Name} as it is type {manager.WorldObjectType} and scene is {QSBSceneManager.CurrentScene}");
continue;
}
try
{
DebugLog.DebugWrite($"Rebuilding {manager.GetType().Name}", MessageType.Info);
manager.RebuildWorldObjects(scene);
}
catch (Exception ex)
{
DebugLog.ToConsole($"Exception - Exception when trying to rebuild WorldObjects of manager {manager.GetType().Name} : {ex.Message} Stacktrace :\r\n{ex.StackTrace}", MessageType.Error);
}
}
QSBCore.UnityEvents.RunWhen(() => _numManagersReadying == 0, () =>
{
AllObjectsAdded = true;
DebugLog.DebugWrite("World Objects added.", MessageType.Success);
QSBCore.UnityEvents.RunWhen(() => _numObjectsReadying == 0, () =>
{
AllObjectsReady = true;
DebugLog.DebugWrite("World Objects ready.", MessageType.Success);
});
});
}
protected abstract void RebuildWorldObjects(OWScene scene);
private static uint _numManagersReadying;
internal static uint _numObjectsReadying;
/// indicates that this won't become ready immediately /// indicates that this won't become ready immediately
protected void StartDelayedReady() => _numManagersReadying++; protected void StartDelayedReady() => QSBWorldSync._numManagersReadying++;
/// indicates that this is now ready /// indicates that this is now ready
protected void FinishDelayedReady() => _numManagersReadying--; protected void FinishDelayedReady() => QSBWorldSync._numManagersReadying--;
} }
} }

View File

@ -7,7 +7,7 @@ namespace QSB.ZeroGCaveSync
{ {
public override WorldObjectType WorldObjectType => WorldObjectType.SolarSystem; public override WorldObjectType WorldObjectType => WorldObjectType.SolarSystem;
protected override void RebuildWorldObjects(OWScene scene) public override void RebuildWorldObjects(OWScene scene)
=> QSBWorldSync.Init<QSBSatelliteNode, SatelliteNode>(); => QSBWorldSync.Init<QSBSatelliteNode, SatelliteNode>();
} }
} }