diff --git a/NewHorizons/Handlers/VesselWarpHandler.cs b/NewHorizons/Handlers/VesselWarpHandler.cs index f159a8c6..085f6a09 100644 --- a/NewHorizons/Handlers/VesselWarpHandler.cs +++ b/NewHorizons/Handlers/VesselWarpHandler.cs @@ -27,6 +27,21 @@ namespace NewHorizons.Handlers VesselPrefab = Main.NHPrivateAssetBundle.LoadAsset("Vessel_Body"); } + public static bool IsVesselPresent() + { + var vesselConfig = SystemDict[Instance.CurrentStarSystem].Config?.Vessel; + var isDefaultSolarSystem = Instance.CurrentStarSystem == "SolarSystem"; + var vesselIsPresent = vesselConfig?.alwaysPresent ?? isDefaultSolarSystem; + return Instance.IsWarpingFromVessel || vesselIsPresent; + } + + public static bool ShouldSpawnAtVessel() + { + var vesselConfig = SystemDict[Instance.CurrentStarSystem].Config?.Vessel; + var shouldSpawnOnVessel = IsVesselPresent() && (vesselConfig?.spawnOnVessel ?? false); + return Instance.IsWarpingFromVessel || (IsVesselPresent() && shouldSpawnOnVessel); + } + public static void LoadVessel() { var system = SystemDict[Instance.CurrentStarSystem]; @@ -36,9 +51,7 @@ namespace NewHorizons.Handlers return; } - var vesselIsPresent = system.Config?.Vessel?.alwaysPresent ?? false; - - if (Instance.IsWarpingFromVessel || vesselIsPresent) + if (IsVesselPresent()) _vesselSpawnPoint = Instance.CurrentStarSystem == "SolarSystem" ? UpdateVessel() : CreateVessel(); else _vesselSpawnPoint = SearchUtilities.Find("DB_VesselDimension_Body/Sector_VesselDimension").GetComponentInChildren(); diff --git a/NewHorizons/Main.cs b/NewHorizons/Main.cs index eae48e17..390072a7 100644 --- a/NewHorizons/Main.cs +++ b/NewHorizons/Main.cs @@ -146,7 +146,8 @@ namespace NewHorizons x = new int[5]{ 0,3,2,1,5 }, y = new int[5]{ 4,5,3,2,1 }, z = new int[5]{ 4,1,2,5,0 } - } + }, + alwaysPresent = true, } } }; @@ -364,6 +365,10 @@ namespace NewHorizons NewHorizonsData.Load(); + // If the vessel is forcing the player to spawn there, allow it to override + IsWarpingFromVessel = VesselWarpHandler.ShouldSpawnAtVessel(); + Logger.LogWarning("Spawning from vessel: " + IsWarpingFromVessel); + // Some builders have to be reset each loop SignalBuilder.Init(); BrambleDimensionBuilder.Init(); @@ -400,11 +405,8 @@ namespace NewHorizons } if (HasWarpDrive == true) EnableWarpDrive(); - var vesselIsPresent = SystemDict[CurrentStarSystem].Config?.Vessel?.alwaysPresent ?? false; - var shouldSpawnOnVessel = vesselIsPresent && (SystemDict[CurrentStarSystem].Config?.Vessel?.spawnOnVessel ?? false); - var shouldWarpInFromShip = IsWarpingFromShip && _shipWarpController != null; - var shouldWarpInFromVessel = (IsWarpingFromVessel || shouldSpawnOnVessel) && VesselWarpHandler.VesselSpawnPoint != null; + var shouldWarpInFromVessel = IsWarpingFromVessel && VesselWarpHandler.VesselSpawnPoint != null; Delay.RunWhen(() => IsSystemReady, () => OnSystemReady(shouldWarpInFromShip, shouldWarpInFromVessel)); IsWarpingFromShip = false;