rework sectorsync

This commit is contained in:
Mister_Nebula 2021-03-09 21:56:20 +00:00
parent db593c2c57
commit 8c2973a8c2
2 changed files with 26 additions and 7 deletions

View File

@ -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;
}

View File

@ -69,13 +69,32 @@ namespace QSB.SectorSync
var listToCheck = SectorList.Count == 0
? QSBWorldSync.GetWorldObjects<QSBSector>()
: 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;
}
}
}