Just use separate config

>:(
This commit is contained in:
Noah Pilarski 2022-08-18 14:26:26 -04:00
parent 39f1ad6ac1
commit a12b714f28
5 changed files with 32 additions and 123 deletions

View File

@ -18,14 +18,15 @@ namespace NewHorizons.Builder.Body
{ {
public static class StellarRemnantBuilder public static class StellarRemnantBuilder
{ {
public static void Make(GameObject go, OWRigidbody rb, PlanetConfig config, IModBehaviour mod, float sphereOfInfluence) public static void Make(NewHorizonsBody star, GameObject go, OWRigidbody rb, IModBehaviour mod, NewHorizonsBody stellarRemnant = null)
{ {
Logger.Log($"Creating stellar remnant for [{config.name}]"); Logger.Log($"Creating stellar remnant for [{star.Config.name}]");
try try
{ {
var starModule = config.Star; var config = star.Config;
var starModule = star.Config.Star;
var size = starModule.size; var size = starModule.size;
var sector = SectorBuilder.Make(go, rb, sphereOfInfluence); var sector = SectorBuilder.Make(go, rb, 0);
sector.name = "StellarRemnant"; sector.name = "StellarRemnant";
var ss = sector.GetComponent<SphereShape>(); var ss = sector.GetComponent<SphereShape>();
@ -36,21 +37,19 @@ namespace NewHorizons.Builder.Body
sector.gameObject.SetActive(false); sector.gameObject.SetActive(false);
if (starModule.stellarRemnant != null) if (stellarRemnant != null)
{ {
var srConfig = starModule.stellarRemnant.ConvertToPlanetConfig(config);
var srBody = new NewHorizonsBody(srConfig, mod);
stellarRemnantController.SetRemnantType(StellarRemnantType.Custom); stellarRemnantController.SetRemnantType(StellarRemnantType.Custom);
stellarRemnantController.SetSurfaceSize(starModule.stellarRemnant.Base.surfaceSize); stellarRemnantController.SetSurfaceSize(stellarRemnant.Config.Base.surfaceSize);
stellarRemnantController.SetSurfaceGravity(starModule.stellarRemnant.Base.surfaceGravity); stellarRemnantController.SetSurfaceGravity(stellarRemnant.Config.Base.surfaceGravity);
stellarRemnantController.SetSiderealPeriod(starModule.stellarRemnant.siderealPeriod); stellarRemnantController.SetSiderealPeriod(stellarRemnant.Config.Orbit.siderealPeriod);
var srSphereOfInfluence = PlanetCreationHandler.GetSphereOfInfluence(srBody); var srSphereOfInfluence = PlanetCreationHandler.GetSphereOfInfluence(stellarRemnant);
stellarRemnantController.SetSphereOfInfluence(srSphereOfInfluence); stellarRemnantController.SetSphereOfInfluence(srSphereOfInfluence);
ss.radius = srSphereOfInfluence + 10; ss.radius = srSphereOfInfluence + 10;
var alignmentRadius = srBody.Config.Atmosphere?.clouds?.outerCloudRadius ?? 1.5f * srBody.Config.Base.surfaceSize; var alignmentRadius = stellarRemnant.Config.Atmosphere?.clouds?.outerCloudRadius ?? 1.5f * stellarRemnant.Config.Base.surfaceSize;
if (srBody.Config.Base.surfaceGravity == 0) alignmentRadius = 0; if (stellarRemnant.Config.Base.surfaceGravity == 0) alignmentRadius = 0;
stellarRemnantController.SetAlignmentRadius(alignmentRadius); stellarRemnantController.SetAlignmentRadius(alignmentRadius);
PlanetCreationHandler.SharedGenerateBody(srBody, go, sector, rb, true); PlanetCreationHandler.SharedGenerateBody(stellarRemnant, go, sector, rb, true);
} }
else else
{ {
@ -127,7 +126,7 @@ namespace NewHorizons.Builder.Body
} }
catch (Exception ex) catch (Exception ex)
{ {
Logger.LogError($"Couldn't make stellar remnant for [{config.name}]:\n{ex}"); Logger.LogError($"Couldn't make stellar remnant for [{star.Config.name}]:\n{ex}");
} }
} }
} }

View File

@ -100,6 +100,11 @@ namespace NewHorizons.External.Configs
/// </summary> /// </summary>
public bool isQuantumState; public bool isQuantumState;
/// <summary>
/// Does this config describe a stellar remnant of a custom star defined in another file?
/// </summary>
public bool isStellarRemnant;
/// <summary> /// <summary>
/// Add lava to this planet /// Add lava to this planet
/// </summary> /// </summary>

View File

@ -97,113 +97,6 @@ namespace NewHorizons.External.Modules.VariableSize
/// The type of stellar remnant your star will leave behind. /// The type of stellar remnant your star will leave behind.
/// </summary> /// </summary>
[DefaultValue("default")] public StellarRemnantType stellarRemnantType = StellarRemnantType.Default; [DefaultValue("default")] public StellarRemnantType stellarRemnantType = StellarRemnantType.Default;
/// <summary>
/// If you want a custom stellar remnant, use this.
/// </summary>
public StellarRemnantModule stellarRemnant;
public class StellarRemnantModule
{
/// <summary>
/// Describes this Body's atmosphere
/// </summary>
public AtmosphereModule Atmosphere;
/// <summary>
/// Base Properties of this Body
/// </summary>
public BaseModule Base;
/// <summary>
/// Add bramble nodes to this planet and/or make this planet a bramble dimension
/// </summary>
public BrambleModule Bramble;
/// <summary>
/// Add a cloaking field to this planet
/// </summary>
public CloakModule Cloak;
/// <summary>
/// Add funnel from this planet to another
/// </summary>
public FunnelModule Funnel;
/// <summary>
/// Generate the surface of this planet using a heightmap
/// </summary>
public HeightMapModule HeightMap;
/// <summary>
/// Add lava to this planet
/// </summary>
public LavaModule Lava;
/// <summary>
/// Procedural Generation
/// </summary>
public ProcGenModule ProcGen;
/// <summary>
/// Spawn various objects on this body
/// </summary>
public PropModule Props;
/// <summary>
/// A list of paths to child GameObjects to destroy on this planet
/// </summary>
public string[] removeChildren;
/// <summary>
/// Creates a ring around the planet
/// </summary>
public RingModule Ring;
/// <summary>
/// Add sand to this planet
/// </summary>
public SandModule Sand;
/// <summary>
/// Rotation period in minutes.
/// </summary>
public float siderealPeriod;
/// <summary>
/// Make this body a star
/// </summary>
public StarModule Star;
/// <summary>
/// Add water to this planet
/// </summary>
public WaterModule Water;
public PlanetConfig ConvertToPlanetConfig(PlanetConfig star)
{
PlanetConfig planetConfig = new PlanetConfig();
planetConfig.name = star.name;
planetConfig.starSystem = star.starSystem;
planetConfig.Atmosphere = Atmosphere;
planetConfig.Base = Base;
planetConfig.Bramble = Bramble;
planetConfig.Cloak = Cloak;
planetConfig.Funnel = Funnel;
planetConfig.HeightMap = HeightMap;
planetConfig.Lava = Lava;
planetConfig.Orbit = star.Orbit;
planetConfig.ProcGen = ProcGen;
planetConfig.Props = Props;
planetConfig.removeChildren = removeChildren;
planetConfig.Ring = Ring;
planetConfig.Sand = Sand;
planetConfig.Water = Water;
planetConfig.Validate();
planetConfig.Migrate();
return planetConfig;
}
}
} }
[JsonConverter(typeof(StringEnumConverter))] [JsonConverter(typeof(StringEnumConverter))]

View File

@ -200,6 +200,10 @@ namespace NewHorizons.Handlers
return false; return false;
} }
} }
else if (body.Config.isStellarRemnant)
{
//Skip
}
else else
{ {
UpdateBody(body, existingPlanet); UpdateBody(body, existingPlanet);
@ -218,6 +222,10 @@ namespace NewHorizons.Handlers
// If the ground state object isn't made yet do it later // If the ground state object isn't made yet do it later
_nextPassBodies.Add(body); _nextPassBodies.Add(body);
} }
else if (body.Config.isStellarRemnant)
{
//Skip
}
else else
{ {
try try
@ -500,7 +508,7 @@ namespace NewHorizons.Handlers
else else
{ {
StarLightController.AddStar(StarBuilder.Make(go, sector, body.Config.Star, body.Mod, false)); StarLightController.AddStar(StarBuilder.Make(go, sector, body.Config.Star, body.Mod, false));
StellarRemnantBuilder.Make(go, rb, body.Config, body.Mod, sphereOfInfluence); StellarRemnantBuilder.Make(body, go, rb, body.Mod, Main.BodyDict[body.Config.starSystem].Where(x => x.Config.name == body.Config.name && body.Config.isStellarRemnant).FirstOrDefault());
} }
} }

View File

@ -69,6 +69,10 @@
"type": "boolean", "type": "boolean",
"description": "Does this config describe a quantum state of a custom planet defined in another file?" "description": "Does this config describe a quantum state of a custom planet defined in another file?"
}, },
"isStellarRemnant": {
"type": "boolean",
"description": "Does this config describe a stellar remnant of a custom star defined in another file?"
},
"Lava": { "Lava": {
"description": "Add lava to this planet", "description": "Add lava to this planet",
"$ref": "#/definitions/LavaModule" "$ref": "#/definitions/LavaModule"