world objects dont need to know their manager. make GetWorldObjects to get all world objects from QSBWorldSync

This commit is contained in:
JohnCorby 2021-12-28 16:10:58 -08:00
parent 6c30104951
commit d030d9746f
24 changed files with 53 additions and 61 deletions

View File

@ -14,7 +14,7 @@ namespace QSB.Anglerfish
{
Anglers.Clear();
Anglers.AddRange(QSBWorldSync.GetUnityObjects<AnglerfishController>());
QSBWorldSync.Init<QSBAngler, AnglerfishController>(Anglers, this);
QSBWorldSync.Init<QSBAngler, AnglerfishController>(Anglers);
}
}
}

View File

@ -10,12 +10,12 @@ namespace QSB.Animation.NPC
protected override void RebuildWorldObjects(OWScene scene)
{
QSBWorldSync.Init<QSBCharacterAnimController, CharacterAnimController>(this);
QSBWorldSync.Init<QSBTravelerController, TravelerController>(this);
QSBWorldSync.Init<QSBSolanumController, NomaiConversationManager>(this);
QSBWorldSync.Init<QSBSolanumAnimController, SolanumAnimController>(this);
QSBWorldSync.Init<QSBHearthianRecorderEffects, HearthianRecorderEffects>(this);
QSBWorldSync.Init<QSBTravelerEyeController, TravelerEyeController>(this);
QSBWorldSync.Init<QSBCharacterAnimController, CharacterAnimController>();
QSBWorldSync.Init<QSBTravelerController, TravelerController>();
QSBWorldSync.Init<QSBSolanumController, NomaiConversationManager>();
QSBWorldSync.Init<QSBSolanumAnimController, SolanumAnimController>();
QSBWorldSync.Init<QSBHearthianRecorderEffects, HearthianRecorderEffects>();
QSBWorldSync.Init<QSBTravelerEyeController, TravelerEyeController>();
//MOVE : this is the wrong place to put this... move it to Conversations?
QSBWorldSync.OldDialogueTrees.Clear();

View File

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

View File

@ -38,7 +38,7 @@ namespace QSB.ConversationSync
}
protected override void RebuildWorldObjects(OWScene scene)
=> QSBWorldSync.Init<QSBRemoteDialogueTrigger, RemoteDialogueTrigger>(this);
=> QSBWorldSync.Init<QSBRemoteDialogueTrigger, RemoteDialogueTrigger>();
public uint GetPlayerTalkingToTree(CharacterDialogueTree tree)
{

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -15,20 +15,20 @@ namespace QSB.ItemSync
DebugLog.DebugWrite("Rebuilding OWItems...", MessageType.Info);
// Items
QSBWorldSync.Init<QSBScrollItem, ScrollItem>(this);
QSBWorldSync.Init<QSBSharedStone, SharedStone>(this);
QSBWorldSync.Init<QSBWarpCoreItem, WarpCoreItem>(this);
QSBWorldSync.Init<QSBNomaiConversationStone, NomaiConversationStone>(this);
QSBWorldSync.Init<QSBSimpleLanternItem, SimpleLanternItem>(this);
QSBWorldSync.Init<QSBSlideReelItem, SlideReelItem>(this);
QSBWorldSync.Init<QSBScrollItem, ScrollItem>();
QSBWorldSync.Init<QSBSharedStone, SharedStone>();
QSBWorldSync.Init<QSBWarpCoreItem, WarpCoreItem>();
QSBWorldSync.Init<QSBNomaiConversationStone, NomaiConversationStone>();
QSBWorldSync.Init<QSBSimpleLanternItem, SimpleLanternItem>();
QSBWorldSync.Init<QSBSlideReelItem, SlideReelItem>();
// Sockets
QSBWorldSync.Init<QSBScrollSocket, ScrollSocket>(this);
QSBWorldSync.Init<QSBSharedStoneSocket, SharedStoneSocket>(this);
QSBWorldSync.Init<QSBWarpCoreSocket, WarpCoreSocket>(this);
QSBWorldSync.Init<QSBNomaiConversationStoneSocket, NomaiConversationStoneSocket>(this);
QSBWorldSync.Init<QSBSlideReelSocket, SlideReelSocket>(this);
QSBWorldSync.Init<QSBSlideProjectorSocket, SlideProjectorSocket>(this);
QSBWorldSync.Init<QSBScrollSocket, ScrollSocket>();
QSBWorldSync.Init<QSBSharedStoneSocket, SharedStoneSocket>();
QSBWorldSync.Init<QSBWarpCoreSocket, WarpCoreSocket>();
QSBWorldSync.Init<QSBNomaiConversationStoneSocket, NomaiConversationStoneSocket>();
QSBWorldSync.Init<QSBSlideReelSocket, SlideReelSocket>();
QSBWorldSync.Init<QSBSlideProjectorSocket, SlideProjectorSocket>();
}
}
}

