From ff94ecab3bc7ac3b3d088b6414a44d428615d499 Mon Sep 17 00:00:00 2001 From: Mister_Nebula <41904486+misternebula@users.noreply.github.com> Date: Thu, 11 Mar 2021 20:02:23 +0000 Subject: [PATCH] fix sectors in a TERRIBLE TERRIBLE WAY --- QSB/Player/Events/PlayerReadyEvent.cs | 5 ----- QSB/QSB.csproj | 1 + QSB/QSBCore.cs | 10 ++++------ QSB/QSBNetworkManager.cs | 1 - QSB/SectorSync/FakeSector.cs | 7 +++++++ QSB/SectorSync/QSBSectorManager.cs | 24 ++++++++++++++++++++++++ QSB/SectorSync/SectorSync.cs | 10 ++++++++++ QSB/SectorSync/WorldObjects/QSBSector.cs | 13 +++++++++++++ 8 files changed, 59 insertions(+), 12 deletions(-) create mode 100644 QSB/SectorSync/FakeSector.cs diff --git a/QSB/Player/Events/PlayerReadyEvent.cs b/QSB/Player/Events/PlayerReadyEvent.cs index fe335616..f9418f64 100644 --- a/QSB/Player/Events/PlayerReadyEvent.cs +++ b/QSB/Player/Events/PlayerReadyEvent.cs @@ -50,11 +50,6 @@ namespace QSB.Player.Events MessageType.Error); return; } - foreach (var item in QSBPlayerManager.GetSyncObjects() - .Where(x => x != null && x.IsReady && x.ReferenceSector != null && x.PlayerId == LocalPlayerId)) - { - QSBEventManager.FireEvent(EventNames.QSBSectorChange, item.NetId.Value, item.ReferenceSector); - } } } } \ No newline at end of file diff --git a/QSB/QSB.csproj b/QSB/QSB.csproj index ea10f418..8ca47046 100644 --- a/QSB/QSB.csproj +++ b/QSB/QSB.csproj @@ -204,6 +204,7 @@ + diff --git a/QSB/QSBCore.cs b/QSB/QSBCore.cs index ab2d570a..abc8fc5b 100644 --- a/QSB/QSBCore.cs +++ b/QSB/QSBCore.cs @@ -150,13 +150,11 @@ namespace QSB } var offset3 = 10f; - GUI.Label(new Rect(420, offset3, 200f, 20f), $"Current sectors :"); + GUI.Label(new Rect(420, offset3, 200f, 20f), $"Current closest sector :"); + offset3 += _debugLineSpacing; + var sector = PlayerTransformSync.LocalInstance.SectorSync.GetClosestSector(Locator.GetPlayerTransform()); + GUI.Label(new Rect(420, offset3, 400f, 20f), $"- {sector.AttachedObject.name} : {sector.IsFakeSector}"); offset3 += _debugLineSpacing; - foreach (var obj in PlayerTransformSync.LocalInstance?.SectorSync.SectorList) - { - GUI.Label(new Rect(420, offset3, 400f, 20f), $"- {obj.AttachedObject.name} : {Vector3.Distance(obj.Position, Locator.GetPlayerTransform().position)}"); - offset3 += _debugLineSpacing; - } var offset2 = 10f; GUI.Label(new Rect(620, offset2, 200f, 20f), $"Owned Objects :"); diff --git a/QSB/QSBNetworkManager.cs b/QSB/QSBNetworkManager.cs index d038565c..a622c991 100644 --- a/QSB/QSBNetworkManager.cs +++ b/QSB/QSBNetworkManager.cs @@ -174,7 +174,6 @@ namespace QSB QSBEventManager.Init(); - gameObject.AddComponent(); gameObject.AddComponent(); if (QSBSceneManager.IsInUniverse) diff --git a/QSB/SectorSync/FakeSector.cs b/QSB/SectorSync/FakeSector.cs new file mode 100644 index 00000000..cb0c8119 --- /dev/null +++ b/QSB/SectorSync/FakeSector.cs @@ -0,0 +1,7 @@ +namespace QSB.SectorSync +{ + public class FakeSector : Sector + { + public Sector AttachedSector; + } +} diff --git a/QSB/SectorSync/QSBSectorManager.cs b/QSB/SectorSync/QSBSectorManager.cs index ddd25d08..2ae827cb 100644 --- a/QSB/SectorSync/QSBSectorManager.cs +++ b/QSB/SectorSync/QSBSectorManager.cs @@ -4,6 +4,7 @@ using QSB.Player; using QSB.SectorSync.WorldObjects; using QSB.Utility; using QSB.WorldSync; +using System.Collections.Generic; using System.Linq; using UnityEngine; @@ -13,6 +14,7 @@ namespace QSB.SectorSync { public static QSBSectorManager Instance { get; private set; } public bool IsReady { get; private set; } + public List FakeSectors = new List(); private void OnEnable() => RepeatingManager.Repeatings.Add(this); private void OnDisable() => RepeatingManager.Repeatings.Remove(this); @@ -25,6 +27,12 @@ namespace QSB.SectorSync public void Awake() { + if (Instance != null) + { + DebugLog.ToConsole("Error - Cannot have multiple QSBSectorManagers!", MessageType.Error); + Destroy(this); + return; + } Instance = this; QSBSceneManager.OnUniverseSceneLoaded += (OWScene scene) => RebuildSectors(); DebugLog.DebugWrite("Sector Manager ready.", MessageType.Success); @@ -33,9 +41,25 @@ namespace QSB.SectorSync public void OnDestroy() => QSBSceneManager.OnUniverseSceneLoaded -= (OWScene scene) => RebuildSectors(); + public void RebuildSectors() { DebugLog.DebugWrite("Rebuilding sectors...", MessageType.Warning); + if (QSBSceneManager.CurrentScene == OWScene.SolarSystem) + { + var timeLoopRing = GameObject.Find("TimeLoopRing_Body"); + if (timeLoopRing != null) + { + if (timeLoopRing.GetComponent() == null) + { + timeLoopRing.AddComponent().AttachedSector = GameObject.Find("Sector_TimeLoopInterior").GetComponent(); + } + } + else + { + DebugLog.ToConsole($"Error - TimeLoopRing_Body not found!", MessageType.Error); + } + } QSBWorldSync.Init(); IsReady = QSBWorldSync.GetWorldObjects().Any(); } diff --git a/QSB/SectorSync/SectorSync.cs b/QSB/SectorSync/SectorSync.cs index 201878a1..338cd1bc 100644 --- a/QSB/SectorSync/SectorSync.cs +++ b/QSB/SectorSync/SectorSync.cs @@ -86,6 +86,16 @@ namespace QSB.SectorSync var ordered = activeNotNullNotBlacklisted .OrderBy(sector => Vector3.Distance(sector.Position, trans.position)) .ThenBy(sector => GetRadius(sector)); + + if ( + QSBSectorManager.Instance.FakeSectors.Any( + x => OWMath.ApproxEquals(Vector3.Distance(x.Position, trans.position), Vector3.Distance(ordered.FirstOrDefault().Position, trans.position), 0.01f) + && activeNotNullNotBlacklisted.Any( + y => y.AttachedObject == (x.AttachedObject as FakeSector).AttachedSector))) + { + return QSBSectorManager.Instance.FakeSectors.First(x => OWMath.ApproxEquals(Vector3.Distance(x.Position, trans.position), Vector3.Distance(ordered.FirstOrDefault().Position, trans.position), 0.01f)); + } + return ordered.FirstOrDefault(); } diff --git a/QSB/SectorSync/WorldObjects/QSBSector.cs b/QSB/SectorSync/WorldObjects/QSBSector.cs index 0b520a00..715eb69f 100644 --- a/QSB/SectorSync/WorldObjects/QSBSector.cs +++ b/QSB/SectorSync/WorldObjects/QSBSector.cs @@ -8,11 +8,24 @@ namespace QSB.SectorSync.WorldObjects public Sector.Name Type => AttachedObject.GetName(); public Transform Transform => AttachedObject.transform; public Vector3 Position => Transform.position; + public bool IsFakeSector => AttachedObject.GetType() == typeof(FakeSector); public override void Init(Sector sector, int id) { ObjectId = id; AttachedObject = sector; + if (IsFakeSector) + { + QSBSectorManager.Instance.FakeSectors.Add(this); + } + } + + public override void OnRemoval() + { + if (IsFakeSector) + { + QSBSectorManager.Instance.FakeSectors.Remove(this); + } } } } \ No newline at end of file