diff --git a/QSB/Anglerfish/TransformSync/AnglerTransformSync.cs b/QSB/Anglerfish/TransformSync/AnglerTransformSync.cs index 01d874e0..38b2a731 100644 --- a/QSB/Anglerfish/TransformSync/AnglerTransformSync.cs +++ b/QSB/Anglerfish/TransformSync/AnglerTransformSync.cs @@ -14,6 +14,7 @@ namespace QSB.Anglerfish.TransformSync public override bool IsPlayerObject => false; private QSBAngler _qsbAngler; + public static readonly List Anglers = new(); private static readonly List _instances = new(); protected override OWRigidbody GetRigidbody() @@ -35,7 +36,7 @@ namespace QSB.Anglerfish.TransformSync protected override void Init() { - _qsbAngler = QSBWorldSync.GetWorldFromId(_instances.IndexOf(this)); + _qsbAngler = QSBWorldSync.GetWorldFromUnity(Anglers[_instances.IndexOf(this)]); _qsbAngler.TransformSync = this; base.Init(); diff --git a/QSB/Anglerfish/WorldObjects/QSBAngler.cs b/QSB/Anglerfish/WorldObjects/QSBAngler.cs index dbf06475..8e383810 100644 --- a/QSB/Anglerfish/WorldObjects/QSBAngler.cs +++ b/QSB/Anglerfish/WorldObjects/QSBAngler.cs @@ -14,11 +14,9 @@ namespace QSB.Anglerfish.WorldObjects private Vector3 _lastTargetPosition; - public override void Init(AnglerfishController attachedObject, int id) + public override void Init() { - ObjectId = id; - AttachedObject = attachedObject; - + AnglerTransformSync.Anglers.Add(AttachedObject); if (QSBCore.IsHost) { QNetworkServer.Spawn(Object.Instantiate(QSBNetworkManager.Instance.AnglerPrefab)); @@ -41,6 +39,7 @@ namespace QSB.Anglerfish.WorldObjects public override void OnRemoval() { + AnglerTransformSync.Anglers.Remove(AttachedObject); if (QSBCore.IsHost) { TransformSync.NetIdentity.UnregisterAuthQueue(); diff --git a/QSB/Animation/NPC/Patches/CharacterAnimationPatches.cs b/QSB/Animation/NPC/Patches/CharacterAnimationPatches.cs index 9ffeb4b3..16203540 100644 --- a/QSB/Animation/NPC/Patches/CharacterAnimationPatches.cs +++ b/QSB/Animation/NPC/Patches/CharacterAnimationPatches.cs @@ -153,7 +153,7 @@ namespace QSB.Animation.NPC.Patches return true; } - var id = QSBWorldSync.GetIdFromTypeSubset(ownerOfThis); + var id = ownerOfThis.ObjectId; QSBEventManager.FireEvent(EventNames.QSBNpcAnimEvent, AnimationEvent.StartConversation, id); return true; } @@ -169,7 +169,7 @@ namespace QSB.Animation.NPC.Patches return true; } - var id = QSBWorldSync.GetIdFromTypeSubset(ownerOfThis); + var id = ownerOfThis.ObjectId; QSBEventManager.FireEvent(EventNames.QSBNpcAnimEvent, AnimationEvent.EndConversation, id); return true; } diff --git a/QSB/Animation/NPC/WorldObjects/INpcAnimController.cs b/QSB/Animation/NPC/WorldObjects/INpcAnimController.cs index d6533a4b..807adf7c 100644 --- a/QSB/Animation/NPC/WorldObjects/INpcAnimController.cs +++ b/QSB/Animation/NPC/WorldObjects/INpcAnimController.cs @@ -1,6 +1,8 @@ -namespace QSB.Animation.NPC.WorldObjects +using QSB.WorldSync; + +namespace QSB.Animation.NPC.WorldObjects { - public interface INpcAnimController + public interface INpcAnimController : IWorldObject { CharacterDialogueTree GetDialogueTree(); void StartConversation(); diff --git a/QSB/Animation/NPC/WorldObjects/NpcAnimController.cs b/QSB/Animation/NPC/WorldObjects/NpcAnimController.cs index 86ca2d77..74a41b5d 100644 --- a/QSB/Animation/NPC/WorldObjects/NpcAnimController.cs +++ b/QSB/Animation/NPC/WorldObjects/NpcAnimController.cs @@ -7,12 +7,6 @@ namespace QSB.Animation.NPC.WorldObjects internal abstract class NpcAnimController : WorldObject, INpcAnimController where T : MonoBehaviour { - public override void Init(T controller, int id) - { - ObjectId = id; - AttachedObject = controller; - } - public abstract CharacterDialogueTree GetDialogueTree(); public virtual void StartConversation() diff --git a/QSB/Animation/NPC/WorldObjects/QSBSolanumAnimController.cs b/QSB/Animation/NPC/WorldObjects/QSBSolanumAnimController.cs index 3505f973..e940c8c9 100644 --- a/QSB/Animation/NPC/WorldObjects/QSBSolanumAnimController.cs +++ b/QSB/Animation/NPC/WorldObjects/QSBSolanumAnimController.cs @@ -8,12 +8,6 @@ namespace QSB.Animation.NPC.WorldObjects { private readonly List _playersInHeadZone = new(); - public override void Init(SolanumAnimController controller, int id) - { - ObjectId = id; - AttachedObject = controller; - } - public List GetPlayersInHeadZone() => _playersInHeadZone; diff --git a/QSB/CampfireSync/WorldObjects/QSBCampfire.cs b/QSB/CampfireSync/WorldObjects/QSBCampfire.cs index b4d43649..60e08cbd 100644 --- a/QSB/CampfireSync/WorldObjects/QSBCampfire.cs +++ b/QSB/CampfireSync/WorldObjects/QSBCampfire.cs @@ -5,12 +5,6 @@ namespace QSB.CampfireSync.WorldObjects { public class QSBCampfire : WorldObject { - public override void Init(Campfire campfire, int id) - { - ObjectId = id; - AttachedObject = campfire; - } - public void StartRoasting() => AttachedObject .GetType() diff --git a/QSB/EchoesOfTheEye/AirlockSync/WorldObjects/QSBGhostAirlock.cs b/QSB/EchoesOfTheEye/AirlockSync/WorldObjects/QSBGhostAirlock.cs index 67b73576..b19bf457 100644 --- a/QSB/EchoesOfTheEye/AirlockSync/WorldObjects/QSBGhostAirlock.cs +++ b/QSB/EchoesOfTheEye/AirlockSync/WorldObjects/QSBGhostAirlock.cs @@ -4,10 +4,5 @@ namespace QSB.EchoesOfTheEye.AirlockSync.WorldObjects { internal class QSBGhostAirlock : WorldObject { - public override void Init(GhostAirlock airlock, int id) - { - ObjectId = id; - AttachedObject = airlock; - } } } diff --git a/QSB/EchoesOfTheEye/LightSensorSync/WorldObjects/QSBSingleLightSensor.cs b/QSB/EchoesOfTheEye/LightSensorSync/WorldObjects/QSBSingleLightSensor.cs index 089e67d3..92aab307 100644 --- a/QSB/EchoesOfTheEye/LightSensorSync/WorldObjects/QSBSingleLightSensor.cs +++ b/QSB/EchoesOfTheEye/LightSensorSync/WorldObjects/QSBSingleLightSensor.cs @@ -4,10 +4,5 @@ namespace QSB.EchoesOfTheEye.LightSensorSync.WorldObjects { internal class QSBSingleLightSensor : WorldObject { - public override void Init(SingleLightSensor sensor, int id) - { - ObjectId = id; - AttachedObject = sensor; - } } } diff --git a/QSB/ElevatorSync/WorldObjects/QSBElevator.cs b/QSB/ElevatorSync/WorldObjects/QSBElevator.cs index e62e73dc..75d736e9 100644 --- a/QSB/ElevatorSync/WorldObjects/QSBElevator.cs +++ b/QSB/ElevatorSync/WorldObjects/QSBElevator.cs @@ -13,15 +13,15 @@ namespace QSB.ElevatorSync.WorldObjects private OWAudioSource _owAudioSourceLP; private OWTriggerVolume _elevatorTrigger; - public override void Init(Elevator elevator, int id) + public override void Init() { - AttachedObject = elevator; - ObjectId = id; + StartDelayedReady(); QSBCore.UnityEvents.RunWhen(() => AttachedObject._interactVolume != null, InitValues); } private void InitValues() { + FinishDelayedReady(); _startLocalPos = AttachedObject._startLocalPos; _endLocalPos = AttachedObject._endLocalPos; _interactVolume = AttachedObject._interactVolume; diff --git a/QSB/GeyserSync/WorldObjects/QSBGeyser.cs b/QSB/GeyserSync/WorldObjects/QSBGeyser.cs index 0cac3e86..34ef9b94 100644 --- a/QSB/GeyserSync/WorldObjects/QSBGeyser.cs +++ b/QSB/GeyserSync/WorldObjects/QSBGeyser.cs @@ -6,10 +6,8 @@ namespace QSB.GeyserSync.WorldObjects { public class QSBGeyser : WorldObject { - public override void Init(GeyserController geyserController, int id) + public override void Init() { - ObjectId = id; - AttachedObject = geyserController; AttachedObject.OnGeyserActivateEvent += () => HandleEvent(true); AttachedObject.OnGeyserDeactivateEvent += () => HandleEvent(false); } diff --git a/QSB/ItemSync/Events/SocketItemEvent.cs b/QSB/ItemSync/Events/SocketItemEvent.cs index 80665ccb..4b50952d 100644 --- a/QSB/ItemSync/Events/SocketItemEvent.cs +++ b/QSB/ItemSync/Events/SocketItemEvent.cs @@ -42,7 +42,7 @@ namespace QSB.ItemSync.Events case SocketEventType.StartUnsocket: if (!socketWorldObject.IsSocketOccupied()) { - DebugLog.ToConsole($"Warning - Trying to start unsocket on socket that is unoccupied! Socket:{(socketWorldObject as IWorldObject).Name}"); + DebugLog.ToConsole($"Warning - Trying to start unsocket on socket that is unoccupied! Socket:{socketWorldObject.Name}"); return; } diff --git a/QSB/ItemSync/Patches/ItemPatches.cs b/QSB/ItemSync/Patches/ItemPatches.cs index f9d6edeb..ef59d941 100644 --- a/QSB/ItemSync/Patches/ItemPatches.cs +++ b/QSB/ItemSync/Patches/ItemPatches.cs @@ -20,8 +20,8 @@ namespace QSB.ItemSync.Patches [HarmonyPatch(typeof(ItemTool), nameof(ItemTool.MoveItemToCarrySocket))] public static bool ItemTool_MoveItemToCarrySocket(OWItem item) { - var qsbObj = (IQSBOWItem)QSBWorldSync.GetWorldFromUnity(item); - var itemId = QSBWorldSync.GetIdFromTypeSubset(qsbObj); + var qsbObj = QSBWorldSync.GetWorldFromUnity(item); + var itemId = qsbObj.ObjectId; QSBPlayerManager.LocalPlayer.HeldItem = qsbObj; QSBEventManager.FireEvent(EventNames.QSBMoveToCarry, itemId); return true; @@ -31,9 +31,9 @@ namespace QSB.ItemSync.Patches [HarmonyPatch(typeof(ItemTool), nameof(ItemTool.SocketItem))] public static bool ItemTool_SocketItem(OWItem ____heldItem, OWItemSocket socket) { - var qsbObj = (IQSBOWItem)QSBWorldSync.GetWorldFromUnity(____heldItem); - var socketId = QSBWorldSync.GetIdFromTypeSubset((IQSBOWItemSocket)QSBWorldSync.GetWorldFromUnity(socket)); - var itemId = QSBWorldSync.GetIdFromTypeSubset(qsbObj); + var qsbObj = QSBWorldSync.GetWorldFromUnity(____heldItem); + var socketId = QSBWorldSync.GetWorldFromUnity(socket).ObjectId; + var itemId = qsbObj.ObjectId; QSBPlayerManager.LocalPlayer.HeldItem = null; QSBEventManager.FireEvent(EventNames.QSBSocketItem, socketId, itemId, SocketEventType.Socket); return true; @@ -43,9 +43,9 @@ namespace QSB.ItemSync.Patches [HarmonyPatch(typeof(ItemTool), nameof(ItemTool.StartUnsocketItem))] public static bool ItemTool_StartUnsocketItem(OWItemSocket socket) { - var item = (IQSBOWItem)QSBWorldSync.GetWorldFromUnity(socket.GetSocketedItem()); + var item = QSBWorldSync.GetWorldFromUnity(socket.GetSocketedItem()); QSBPlayerManager.LocalPlayer.HeldItem = item; - var socketId = QSBWorldSync.GetIdFromTypeSubset((IQSBOWItemSocket)QSBWorldSync.GetWorldFromUnity(socket)); + var socketId = QSBWorldSync.GetWorldFromUnity(socket).ObjectId; QSBEventManager.FireEvent(EventNames.QSBSocketItem, socketId, 0, SocketEventType.StartUnsocket); return true; } @@ -54,7 +54,7 @@ namespace QSB.ItemSync.Patches [HarmonyPatch(typeof(ItemTool), nameof(ItemTool.CompleteUnsocketItem))] public static bool ItemTool_CompleteUnsocketItem(OWItem ____heldItem) { - var itemId = QSBWorldSync.GetIdFromTypeSubset((IQSBOWItem)QSBWorldSync.GetWorldFromUnity(____heldItem)); + var itemId = QSBWorldSync.GetWorldFromUnity(____heldItem).ObjectId; QSBEventManager.FireEvent(EventNames.QSBSocketItem, 0, itemId, SocketEventType.CompleteUnsocket); return true; } @@ -90,7 +90,7 @@ namespace QSB.ItemSync.Patches var parent = (customDropTarget == null) ? targetRigidbody.transform : customDropTarget.GetItemDropTargetTransform(hit.collider.gameObject); - var objectId = QSBWorldSync.GetIdFromTypeSubset((IQSBOWItem)QSBWorldSync.GetWorldFromUnity(____heldItem)); + var objectId = QSBWorldSync.GetWorldFromUnity(____heldItem).ObjectId; ____heldItem.DropItem(hit.point, hit.normal, parent, sector, customDropTarget); ____heldItem = null; QSBPlayerManager.LocalPlayer.HeldItem = null; diff --git a/QSB/ItemSync/WorldObjects/Items/IQSBOWItem.cs b/QSB/ItemSync/WorldObjects/Items/IQSBOWItem.cs index 4fc184e0..035d43c2 100644 --- a/QSB/ItemSync/WorldObjects/Items/IQSBOWItem.cs +++ b/QSB/ItemSync/WorldObjects/Items/IQSBOWItem.cs @@ -3,7 +3,7 @@ using UnityEngine; namespace QSB.ItemSync.WorldObjects.Items { - public interface IQSBOWItem : IWorldObjectTypeSubset + public interface IQSBOWItem : IWorldObject { ItemType GetItemType(); void SetColliderActivation(bool active); diff --git a/QSB/ItemSync/WorldObjects/Items/QSBNomaiConversationStone.cs b/QSB/ItemSync/WorldObjects/Items/QSBNomaiConversationStone.cs index 97a2798e..05f8de45 100644 --- a/QSB/ItemSync/WorldObjects/Items/QSBNomaiConversationStone.cs +++ b/QSB/ItemSync/WorldObjects/Items/QSBNomaiConversationStone.cs @@ -2,11 +2,5 @@ { internal class QSBNomaiConversationStone : QSBOWItem { - public override void Init(NomaiConversationStone attachedObject, int id) - { - ObjectId = id; - AttachedObject = attachedObject; - base.Init(attachedObject, id); - } } } diff --git a/QSB/ItemSync/WorldObjects/Items/QSBOWItem.cs b/QSB/ItemSync/WorldObjects/Items/QSBOWItem.cs index cb335596..7e0ee773 100644 --- a/QSB/ItemSync/WorldObjects/Items/QSBOWItem.cs +++ b/QSB/ItemSync/WorldObjects/Items/QSBOWItem.cs @@ -17,9 +17,9 @@ namespace QSB.ItemSync.WorldObjects.Items public QSBSector InitialSector { get; private set; } public uint HoldingPlayer { get; private set; } - public override void Init(T attachedObject, int id) + public override void Init() { - if (attachedObject == null) + if (AttachedObject == null) { DebugLog.ToConsole($"Error - AttachedObject is null! Type:{GetType().Name}", OWML.Common.MessageType.Error); return; @@ -30,10 +30,10 @@ namespace QSB.ItemSync.WorldObjects.Items { FinishDelayedReady(); - InitialParent = attachedObject.transform.parent; - InitialPosition = attachedObject.transform.localPosition; - InitialRotation = attachedObject.transform.localRotation; - var initialSector = attachedObject.GetSector(); + InitialParent = AttachedObject.transform.parent; + InitialPosition = AttachedObject.transform.localPosition; + InitialRotation = AttachedObject.transform.localRotation; + var initialSector = AttachedObject.GetSector(); if (initialSector != null) { InitialSector = QSBWorldSync.GetWorldFromUnity(initialSector); @@ -41,12 +41,12 @@ namespace QSB.ItemSync.WorldObjects.Items if (InitialParent == null) { - DebugLog.ToConsole($"Warning - InitialParent of {attachedObject.name} is null!", OWML.Common.MessageType.Warning); + DebugLog.ToConsole($"Warning - InitialParent of {AttachedObject.name} is null!", OWML.Common.MessageType.Warning); } if (InitialParent?.GetComponent() != null) { - var qsbObj = (IQSBOWItemSocket)QSBWorldSync.GetWorldFromUnity(InitialParent.GetComponent()); + var qsbObj = QSBWorldSync.GetWorldFromUnity(InitialParent.GetComponent()); InitialSocket = qsbObj; } }); diff --git a/QSB/ItemSync/WorldObjects/Items/QSBScrollItem.cs b/QSB/ItemSync/WorldObjects/Items/QSBScrollItem.cs index 425f980c..ef66c5b3 100644 --- a/QSB/ItemSync/WorldObjects/Items/QSBScrollItem.cs +++ b/QSB/ItemSync/WorldObjects/Items/QSBScrollItem.cs @@ -2,13 +2,6 @@ { internal class QSBScrollItem : QSBOWItem { - public override void Init(ScrollItem attachedObject, int id) - { - ObjectId = id; - AttachedObject = attachedObject; - base.Init(attachedObject, id); - } - public override void PlaySocketAnimation() => AttachedObject.PlaySocketAnimation(); diff --git a/QSB/ItemSync/WorldObjects/Items/QSBSharedStone.cs b/QSB/ItemSync/WorldObjects/Items/QSBSharedStone.cs index fe2830f4..1b10bb63 100644 --- a/QSB/ItemSync/WorldObjects/Items/QSBSharedStone.cs +++ b/QSB/ItemSync/WorldObjects/Items/QSBSharedStone.cs @@ -2,13 +2,6 @@ { internal class QSBSharedStone : QSBOWItem { - public override void Init(SharedStone attachedObject, int id) - { - ObjectId = id; - AttachedObject = attachedObject; - base.Init(attachedObject, id); - } - public override void PlaySocketAnimation() => AttachedObject.PlaySocketAnimation(); diff --git a/QSB/ItemSync/WorldObjects/Items/QSBSimpleLanternItem.cs b/QSB/ItemSync/WorldObjects/Items/QSBSimpleLanternItem.cs index 12bf9c7b..782dbf3e 100644 --- a/QSB/ItemSync/WorldObjects/Items/QSBSimpleLanternItem.cs +++ b/QSB/ItemSync/WorldObjects/Items/QSBSimpleLanternItem.cs @@ -2,13 +2,6 @@ { internal class QSBSimpleLanternItem : QSBOWItem { - public override void Init(SimpleLanternItem attachedObject, int id) - { - ObjectId = id; - AttachedObject = attachedObject; - base.Init(attachedObject, id); - } - public override void PlaySocketAnimation() => AttachedObject.PlaySocketAnimation(); diff --git a/QSB/ItemSync/WorldObjects/Items/QSBSlideReelItem.cs b/QSB/ItemSync/WorldObjects/Items/QSBSlideReelItem.cs index 41735ea0..ae7ceefc 100644 --- a/QSB/ItemSync/WorldObjects/Items/QSBSlideReelItem.cs +++ b/QSB/ItemSync/WorldObjects/Items/QSBSlideReelItem.cs @@ -2,13 +2,6 @@ { internal class QSBSlideReelItem : QSBOWItem { - public override void Init(SlideReelItem attachedObject, int id) - { - ObjectId = id; - AttachedObject = attachedObject; - base.Init(attachedObject, id); - } - public override void PlaySocketAnimation() => AttachedObject.PlaySocketAnimation(); diff --git a/QSB/ItemSync/WorldObjects/Items/QSBWarpCoreItem.cs b/QSB/ItemSync/WorldObjects/Items/QSBWarpCoreItem.cs index 3be29380..e82308bf 100644 --- a/QSB/ItemSync/WorldObjects/Items/QSBWarpCoreItem.cs +++ b/QSB/ItemSync/WorldObjects/Items/QSBWarpCoreItem.cs @@ -2,13 +2,6 @@ { internal class QSBWarpCoreItem : QSBOWItem { - public override void Init(WarpCoreItem attachedObject, int id) - { - ObjectId = id; - AttachedObject = attachedObject; - base.Init(attachedObject, id); - } - public bool IsVesselCoreType() => AttachedObject.IsVesselCoreType(); } diff --git a/QSB/ItemSync/WorldObjects/Sockets/IQSBOWItemSocket.cs b/QSB/ItemSync/WorldObjects/Sockets/IQSBOWItemSocket.cs index a1cc6887..ba51ec1e 100644 --- a/QSB/ItemSync/WorldObjects/Sockets/IQSBOWItemSocket.cs +++ b/QSB/ItemSync/WorldObjects/Sockets/IQSBOWItemSocket.cs @@ -3,7 +3,7 @@ using QSB.WorldSync; namespace QSB.ItemSync.WorldObjects.Sockets { - public interface IQSBOWItemSocket : IWorldObjectTypeSubset + public interface IQSBOWItemSocket : IWorldObject { bool AcceptsItem(IQSBOWItem item); bool IsSocketOccupied(); diff --git a/QSB/ItemSync/WorldObjects/Sockets/QSBNomaiConversationStoneSocket.cs b/QSB/ItemSync/WorldObjects/Sockets/QSBNomaiConversationStoneSocket.cs index bc48b86e..8a678bd1 100644 --- a/QSB/ItemSync/WorldObjects/Sockets/QSBNomaiConversationStoneSocket.cs +++ b/QSB/ItemSync/WorldObjects/Sockets/QSBNomaiConversationStoneSocket.cs @@ -2,11 +2,5 @@ { internal class QSBNomaiConversationStoneSocket : QSBOWItemSocket { - public override void Init(NomaiConversationStoneSocket attachedObject, int id) - { - ObjectId = id; - AttachedObject = attachedObject; - base.Init(attachedObject, id); - } } } diff --git a/QSB/ItemSync/WorldObjects/Sockets/QSBOWItemDoubleSocket.cs b/QSB/ItemSync/WorldObjects/Sockets/QSBOWItemDoubleSocket.cs index 7ca06e54..9aaa0571 100644 --- a/QSB/ItemSync/WorldObjects/Sockets/QSBOWItemDoubleSocket.cs +++ b/QSB/ItemSync/WorldObjects/Sockets/QSBOWItemDoubleSocket.cs @@ -6,8 +6,6 @@ namespace QSB.ItemSync.WorldObjects.Sockets internal class QSBOWItemDoubleSocket : WorldObject, IQSBOWItemSocket where T : OWItemSocket { - public override void Init(T attachedObject, int id) { } - public virtual bool AcceptsItem(IQSBOWItem item) { var itemType = item.GetItemType(); @@ -19,9 +17,9 @@ namespace QSB.ItemSync.WorldObjects.Sockets => AttachedObject.IsSocketOccupied(); public virtual bool PlaceIntoSocket(IQSBOWItem item) - => AttachedObject.PlaceIntoSocket((OWItem)(item as IWorldObject).ReturnObject()); + => AttachedObject.PlaceIntoSocket((OWItem)item.ReturnObject()); public virtual IQSBOWItem RemoveFromSocket() - => (IQSBOWItem)QSBWorldSync.GetWorldFromUnity(AttachedObject.RemoveFromSocket()); + => QSBWorldSync.GetWorldFromUnity(AttachedObject.RemoveFromSocket()); } } diff --git a/QSB/ItemSync/WorldObjects/Sockets/QSBOWItemSocket.cs b/QSB/ItemSync/WorldObjects/Sockets/QSBOWItemSocket.cs index 545e8ca1..a0ef9b9b 100644 --- a/QSB/ItemSync/WorldObjects/Sockets/QSBOWItemSocket.cs +++ b/QSB/ItemSync/WorldObjects/Sockets/QSBOWItemSocket.cs @@ -6,8 +6,6 @@ namespace QSB.ItemSync.WorldObjects.Sockets internal class QSBOWItemSocket : WorldObject, IQSBOWItemSocket where T : OWItemSocket { - public override void Init(T attachedObject, int id) { } - public virtual bool AcceptsItem(IQSBOWItem item) { var itemType = item.GetItemType(); @@ -19,9 +17,9 @@ namespace QSB.ItemSync.WorldObjects.Sockets => AttachedObject.IsSocketOccupied(); public virtual bool PlaceIntoSocket(IQSBOWItem item) - => AttachedObject.PlaceIntoSocket((OWItem)(item as IWorldObject).ReturnObject()); + => AttachedObject.PlaceIntoSocket((OWItem)item.ReturnObject()); public virtual IQSBOWItem RemoveFromSocket() - => (IQSBOWItem)QSBWorldSync.GetWorldFromUnity(AttachedObject.RemoveFromSocket()); + => QSBWorldSync.GetWorldFromUnity(AttachedObject.RemoveFromSocket()); } } diff --git a/QSB/ItemSync/WorldObjects/Sockets/QSBScrollSocket.cs b/QSB/ItemSync/WorldObjects/Sockets/QSBScrollSocket.cs index 79755b9d..b6bc98b1 100644 --- a/QSB/ItemSync/WorldObjects/Sockets/QSBScrollSocket.cs +++ b/QSB/ItemSync/WorldObjects/Sockets/QSBScrollSocket.cs @@ -2,11 +2,5 @@ { internal class QSBScrollSocket : QSBOWItemSocket { - public override void Init(ScrollSocket attachedObject, int id) - { - ObjectId = id; - AttachedObject = attachedObject; - base.Init(attachedObject, id); - } } } diff --git a/QSB/ItemSync/WorldObjects/Sockets/QSBSharedStoneSocket.cs b/QSB/ItemSync/WorldObjects/Sockets/QSBSharedStoneSocket.cs index 357b3a0b..3efe3002 100644 --- a/QSB/ItemSync/WorldObjects/Sockets/QSBSharedStoneSocket.cs +++ b/QSB/ItemSync/WorldObjects/Sockets/QSBSharedStoneSocket.cs @@ -2,11 +2,5 @@ { internal class QSBSharedStoneSocket : QSBOWItemSocket { - public override void Init(SharedStoneSocket attachedObject, int id) - { - ObjectId = id; - AttachedObject = attachedObject; - base.Init(attachedObject, id); - } } } diff --git a/QSB/ItemSync/WorldObjects/Sockets/QSBSlideProjectorSocket.cs b/QSB/ItemSync/WorldObjects/Sockets/QSBSlideProjectorSocket.cs index 6d353c95..87e6aefd 100644 --- a/QSB/ItemSync/WorldObjects/Sockets/QSBSlideProjectorSocket.cs +++ b/QSB/ItemSync/WorldObjects/Sockets/QSBSlideProjectorSocket.cs @@ -2,11 +2,5 @@ { internal class QSBSlideProjectorSocket : QSBOWItemDoubleSocket { - public override void Init(SlideProjectorSocket attachedObject, int id) - { - ObjectId = id; - AttachedObject = attachedObject; - base.Init(attachedObject, id); - } } } diff --git a/QSB/ItemSync/WorldObjects/Sockets/QSBSlideReelSocket.cs b/QSB/ItemSync/WorldObjects/Sockets/QSBSlideReelSocket.cs index 72ed11e3..de18c9ee 100644 --- a/QSB/ItemSync/WorldObjects/Sockets/QSBSlideReelSocket.cs +++ b/QSB/ItemSync/WorldObjects/Sockets/QSBSlideReelSocket.cs @@ -2,11 +2,5 @@ { internal class QSBSlideReelSocket : QSBOWItemSocket { - public override void Init(SlideReelSocket attachedObject, int id) - { - ObjectId = id; - AttachedObject = attachedObject; - base.Init(attachedObject, id); - } } } diff --git a/QSB/ItemSync/WorldObjects/Sockets/QSBWarpCoreSocket.cs b/QSB/ItemSync/WorldObjects/Sockets/QSBWarpCoreSocket.cs index 5afa4e20..e834888c 100644 --- a/QSB/ItemSync/WorldObjects/Sockets/QSBWarpCoreSocket.cs +++ b/QSB/ItemSync/WorldObjects/Sockets/QSBWarpCoreSocket.cs @@ -2,11 +2,5 @@ { internal class QSBWarpCoreSocket : QSBOWItemSocket { - public override void Init(WarpCoreSocket attachedObject, int id) - { - ObjectId = id; - AttachedObject = attachedObject; - base.Init(attachedObject, id); - } } } diff --git a/QSB/JellyfishSync/TransformSync/JellyfishTransformSync.cs b/QSB/JellyfishSync/TransformSync/JellyfishTransformSync.cs index 9114b439..25648ef2 100644 --- a/QSB/JellyfishSync/TransformSync/JellyfishTransformSync.cs +++ b/QSB/JellyfishSync/TransformSync/JellyfishTransformSync.cs @@ -16,6 +16,7 @@ namespace QSB.JellyfishSync.TransformSync public override bool IsPlayerObject => false; private QSBJellyfish _qsbJellyfish; + public static readonly List Jellyfish = new(); private static readonly List _instances = new(); protected override OWRigidbody GetRigidbody() @@ -37,7 +38,7 @@ namespace QSB.JellyfishSync.TransformSync protected override void Init() { - _qsbJellyfish = QSBWorldSync.GetWorldFromId(_instances.IndexOf(this)); + _qsbJellyfish = QSBWorldSync.GetWorldFromUnity(Jellyfish[_instances.IndexOf(this)]); _qsbJellyfish.TransformSync = this; base.Init(); diff --git a/QSB/JellyfishSync/WorldObjects/QSBJellyfish.cs b/QSB/JellyfishSync/WorldObjects/QSBJellyfish.cs index 53f801c1..cc94b169 100644 --- a/QSB/JellyfishSync/WorldObjects/QSBJellyfish.cs +++ b/QSB/JellyfishSync/WorldObjects/QSBJellyfish.cs @@ -11,12 +11,11 @@ namespace QSB.JellyfishSync.WorldObjects public JellyfishTransformSync TransformSync; private AlignWithTargetBody _alignWithTargetBody; - public override void Init(JellyfishController attachedObject, int id) + public override void Init() { - ObjectId = id; - AttachedObject = attachedObject; _alignWithTargetBody = AttachedObject.GetRequiredComponent(); + JellyfishTransformSync.Jellyfish.Add(AttachedObject); if (QSBCore.IsHost) { QNetworkServer.Spawn(Object.Instantiate(QSBNetworkManager.Instance.JellyfishPrefab)); @@ -39,6 +38,7 @@ namespace QSB.JellyfishSync.WorldObjects public override void OnRemoval() { + JellyfishTransformSync.Jellyfish.Remove(AttachedObject); if (QSBCore.IsHost) { TransformSync.NetIdentity.UnregisterAuthQueue(); diff --git a/QSB/MeteorSync/WorldObjects/QSBFragment.cs b/QSB/MeteorSync/WorldObjects/QSBFragment.cs index bb95c0a6..ccec51ae 100644 --- a/QSB/MeteorSync/WorldObjects/QSBFragment.cs +++ b/QSB/MeteorSync/WorldObjects/QSBFragment.cs @@ -5,10 +5,8 @@ namespace QSB.MeteorSync.WorldObjects { public class QSBFragment : WorldObject { - public override void Init(FragmentIntegrity attachedObject, int id) + public override void Init() { - ObjectId = id; - AttachedObject = attachedObject; DetachableFragment = AttachedObject.GetComponent(); if (QSBCore.IsHost) diff --git a/QSB/MeteorSync/WorldObjects/QSBMeteor.cs b/QSB/MeteorSync/WorldObjects/QSBMeteor.cs index f3214007..4ea4b704 100644 --- a/QSB/MeteorSync/WorldObjects/QSBMeteor.cs +++ b/QSB/MeteorSync/WorldObjects/QSBMeteor.cs @@ -5,12 +5,6 @@ namespace QSB.MeteorSync.WorldObjects { public class QSBMeteor : WorldObject { - public override void Init(MeteorController attachedObject, int id) - { - ObjectId = id; - AttachedObject = attachedObject; - } - public static bool IsSpecialImpact(GameObject go) => go == Locator.GetPlayerCollider().gameObject || go == Locator.GetProbe()._anchor._collider.gameObject; diff --git a/QSB/MeteorSync/WorldObjects/QSBMeteorLauncher.cs b/QSB/MeteorSync/WorldObjects/QSBMeteorLauncher.cs index a2321a5b..d9a2903c 100644 --- a/QSB/MeteorSync/WorldObjects/QSBMeteorLauncher.cs +++ b/QSB/MeteorSync/WorldObjects/QSBMeteorLauncher.cs @@ -4,12 +4,6 @@ namespace QSB.MeteorSync.WorldObjects { public class QSBMeteorLauncher : WorldObject { - public override void Init(MeteorLauncher attachedObject, int id) - { - ObjectId = id; - AttachedObject = attachedObject; - } - public int MeteorId; public float LaunchSpeed; diff --git a/QSB/OrbSync/WorldObjects/QSBOrbSlot.cs b/QSB/OrbSync/WorldObjects/QSBOrbSlot.cs index 65c5a5c9..58f64047 100644 --- a/QSB/OrbSync/WorldObjects/QSBOrbSlot.cs +++ b/QSB/OrbSync/WorldObjects/QSBOrbSlot.cs @@ -11,10 +11,8 @@ namespace QSB.OrbSync.WorldObjects private bool _initialized; - public override void Init(NomaiInterfaceSlot slot, int id) + public override void Init() { - ObjectId = id; - AttachedObject = slot; _initialized = true; } diff --git a/QSB/Player/Events/RequestStateResyncEvent.cs b/QSB/Player/Events/RequestStateResyncEvent.cs index a590ff98..0dc2925e 100644 --- a/QSB/Player/Events/RequestStateResyncEvent.cs +++ b/QSB/Player/Events/RequestStateResyncEvent.cs @@ -108,11 +108,8 @@ namespace QSB.Player.Events => QSBEventManager.FireEvent(EventNames.QSBTextTranslated, NomaiTextType.VesselComputer, vesselComputer.ObjectId, id)); } - var list = QSBWorldSync.GetWorldObjects().ToList(); - for (var i = 0; i < list.Count; i++) - { - QSBEventManager.FireEvent(EventNames.QSBQuantumAuthority, i, list[i].ControllingPlayer); - } + QSBWorldSync.GetWorldObjects().ForEach(x + => QSBEventManager.FireEvent(EventNames.QSBQuantumAuthority, x.ObjectId, x.ControllingPlayer)); QSBWorldSync.GetWorldObjects().ForEach(campfire => QSBEventManager.FireEvent(EventNames.QSBCampfireState, campfire.ObjectId, campfire.GetState())); diff --git a/QSB/Player/PlayerEntanglementWatcher.cs b/QSB/Player/PlayerEntanglementWatcher.cs index 8fa44700..0ca9e1f7 100644 --- a/QSB/Player/PlayerEntanglementWatcher.cs +++ b/QSB/Player/PlayerEntanglementWatcher.cs @@ -27,7 +27,7 @@ namespace QSB.Player if (_previousCollidingQuantumObject != collidingQuantumObject) { var objectIndex = (collidingQuantumObject != null) - ? QSBWorldSync.GetIdFromTypeSubset((IQSBQuantumObject)QSBWorldSync.GetWorldFromUnity(collidingQuantumObject)) + ? QSBWorldSync.GetWorldFromUnity(collidingQuantumObject).ObjectId : -1; QSBEventManager.FireEvent( diff --git a/QSB/Player/QSBPlayerManager.cs b/QSB/Player/QSBPlayerManager.cs index 6895a1da..59a5361c 100644 --- a/QSB/Player/QSBPlayerManager.cs +++ b/QSB/Player/QSBPlayerManager.cs @@ -51,22 +51,21 @@ namespace QSB.Player } var player = PlayerList.FirstOrDefault(x => x.PlayerId == id); - if (player != null) + if (player == null) { - return player; - } - - if (!QSBCore.IsInMultiplayer) - { - DebugLog.ToConsole($"Error - Tried to create player id:{id} when not in multiplayer! Stacktrace : {Environment.StackTrace}", MessageType.Error); + DebugLog.ToConsole($"Error - Player with id {id} does not exist! Stacktrace : {Environment.StackTrace}", MessageType.Error); return default; } + return player; + } + + public static void AddPlayer(uint id) + { DebugLog.DebugWrite($"Create Player : id<{id}>", MessageType.Info); - player = new PlayerInfo(id); + var player = new PlayerInfo(id); PlayerList.Add(player); OnAddPlayer?.Invoke(id); - return player; } public static void RemovePlayer(uint id) diff --git a/QSB/Player/TransformSync/PlayerTransformSync.cs b/QSB/Player/TransformSync/PlayerTransformSync.cs index 8c90ead7..ef2e0209 100644 --- a/QSB/Player/TransformSync/PlayerTransformSync.cs +++ b/QSB/Player/TransformSync/PlayerTransformSync.cs @@ -50,6 +50,7 @@ namespace QSB.Player.TransformSync public override void Start() { base.Start(); + QSBPlayerManager.AddPlayer(PlayerId); Player.TransformSync = this; } diff --git a/QSB/QSBNetworkManager.cs b/QSB/QSBNetworkManager.cs index 4843755f..13fc7025 100644 --- a/QSB/QSBNetworkManager.cs +++ b/QSB/QSBNetworkManager.cs @@ -277,8 +277,7 @@ namespace QSB private void RemoveWorldObjects() { - QSBWorldSync.RemoveWorldObjects(); - QSBWorldSync.RemoveWorldObjects(); + QSBWorldSync.RemoveWorldObjects(); foreach (var platform in QSBWorldSync.GetUnityObjects()) { Destroy(platform); diff --git a/QSB/QuantumSync/QuantumManager.cs b/QSB/QuantumSync/QuantumManager.cs index e525d100..b335ad37 100644 --- a/QSB/QuantumSync/QuantumManager.cs +++ b/QSB/QuantumSync/QuantumManager.cs @@ -83,7 +83,7 @@ namespace QSB.QuantumSync { if (quantumObject.IsEnabled) { - Popcron.Gizmos.Line((quantumObject as IWorldObject).ReturnObject().transform.position, + Popcron.Gizmos.Line(quantumObject.ReturnObject().transform.position, QSBPlayerManager.LocalPlayer.Body.transform.position, Color.magenta * 0.25f); } @@ -91,7 +91,7 @@ namespace QSB.QuantumSync continue; } - Popcron.Gizmos.Line((quantumObject as IWorldObject).ReturnObject().transform.position, + Popcron.Gizmos.Line(quantumObject.ReturnObject().transform.position, QSBPlayerManager.GetPlayer(quantumObject.ControllingPlayer).Body.transform.position, Color.magenta); } @@ -151,7 +151,7 @@ namespace QSB.QuantumSync return Enumerable.Empty(); } - var worldObj = (IQSBQuantumObject)QSBWorldSync.GetWorldFromUnity(obj); + var worldObj = QSBWorldSync.GetWorldFromUnity(obj); return QSBPlayerManager.PlayerList.Where(x => x.EntangledObject == worldObj); } } diff --git a/QSB/QuantumSync/WorldObjects/IQSBQuantumObject.cs b/QSB/QuantumSync/WorldObjects/IQSBQuantumObject.cs index 8d314a44..3d38c3f9 100644 --- a/QSB/QuantumSync/WorldObjects/IQSBQuantumObject.cs +++ b/QSB/QuantumSync/WorldObjects/IQSBQuantumObject.cs @@ -3,7 +3,7 @@ using System.Collections.Generic; namespace QSB.QuantumSync { - public interface IQSBQuantumObject : IWorldObjectTypeSubset + public interface IQSBQuantumObject : IWorldObject { uint ControllingPlayer { get; set; } bool IsEnabled { get; set; } diff --git a/QSB/QuantumSync/WorldObjects/QSBEyeProxyQuantumMoon.cs b/QSB/QuantumSync/WorldObjects/QSBEyeProxyQuantumMoon.cs index 6f21d9c0..7166b578 100644 --- a/QSB/QuantumSync/WorldObjects/QSBEyeProxyQuantumMoon.cs +++ b/QSB/QuantumSync/WorldObjects/QSBEyeProxyQuantumMoon.cs @@ -4,12 +4,10 @@ namespace QSB.QuantumSync.WorldObjects { internal class QSBEyeProxyQuantumMoon : QSBQuantumObject { - public override void Init(EyeProxyQuantumMoon moonObject, int id) + public override void Init() { - ObjectId = id; - AttachedObject = moonObject; ControllingPlayer = QSBPlayerManager.LocalPlayerId; - base.Init(moonObject, id); + base.Init(); } } } diff --git a/QSB/QuantumSync/WorldObjects/QSBMultiStateQuantumObject.cs b/QSB/QuantumSync/WorldObjects/QSBMultiStateQuantumObject.cs index 5bb22d7e..71ecf9ce 100644 --- a/QSB/QuantumSync/WorldObjects/QSBMultiStateQuantumObject.cs +++ b/QSB/QuantumSync/WorldObjects/QSBMultiStateQuantumObject.cs @@ -21,17 +21,14 @@ namespace QSB.QuantumSync.WorldObjects } } - public override void Init(MultiStateQuantumObject attachedObject, int id) + public override void Init() { - ObjectId = id; - AttachedObject = attachedObject; - if (QSBCore.ShowQuantumDebugBoxes) { - DebugBoxText = DebugBoxManager.CreateBox(AttachedObject.transform, 0, $"Multistate\r\nid:{id}\r\nstate:{CurrentState}").GetComponent(); + DebugBoxText = DebugBoxManager.CreateBox(AttachedObject.transform, 0, $"Multistate\r\nid:{ObjectId}\r\nstate:{CurrentState}").GetComponent(); } - base.Init(attachedObject, id); + base.Init(); StartDelayedReady(); QSBCore.UnityEvents.RunWhen(() => WorldObjectManager.AllObjectsAdded, () => diff --git a/QSB/QuantumSync/WorldObjects/QSBQuantumMoon.cs b/QSB/QuantumSync/WorldObjects/QSBQuantumMoon.cs index 184cedfb..3e4572ee 100644 --- a/QSB/QuantumSync/WorldObjects/QSBQuantumMoon.cs +++ b/QSB/QuantumSync/WorldObjects/QSBQuantumMoon.cs @@ -5,14 +5,12 @@ namespace QSB.QuantumSync.WorldObjects { internal class QSBQuantumMoon : QSBQuantumObject { - public override void Init(QuantumMoon moonObject, int id) + public override void Init() { - ObjectId = id; - AttachedObject = moonObject; ControllingPlayer = QSBCore.IsHost ? QSBPlayerManager.LocalPlayerId : QSBPlayerManager.PlayerList.OrderBy(x => x.PlayerId).First().PlayerId; - base.Init(moonObject, id); + base.Init(); } } } diff --git a/QSB/QuantumSync/WorldObjects/QSBQuantumObject.cs b/QSB/QuantumSync/WorldObjects/QSBQuantumObject.cs index 87c42343..68b70870 100644 --- a/QSB/QuantumSync/WorldObjects/QSBQuantumObject.cs +++ b/QSB/QuantumSync/WorldObjects/QSBQuantumObject.cs @@ -24,7 +24,7 @@ namespace QSB.QuantumSync.WorldObjects } } - public override void Init(T attachedObject, int id) + public override void Init() { var debugBundle = QSBCore.DebugAssetBundle; var sphere = debugBundle.LoadAsset("Assets/Prefabs/Sphere.prefab"); @@ -82,11 +82,13 @@ namespace QSB.QuantumSync.WorldObjects } } + StartDelayedReady(); QSBCore.UnityEvents.FireInNUpdates(LateInit, 5); } private void LateInit() { + FinishDelayedReady(); foreach (var shape in GetAttachedShapes()) { shape.OnShapeActivated += OnEnable; @@ -171,7 +173,7 @@ namespace QSB.QuantumSync.WorldObjects return; } - var id = QSBWorldSync.GetIdFromTypeSubset(this); + var id = ObjectId; // no one is controlling this object right now, request authority QSBEventManager.FireEvent(EventNames.QSBQuantumAuthority, id, QSBPlayerManager.LocalPlayerId); } @@ -200,7 +202,7 @@ namespace QSB.QuantumSync.WorldObjects return; } - var id = QSBWorldSync.GetIdFromTypeSubset(this); + var id = ObjectId; // send event to other players that we're releasing authority QSBEventManager.FireEvent(EventNames.QSBQuantumAuthority, id, 0u); } diff --git a/QSB/QuantumSync/WorldObjects/QSBQuantumShuffleObject.cs b/QSB/QuantumSync/WorldObjects/QSBQuantumShuffleObject.cs index e663b87c..b02fed69 100644 --- a/QSB/QuantumSync/WorldObjects/QSBQuantumShuffleObject.cs +++ b/QSB/QuantumSync/WorldObjects/QSBQuantumShuffleObject.cs @@ -5,13 +5,6 @@ namespace QSB.QuantumSync.WorldObjects { internal class QSBQuantumShuffleObject : QSBQuantumObject { - public override void Init(QuantumShuffleObject shuffleObject, int id) - { - ObjectId = id; - AttachedObject = shuffleObject; - base.Init(shuffleObject, id); - } - public void ShuffleObjects(int[] indexArray) { var shuffledObjects = AttachedObject.GetValue("_shuffledObjects"); diff --git a/QSB/QuantumSync/WorldObjects/QSBQuantumSocket.cs b/QSB/QuantumSync/WorldObjects/QSBQuantumSocket.cs index 69ef33d9..5c1d2336 100644 --- a/QSB/QuantumSync/WorldObjects/QSBQuantumSocket.cs +++ b/QSB/QuantumSync/WorldObjects/QSBQuantumSocket.cs @@ -5,10 +5,8 @@ namespace QSB.QuantumSync.WorldObjects { internal class QSBQuantumSocket : WorldObject { - public override void Init(QuantumSocket quantumSocket, int id) + public override void Init() { - ObjectId = id; - AttachedObject = quantumSocket; AttachedObject.GetType().SetValue("_randomYRotation", false); } } diff --git a/QSB/QuantumSync/WorldObjects/QSBQuantumState.cs b/QSB/QuantumSync/WorldObjects/QSBQuantumState.cs index 4461b5a2..c05ae8ac 100644 --- a/QSB/QuantumSync/WorldObjects/QSBQuantumState.cs +++ b/QSB/QuantumSync/WorldObjects/QSBQuantumState.cs @@ -6,12 +6,6 @@ namespace QSB.QuantumSync.WorldObjects { public bool IsMeantToBeEnabled; - public override void Init(QuantumState state, int id) - { - ObjectId = id; - AttachedObject = state; - } - public void SetVisible(bool visible) { IsMeantToBeEnabled = visible; diff --git a/QSB/QuantumSync/WorldObjects/QSBSocketedQuantumObject.cs b/QSB/QuantumSync/WorldObjects/QSBSocketedQuantumObject.cs index 621881c9..89f38cfd 100644 --- a/QSB/QuantumSync/WorldObjects/QSBSocketedQuantumObject.cs +++ b/QSB/QuantumSync/WorldObjects/QSBSocketedQuantumObject.cs @@ -13,11 +13,9 @@ namespace QSB.QuantumSync.WorldObjects { public Text DebugBoxText; - public override void Init(SocketedQuantumObject quantumObject, int id) + public override void Init() { - ObjectId = id; - AttachedObject = quantumObject; - base.Init(quantumObject, id); + base.Init(); if (QSBCore.ShowQuantumDebugBoxes) { DebugBoxText = DebugBoxManager.CreateBox(AttachedObject.transform, 0, $"Socketed\r\nid:{ObjectId}").GetComponent(); diff --git a/QSB/SectorSync/WorldObjects/QSBSector.cs b/QSB/SectorSync/WorldObjects/QSBSector.cs index 0a85a8e5..cbb2aabc 100644 --- a/QSB/SectorSync/WorldObjects/QSBSector.cs +++ b/QSB/SectorSync/WorldObjects/QSBSector.cs @@ -27,10 +27,8 @@ namespace QSB.SectorSync.WorldObjects public Vector3 Position => Transform.position; public bool IsFakeSector => AttachedObject.GetType() == typeof(FakeSector); - public override void Init(Sector sector, int id) + public override void Init() { - ObjectId = id; - AttachedObject = sector; if (IsFakeSector) { QSBSectorManager.Instance.FakeSectors.Add(this); diff --git a/QSB/ShipSync/WorldObjects/QSBShipComponent.cs b/QSB/ShipSync/WorldObjects/QSBShipComponent.cs index 15bba4e0..5b193859 100644 --- a/QSB/ShipSync/WorldObjects/QSBShipComponent.cs +++ b/QSB/ShipSync/WorldObjects/QSBShipComponent.cs @@ -6,12 +6,6 @@ namespace QSB.ShipSync.WorldObjects { internal class QSBShipComponent : WorldObject { - public override void Init(ShipComponent component, int id) - { - ObjectId = id; - AttachedObject = component; - } - public void SetDamaged() { DebugLog.DebugWrite($"[S COMPONENT] {AttachedObject} Set damaged."); diff --git a/QSB/ShipSync/WorldObjects/QSBShipHull.cs b/QSB/ShipSync/WorldObjects/QSBShipHull.cs index 01b69f40..3f928bcc 100644 --- a/QSB/ShipSync/WorldObjects/QSBShipHull.cs +++ b/QSB/ShipSync/WorldObjects/QSBShipHull.cs @@ -6,12 +6,6 @@ namespace QSB.ShipSync.WorldObjects { internal class QSBShipHull : WorldObject { - public override void Init(ShipHull hull, int id) - { - ObjectId = id; - AttachedObject = hull; - } - public void SetDamaged() { DebugLog.DebugWrite($"[HULL] {AttachedObject} Set damaged."); diff --git a/QSB/Tools/ProbeLauncherTool/WorldObjects/QSBProbeLauncher.cs b/QSB/Tools/ProbeLauncherTool/WorldObjects/QSBProbeLauncher.cs index f703712b..c3517b02 100644 --- a/QSB/Tools/ProbeLauncherTool/WorldObjects/QSBProbeLauncher.cs +++ b/QSB/Tools/ProbeLauncherTool/WorldObjects/QSBProbeLauncher.cs @@ -12,10 +12,8 @@ namespace QSB.Tools.ProbeLauncherTool.WorldObjects private ProbeLauncherEffects _effects; private SingularityWarpEffect _probeRetrievalEffect; - public override void Init(ProbeLauncher launcher, int id) + public override void Init() { - ObjectId = id; - AttachedObject = launcher; _probeRetrievalLength = AttachedObject.GetValue("_probeRetrievalLength"); _preLaunchProbeProxy = AttachedObject.GetValue("_preLaunchProbeProxy"); _effects = AttachedObject.GetValue("_effects"); diff --git a/QSB/Tools/TranslatorTool/TranslationSync/WorldObjects/QSBComputer.cs b/QSB/Tools/TranslatorTool/TranslationSync/WorldObjects/QSBComputer.cs index 7f645870..7e6cd03d 100644 --- a/QSB/Tools/TranslatorTool/TranslationSync/WorldObjects/QSBComputer.cs +++ b/QSB/Tools/TranslatorTool/TranslationSync/WorldObjects/QSBComputer.cs @@ -6,12 +6,6 @@ namespace QSB.Tools.TranslatorTool.TranslationSync.WorldObjects { internal class QSBComputer : WorldObject { - public override void Init(NomaiComputer computer, int id) - { - ObjectId = id; - AttachedObject = computer; - } - public void HandleSetAsTranslated(int id) { if (AttachedObject.IsTranslated(id)) diff --git a/QSB/Tools/TranslatorTool/TranslationSync/WorldObjects/QSBVesselComputer.cs b/QSB/Tools/TranslatorTool/TranslationSync/WorldObjects/QSBVesselComputer.cs index e50b64fd..f993e914 100644 --- a/QSB/Tools/TranslatorTool/TranslationSync/WorldObjects/QSBVesselComputer.cs +++ b/QSB/Tools/TranslatorTool/TranslationSync/WorldObjects/QSBVesselComputer.cs @@ -7,12 +7,6 @@ namespace QSB.Tools.TranslatorTool.TranslationSync.WorldObjects { internal class QSBVesselComputer : WorldObject { - public override void Init(NomaiVesselComputer computer, int id) - { - ObjectId = id; - AttachedObject = computer; - } - public void HandleSetAsTranslated(int id) { if (AttachedObject.IsTranslated(id)) diff --git a/QSB/Tools/TranslatorTool/TranslationSync/WorldObjects/QSBWallText.cs b/QSB/Tools/TranslatorTool/TranslationSync/WorldObjects/QSBWallText.cs index 249ffc04..2102f50d 100644 --- a/QSB/Tools/TranslatorTool/TranslationSync/WorldObjects/QSBWallText.cs +++ b/QSB/Tools/TranslatorTool/TranslationSync/WorldObjects/QSBWallText.cs @@ -6,12 +6,6 @@ namespace QSB.Tools.TranslatorTool.TranslationSync.WorldObjects { internal class QSBWallText : WorldObject { - public override void Init(NomaiWallText wallText, int id) - { - ObjectId = id; - AttachedObject = wallText; - } - public void HandleSetAsTranslated(int id) { if (AttachedObject.IsTranslated(id)) diff --git a/QSB/TornadoSync/WorldObjects/QSBTornado.cs b/QSB/TornadoSync/WorldObjects/QSBTornado.cs index 4295be74..2b97199b 100644 --- a/QSB/TornadoSync/WorldObjects/QSBTornado.cs +++ b/QSB/TornadoSync/WorldObjects/QSBTornado.cs @@ -4,12 +4,6 @@ namespace QSB.TornadoSync.WorldObjects { public class QSBTornado : WorldObject { - public override void Init(TornadoController attachedObject, int id) - { - ObjectId = id; - AttachedObject = attachedObject; - } - public bool FormState { get => AttachedObject._tornadoRoot.activeSelf // forming or formed or collapsing diff --git a/QSB/WorldSync/IWorldObjectTypeSubset.cs b/QSB/WorldSync/IWorldObjectTypeSubset.cs deleted file mode 100644 index a4fe56c2..00000000 --- a/QSB/WorldSync/IWorldObjectTypeSubset.cs +++ /dev/null @@ -1,4 +0,0 @@ -namespace QSB.WorldSync -{ - public interface IWorldObjectTypeSubset { } -} diff --git a/QSB/WorldSync/QSBWorldSync.cs b/QSB/WorldSync/QSBWorldSync.cs index 13348a41..02c487df 100644 --- a/QSB/WorldSync/QSBWorldSync.cs +++ b/QSB/WorldSync/QSBWorldSync.cs @@ -20,47 +20,25 @@ namespace QSB.WorldSync private static readonly Dictionary WorldObjectsToUnityObjects = new(); public static IEnumerable GetWorldObjects() + where TWorldObject : IWorldObject => WorldObjects.OfType(); public static TWorldObject GetWorldFromId(int id) + where TWorldObject : IWorldObject { - var worldObjects = GetWorldObjects().ToList(); - if (id < 0 || id >= worldObjects.Count) + if (id < 0 || id >= WorldObjects.Count) { - DebugLog.ToConsole($"Warning - Tried to find {typeof(TWorldObject).Name} id {id}. Count is {worldObjects.Count}.", MessageType.Warning); + DebugLog.ToConsole($"Warning - Tried to find {typeof(TWorldObject).Name} id {id}. Count is {WorldObjects.Count}.", MessageType.Warning); return default; } - return worldObjects[id]; - } - - public static IWorldObject GetWorldFromUnity(MonoBehaviour unityObject) - { - if (unityObject == null) + if (WorldObjects[id] is not TWorldObject worldObject) { - DebugLog.ToConsole($"Error - Trying to run GetWorldFromUnity with a null unity object! TUnityObject:NULL, Stacktrace:\r\n{Environment.StackTrace}", MessageType.Error); + DebugLog.ToConsole($"Error - {typeof(TWorldObject).Name} id {id} is actually {WorldObjects[id].GetType().Name}.", MessageType.Error); return default; } - if (!QSBCore.IsInMultiplayer) - { - DebugLog.ToConsole($"Warning - Trying to run GetWorldFromUnity while not in multiplayer! TUnityObject:{unityObject.GetType().Name}, Stacktrace:\r\n{Environment.StackTrace}", MessageType.Warning); - return default; - } - - if (!WorldObjectsToUnityObjects.TryGetValue(unityObject, out var returnObject)) - { - DebugLog.ToConsole($"Error - WorldObjectsToUnityObjects does not contain \"{unityObject.name}\"! TUnityObject:{unityObject.GetType().Name}, Stacktrace:\r\n{Environment.StackTrace}", MessageType.Error); - return default; - } - - if (returnObject == null) - { - DebugLog.ToConsole($"Error - World object for unity object {unityObject.name} is null! TUnityObject:{unityObject.GetType().Name}, Stacktrace:\r\n{Environment.StackTrace}", MessageType.Error); - return default; - } - - return returnObject; + return worldObject; } public static TWorldObject GetWorldFromUnity(MonoBehaviour unityObject) @@ -97,32 +75,18 @@ namespace QSB.WorldSync where TWorldObject : IWorldObject => GetWorldFromUnity(unityObject).ObjectId; - public static int GetIdFromTypeSubset(TTypeSubset typeSubset) - { - var index = GetWorldObjects().ToList().IndexOf(typeSubset); - if (index == -1) - { - DebugLog.ToConsole($"Warning - {((IWorldObject)typeSubset).Name} doesn't exist in list of {typeof(TTypeSubset).Name} !", MessageType.Warning); - } - - return index; - } - - public static void RemoveWorldObjects() + public static void RemoveWorldObjects() { if (WorldObjects.Count == 0) { - DebugLog.ToConsole($"Warning - Trying to remove WorldObjects of type {typeof(TWorldObject).Name}, but there are no WorldObjects!", MessageType.Warning); + DebugLog.ToConsole($"Warning - Trying to remove WorldObjects, but there are no WorldObjects!", MessageType.Warning); return; } - var itemsToRemove = WorldObjects.Where(x => x is TWorldObject); - - foreach (var item in itemsToRemove) + foreach (var item in WorldObjects) { try { - WorldObjectsToUnityObjects.Remove(item.ReturnObject()); item.OnRemoval(); } catch (Exception e) @@ -131,7 +95,8 @@ namespace QSB.WorldSync } } - WorldObjects.RemoveAll(x => x is TWorldObject); + WorldObjects.Clear(); + WorldObjectsToUnityObjects.Clear(); } public static IEnumerable GetUnityObjects() @@ -140,34 +105,24 @@ namespace QSB.WorldSync .Where(x => x.gameObject.scene.name != null); public static void Init() - where TWorldObject : WorldObject + where TWorldObject : WorldObject, new() where TUnityObject : MonoBehaviour { - RemoveWorldObjects(); var list = GetUnityObjects().ToList(); //DebugLog.DebugWrite($"{typeof(TWorldObject).Name} init : {list.Count} instances.", MessageType.Info); for (var id = 0; id < list.Count; id++) { - var obj = CreateWorldObject(); - obj.Init(list[id], id); + var obj = new TWorldObject + { + AttachedObject = list[id], + ObjectId = WorldObjects.Count + }; + obj.Init(); + WorldObjects.Add(obj); WorldObjectsToUnityObjects.Add(list[id], obj); } } - private static TWorldObject CreateWorldObject() - where TWorldObject : IWorldObject - { - var worldObject = (TWorldObject)Activator.CreateInstance(typeof(TWorldObject)); - WorldObjects.Add(worldObject); - if (worldObject == null) - { - // if this happens, god help you - DebugLog.ToConsole($"Error - CreateWorldObject is returning a null value! This is very bad!", MessageType.Error); - } - - return worldObject; - } - public static void HandleSlotStateChange(NomaiInterfaceSlot slot, NomaiInterfaceOrb affectingOrb, bool state) { var slotList = GetWorldObjects().ToList(); diff --git a/QSB/WorldSync/WorldObject.cs b/QSB/WorldSync/WorldObject.cs index 0d05a26e..b2d699b7 100644 --- a/QSB/WorldSync/WorldObject.cs +++ b/QSB/WorldSync/WorldObject.cs @@ -6,12 +6,12 @@ namespace QSB.WorldSync public abstract class WorldObject : IWorldObject where T : MonoBehaviour { - public int ObjectId { get; protected set; } - public T AttachedObject { get; protected set; } + public int ObjectId { get; set; } + public T AttachedObject { get; set; } public string Name => AttachedObject == null ? "" : AttachedObject.name; public string LogName => $"{QSBPlayerManager.LocalPlayerId}.{ObjectId}:{GetType().Name}"; - public abstract void Init(T attachedObject, int id); + public virtual void Init() { } public virtual void OnRemoval() { } public MonoBehaviour ReturnObject() => AttachedObject; diff --git a/QSB/WorldSync/WorldObjectManager.cs b/QSB/WorldSync/WorldObjectManager.cs index 76394646..bd70ab9f 100644 --- a/QSB/WorldSync/WorldObjectManager.cs +++ b/QSB/WorldSync/WorldObjectManager.cs @@ -66,6 +66,7 @@ namespace QSB.WorldSync private static void DoRebuild(OWScene scene) { + QSBWorldSync.RemoveWorldObjects(); _numManagersReadying = 0; _numObjectsReadying = 0; AllObjectsAdded = false; @@ -79,7 +80,7 @@ namespace QSB.WorldSync } catch (Exception ex) { - DebugLog.ToConsole($"Exception - Exception when trying to rebuild WorldObjects of manager {manager.GetType().Name} : {ex.Message} Stacktrace :\r\n{ex.StackTrace}", OWML.Common.MessageType.Error); + DebugLog.ToConsole($"Exception - Exception when trying to rebuild WorldObjects of manager {manager.GetType().Name} : {ex.Message} Stacktrace :\r\n{ex.StackTrace}", MessageType.Error); } } diff --git a/QSB/ZeroGCaveSync/WorldObjects/QSBSatelliteNode.cs b/QSB/ZeroGCaveSync/WorldObjects/QSBSatelliteNode.cs index 6be183d7..0598d3be 100644 --- a/QSB/ZeroGCaveSync/WorldObjects/QSBSatelliteNode.cs +++ b/QSB/ZeroGCaveSync/WorldObjects/QSBSatelliteNode.cs @@ -5,12 +5,6 @@ namespace QSB.ZeroGCaveSync.WorldObjects { internal class QSBSatelliteNode : WorldObject { - public override void Init(SatelliteNode component, int id) - { - ObjectId = id; - AttachedObject = component; - } - public void SetRepaired() { DebugLog.DebugWrite($"[SATELLITE NODE] {AttachedObject} Set repaired."); diff --git a/QuantumUNET/Messages/QNetworkMessage.cs b/QuantumUNET/Messages/QNetworkMessage.cs index e5dbc590..957ae567 100644 --- a/QuantumUNET/Messages/QNetworkMessage.cs +++ b/QuantumUNET/Messages/QNetworkMessage.cs @@ -1,5 +1,4 @@ using QuantumUNET.Transport; -using System; namespace QuantumUNET.Messages { @@ -12,7 +11,7 @@ namespace QuantumUNET.Messages public TMsg ReadMessage() where TMsg : QMessageBase, new() { - var result = Activator.CreateInstance(); + var result = new TMsg(); result.Deserialize(Reader); return result; } diff --git a/QuantumUNET/Transport/QNetworkReader.cs b/QuantumUNET/Transport/QNetworkReader.cs index 6cf66cc4..60b081ae 100644 --- a/QuantumUNET/Transport/QNetworkReader.cs +++ b/QuantumUNET/Transport/QNetworkReader.cs @@ -458,7 +458,7 @@ namespace QuantumUNET.Transport public TMsg ReadMessage() where TMsg : QMessageBase, new() { - var result = Activator.CreateInstance(); + var result = new TMsg(); result.Deserialize(this); return result; }