diff --git a/QSB/Animation/NPC/Patches/CharacterAnimationPatches.cs b/QSB/Animation/NPC/Patches/CharacterAnimationPatches.cs index db4b94c7..b4427279 100644 --- a/QSB/Animation/NPC/Patches/CharacterAnimationPatches.cs +++ b/QSB/Animation/NPC/Patches/CharacterAnimationPatches.cs @@ -37,7 +37,7 @@ namespace QSB.Animation.NPC.Patches var playerId = ConversationManager.Instance.GetPlayerTalkingToTree(____dialogueTree); var player = QSBPlayerManager.GetPlayer(playerId); - var qsbObj = QSBWorldSync.GetWorldFromUnity(__instance); // OPTIMIZE : maybe cache this somewhere... or assess how slow this is + var qsbObj = QSBWorldSync.GetWorldFromUnity(__instance); // OPTIMIZE : maybe cache this somewhere... or assess how slow this is PlayerInfo playerToUse = null; if (____inConversation) @@ -98,7 +98,7 @@ namespace QSB.Animation.NPC.Patches [HarmonyPatch(typeof(CharacterAnimController), nameof(CharacterAnimController.OnZoneExit))] public static bool HeadZoneExit(CharacterAnimController __instance) { - var qsbObj = QSBWorldSync.GetWorldFromUnity(__instance); + var qsbObj = QSBWorldSync.GetWorldFromUnity(__instance); QSBEventManager.FireEvent(EventNames.QSBExitNonNomaiHeadZone, qsbObj.ObjectId); return false; } @@ -107,7 +107,7 @@ namespace QSB.Animation.NPC.Patches [HarmonyPatch(typeof(CharacterAnimController), nameof(CharacterAnimController.OnZoneEntry))] public static bool HeadZoneEntry(CharacterAnimController __instance) { - var qsbObj = QSBWorldSync.GetWorldFromUnity(__instance); + var qsbObj = QSBWorldSync.GetWorldFromUnity(__instance); QSBEventManager.FireEvent(EventNames.QSBEnterNonNomaiHeadZone, qsbObj.ObjectId); return false; } diff --git a/QSB/Animation/NPC/Patches/SolanumPatches.cs b/QSB/Animation/NPC/Patches/SolanumPatches.cs index 9b991ea1..b35a968b 100644 --- a/QSB/Animation/NPC/Patches/SolanumPatches.cs +++ b/QSB/Animation/NPC/Patches/SolanumPatches.cs @@ -28,7 +28,7 @@ namespace QSB.Animation.NPC.Patches __instance._animatorStateEvents.OnEnterState += __instance.OnEnterAnimatorState; } - var qsbObj = QSBWorldSync.GetWorldFromUnity(__instance); + var qsbObj = QSBWorldSync.GetWorldFromUnity(__instance); var playersInHeadZone = qsbObj.GetPlayersInHeadZone(); var targetCamera = playersInHeadZone == null || playersInHeadZone.Count == 0 @@ -48,7 +48,7 @@ namespace QSB.Animation.NPC.Patches [HarmonyPatch(typeof(NomaiConversationManager), nameof(NomaiConversationManager.OnEnterWatchVolume))] public static bool EnterWatchZone(NomaiConversationManager __instance) { - var qsbObj = QSBWorldSync.GetWorldFromUnity(__instance._solanumAnimController); + var qsbObj = QSBWorldSync.GetWorldFromUnity(__instance._solanumAnimController); QSBEventManager.FireEvent(EventNames.QSBEnterNomaiHeadZone, qsbObj.ObjectId); return false; } @@ -57,7 +57,7 @@ namespace QSB.Animation.NPC.Patches [HarmonyPatch(typeof(NomaiConversationManager), nameof(NomaiConversationManager.OnExitWatchVolume))] public static bool ExitWatchZone(NomaiConversationManager __instance) { - var qsbObj = QSBWorldSync.GetWorldFromUnity(__instance._solanumAnimController); + var qsbObj = QSBWorldSync.GetWorldFromUnity(__instance._solanumAnimController); QSBEventManager.FireEvent(EventNames.QSBExitNomaiHeadZone, qsbObj.ObjectId); return false; } @@ -66,7 +66,7 @@ namespace QSB.Animation.NPC.Patches [HarmonyPatch(typeof(NomaiConversationManager), nameof(NomaiConversationManager.Update))] public static bool ReplacementUpdate(NomaiConversationManager __instance) { - var qsbObj = QSBWorldSync.GetWorldFromUnity(__instance._solanumAnimController); + var qsbObj = QSBWorldSync.GetWorldFromUnity(__instance._solanumAnimController); __instance._playerInWatchVolume = qsbObj.GetPlayersInHeadZone().Any(); if (!__instance._initialized) diff --git a/QSB/CampfireSync/Patches/CampfirePatches.cs b/QSB/CampfireSync/Patches/CampfirePatches.cs index 5dc7f0e0..3a0c8bc7 100644 --- a/QSB/CampfireSync/Patches/CampfirePatches.cs +++ b/QSB/CampfireSync/Patches/CampfirePatches.cs @@ -15,7 +15,7 @@ namespace QSB.CampfireSync.Patches [HarmonyPatch(typeof(Campfire), nameof(Campfire.OnPressInteract))] public static bool LightCampfireEvent(Campfire __instance) { - var qsbCampfire = QSBWorldSync.GetWorldFromUnity(__instance); + var qsbCampfire = QSBWorldSync.GetWorldFromUnity(__instance); if (__instance._state == Campfire.State.LIT) { qsbCampfire.StartRoasting(); diff --git a/QSB/ElevatorSync/Patches/ElevatorPatches.cs b/QSB/ElevatorSync/Patches/ElevatorPatches.cs index 2e12063a..1b218863 100644 --- a/QSB/ElevatorSync/Patches/ElevatorPatches.cs +++ b/QSB/ElevatorSync/Patches/ElevatorPatches.cs @@ -17,7 +17,7 @@ namespace QSB.ElevatorSync.Patches public static void Elevator_StartLift(Elevator __instance) { var isGoingUp = __instance.GetValue("_goingToTheEnd"); - var id = QSBWorldSync.GetIdFromUnity(__instance); + var id = QSBWorldSync.GetIdFromUnity(__instance); QSBEventManager.FireEvent(EventNames.QSBStartLift, id, isGoingUp); } } diff --git a/QSB/ItemSync/Events/DropItemEvent.cs b/QSB/ItemSync/Events/DropItemEvent.cs index 69921945..92024fa4 100644 --- a/QSB/ItemSync/Events/DropItemEvent.cs +++ b/QSB/ItemSync/Events/DropItemEvent.cs @@ -1,5 +1,5 @@ using QSB.Events; -using QSB.ItemSync.WorldObjects; +using QSB.ItemSync.WorldObjects.Items; using QSB.Player; using QSB.Utility; using QSB.WorldSync; diff --git a/QSB/ItemSync/Events/DropItemMessage.cs b/QSB/ItemSync/Events/DropItemMessage.cs index 18f1c465..2771cc32 100644 --- a/QSB/ItemSync/Events/DropItemMessage.cs +++ b/QSB/ItemSync/Events/DropItemMessage.cs @@ -29,7 +29,7 @@ namespace QSB.ItemSync.Events writer.Write(ObjectId); writer.Write(Position); writer.Write(Normal); - var qsbSector = QSBWorldSync.GetWorldFromUnity(Sector); + var qsbSector = QSBWorldSync.GetWorldFromUnity(Sector); writer.Write(qsbSector.ObjectId); } } diff --git a/QSB/ItemSync/Events/MoveToCarryEvent.cs b/QSB/ItemSync/Events/MoveToCarryEvent.cs index de337611..6f118ad3 100644 --- a/QSB/ItemSync/Events/MoveToCarryEvent.cs +++ b/QSB/ItemSync/Events/MoveToCarryEvent.cs @@ -1,5 +1,5 @@ using QSB.Events; -using QSB.ItemSync.WorldObjects; +using QSB.ItemSync.WorldObjects.Items; using QSB.Player; using QSB.WorldSync; using QSB.WorldSync.Events; @@ -48,6 +48,18 @@ namespace QSB.ItemSync.Events ? player.VesselCoreSocket : player.WarpCoreSocket; break; + case ItemType.Lantern: + itemSocket = player.SimpleLanternSocket; + break; + case ItemType.DreamLantern: + itemSocket = player.DreamLanternSocket; + break; + case ItemType.SlideReel: + itemSocket = player.SlideReelSocket; + break; + case ItemType.VisionTorch: + itemSocket = player.VisionTorchSocket; + break; default: itemSocket = player.ItemSocket; break; diff --git a/QSB/ItemSync/Events/SocketItemEvent.cs b/QSB/ItemSync/Events/SocketItemEvent.cs index 3ab8cbe1..75e31ffb 100644 --- a/QSB/ItemSync/Events/SocketItemEvent.cs +++ b/QSB/ItemSync/Events/SocketItemEvent.cs @@ -1,5 +1,7 @@ using QSB.Events; using QSB.ItemSync.WorldObjects; +using QSB.ItemSync.WorldObjects.Items; +using QSB.ItemSync.WorldObjects.Sockets; using QSB.Player; using QSB.Utility; using QSB.WorldSync; diff --git a/QSB/ItemSync/ItemManager.cs b/QSB/ItemSync/ItemManager.cs index c0cd25c1..55f43a26 100644 --- a/QSB/ItemSync/ItemManager.cs +++ b/QSB/ItemSync/ItemManager.cs @@ -1,5 +1,6 @@ using OWML.Common; -using QSB.ItemSync.WorldObjects; +using QSB.ItemSync.WorldObjects.Items; +using QSB.ItemSync.WorldObjects.Sockets; using QSB.Utility; using QSB.WorldSync; @@ -10,80 +11,22 @@ namespace QSB.ItemSync protected override void RebuildWorldObjects(OWScene scene) { DebugLog.DebugWrite("Rebuilding OWItems...", MessageType.Info); - QSBWorldSync.Init(); + + // Items QSBWorldSync.Init(); - QSBWorldSync.Init(); QSBWorldSync.Init(); - QSBWorldSync.Init(); QSBWorldSync.Init(); - QSBWorldSync.Init(); QSBWorldSync.Init(); - } + QSBWorldSync.Init(); + QSBWorldSync.Init(); - public static IQSBOWItem GetObject(OWItem unityObject) - { - if (unityObject == null) - { - DebugLog.ToConsole($"Error - Trying to run GetObject (Item) with null unity object!", MessageType.Error); - return default; - } - - IQSBOWItem worldObj = null; - if (unityObject.GetType() == typeof(ScrollItem)) - { - worldObj = QSBWorldSync.GetWorldFromUnity((ScrollItem)unityObject); - } - else if (unityObject.GetType() == typeof(SharedStone)) - { - worldObj = QSBWorldSync.GetWorldFromUnity((SharedStone)unityObject); - } - else if (unityObject.GetType() == typeof(WarpCoreItem)) - { - worldObj = QSBWorldSync.GetWorldFromUnity((WarpCoreItem)unityObject); - } - else if (unityObject.GetType() == typeof(NomaiConversationStone)) - { - worldObj = QSBWorldSync.GetWorldFromUnity((NomaiConversationStone)unityObject); - } - else - { - DebugLog.ToConsole($"Warning - couldn't work out type of OWItem {unityObject.name}.", MessageType.Warning); - } - - return worldObj; - } - - public static IQSBOWItemSocket GetObject(OWItemSocket unityObject) - { - if (unityObject == null) - { - DebugLog.ToConsole($"Error - Trying to run GetObject (Socket) with null unity object!", MessageType.Error); - return default; - } - - IQSBOWItemSocket worldObj = null; - if (unityObject.GetType() == typeof(ScrollSocket)) - { - worldObj = QSBWorldSync.GetWorldFromUnity((ScrollSocket)unityObject); - } - else if (unityObject.GetType() == typeof(SharedStoneSocket)) - { - worldObj = QSBWorldSync.GetWorldFromUnity((SharedStoneSocket)unityObject); - } - else if (unityObject.GetType() == typeof(WarpCoreSocket)) - { - worldObj = QSBWorldSync.GetWorldFromUnity((WarpCoreSocket)unityObject); - } - else if (unityObject.GetType() == typeof(NomaiConversationStoneSocket)) - { - worldObj = QSBWorldSync.GetWorldFromUnity((NomaiConversationStoneSocket)unityObject); - } - else - { - DebugLog.ToConsole($"Warning - couldn't work out type of OWItemSocket {unityObject.name}.", MessageType.Warning); - } - - return worldObj; + // Sockets + QSBWorldSync.Init(); + QSBWorldSync.Init(); + QSBWorldSync.Init(); + QSBWorldSync.Init(); + QSBWorldSync.Init(); + QSBWorldSync.Init(); } } } diff --git a/QSB/ItemSync/Patches/ItemPatches.cs b/QSB/ItemSync/Patches/ItemPatches.cs index 04c4c6cc..f9d6edeb 100644 --- a/QSB/ItemSync/Patches/ItemPatches.cs +++ b/QSB/ItemSync/Patches/ItemPatches.cs @@ -1,6 +1,8 @@ using HarmonyLib; using OWML.Common; using QSB.Events; +using QSB.ItemSync.WorldObjects.Items; +using QSB.ItemSync.WorldObjects.Sockets; using QSB.Patches; using QSB.Player; using QSB.Utility; @@ -18,7 +20,7 @@ namespace QSB.ItemSync.Patches [HarmonyPatch(typeof(ItemTool), nameof(ItemTool.MoveItemToCarrySocket))] public static bool ItemTool_MoveItemToCarrySocket(OWItem item) { - var qsbObj = ItemManager.GetObject(item); + var qsbObj = (IQSBOWItem)QSBWorldSync.GetWorldFromUnity(item); var itemId = QSBWorldSync.GetIdFromTypeSubset(qsbObj); QSBPlayerManager.LocalPlayer.HeldItem = qsbObj; QSBEventManager.FireEvent(EventNames.QSBMoveToCarry, itemId); @@ -29,8 +31,8 @@ namespace QSB.ItemSync.Patches [HarmonyPatch(typeof(ItemTool), nameof(ItemTool.SocketItem))] public static bool ItemTool_SocketItem(OWItem ____heldItem, OWItemSocket socket) { - var qsbObj = ItemManager.GetObject(____heldItem); - var socketId = QSBWorldSync.GetIdFromTypeSubset(ItemManager.GetObject(socket)); + var qsbObj = (IQSBOWItem)QSBWorldSync.GetWorldFromUnity(____heldItem); + var socketId = QSBWorldSync.GetIdFromTypeSubset((IQSBOWItemSocket)QSBWorldSync.GetWorldFromUnity(socket)); var itemId = QSBWorldSync.GetIdFromTypeSubset(qsbObj); QSBPlayerManager.LocalPlayer.HeldItem = null; QSBEventManager.FireEvent(EventNames.QSBSocketItem, socketId, itemId, SocketEventType.Socket); @@ -41,9 +43,9 @@ namespace QSB.ItemSync.Patches [HarmonyPatch(typeof(ItemTool), nameof(ItemTool.StartUnsocketItem))] public static bool ItemTool_StartUnsocketItem(OWItemSocket socket) { - var item = ItemManager.GetObject(socket.GetSocketedItem()); + var item = (IQSBOWItem)QSBWorldSync.GetWorldFromUnity(socket.GetSocketedItem()); QSBPlayerManager.LocalPlayer.HeldItem = item; - var socketId = QSBWorldSync.GetIdFromTypeSubset(ItemManager.GetObject(socket)); + var socketId = QSBWorldSync.GetIdFromTypeSubset((IQSBOWItemSocket)QSBWorldSync.GetWorldFromUnity(socket)); QSBEventManager.FireEvent(EventNames.QSBSocketItem, socketId, 0, SocketEventType.StartUnsocket); return true; } @@ -52,7 +54,7 @@ namespace QSB.ItemSync.Patches [HarmonyPatch(typeof(ItemTool), nameof(ItemTool.CompleteUnsocketItem))] public static bool ItemTool_CompleteUnsocketItem(OWItem ____heldItem) { - var itemId = QSBWorldSync.GetIdFromTypeSubset(ItemManager.GetObject(____heldItem)); + var itemId = QSBWorldSync.GetIdFromTypeSubset((IQSBOWItem)QSBWorldSync.GetWorldFromUnity(____heldItem)); QSBEventManager.FireEvent(EventNames.QSBSocketItem, 0, itemId, SocketEventType.CompleteUnsocket); return true; } @@ -88,7 +90,7 @@ namespace QSB.ItemSync.Patches var parent = (customDropTarget == null) ? targetRigidbody.transform : customDropTarget.GetItemDropTargetTransform(hit.collider.gameObject); - var objectId = QSBWorldSync.GetIdFromTypeSubset(ItemManager.GetObject(____heldItem)); + var objectId = QSBWorldSync.GetIdFromTypeSubset((IQSBOWItem)QSBWorldSync.GetWorldFromUnity(____heldItem)); ____heldItem.DropItem(hit.point, hit.normal, parent, sector, customDropTarget); ____heldItem = null; QSBPlayerManager.LocalPlayer.HeldItem = null; diff --git a/QSB/ItemSync/WorldObjects/IQSBOWItem.cs b/QSB/ItemSync/WorldObjects/Items/IQSBOWItem.cs similarity index 91% rename from QSB/ItemSync/WorldObjects/IQSBOWItem.cs rename to QSB/ItemSync/WorldObjects/Items/IQSBOWItem.cs index 90651be4..4fc184e0 100644 --- a/QSB/ItemSync/WorldObjects/IQSBOWItem.cs +++ b/QSB/ItemSync/WorldObjects/Items/IQSBOWItem.cs @@ -1,7 +1,7 @@ using QSB.WorldSync; using UnityEngine; -namespace QSB.ItemSync.WorldObjects +namespace QSB.ItemSync.WorldObjects.Items { public interface IQSBOWItem : IWorldObjectTypeSubset { diff --git a/QSB/ItemSync/WorldObjects/QSBNomaiConversationStone.cs b/QSB/ItemSync/WorldObjects/Items/QSBNomaiConversationStone.cs similarity index 85% rename from QSB/ItemSync/WorldObjects/QSBNomaiConversationStone.cs rename to QSB/ItemSync/WorldObjects/Items/QSBNomaiConversationStone.cs index 6230ce1a..97a2798e 100644 --- a/QSB/ItemSync/WorldObjects/QSBNomaiConversationStone.cs +++ b/QSB/ItemSync/WorldObjects/Items/QSBNomaiConversationStone.cs @@ -1,4 +1,4 @@ -namespace QSB.ItemSync.WorldObjects +namespace QSB.ItemSync.WorldObjects.Items { internal class QSBNomaiConversationStone : QSBOWItem { diff --git a/QSB/ItemSync/WorldObjects/QSBOWItem.cs b/QSB/ItemSync/WorldObjects/Items/QSBOWItem.cs similarity index 77% rename from QSB/ItemSync/WorldObjects/QSBOWItem.cs rename to QSB/ItemSync/WorldObjects/Items/QSBOWItem.cs index acca3daa..30416680 100644 --- a/QSB/ItemSync/WorldObjects/QSBOWItem.cs +++ b/QSB/ItemSync/WorldObjects/Items/QSBOWItem.cs @@ -1,10 +1,12 @@ using OWML.Utils; +using QSB.ItemSync.WorldObjects.Sockets; using QSB.Player; using QSB.SectorSync.WorldObjects; +using QSB.Utility; using QSB.WorldSync; using UnityEngine; -namespace QSB.ItemSync.WorldObjects +namespace QSB.ItemSync.WorldObjects.Items { internal class QSBOWItem : WorldObject, IQSBOWItem where T : OWItem @@ -18,13 +20,25 @@ namespace QSB.ItemSync.WorldObjects public override void Init(T attachedObject, int id) { + if (attachedObject == null) + { + DebugLog.ToConsole($"Error - AttachedObject is null! Type:{GetType().Name}", OWML.Common.MessageType.Error); + return; + } + InitialParent = attachedObject.transform.parent; InitialPosition = attachedObject.transform.localPosition; InitialRotation = attachedObject.transform.localRotation; - InitialSector = QSBWorldSync.GetWorldFromUnity(attachedObject.GetSector()); - if (InitialParent.GetComponent() != null) + InitialSector = QSBWorldSync.GetWorldFromUnity(attachedObject.GetSector()); + + if (InitialParent == null) { - var qsbObj = ItemManager.GetObject(InitialParent.GetComponent()); + DebugLog.ToConsole($"Warning - InitialParent of {attachedObject.name} is null!", OWML.Common.MessageType.Warning); + } + + if (InitialParent?.GetComponent() != null) + { + var qsbObj = (IQSBOWItemSocket)QSBWorldSync.GetWorldFromUnity(InitialParent.GetComponent()); InitialSocket = qsbObj; } @@ -76,10 +90,10 @@ namespace QSB.ItemSync.WorldObjects { AttachedObject.transform.SetParent(sector.transform); AttachedObject.transform.localScale = Vector3.one; - var localDropNormal = AttachedObject.GetValue("_localDropNormal"); + var localDropNormal = AttachedObject._localDropNormal; var lhs = Quaternion.FromToRotation(AttachedObject.transform.TransformDirection(localDropNormal), normal); AttachedObject.transform.rotation = lhs * AttachedObject.transform.rotation; - var localDropOffset = AttachedObject.GetValue("_localDropOffset"); + var localDropOffset = AttachedObject._localDropOffset; AttachedObject.transform.position = sector.transform.TransformPoint(position) + AttachedObject.transform.TransformDirection(localDropOffset); AttachedObject.SetSector(sector); AttachedObject.SetColliderActivation(true); diff --git a/QSB/ItemSync/WorldObjects/QSBScrollItem.cs b/QSB/ItemSync/WorldObjects/Items/QSBScrollItem.cs similarity index 93% rename from QSB/ItemSync/WorldObjects/QSBScrollItem.cs rename to QSB/ItemSync/WorldObjects/Items/QSBScrollItem.cs index e8cc6aaf..425f980c 100644 --- a/QSB/ItemSync/WorldObjects/QSBScrollItem.cs +++ b/QSB/ItemSync/WorldObjects/Items/QSBScrollItem.cs @@ -1,4 +1,4 @@ -namespace QSB.ItemSync.WorldObjects +namespace QSB.ItemSync.WorldObjects.Items { internal class QSBScrollItem : QSBOWItem { diff --git a/QSB/ItemSync/WorldObjects/QSBSharedStone.cs b/QSB/ItemSync/WorldObjects/Items/QSBSharedStone.cs similarity index 93% rename from QSB/ItemSync/WorldObjects/QSBSharedStone.cs rename to QSB/ItemSync/WorldObjects/Items/QSBSharedStone.cs index 4a0ed717..fe2830f4 100644 --- a/QSB/ItemSync/WorldObjects/QSBSharedStone.cs +++ b/QSB/ItemSync/WorldObjects/Items/QSBSharedStone.cs @@ -1,4 +1,4 @@ -namespace QSB.ItemSync.WorldObjects +namespace QSB.ItemSync.WorldObjects.Items { internal class QSBSharedStone : QSBOWItem { diff --git a/QSB/ItemSync/WorldObjects/Items/QSBSimpleLanternItem.cs b/QSB/ItemSync/WorldObjects/Items/QSBSimpleLanternItem.cs new file mode 100644 index 00000000..e226c753 --- /dev/null +++ b/QSB/ItemSync/WorldObjects/Items/QSBSimpleLanternItem.cs @@ -0,0 +1,21 @@ +namespace QSB.ItemSync.WorldObjects.Items +{ + 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(); + + public override void PlayUnsocketAnimation() + => AttachedObject.PlayUnsocketAnimation(); + + public override void OnCompleteUnsocket() + => AttachedObject.OnCompleteUnsocket(); + } +} diff --git a/QSB/ItemSync/WorldObjects/Items/QSBSlideReelItem.cs b/QSB/ItemSync/WorldObjects/Items/QSBSlideReelItem.cs new file mode 100644 index 00000000..dd49c7e0 --- /dev/null +++ b/QSB/ItemSync/WorldObjects/Items/QSBSlideReelItem.cs @@ -0,0 +1,21 @@ +namespace QSB.ItemSync.WorldObjects.Items +{ + 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(); + + public override void PlayUnsocketAnimation() + => AttachedObject.PlayUnsocketAnimation(); + + public override void OnCompleteUnsocket() + => AttachedObject.OnCompleteUnsocket(); + } +} diff --git a/QSB/ItemSync/WorldObjects/QSBWarpCoreItem.cs b/QSB/ItemSync/WorldObjects/Items/QSBWarpCoreItem.cs similarity index 87% rename from QSB/ItemSync/WorldObjects/QSBWarpCoreItem.cs rename to QSB/ItemSync/WorldObjects/Items/QSBWarpCoreItem.cs index 88e31da7..3be29380 100644 --- a/QSB/ItemSync/WorldObjects/QSBWarpCoreItem.cs +++ b/QSB/ItemSync/WorldObjects/Items/QSBWarpCoreItem.cs @@ -1,4 +1,4 @@ -namespace QSB.ItemSync.WorldObjects +namespace QSB.ItemSync.WorldObjects.Items { internal class QSBWarpCoreItem : QSBOWItem { diff --git a/QSB/ItemSync/WorldObjects/IQSBOWItemSocket.cs b/QSB/ItemSync/WorldObjects/Sockets/IQSBOWItemSocket.cs similarity index 66% rename from QSB/ItemSync/WorldObjects/IQSBOWItemSocket.cs rename to QSB/ItemSync/WorldObjects/Sockets/IQSBOWItemSocket.cs index 8d42f9bc..a1cc6887 100644 --- a/QSB/ItemSync/WorldObjects/IQSBOWItemSocket.cs +++ b/QSB/ItemSync/WorldObjects/Sockets/IQSBOWItemSocket.cs @@ -1,6 +1,7 @@ -using QSB.WorldSync; +using QSB.ItemSync.WorldObjects.Items; +using QSB.WorldSync; -namespace QSB.ItemSync.WorldObjects +namespace QSB.ItemSync.WorldObjects.Sockets { public interface IQSBOWItemSocket : IWorldObjectTypeSubset { diff --git a/QSB/ItemSync/WorldObjects/QSBNomaiConversationStoneSocket.cs b/QSB/ItemSync/WorldObjects/Sockets/QSBNomaiConversationStoneSocket.cs similarity index 85% rename from QSB/ItemSync/WorldObjects/QSBNomaiConversationStoneSocket.cs rename to QSB/ItemSync/WorldObjects/Sockets/QSBNomaiConversationStoneSocket.cs index f193246b..bc48b86e 100644 --- a/QSB/ItemSync/WorldObjects/QSBNomaiConversationStoneSocket.cs +++ b/QSB/ItemSync/WorldObjects/Sockets/QSBNomaiConversationStoneSocket.cs @@ -1,4 +1,4 @@ -namespace QSB.ItemSync.WorldObjects +namespace QSB.ItemSync.WorldObjects.Sockets { internal class QSBNomaiConversationStoneSocket : QSBOWItemSocket { diff --git a/QSB/ItemSync/WorldObjects/Sockets/QSBOWItemDoubleSocket.cs b/QSB/ItemSync/WorldObjects/Sockets/QSBOWItemDoubleSocket.cs new file mode 100644 index 00000000..7ca06e54 --- /dev/null +++ b/QSB/ItemSync/WorldObjects/Sockets/QSBOWItemDoubleSocket.cs @@ -0,0 +1,27 @@ +using QSB.ItemSync.WorldObjects.Items; +using QSB.WorldSync; + +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(); + var acceptableType = AttachedObject._acceptableType; + return (itemType & acceptableType) == itemType; + } + + public virtual bool IsSocketOccupied() + => AttachedObject.IsSocketOccupied(); + + public virtual bool PlaceIntoSocket(IQSBOWItem item) + => AttachedObject.PlaceIntoSocket((OWItem)(item as IWorldObject).ReturnObject()); + + public virtual IQSBOWItem RemoveFromSocket() + => (IQSBOWItem)QSBWorldSync.GetWorldFromUnity(AttachedObject.RemoveFromSocket()); + } +} diff --git a/QSB/ItemSync/WorldObjects/QSBOWItemSocket.cs b/QSB/ItemSync/WorldObjects/Sockets/QSBOWItemSocket.cs similarity index 72% rename from QSB/ItemSync/WorldObjects/QSBOWItemSocket.cs rename to QSB/ItemSync/WorldObjects/Sockets/QSBOWItemSocket.cs index bd8321cb..545e8ca1 100644 --- a/QSB/ItemSync/WorldObjects/QSBOWItemSocket.cs +++ b/QSB/ItemSync/WorldObjects/Sockets/QSBOWItemSocket.cs @@ -1,7 +1,7 @@ -using OWML.Utils; +using QSB.ItemSync.WorldObjects.Items; using QSB.WorldSync; -namespace QSB.ItemSync.WorldObjects +namespace QSB.ItemSync.WorldObjects.Sockets { internal class QSBOWItemSocket : WorldObject, IQSBOWItemSocket where T : OWItemSocket @@ -11,7 +11,7 @@ namespace QSB.ItemSync.WorldObjects public virtual bool AcceptsItem(IQSBOWItem item) { var itemType = item.GetItemType(); - var acceptableType = AttachedObject.GetValue("_acceptableType"); + var acceptableType = AttachedObject._acceptableType; return (itemType & acceptableType) == itemType; } @@ -22,6 +22,6 @@ namespace QSB.ItemSync.WorldObjects => AttachedObject.PlaceIntoSocket((OWItem)(item as IWorldObject).ReturnObject()); public virtual IQSBOWItem RemoveFromSocket() - => ItemManager.GetObject(AttachedObject.RemoveFromSocket()); + => (IQSBOWItem)QSBWorldSync.GetWorldFromUnity(AttachedObject.RemoveFromSocket()); } } diff --git a/QSB/ItemSync/WorldObjects/QSBScrollSocket.cs b/QSB/ItemSync/WorldObjects/Sockets/QSBScrollSocket.cs similarity index 83% rename from QSB/ItemSync/WorldObjects/QSBScrollSocket.cs rename to QSB/ItemSync/WorldObjects/Sockets/QSBScrollSocket.cs index bdf15f89..79755b9d 100644 --- a/QSB/ItemSync/WorldObjects/QSBScrollSocket.cs +++ b/QSB/ItemSync/WorldObjects/Sockets/QSBScrollSocket.cs @@ -1,4 +1,4 @@ -namespace QSB.ItemSync.WorldObjects +namespace QSB.ItemSync.WorldObjects.Sockets { internal class QSBScrollSocket : QSBOWItemSocket { diff --git a/QSB/ItemSync/WorldObjects/QSBSharedStoneSocket.cs b/QSB/ItemSync/WorldObjects/Sockets/QSBSharedStoneSocket.cs similarity index 84% rename from QSB/ItemSync/WorldObjects/QSBSharedStoneSocket.cs rename to QSB/ItemSync/WorldObjects/Sockets/QSBSharedStoneSocket.cs index 3c8341ce..357b3a0b 100644 --- a/QSB/ItemSync/WorldObjects/QSBSharedStoneSocket.cs +++ b/QSB/ItemSync/WorldObjects/Sockets/QSBSharedStoneSocket.cs @@ -1,4 +1,4 @@ -namespace QSB.ItemSync.WorldObjects +namespace QSB.ItemSync.WorldObjects.Sockets { internal class QSBSharedStoneSocket : QSBOWItemSocket { diff --git a/QSB/ItemSync/WorldObjects/Sockets/QSBSlideProjectorSocket.cs b/QSB/ItemSync/WorldObjects/Sockets/QSBSlideProjectorSocket.cs new file mode 100644 index 00000000..39f7c977 --- /dev/null +++ b/QSB/ItemSync/WorldObjects/Sockets/QSBSlideProjectorSocket.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace QSB.ItemSync.WorldObjects.Sockets +{ + 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 new file mode 100644 index 00000000..a7e8ec0e --- /dev/null +++ b/QSB/ItemSync/WorldObjects/Sockets/QSBSlideReelSocket.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace QSB.ItemSync.WorldObjects.Sockets +{ + 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/QSBWarpCoreSocket.cs b/QSB/ItemSync/WorldObjects/Sockets/QSBWarpCoreSocket.cs similarity index 83% rename from QSB/ItemSync/WorldObjects/QSBWarpCoreSocket.cs rename to QSB/ItemSync/WorldObjects/Sockets/QSBWarpCoreSocket.cs index 1c55e986..5afa4e20 100644 --- a/QSB/ItemSync/WorldObjects/QSBWarpCoreSocket.cs +++ b/QSB/ItemSync/WorldObjects/Sockets/QSBWarpCoreSocket.cs @@ -1,4 +1,4 @@ -namespace QSB.ItemSync.WorldObjects +namespace QSB.ItemSync.WorldObjects.Sockets { internal class QSBWarpCoreSocket : QSBOWItemSocket { diff --git a/QSB/Player/PlayerEntanglementWatcher.cs b/QSB/Player/PlayerEntanglementWatcher.cs index 77479a1a..8fa44700 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(QuantumManager.GetObject(collidingQuantumObject)) + ? QSBWorldSync.GetIdFromTypeSubset((IQSBQuantumObject)QSBWorldSync.GetWorldFromUnity(collidingQuantumObject)) : -1; QSBEventManager.FireEvent( diff --git a/QSB/Player/PlayerInfo.cs b/QSB/Player/PlayerInfo.cs index b5e68723..55cd806a 100644 --- a/QSB/Player/PlayerInfo.cs +++ b/QSB/Player/PlayerInfo.cs @@ -4,6 +4,7 @@ using QSB.Animation.Player.Thrusters; using QSB.CampfireSync.WorldObjects; using QSB.ClientServerStateSync; using QSB.ItemSync.WorldObjects; +using QSB.ItemSync.WorldObjects.Items; using QSB.Player.TransformSync; using QSB.ProbeSync; using QSB.QuantumSync; @@ -94,6 +95,10 @@ namespace QSB.Player public Transform SharedStoneSocket => CameraBody.transform.Find("REMOTE_SharedStoneSocket"); public Transform WarpCoreSocket => CameraBody.transform.Find("REMOTE_WarpCoreSocket"); public Transform VesselCoreSocket => CameraBody.transform.Find("REMOTE_VesselCoreSocket"); + public Transform SimpleLanternSocket => CameraBody.transform.Find("REMOTE_SimpleLanternSocket"); + public Transform DreamLanternSocket => CameraBody.transform.Find("REMOTE_DreamLanternSocket"); + public Transform SlideReelSocket => CameraBody.transform.Find("REMOTE_SlideReelSocket"); + public Transform VisionTorchSocket => CameraBody.transform.Find("REMOTE_VisionTorchSocket"); public QSBMarshmallow Marshmallow { get; set; } public QSBCampfire Campfire { get; set; } public IQSBOWItem HeldItem { get; set; } diff --git a/QSB/Player/QSBPlayerManager.cs b/QSB/Player/QSBPlayerManager.cs index 6e7b3c66..67d8fbb4 100644 --- a/QSB/Player/QSBPlayerManager.cs +++ b/QSB/Player/QSBPlayerManager.cs @@ -1,5 +1,5 @@ using OWML.Common; -using QSB.ItemSync.WorldObjects; +using QSB.ItemSync.WorldObjects.Items; using QSB.Player.Events; using QSB.Player.TransformSync; using QSB.Tools; diff --git a/QSB/QSB.csproj b/QSB/QSB.csproj index 07dcb39e..79e1b2b9 100644 --- a/QSB/QSB.csproj +++ b/QSB/QSB.csproj @@ -105,6 +105,11 @@ + + + + + @@ -126,18 +131,18 @@ - - - - - - - - - - - - + + + + + + + + + + + + diff --git a/QSB/QuantumSync/Patches/QuantumPatches.cs b/QSB/QuantumSync/Patches/QuantumPatches.cs index 0ebd1e96..72d0d4b8 100644 --- a/QSB/QuantumSync/Patches/QuantumPatches.cs +++ b/QSB/QuantumSync/Patches/QuantumPatches.cs @@ -40,7 +40,7 @@ namespace QSB.QuantumSync.Patches { if (WorldObjectManager.AllReady) { - var socketedWorldObject = QSBWorldSync.GetWorldFromUnity(__instance); + var socketedWorldObject = QSBWorldSync.GetWorldFromUnity(__instance); if (socketedWorldObject.ControllingPlayer != QSBPlayerManager.LocalPlayerId) { return false; @@ -154,8 +154,8 @@ namespace QSB.QuantumSync.Patches return; } - var objectWorldObject = QSBWorldSync.GetWorldFromUnity(__instance); - var socketWorldObject = QSBWorldSync.GetWorldFromUnity(socket); + var objectWorldObject = QSBWorldSync.GetWorldFromUnity(__instance); + var socketWorldObject = QSBWorldSync.GetWorldFromUnity(socket); if (objectWorldObject == null) { @@ -187,7 +187,7 @@ namespace QSB.QuantumSync.Patches QSBQuantumShuffleObject shuffleWorldObject = default; if (WorldObjectManager.AllReady) { - shuffleWorldObject = QSBWorldSync.GetWorldFromUnity(__instance); + shuffleWorldObject = QSBWorldSync.GetWorldFromUnity(__instance); if (shuffleWorldObject.ControllingPlayer != QSBPlayerManager.LocalPlayerId) { return false; @@ -230,7 +230,7 @@ namespace QSB.QuantumSync.Patches return true; } - var qsbObj = QSBWorldSync.GetWorldFromUnity(__instance); + var qsbObj = QSBWorldSync.GetWorldFromUnity(__instance); if (qsbObj.ControllingPlayer == 0) { return true; @@ -266,7 +266,7 @@ namespace QSB.QuantumSync.Patches return true; } - var qsbObj = QSBWorldSync.GetWorldFromUnity(__instance); + var qsbObj = QSBWorldSync.GetWorldFromUnity(__instance); if (qsbObj.ControllingPlayer == 0 && qsbObj.CurrentState == -1) { return true; @@ -291,7 +291,7 @@ namespace QSB.QuantumSync.Patches } var allMultiStates = QSBWorldSync.GetWorldObjects(); - var stateObject = QSBWorldSync.GetWorldFromUnity(__instance); + var stateObject = QSBWorldSync.GetWorldFromUnity(__instance); var owner = allMultiStates.FirstOrDefault(x => x.QuantumStates.Contains(stateObject)); if (owner == default) { @@ -363,7 +363,7 @@ namespace QSB.QuantumSync.Patches [HarmonyPatch(typeof(QuantumShrine), nameof(QuantumShrine.ChangeQuantumState))] public static bool QuantumShrine_ChangeQuantumState(QuantumShrine __instance) { - var shrineWorldObject = QSBWorldSync.GetWorldFromUnity(__instance); + var shrineWorldObject = QSBWorldSync.GetWorldFromUnity(__instance); var isInControl = shrineWorldObject.ControllingPlayer == QSBPlayerManager.LocalPlayerId; return isInControl; } diff --git a/QSB/QuantumSync/QuantumManager.cs b/QSB/QuantumSync/QuantumManager.cs index abf2bf20..4bc544b0 100644 --- a/QSB/QuantumSync/QuantumManager.cs +++ b/QSB/QuantumSync/QuantumManager.cs @@ -132,39 +132,8 @@ namespace QSB.QuantumSync return Enumerable.Empty(); } - var worldObj = GetObject(obj); + var worldObj = (IQSBQuantumObject)QSBWorldSync.GetWorldFromUnity(obj); return QSBPlayerManager.PlayerList.Where(x => x.EntangledObject == worldObj); } - - public static IQSBQuantumObject GetObject(QuantumObject unityObject) - { - IQSBQuantumObject worldObj = null; - if (unityObject.GetType() == typeof(SocketedQuantumObject) || unityObject.GetType() == typeof(QuantumShrine)) - { - worldObj = QSBWorldSync.GetWorldFromUnity((SocketedQuantumObject)unityObject); - } - else if (unityObject.GetType() == typeof(MultiStateQuantumObject)) - { - worldObj = QSBWorldSync.GetWorldFromUnity((MultiStateQuantumObject)unityObject); - } - else if (unityObject.GetType() == typeof(QuantumShuffleObject)) - { - worldObj = QSBWorldSync.GetWorldFromUnity((QuantumShuffleObject)unityObject); - } - else if (unityObject.GetType() == typeof(QuantumMoon)) - { - worldObj = QSBWorldSync.GetWorldFromUnity((QuantumMoon)unityObject); - } - else if (unityObject.GetType() == typeof(EyeProxyQuantumMoon)) - { - worldObj = QSBWorldSync.GetWorldFromUnity((EyeProxyQuantumMoon)unityObject); - } - else - { - DebugLog.ToConsole($"Warning - couldn't work out type of QuantumObject {unityObject.name}.", MessageType.Warning); - } - - return worldObj; - } } } \ No newline at end of file diff --git a/QSB/QuantumSync/WorldObjects/QSBMultiStateQuantumObject.cs b/QSB/QuantumSync/WorldObjects/QSBMultiStateQuantumObject.cs index 65e82d62..0118386e 100644 --- a/QSB/QuantumSync/WorldObjects/QSBMultiStateQuantumObject.cs +++ b/QSB/QuantumSync/WorldObjects/QSBMultiStateQuantumObject.cs @@ -36,7 +36,7 @@ namespace QSB.QuantumSync.WorldObjects public override void PostInit() { - QuantumStates = AttachedObject._states.ToList().Select(x => QSBWorldSync.GetWorldFromUnity(x)).ToList(); + QuantumStates = AttachedObject._states.ToList().Select(x => QSBWorldSync.GetWorldFromUnity(x)).ToList(); if (QuantumStates.Any(x => x == null)) { diff --git a/QSB/RoastingSync/Events/EnterExitRoastingEvent.cs b/QSB/RoastingSync/Events/EnterExitRoastingEvent.cs index b9bdcfd3..14bdda8b 100644 --- a/QSB/RoastingSync/Events/EnterExitRoastingEvent.cs +++ b/QSB/RoastingSync/Events/EnterExitRoastingEvent.cs @@ -31,7 +31,7 @@ namespace QSB.RoastingSync.Events return; } - var qsbObj = QSBWorldSync.GetWorldFromUnity(campfire); + var qsbObj = QSBWorldSync.GetWorldFromUnity(campfire); SendEvent(CreateMessage(qsbObj.ObjectId, roasting)); } diff --git a/QSB/SectorSync/SectorSync.cs b/QSB/SectorSync/SectorSync.cs index 2b998c98..105d85a0 100644 --- a/QSB/SectorSync/SectorSync.cs +++ b/QSB/SectorSync/SectorSync.cs @@ -78,7 +78,7 @@ namespace QSB.SectorSync private void AddSector(Sector sector) { - var worldObject = QSBWorldSync.GetWorldFromUnity(sector); + var worldObject = QSBWorldSync.GetWorldFromUnity(sector); if (worldObject == null) { DebugLog.ToConsole($"Error - Can't find QSBSector for sector {sector.name}!", MessageType.Error); @@ -95,7 +95,7 @@ namespace QSB.SectorSync private void RemoveSector(Sector sector) { - var worldObject = QSBWorldSync.GetWorldFromUnity(sector); + var worldObject = QSBWorldSync.GetWorldFromUnity(sector); if (worldObject == null) { DebugLog.ToConsole($"Error - Can't find QSBSector for sector {sector.name}!", MessageType.Error); diff --git a/QSB/ShipSync/Events/Component/ComponentDamagedEvent.cs b/QSB/ShipSync/Events/Component/ComponentDamagedEvent.cs index 28af746e..43f2811d 100644 --- a/QSB/ShipSync/Events/Component/ComponentDamagedEvent.cs +++ b/QSB/ShipSync/Events/Component/ComponentDamagedEvent.cs @@ -16,7 +16,7 @@ namespace QSB.ShipSync.Events.Component private WorldObjectMessage CreateMessage(ShipComponent hull) { - var worldObject = QSBWorldSync.GetWorldFromUnity(hull); + var worldObject = QSBWorldSync.GetWorldFromUnity(hull); return new WorldObjectMessage { AboutId = LocalPlayerId, diff --git a/QSB/ShipSync/Events/Component/ComponentRepairTickEvent.cs b/QSB/ShipSync/Events/Component/ComponentRepairTickEvent.cs index 5578fb88..e99ef887 100644 --- a/QSB/ShipSync/Events/Component/ComponentRepairTickEvent.cs +++ b/QSB/ShipSync/Events/Component/ComponentRepairTickEvent.cs @@ -15,7 +15,7 @@ namespace QSB.ShipSync.Events.Component private RepairTickMessage CreateMessage(ShipComponent hull, float repairFraction) { - var worldObject = QSBWorldSync.GetWorldFromUnity(hull); + var worldObject = QSBWorldSync.GetWorldFromUnity(hull); return new RepairTickMessage { AboutId = LocalPlayerId, diff --git a/QSB/ShipSync/Events/Component/ComponentRepairedEvent.cs b/QSB/ShipSync/Events/Component/ComponentRepairedEvent.cs index da0fa26b..9c98789d 100644 --- a/QSB/ShipSync/Events/Component/ComponentRepairedEvent.cs +++ b/QSB/ShipSync/Events/Component/ComponentRepairedEvent.cs @@ -16,7 +16,7 @@ namespace QSB.ShipSync.Events.Component private WorldObjectMessage CreateMessage(ShipComponent hull) { - var worldObject = QSBWorldSync.GetWorldFromUnity(hull); + var worldObject = QSBWorldSync.GetWorldFromUnity(hull); return new WorldObjectMessage { AboutId = LocalPlayerId, diff --git a/QSB/ShipSync/Events/Hull/HullChangeIntegrityEvent.cs b/QSB/ShipSync/Events/Hull/HullChangeIntegrityEvent.cs index cf5c1466..3b3c6158 100644 --- a/QSB/ShipSync/Events/Hull/HullChangeIntegrityEvent.cs +++ b/QSB/ShipSync/Events/Hull/HullChangeIntegrityEvent.cs @@ -15,7 +15,7 @@ namespace QSB.ShipSync.Events.Hull private HullChangeIntegrityMessage CreateMessage(ShipHull hull, float integrity) { - var worldObject = QSBWorldSync.GetWorldFromUnity(hull); + var worldObject = QSBWorldSync.GetWorldFromUnity(hull); return new HullChangeIntegrityMessage { AboutId = LocalPlayerId, diff --git a/QSB/ShipSync/Events/Hull/HullDamagedEvent.cs b/QSB/ShipSync/Events/Hull/HullDamagedEvent.cs index 2df78b8b..bebc0cbb 100644 --- a/QSB/ShipSync/Events/Hull/HullDamagedEvent.cs +++ b/QSB/ShipSync/Events/Hull/HullDamagedEvent.cs @@ -16,7 +16,7 @@ namespace QSB.ShipSync.Events.Hull private WorldObjectMessage CreateMessage(ShipHull hull) { - var worldObject = QSBWorldSync.GetWorldFromUnity(hull); + var worldObject = QSBWorldSync.GetWorldFromUnity(hull); return new WorldObjectMessage { AboutId = LocalPlayerId, diff --git a/QSB/ShipSync/Events/Hull/HullImpactEvent.cs b/QSB/ShipSync/Events/Hull/HullImpactEvent.cs index 8ed4e243..0455cc13 100644 --- a/QSB/ShipSync/Events/Hull/HullImpactEvent.cs +++ b/QSB/ShipSync/Events/Hull/HullImpactEvent.cs @@ -15,7 +15,7 @@ namespace QSB.ShipSync.Events.Hull private HullImpactMessage CreateMessage(ShipHull hull, ImpactData data, float damage) { - var worldObject = QSBWorldSync.GetWorldFromUnity(hull); + var worldObject = QSBWorldSync.GetWorldFromUnity(hull); return new HullImpactMessage { AboutId = LocalPlayerId, diff --git a/QSB/ShipSync/Events/Hull/HullRepairTickEvent.cs b/QSB/ShipSync/Events/Hull/HullRepairTickEvent.cs index 1ff86934..522f510e 100644 --- a/QSB/ShipSync/Events/Hull/HullRepairTickEvent.cs +++ b/QSB/ShipSync/Events/Hull/HullRepairTickEvent.cs @@ -15,7 +15,7 @@ namespace QSB.ShipSync.Events.Hull private RepairTickMessage CreateMessage(ShipHull hull, float repairFraction) { - var worldObject = QSBWorldSync.GetWorldFromUnity(hull); + var worldObject = QSBWorldSync.GetWorldFromUnity(hull); return new RepairTickMessage { AboutId = LocalPlayerId, diff --git a/QSB/ShipSync/Events/Hull/HullRepairedEvent.cs b/QSB/ShipSync/Events/Hull/HullRepairedEvent.cs index 2bc6e411..6f128ef0 100644 --- a/QSB/ShipSync/Events/Hull/HullRepairedEvent.cs +++ b/QSB/ShipSync/Events/Hull/HullRepairedEvent.cs @@ -16,7 +16,7 @@ namespace QSB.ShipSync.Events.Hull private WorldObjectMessage CreateMessage(ShipHull hull) { - var worldObject = QSBWorldSync.GetWorldFromUnity(hull); + var worldObject = QSBWorldSync.GetWorldFromUnity(hull); return new WorldObjectMessage { AboutId = LocalPlayerId, diff --git a/QSB/Tools/PlayerToolsManager.cs b/QSB/Tools/PlayerToolsManager.cs index 321e9c42..3d42cbba 100644 --- a/QSB/Tools/PlayerToolsManager.cs +++ b/QSB/Tools/PlayerToolsManager.cs @@ -212,6 +212,30 @@ namespace QSB.Tools vesselCore.transform.localPosition = new Vector3(0.177f, -0.106f, 0.2f); vesselCore.transform.localRotation = Quaternion.Euler(3.142f, 14.827f, 12.094f); vesselCore.transform.localScale = new Vector3(0.27f, 0.27f, 0.27f); + + var simpleLantern = new GameObject("REMOTE_SimpleLanternSocket"); + simpleLantern.transform.parent = cameraBody; + simpleLantern.transform.localPosition = new Vector3(0.242997f, -0.18f, 0.2620007f); + simpleLantern.transform.localRotation = Quaternion.Euler(0f, 33f, 0f); + simpleLantern.transform.localScale = new Vector3(0.33f, 0.33f, 0.33f); + + var dreamLantern = new GameObject("REMOTE_DreamLanternSocket"); + dreamLantern.transform.parent = cameraBody; + dreamLantern.transform.localPosition = new Vector3(0.243f, -0.207f, 0.262f); + dreamLantern.transform.localRotation = Quaternion.Euler(0f, 0f, 0f); + dreamLantern.transform.localScale = new Vector3(0.33f, 0.33f, 0.33f); + + var slideReel = new GameObject("REMOTE_SlideReelSocket"); + slideReel.transform.parent = cameraBody; + slideReel.transform.localPosition = new Vector3(0.1353f, -0.0878f, 0.2878f); + slideReel.transform.localRotation = Quaternion.Euler(-145.532f, 6.589996f, -94.54901f); + slideReel.transform.localScale = new Vector3(0.3300001f, 0.33f, 0.3299999f); + + var visionTorch = new GameObject("REMOTE_VisionTorchSocket"); + visionTorch.transform.parent = cameraBody; + visionTorch.transform.localPosition = new Vector3(0.21f, -0.32f, 0.33f); + visionTorch.transform.localRotation = Quaternion.Euler(-4.5f, 0.03f, 9f); + visionTorch.transform.localScale = new Vector3(0.33f, 0.33f, 0.33f); } private static void CreateFlashlight(Transform cameraBody) diff --git a/QSB/Tools/ProbeLauncherTool/Patches/LauncherPatches.cs b/QSB/Tools/ProbeLauncherTool/Patches/LauncherPatches.cs index f1427d25..c96b8506 100644 --- a/QSB/Tools/ProbeLauncherTool/Patches/LauncherPatches.cs +++ b/QSB/Tools/ProbeLauncherTool/Patches/LauncherPatches.cs @@ -53,7 +53,7 @@ namespace QSB.Tools.ProbeLauncherTool.Patches if (__instance != QSBPlayerManager.LocalPlayer.LocalProbeLauncher) { - QSBEventManager.FireEvent(EventNames.QSBRetrieveProbe, QSBWorldSync.GetWorldFromUnity(__instance), playEffects); + QSBEventManager.FireEvent(EventNames.QSBRetrieveProbe, QSBWorldSync.GetWorldFromUnity(__instance), playEffects); } else { diff --git a/QSB/TranslationSync/Patches/SpiralPatches.cs b/QSB/TranslationSync/Patches/SpiralPatches.cs index 788366b0..fab722dc 100644 --- a/QSB/TranslationSync/Patches/SpiralPatches.cs +++ b/QSB/TranslationSync/Patches/SpiralPatches.cs @@ -23,7 +23,7 @@ namespace QSB.TranslationSync.Patches QSBEventManager.FireEvent( EventNames.QSBTextTranslated, NomaiTextType.WallText, - QSBWorldSync.GetIdFromUnity(__instance), + QSBWorldSync.GetIdFromUnity(__instance), id); return true; } @@ -40,7 +40,7 @@ namespace QSB.TranslationSync.Patches QSBEventManager.FireEvent( EventNames.QSBTextTranslated, NomaiTextType.Computer, - QSBWorldSync.GetIdFromUnity(__instance), + QSBWorldSync.GetIdFromUnity(__instance), id); return true; } @@ -57,7 +57,7 @@ namespace QSB.TranslationSync.Patches QSBEventManager.FireEvent( EventNames.QSBTextTranslated, NomaiTextType.VesselComputer, - QSBWorldSync.GetIdFromUnity(__instance), + QSBWorldSync.GetIdFromUnity(__instance), id); return true; } diff --git a/QSB/WorldSync/QSBWorldSync.cs b/QSB/WorldSync/QSBWorldSync.cs index ed30a1c3..982a4bb6 100644 --- a/QSB/WorldSync/QSBWorldSync.cs +++ b/QSB/WorldSync/QSBWorldSync.cs @@ -33,9 +33,7 @@ namespace QSB.WorldSync return GetWorldObjects().ToList()[id]; } - public static TWorldObject GetWorldFromUnity(TUnityObject unityObject) - where TWorldObject : WorldObject - where TUnityObject : MonoBehaviour + public static IWorldObject GetWorldFromUnity(MonoBehaviour unityObject) { if (!WorldObjectManager.AllReady) { @@ -44,37 +42,73 @@ namespace QSB.WorldSync if (unityObject == null) { - DebugLog.ToConsole($"Error - Trying to run GetWorldFromUnity with a null unity object! TWorldObject:{typeof(TWorldObject).Name}, TUnityObject:{typeof(TUnityObject).Name}", MessageType.Error); + DebugLog.ToConsole($"Error - Trying to run GetWorldFromUnity with a null unity object! TUnityObject:NULL", MessageType.Error); return default; } if (!QSBCore.IsInMultiplayer) { - DebugLog.ToConsole($"Warning - Trying to run GetWorldFromUnity while not in multiplayer! TWorldObject:{typeof(TWorldObject).Name}, TUnityObject:{typeof(TUnityObject).Name}", MessageType.Warning); + DebugLog.ToConsole($"Warning - Trying to run GetWorldFromUnity while not in multiplayer! TUnityObject:{unityObject.GetType().Name}", MessageType.Warning); return default; } if (!WorldObjectsToUnityObjects.ContainsKey(unityObject)) { - DebugLog.ToConsole($"Error - WorldObjectsToUnityObjects does not contain \"{unityObject.name}\"! TWorldObject:{typeof(TWorldObject).Name}, TUnityObject:{typeof(TUnityObject).Name}", MessageType.Error); + DebugLog.ToConsole($"Error - WorldObjectsToUnityObjects does not contain \"{unityObject.name}\"! TUnityObject:{unityObject.GetType().Name}", MessageType.Error); return default; } - var returnObject = WorldObjectsToUnityObjects[unityObject] as TWorldObject; + var returnObject = WorldObjectsToUnityObjects[unityObject]; - if (returnObject == default || returnObject == null) + if (returnObject == null) { - DebugLog.ToConsole($"Error - World object for unity object {unityObject.name} is null! TWorldObject:{typeof(TWorldObject).Name}, TUnityObject:{typeof(TUnityObject).Name}", MessageType.Error); + DebugLog.ToConsole($"Error - World object for unity object {unityObject.name} is null! TUnityObject:{unityObject.GetType().Name}", MessageType.Error); + return default; + } + + return (IWorldObject)returnObject; + } + + public static TWorldObject GetWorldFromUnity(MonoBehaviour unityObject) + where TWorldObject : IWorldObject + { + if (!WorldObjectManager.AllReady) + { + return default; + } + + if (unityObject == null) + { + DebugLog.ToConsole($"Error - Trying to run GetWorldFromUnity with a null unity object! TWorldObject:{typeof(TWorldObject).Name}, TUnityObject:NULL", MessageType.Error); + return default; + } + + if (!QSBCore.IsInMultiplayer) + { + DebugLog.ToConsole($"Warning - Trying to run GetWorldFromUnity while not in multiplayer! TWorldObject:{typeof(TWorldObject).Name}, TUnityObject:{unityObject.GetType().Name}", MessageType.Warning); + return default; + } + + if (!WorldObjectsToUnityObjects.ContainsKey(unityObject)) + { + DebugLog.ToConsole($"Error - WorldObjectsToUnityObjects does not contain \"{unityObject.name}\"! TWorldObject:{typeof(TWorldObject).Name}, TUnityObject:{unityObject.GetType().Name}", MessageType.Error); + return default; + } + + var returnObject = (TWorldObject)WorldObjectsToUnityObjects[unityObject]; + + if (returnObject == null) + { + DebugLog.ToConsole($"Error - World object for unity object {unityObject.name} is null! TWorldObject:{typeof(TWorldObject).Name}, TUnityObject:{unityObject.GetType().Name}", MessageType.Error); return default; } return returnObject; } - public static int GetIdFromUnity(TUnityObject unityObject) - where TWorldObject : WorldObject - where TUnityObject : MonoBehaviour - => GetWorldFromUnity(unityObject).ObjectId; + public static int GetIdFromUnity(MonoBehaviour unityObject) + where TWorldObject : IWorldObject + => GetWorldFromUnity(unityObject).ObjectId; public static int GetIdFromTypeSubset(TTypeSubset typeSubset) {