View File

@ -14,7 +14,7 @@ namespace QSB.JellyfishSync
{
Jellyfish.Clear();
Jellyfish.AddRange(QSBWorldSync.GetUnityObjects<JellyfishController>());
QSBWorldSync.Init<QSBJellyfish, JellyfishController>(Jellyfish, this);
QSBWorldSync.Init<QSBJellyfish, JellyfishController>(Jellyfish);
}
}
}

View File

@ -18,9 +18,9 @@ namespace QSB.MeteorSync
{
FinishDelayedReady();
WhiteHoleVolume = QSBWorldSync.GetUnityObjects<WhiteHoleVolume>().First();
QSBWorldSync.Init<QSBMeteorLauncher, MeteorLauncher>(this);
QSBWorldSync.Init<QSBMeteor, MeteorController>(this);
QSBWorldSync.Init<QSBFragment, FragmentIntegrity>(this);
QSBWorldSync.Init<QSBMeteorLauncher, MeteorLauncher>();
QSBWorldSync.Init<QSBMeteor, MeteorController>();
QSBWorldSync.Init<QSBFragment, FragmentIntegrity>();
});
}
}

View File

@ -14,7 +14,7 @@ namespace QSB.OrbSync
{
Orbs.Clear();
Orbs.AddRange(QSBWorldSync.GetUnityObjects<NomaiInterfaceOrb>());
QSBWorldSync.Init<QSBOrb, NomaiInterfaceOrb>(Orbs, this);
QSBWorldSync.Init<QSBOrb, NomaiInterfaceOrb>(Orbs);
}
}
}

View File

@ -33,13 +33,13 @@ namespace QSB.QuantumSync
protected override void RebuildWorldObjects(OWScene scene)
{
DebugLog.DebugWrite("Rebuilding quantum objects...", MessageType.Info);
QSBWorldSync.Init<QSBQuantumState, QuantumState>(this);
QSBWorldSync.Init<QSBSocketedQuantumObject, SocketedQuantumObject>(this);
QSBWorldSync.Init<QSBMultiStateQuantumObject, MultiStateQuantumObject>(this);
QSBWorldSync.Init<QSBQuantumSocket, QuantumSocket>(this);
QSBWorldSync.Init<QSBQuantumShuffleObject, QuantumShuffleObject>(this);
QSBWorldSync.Init<QSBQuantumMoon, QuantumMoon>(this);
QSBWorldSync.Init<QSBEyeProxyQuantumMoon, EyeProxyQuantumMoon>(this);
QSBWorldSync.Init<QSBQuantumState, QuantumState>();
QSBWorldSync.Init<QSBSocketedQuantumObject, SocketedQuantumObject>();
QSBWorldSync.Init<QSBMultiStateQuantumObject, MultiStateQuantumObject>();
QSBWorldSync.Init<QSBQuantumSocket, QuantumSocket>();
QSBWorldSync.Init<QSBQuantumShuffleObject, QuantumShuffleObject>();
QSBWorldSync.Init<QSBQuantumMoon, QuantumMoon>();
QSBWorldSync.Init<QSBEyeProxyQuantumMoon, EyeProxyQuantumMoon>();
if (scene == OWScene.SolarSystem)
{
Shrine = QSBWorldSync.GetUnityObjects<QuantumShrine>().First();

View File

@ -89,7 +89,7 @@ namespace QSB.SectorSync
}
}
QSBWorldSync.Init<QSBSector, Sector>(this);
QSBWorldSync.Init<QSBSector, Sector>();
IsReady = QSBWorldSync.GetWorldObjects<QSBSector>().Any();
}

View File

@ -91,8 +91,8 @@ namespace QSB.ShipSync
Instantiate(QSBNetworkManager.Instance.ShipPrefab).SpawnWithServerAuthority();
}
QSBWorldSync.Init<QSBShipComponent, ShipComponent>(this);
QSBWorldSync.Init<QSBShipHull, ShipHull>(this);
QSBWorldSync.Init<QSBShipComponent, ShipComponent>();
QSBWorldSync.Init<QSBShipHull, ShipHull>();
}
public void AddPlayerToShip(PlayerInfo player)

View File

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

View File

@ -14,7 +14,7 @@ namespace QSB.Tools.TranslatorTool.TranslationSync
QSBCore.UnityEvents.RunWhen(() => LateInitializerManager.isDoneInitializing, () =>
{
FinishDelayedReady();
QSBWorldSync.Init<QSBNomaiText, NomaiText>(this, typeof(GhostWallText));
QSBWorldSync.Init<QSBNomaiText, NomaiText>(typeof(GhostWallText));
});
}
}

