Better handling of vessel spawn flags

This commit is contained in:
Joshua Thome 2023-03-21 12:50:42 -05:00
parent ced1c5e308
commit 357b4463f0
2 changed files with 23 additions and 8 deletions

View File

@ -27,6 +27,21 @@ namespace NewHorizons.Handlers
VesselPrefab = Main.NHPrivateAssetBundle.LoadAsset<GameObject>("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<SpawnPoint>();

View File

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