From beb861e53ecc116d67b3580568750eb0df4597b6 Mon Sep 17 00:00:00 2001 From: Mister_Nebula <41904486+misternebula@users.noreply.github.com> Date: Fri, 12 Mar 2021 21:46:02 +0000 Subject: [PATCH] more checking for sectors --- QSB/ItemSync/Patches/ItemPatches.cs | 7 +++---- QSB/SectorSync/SectorSync.cs | 15 ++++++++++----- QSB/SectorSync/WorldObjects/QSBSector.cs | 14 ++++++++++++++ 3 files changed, 27 insertions(+), 9 deletions(-) diff --git a/QSB/ItemSync/Patches/ItemPatches.cs b/QSB/ItemSync/Patches/ItemPatches.cs index 0449fef88..68830a243 100644 --- a/QSB/ItemSync/Patches/ItemPatches.cs +++ b/QSB/ItemSync/Patches/ItemPatches.cs @@ -1,4 +1,5 @@ -using QSB.Events; +using OWML.Common; +using QSB.Events; using QSB.Patches; using QSB.Utility; using QSB.WorldSync; @@ -94,9 +95,7 @@ public static bool ItemTool_DropItem(RaycastHit hit, OWRigidbody targetRigidbody QSBEventManager.FireEvent(EventNames.QSBDropItem, objectId, localPos, hit.normal, parentSector); return false; } - DebugLog.ToConsole($"Warning - no sector found for rigidbody {targetRigidbody.name}.", OWML.Common.MessageType.Warning); - var localPosition = sector.transform.InverseTransformPoint(hit.point); - QSBEventManager.FireEvent(EventNames.QSBDropItem, objectId, localPosition, hit.normal, sector); + DebugLog.ToConsole($"Error - No sector found for rigidbody {targetRigidbody.name}!.", MessageType.Error); return false; } } diff --git a/QSB/SectorSync/SectorSync.cs b/QSB/SectorSync/SectorSync.cs index 2904bfcba..89b911615 100644 --- a/QSB/SectorSync/SectorSync.cs +++ b/QSB/SectorSync/SectorSync.cs @@ -13,7 +13,6 @@ public class SectorSync : MonoBehaviour public List SectorList = new List(); private SectorDetector _sectorDetector; - private readonly Sector.Name[] _sectorBlacklist = { Sector.Name.Ship }; public void SetSectorDetector(SectorDetector detector) { @@ -36,7 +35,7 @@ private void AddSector(Sector sector) } if (SectorList.Contains(worldObject)) { - DebugLog.ToConsole($"Warning - Trying to add {sector.name}, but is already in list", MessageType.Warning); + DebugLog.ToConsole($"Warning - Trying to add {sector.name} for {gameObject.name}, but is already in list", MessageType.Warning); return; } SectorList.Add(worldObject); @@ -52,7 +51,7 @@ private void RemoveSector(Sector sector) } if (!SectorList.Contains(worldObject)) { - DebugLog.ToConsole($"Warning - Trying to remove {sector.name}, but is not in list!", MessageType.Warning); + DebugLog.ToConsole($"Warning - Trying to remove {sector.name} for {gameObject.name}, but is not in list!", MessageType.Warning); return; } SectorList.Remove(worldObject); @@ -66,7 +65,7 @@ public QSBSector GetClosestSector(Transform trans) // trans rights \o/ return null; } - var listToCheck = SectorList.Count == 0 + var listToCheck = SectorList.Count(x => x.ShouldSyncTo()) == 0 ? QSBWorldSync.GetWorldObjects() : SectorList; @@ -81,8 +80,14 @@ public QSBSector GetClosestSector(Transform trans) // trans rights \o/ */ var activeNotNullNotBlacklisted = listToCheck.Where(sector => sector.AttachedObject != null - && !_sectorBlacklist.Contains(sector.Type) + && sector.ShouldSyncTo() && sector.Transform.gameObject.activeInHierarchy); + if (activeNotNullNotBlacklisted.Count() == 0) + { + DebugLog.ToConsole( + $"Error - Zero available sectors for {trans.name} to sync to! Current QSBSector count : {QSBWorldSync.GetWorldObjects().Count()}", + MessageType.Error); + } var ordered = activeNotNullNotBlacklisted .OrderBy(sector => Vector3.Distance(sector.Position, trans.position)) .ThenBy(sector => GetRadius(sector)); diff --git a/QSB/SectorSync/WorldObjects/QSBSector.cs b/QSB/SectorSync/WorldObjects/QSBSector.cs index 715eb69fd..04545e80e 100644 --- a/QSB/SectorSync/WorldObjects/QSBSector.cs +++ b/QSB/SectorSync/WorldObjects/QSBSector.cs @@ -27,5 +27,19 @@ public override void OnRemoval() QSBSectorManager.Instance.FakeSectors.Remove(this); } } + + public bool ShouldSyncTo() + { + if (Type == Sector.Name.Ship) + { + return false; + } + if ((AttachedObject.name == "Sector_Shuttle" || AttachedObject.name == "Sector_NomaiShuttleInterior") + && !AttachedObject.gameObject.GetComponentInParent().IsPlayerInside()) + { + return false; + } + return true; + } } } \ No newline at end of file