From 8c2973a8c252524d880f76ccdf97b48067b9229f Mon Sep 17 00:00:00 2001 From: Mister_Nebula <41904486+misternebula@users.noreply.github.com> Date: Tue, 9 Mar 2021 21:56:20 +0000 Subject: [PATCH] rework sectorsync --- QSB/QSBCore.cs | 2 +- QSB/SectorSync/SectorSync.cs | 31 +++++++++++++++++++++++++------ 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/QSB/QSBCore.cs b/QSB/QSBCore.cs index 9790ee66..ab2d570a 100644 --- a/QSB/QSBCore.cs +++ b/QSB/QSBCore.cs @@ -154,7 +154,7 @@ namespace QSB offset3 += _debugLineSpacing; foreach (var obj in PlayerTransformSync.LocalInstance?.SectorSync.SectorList) { - GUI.Label(new Rect(420, offset3, 200f, 20f), $"- {obj.AttachedObject.name} : {Vector3.Distance(obj.Position, Locator.GetPlayerTransform().position)}"); + GUI.Label(new Rect(420, offset3, 400f, 20f), $"- {obj.AttachedObject.name} : {Vector3.Distance(obj.Position, Locator.GetPlayerTransform().position)}"); offset3 += _debugLineSpacing; } diff --git a/QSB/SectorSync/SectorSync.cs b/QSB/SectorSync/SectorSync.cs index b917d9b4..1f0e6325 100644 --- a/QSB/SectorSync/SectorSync.cs +++ b/QSB/SectorSync/SectorSync.cs @@ -69,13 +69,32 @@ namespace QSB.SectorSync var listToCheck = SectorList.Count == 0 ? QSBWorldSync.GetWorldObjects() : SectorList; - // TODO : maybe improve this by more carefully picking sectors that are in the same place? maybe by last entered or closest to edge? - return listToCheck - .Where(sector => sector.AttachedObject != null - && !_sectorBlacklist.Contains(sector.Type) - && sector.Transform.gameObject.activeInHierarchy) + + var activeNotNullNotBlacklisted = listToCheck.Where(sector => sector.AttachedObject != null + && !_sectorBlacklist.Contains(sector.Type) + && sector.Transform.gameObject.activeInHierarchy); + var ordered = activeNotNullNotBlacklisted .OrderBy(sector => Vector3.Distance(sector.Position, trans.position)) - .FirstOrDefault(); + .ThenBy(sector => GetRadius(sector)); + return ordered.FirstOrDefault(); + } + + private float GetRadius(QSBSector sector) + { + if (sector == null) + { + return 0f; + } + // TODO : make this work for other stuff, not just shaped triggervolumes + var trigger = sector.AttachedObject.GetTriggerVolume(); + if (trigger != null) + { + if (trigger.GetShape() != null) + { + return trigger.GetShape().CalcWorldBounds().radius; + } + } + return 0f; } } } \ No newline at end of file