View File

@ -12,7 +12,7 @@ namespace QSB.TornadoSync
protected override void RebuildWorldObjects(OWScene scene)
{
QSBWorldSync.Init<QSBTornado, TornadoController>(this);
QSBWorldSync.Init<QSBTornado, TornadoController>();
if (!QSBCore.IsHost)
{

View File

@ -5,7 +5,6 @@ namespace QSB.WorldSync
public interface IWorldObject
{
int ObjectId { get; }
WorldObjectManager Manager { get; }
string Name { get; }
void OnRemoval();

View File

@ -17,6 +17,8 @@ namespace QSB.WorldSync
private static readonly List<IWorldObject> WorldObjects = new();
private static readonly Dictionary<MonoBehaviour, IWorldObject> WorldObjectsToUnityObjects = new();
public static IEnumerable<IWorldObject> GetWorldObjects() => WorldObjects;
public static IEnumerable<TWorldObject> GetWorldObjects<TWorldObject>()
where TWorldObject : IWorldObject
=> WorldObjects.OfType<TWorldObject>();
@ -82,7 +84,6 @@ namespace QSB.WorldSync
try
{
item.OnRemoval();
item.Manager.UnregisterWorldObject(item);
}
catch (Exception e)
{
@ -99,23 +100,23 @@ namespace QSB.WorldSync
=> Resources.FindObjectsOfTypeAll<TUnityObject>()
.Where(x => x.gameObject.scene.name != null);
public static void Init<TWorldObject, TUnityObject>(WorldObjectManager owner)
public static void Init<TWorldObject, TUnityObject>()
where TWorldObject : WorldObject<TUnityObject>, new()
where TUnityObject : MonoBehaviour
{
var list = GetUnityObjects<TUnityObject>();
Init<TWorldObject, TUnityObject>(list, owner);
Init<TWorldObject, TUnityObject>(list);
}
public static void Init<TWorldObject, TUnityObject>(WorldObjectManager owner, params Type[] typesToExclude)
public static void Init<TWorldObject, TUnityObject>(params Type[] typesToExclude)
where TWorldObject : WorldObject<TUnityObject>, new()
where TUnityObject : MonoBehaviour
{
var list = GetUnityObjects<TUnityObject>().Where(x => !typesToExclude.Contains(x.GetType()));
Init<TWorldObject, TUnityObject>(list, owner);
Init<TWorldObject, TUnityObject>(list);
}
public static void Init<TWorldObject, TUnityObject>(IEnumerable<TUnityObject> listToInitFrom, WorldObjectManager owner)
public static void Init<TWorldObject, TUnityObject>(IEnumerable<TUnityObject> listToInitFrom)
where TWorldObject : WorldObject<TUnityObject>, new()
where TUnityObject : MonoBehaviour
{
@ -126,13 +127,11 @@ namespace QSB.WorldSync
{
AttachedObject = item,
ObjectId = WorldObjects.Count,
Manager = owner
};
obj.Init();
WorldObjects.Add(obj);
WorldObjectsToUnityObjects.Add(item, obj);
owner.RegisterWorldObject(obj);
}
}

View File

@ -8,7 +8,6 @@ namespace QSB.WorldSync
{
public int ObjectId { get; init; }
public T AttachedObject { get; init; }
public WorldObjectManager Manager { get; init; }
public string Name => AttachedObject == null ? "<NullObject!>" : AttachedObject.name;
public string LogName => $"{QSBPlayerManager.LocalPlayerId}.{ObjectId}:{GetType().Name}";

View File

@ -33,8 +33,6 @@ namespace QSB.WorldSync
/// </summary>
public abstract WorldObjectType WorldObjectType { get; }
private List<IWorldObject> _worldObjects = new List<IWorldObject>();
public virtual void Awake()
{
QSBSceneManager.OnSceneLoaded += OnSceneLoaded;
@ -59,9 +57,6 @@ namespace QSB.WorldSync
AllObjectsReady = false;
}
public void RegisterWorldObject(IWorldObject obj) => _worldObjects.Add(obj);
public void UnregisterWorldObject(IWorldObject obj) => _worldObjects.Remove(obj);
public static void Rebuild(OWScene scene)
{
if (!QSBNetworkManager.Instance.IsReady)
@ -139,7 +134,7 @@ namespace QSB.WorldSync
return;
}
foreach (var obj in _worldObjects)
foreach (var obj in QSBWorldSync.GetWorldObjects())
{
if (obj.ShouldDisplayLabel)
{

View File

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