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