using OWML.Common; using OWML.Utils; using QSB.Utility; using QSB.WorldSync; using System.Linq; using UnityEngine; namespace QSB.SectorSync.WorldObjects { public class QSBSector : WorldObject { 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); } } public bool ShouldSyncTo() { if (AttachedObject == null) { DebugLog.ToConsole($"Warning - AttachedObject for sector id:{ObjectId} is null!", MessageType.Warning); return false; } if (Type == Sector.Name.Ship) { return false; } if (AttachedObject.name == "Sector_Shuttle" || AttachedObject.name == "Sector_NomaiShuttleInterior") { if (QSBSceneManager.CurrentScene == OWScene.SolarSystem) { var shuttleController = AttachedObject.gameObject.GetComponentInParent(); if (shuttleController == null) { DebugLog.ToConsole($"Warning - Expected to find a NomaiShuttleController for {AttachedObject.name}!", MessageType.Warning); return false; } if (!shuttleController.IsPlayerInside()) { return false; } } else if (QSBSceneManager.CurrentScene == OWScene.EyeOfTheUniverse) { var shuttleController = Resources.FindObjectsOfTypeAll().First(); if (shuttleController == null) { DebugLog.ToConsole($"Warning - Expected to find a EyeShuttleController for {AttachedObject.name}!", MessageType.Warning); return false; } if (!shuttleController.GetValue("_isPlayerInside")) { return false; } } } return true; } } }