mirror of
https://github.com/Outer-Wilds-New-Horizons/new-horizons.git
synced 2025-12-11 20:15:44 +01:00
Merge branch 'dev' into bramble-nodes
This commit is contained in:
commit
fe05a88bcb
@ -1,4 +1,5 @@
|
|||||||
using NewHorizons.External.Modules;
|
using NewHorizons.External.Modules;
|
||||||
|
using NewHorizons.Components;
|
||||||
using NewHorizons.Utility;
|
using NewHorizons.Utility;
|
||||||
using OWML.Common;
|
using OWML.Common;
|
||||||
using System;
|
using System;
|
||||||
@ -20,7 +21,7 @@ namespace NewHorizons.Builder.Atmosphere
|
|||||||
private static readonly int CapTex = Shader.PropertyToID("_CapTex");
|
private static readonly int CapTex = Shader.PropertyToID("_CapTex");
|
||||||
private static readonly int ColorRamp = Shader.PropertyToID("_ColorRamp");
|
private static readonly int ColorRamp = Shader.PropertyToID("_ColorRamp");
|
||||||
|
|
||||||
public static void Make(GameObject planetGO, Sector sector, AtmosphereModule atmo, IModBehaviour mod)
|
public static void Make(GameObject planetGO, Sector sector, AtmosphereModule atmo, bool cloaked, IModBehaviour mod)
|
||||||
{
|
{
|
||||||
if (_lightningPrefab == null) _lightningPrefab = SearchUtilities.Find("GiantsDeep_Body/Sector_GD/Clouds_GD/LightningGenerator_GD");
|
if (_lightningPrefab == null) _lightningPrefab = SearchUtilities.Find("GiantsDeep_Body/Sector_GD/Clouds_GD/LightningGenerator_GD");
|
||||||
if (_colorRamp == null) _colorRamp = ImageUtilities.GetTexture(Main.Instance, "Assets/textures/Clouds_Bottom_ramp.png");
|
if (_colorRamp == null) _colorRamp = ImageUtilities.GetTexture(Main.Instance, "Assets/textures/Clouds_Bottom_ramp.png");
|
||||||
@ -65,8 +66,10 @@ namespace NewHorizons.Builder.Atmosphere
|
|||||||
bottomTSR.LODBias = 0;
|
bottomTSR.LODBias = 0;
|
||||||
bottomTSR.LODRadius = 1f;
|
bottomTSR.LODRadius = 1f;
|
||||||
|
|
||||||
TessSphereSectorToggle bottomTSST = cloudsBottomGO.AddComponent<TessSphereSectorToggle>();
|
if (cloaked)
|
||||||
bottomTSST._sector = sector;
|
cloudsBottomGO.AddComponent<CloakedTessSphereSectorToggle>()._sector = sector;
|
||||||
|
else
|
||||||
|
cloudsBottomGO.AddComponent<TessSphereSectorToggle>()._sector = sector;
|
||||||
|
|
||||||
GameObject cloudsFluidGO = new GameObject("CloudsFluid");
|
GameObject cloudsFluidGO = new GameObject("CloudsFluid");
|
||||||
cloudsFluidGO.SetActive(false);
|
cloudsFluidGO.SetActive(false);
|
||||||
|
|||||||
@ -44,15 +44,9 @@ namespace NewHorizons.Builder.General
|
|||||||
|
|
||||||
public static void SetDetector(AstroObject primaryBody, AstroObject astroObject, ConstantForceDetector forceDetector)
|
public static void SetDetector(AstroObject primaryBody, AstroObject astroObject, ConstantForceDetector forceDetector)
|
||||||
{
|
{
|
||||||
GravityVolume parentGravityVolume = primaryBody?.GetAttachedOWRigidbody()?.GetAttachedGravityVolume();
|
|
||||||
if (parentGravityVolume != null)
|
|
||||||
{
|
|
||||||
forceDetector._detectableFields = new ForceVolume[] { parentGravityVolume };
|
|
||||||
}
|
|
||||||
else if (astroObject != null)
|
|
||||||
{
|
|
||||||
// It's probably a focal point (or its just broken)
|
|
||||||
var binaryFocalPoint = primaryBody?.gameObject?.GetComponent<BinaryFocalPoint>();
|
var binaryFocalPoint = primaryBody?.gameObject?.GetComponent<BinaryFocalPoint>();
|
||||||
|
var parentGravityVolume = primaryBody?.GetAttachedOWRigidbody()?.GetAttachedGravityVolume();
|
||||||
|
|
||||||
if (binaryFocalPoint != null)
|
if (binaryFocalPoint != null)
|
||||||
{
|
{
|
||||||
if (astroObject.GetCustomName().Equals(binaryFocalPoint.PrimaryName))
|
if (astroObject.GetCustomName().Equals(binaryFocalPoint.PrimaryName))
|
||||||
@ -78,11 +72,13 @@ namespace NewHorizons.Builder.General
|
|||||||
// It's a planet
|
// It's a planet
|
||||||
if (binaryFocalPoint.Primary != null && binaryFocalPoint.Secondary != null)
|
if (binaryFocalPoint.Primary != null && binaryFocalPoint.Secondary != null)
|
||||||
{
|
{
|
||||||
var fakeBarycenterGravityVolume = binaryFocalPoint.FakeMassBody.GetComponent<AstroObject>().GetGravityVolume();
|
forceDetector._detectableFields = new ForceVolume[] { parentGravityVolume };
|
||||||
forceDetector._detectableFields = new ForceVolume[] { fakeBarycenterGravityVolume };
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
forceDetector._detectableFields = new ForceVolume[] { parentGravityVolume };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -4,6 +4,7 @@ using NewHorizons.External.Modules;
|
|||||||
using NewHorizons.Handlers;
|
using NewHorizons.Handlers;
|
||||||
using NewHorizons.Utility;
|
using NewHorizons.Utility;
|
||||||
using OWML.Common;
|
using OWML.Common;
|
||||||
|
using System.Linq;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using Logger = NewHorizons.Utility.Logger;
|
using Logger = NewHorizons.Utility.Logger;
|
||||||
namespace NewHorizons.Builder.Orbital
|
namespace NewHorizons.Builder.Orbital
|
||||||
@ -18,12 +19,10 @@ namespace NewHorizons.Builder.Orbital
|
|||||||
binary.PrimaryName = module.primary;
|
binary.PrimaryName = module.primary;
|
||||||
binary.SecondaryName = module.secondary;
|
binary.SecondaryName = module.secondary;
|
||||||
|
|
||||||
// Below is the stupid fix for making circumbinary planets or wtv
|
|
||||||
|
|
||||||
// Grab the bodies from the main dictionary
|
// Grab the bodies from the main dictionary
|
||||||
NewHorizonsBody primary = null;
|
NewHorizonsBody primary = null;
|
||||||
NewHorizonsBody secondary = null;
|
NewHorizonsBody secondary = null;
|
||||||
foreach (var body in Main.BodyDict[Main.Instance.CurrentStarSystem])
|
foreach (var body in Main.BodyDict[config.starSystem])
|
||||||
{
|
{
|
||||||
if (body.Config.name == module.primary)
|
if (body.Config.name == module.primary)
|
||||||
{
|
{
|
||||||
@ -44,28 +43,26 @@ namespace NewHorizons.Builder.Orbital
|
|||||||
Logger.LogError($"Couldn't make focal point between [{module.primary} = {primary}] and [{module.secondary} = {secondary}]");
|
Logger.LogError($"Couldn't make focal point between [{module.primary} = {primary}] and [{module.secondary} = {secondary}]");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void ValidateConfig(PlanetConfig config)
|
||||||
|
{
|
||||||
|
var primary = Main.BodyDict[config.starSystem].Where(x => x.Config.name == config.FocalPoint.primary).FirstOrDefault();
|
||||||
|
var secondary = Main.BodyDict[config.starSystem].Where(x => x.Config.name == config.FocalPoint.secondary).FirstOrDefault();
|
||||||
|
|
||||||
var gravitationalMass = GetGravitationalMass(primary.Config) + GetGravitationalMass(secondary.Config);
|
var gravitationalMass = GetGravitationalMass(primary.Config) + GetGravitationalMass(secondary.Config);
|
||||||
|
|
||||||
// Copying it because I don't want to modify the actual config
|
|
||||||
var fakeMassConfig = new PlanetConfig();
|
|
||||||
|
|
||||||
// Now need to fake the 3 values to make it return this mass
|
// Now need to fake the 3 values to make it return this mass
|
||||||
fakeMassConfig.Base.surfaceSize = 1;
|
config.Base.surfaceSize = 1;
|
||||||
fakeMassConfig.Base.surfaceGravity = gravitationalMass * GravityVolume.GRAVITATIONAL_CONSTANT;
|
config.Base.surfaceGravity = gravitationalMass * GravityVolume.GRAVITATIONAL_CONSTANT;
|
||||||
fakeMassConfig.Base.gravityFallOff = primary.Config.Base.gravityFallOff;
|
config.Base.gravityFallOff = primary.Config.Base.gravityFallOff;
|
||||||
|
|
||||||
// Other stuff to make the fake barycenter not interact with anything in any way
|
// Other stuff to make the barycenter not interact with anything in any way
|
||||||
fakeMassConfig.name = config.name + "_FakeBarycenterMass";
|
config.Base.soiOverride = 0;
|
||||||
fakeMassConfig.Base.soiOverride = 0;
|
|
||||||
fakeMassConfig.Base.hasMapMarker = false;
|
|
||||||
fakeMassConfig.ReferenceFrame.enabled = false;
|
|
||||||
fakeMassConfig.ReferenceFrame.hideInMap = true;
|
|
||||||
|
|
||||||
fakeMassConfig.Orbit = new OrbitModule();
|
var separation = primary.Config.Orbit.semiMajorAxis + secondary.Config.Orbit.semiMajorAxis;
|
||||||
fakeMassConfig.Orbit.CopyPropertiesFrom(config.Orbit);
|
config.ReferenceFrame.bracketRadius = separation;
|
||||||
|
config.ReferenceFrame.targetColliderRadius = separation;
|
||||||
binary.FakeMassBody = PlanetCreationHandler.GenerateBody(new NewHorizonsBody(fakeMassConfig, mod));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static float GetGravitationalMass(PlanetConfig config)
|
private static float GetGravitationalMass(PlanetConfig config)
|
||||||
|
|||||||
@ -70,8 +70,8 @@ namespace NewHorizons.Builder.Orbital
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
// It's a circumbinary moon/planet
|
// It's a circumbinary moon/planet
|
||||||
var fakePrimaryBody = focalPoint.FakeMassBody.GetComponent<AstroObject>();
|
var focalPointAO = focalPoint.GetComponent<AstroObject>();
|
||||||
SetMotionFromPrimary(fakePrimaryBody, secondaryBody, secondaryBody as NHAstroObject, initialMotion);
|
SetMotionFromPrimary(focalPointAO, secondaryBody, secondaryBody as NHAstroObject, initialMotion);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (primaryBody.GetGravityVolume())
|
else if (primaryBody.GetGravityVolume())
|
||||||
@ -107,11 +107,11 @@ namespace NewHorizons.Builder.Orbital
|
|||||||
// Might make binaries with binaries with binaries work
|
// Might make binaries with binaries with binaries work
|
||||||
if (primaryBody.GetGravityVolume() == null)
|
if (primaryBody.GetGravityVolume() == null)
|
||||||
{
|
{
|
||||||
primaryGravity = new Gravity(primaryBody.GetComponent<BinaryFocalPoint>()?.FakeMassBody?.GetComponent<AstroObject>()?.GetGravityVolume());
|
primaryGravity = new Gravity(primaryBody.GetGravityVolume());
|
||||||
}
|
}
|
||||||
if (secondaryBody.GetGravityVolume() == null)
|
if (secondaryBody.GetGravityVolume() == null)
|
||||||
{
|
{
|
||||||
secondaryGravity = new Gravity(secondaryBody.GetComponent<BinaryFocalPoint>()?.FakeMassBody?.GetComponent<AstroObject>()?.GetGravityVolume());
|
secondaryGravity = new Gravity(secondaryBody.GetGravityVolume());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update the positions
|
// Update the positions
|
||||||
|
|||||||
@ -11,6 +11,8 @@ namespace NewHorizons.Components
|
|||||||
private bool _isInitialized;
|
private bool _isInitialized;
|
||||||
|
|
||||||
private List<Renderer> _renderers = null;
|
private List<Renderer> _renderers = null;
|
||||||
|
private List<TessellatedRenderer> _tessellatedRenderers = null;
|
||||||
|
private List<CloakedTessSphereSectorToggle> _tessSphereToggles = null;
|
||||||
|
|
||||||
public static bool isPlayerInside = false;
|
public static bool isPlayerInside = false;
|
||||||
public static bool isProbeInside = false;
|
public static bool isProbeInside = false;
|
||||||
@ -51,6 +53,8 @@ namespace NewHorizons.Components
|
|||||||
private void SetUpList()
|
private void SetUpList()
|
||||||
{
|
{
|
||||||
_renderers = _root.GetComponentsInChildren<Renderer>().ToList();
|
_renderers = _root.GetComponentsInChildren<Renderer>().ToList();
|
||||||
|
_tessellatedRenderers = _root.GetComponentsInChildren<TessellatedRenderer>().ToList();
|
||||||
|
_tessSphereToggles = _root.GetComponentsInChildren<CloakedTessSphereSectorToggle>().ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OnPlayerEnter()
|
public void OnPlayerEnter()
|
||||||
@ -62,6 +66,16 @@ namespace NewHorizons.Components
|
|||||||
renderer.forceRenderingOff = false;
|
renderer.forceRenderingOff = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
foreach (var tessellatedRenderer in _tessellatedRenderers)
|
||||||
|
{
|
||||||
|
tessellatedRenderer.enabled = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (var tessSphereSectorToggle in _tessSphereToggles)
|
||||||
|
{
|
||||||
|
tessSphereSectorToggle.OnEnterCloakField();
|
||||||
|
}
|
||||||
|
|
||||||
isPlayerInside = true;
|
isPlayerInside = true;
|
||||||
GlobalMessenger.FireEvent("PlayerEnterCloakField");
|
GlobalMessenger.FireEvent("PlayerEnterCloakField");
|
||||||
}
|
}
|
||||||
@ -75,6 +89,16 @@ namespace NewHorizons.Components
|
|||||||
renderer.forceRenderingOff = true;
|
renderer.forceRenderingOff = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
foreach (var tessellatedRenderer in _tessellatedRenderers)
|
||||||
|
{
|
||||||
|
tessellatedRenderer.enabled = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (var tessSphereSectorToggle in _tessSphereToggles)
|
||||||
|
{
|
||||||
|
tessSphereSectorToggle.OnExitCloakField();
|
||||||
|
}
|
||||||
|
|
||||||
isPlayerInside = false;
|
isPlayerInside = false;
|
||||||
GlobalMessenger.FireEvent("PlayerExitCloakField");
|
GlobalMessenger.FireEvent("PlayerExitCloakField");
|
||||||
}
|
}
|
||||||
|
|||||||
74
NewHorizons/Components/CloakedTessSphereSectorToggle.cs
Normal file
74
NewHorizons/Components/CloakedTessSphereSectorToggle.cs
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace NewHorizons.Components
|
||||||
|
{
|
||||||
|
[RequireComponent(typeof(TessellatedSphereRenderer))]
|
||||||
|
public class CloakedTessSphereSectorToggle : SectoredMonoBehaviour
|
||||||
|
{
|
||||||
|
protected TessellatedSphereRenderer _renderer;
|
||||||
|
protected bool _inMapView;
|
||||||
|
protected bool _inCloakField;
|
||||||
|
|
||||||
|
public override void Awake()
|
||||||
|
{
|
||||||
|
_renderer = GetComponent<TessellatedSphereRenderer>();
|
||||||
|
GlobalMessenger.AddListener("EnterMapView", OnEnterMapView);
|
||||||
|
GlobalMessenger.AddListener("ExitMapView", OnExitMapView);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void OnDestroy()
|
||||||
|
{
|
||||||
|
GlobalMessenger.RemoveListener("EnterMapView", OnEnterMapView);
|
||||||
|
GlobalMessenger.RemoveListener("ExitMapView", OnExitMapView);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void OnChangeSector(Sector oldSector, Sector newSector) => OnSectorOccupantsUpdated();
|
||||||
|
|
||||||
|
public override void OnSectorOccupantsUpdated()
|
||||||
|
{
|
||||||
|
if (_inMapView || !_inCloakField)
|
||||||
|
return;
|
||||||
|
if (_sector != null)
|
||||||
|
{
|
||||||
|
if (_sector.ContainsAnyOccupants(DynamicOccupant.Player | DynamicOccupant.Probe) && !_renderer.enabled)
|
||||||
|
{
|
||||||
|
_renderer.enabled = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (_sector.ContainsAnyOccupants(DynamicOccupant.Player | DynamicOccupant.Probe) || !_renderer.enabled)
|
||||||
|
return;
|
||||||
|
_renderer.enabled = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
_renderer.enabled = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual void OnEnterMapView()
|
||||||
|
{
|
||||||
|
_inMapView = true;
|
||||||
|
if (_renderer.enabled)
|
||||||
|
_renderer.enabled = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual void OnExitMapView()
|
||||||
|
{
|
||||||
|
_inMapView = false;
|
||||||
|
OnSectorOccupantsUpdated();
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual void OnEnterCloakField()
|
||||||
|
{
|
||||||
|
_inCloakField = true;
|
||||||
|
OnSectorOccupantsUpdated();
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual void OnExitCloakField()
|
||||||
|
{
|
||||||
|
_inCloakField = false;
|
||||||
|
if (_renderer.enabled)
|
||||||
|
_renderer.enabled = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,4 +1,4 @@
|
|||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
namespace NewHorizons.Components.Orbital
|
namespace NewHorizons.Components.Orbital
|
||||||
{
|
{
|
||||||
public class BinaryFocalPoint : MonoBehaviour
|
public class BinaryFocalPoint : MonoBehaviour
|
||||||
@ -9,14 +9,6 @@ namespace NewHorizons.Components.Orbital
|
|||||||
public AstroObject Primary { get; set; }
|
public AstroObject Primary { get; set; }
|
||||||
public AstroObject Secondary { get; set; }
|
public AstroObject Secondary { get; set; }
|
||||||
|
|
||||||
public GameObject FakeMassBody { get; set; }
|
|
||||||
|
|
||||||
void Start()
|
|
||||||
{
|
|
||||||
// Make sure its active but maybe it hasn't been set yet
|
|
||||||
if (FakeMassBody) FakeMassBody.SetActive(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Update()
|
void Update()
|
||||||
{
|
{
|
||||||
if (Primary == null || Secondary == null)
|
if (Primary == null || Secondary == null)
|
||||||
@ -48,8 +40,6 @@ namespace NewHorizons.Components.Orbital
|
|||||||
{
|
{
|
||||||
component2.DisableMarker();
|
component2.DisableMarker();
|
||||||
}
|
}
|
||||||
|
|
||||||
FakeMassBody.SetActive(false);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
1
NewHorizons/External/Configs/PlanetConfig.cs
vendored
1
NewHorizons/External/Configs/PlanetConfig.cs
vendored
@ -3,6 +3,7 @@ using System.Collections.Generic;
|
|||||||
using System.ComponentModel;
|
using System.ComponentModel;
|
||||||
using System.ComponentModel.DataAnnotations;
|
using System.ComponentModel.DataAnnotations;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using NewHorizons.Builder.Orbital;
|
||||||
using NewHorizons.External.Modules;
|
using NewHorizons.External.Modules;
|
||||||
using NewHorizons.External.Modules.VariableSize;
|
using NewHorizons.External.Modules.VariableSize;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
|
|||||||
@ -326,6 +326,9 @@ namespace NewHorizons.Handlers
|
|||||||
|
|
||||||
public static GameObject GenerateStandardBody(NewHorizonsBody body, bool defaultPrimaryToSun = false)
|
public static GameObject GenerateStandardBody(NewHorizonsBody body, bool defaultPrimaryToSun = false)
|
||||||
{
|
{
|
||||||
|
// Focal points are weird
|
||||||
|
if (body.Config.FocalPoint != null) FocalPointBuilder.ValidateConfig(body.Config);
|
||||||
|
|
||||||
AstroObject primaryBody;
|
AstroObject primaryBody;
|
||||||
if (body.Config.Orbit.primaryBody != null)
|
if (body.Config.Orbit.primaryBody != null)
|
||||||
{
|
{
|
||||||
@ -508,6 +511,8 @@ namespace NewHorizons.Handlers
|
|||||||
SandBuilder.Make(go, sector, rb, body.Config.Sand);
|
SandBuilder.Make(go, sector, rb, body.Config.Sand);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var willHaveCloak = body.Config.Cloak != null && body.Config.Cloak.radius != 0f;
|
||||||
|
|
||||||
if (body.Config.Atmosphere != null)
|
if (body.Config.Atmosphere != null)
|
||||||
{
|
{
|
||||||
var airInfo = new AtmosphereModule.AirInfo()
|
var airInfo = new AtmosphereModule.AirInfo()
|
||||||
@ -524,7 +529,7 @@ namespace NewHorizons.Handlers
|
|||||||
|
|
||||||
if (!string.IsNullOrEmpty(body.Config.Atmosphere?.clouds?.texturePath))
|
if (!string.IsNullOrEmpty(body.Config.Atmosphere?.clouds?.texturePath))
|
||||||
{
|
{
|
||||||
CloudsBuilder.Make(go, sector, body.Config.Atmosphere, body.Mod);
|
CloudsBuilder.Make(go, sector, body.Config.Atmosphere, willHaveCloak, body.Mod);
|
||||||
SunOverrideBuilder.Make(go, sector, body.Config.Atmosphere, body.Config.Water, surfaceSize);
|
SunOverrideBuilder.Make(go, sector, body.Config.Atmosphere, body.Config.Water, surfaceSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -553,7 +558,7 @@ namespace NewHorizons.Handlers
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Has to go last probably
|
// Has to go last probably
|
||||||
if (body.Config.Cloak != null && body.Config.Cloak.radius != 0f)
|
if (willHaveCloak)
|
||||||
{
|
{
|
||||||
CloakBuilder.Make(go, sector, rb, body.Config.Cloak, !body.Config.ReferenceFrame.hideInMap, body.Mod);
|
CloakBuilder.Make(go, sector, rb, body.Config.Cloak, !body.Config.ReferenceFrame.hideInMap, body.Mod);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
Title: Detailing
|
Title: Detailing
|
||||||
Sort_Priority: 90
|
Sort_Priority: 85
|
||||||
---
|
---
|
||||||
|
|
||||||
# Details/Scatterer
|
# Details/Scatterer
|
||||||
|
|||||||
46
docs/content/pages/tutorials/star_system.md
Normal file
46
docs/content/pages/tutorials/star_system.md
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
---
|
||||||
|
Title: Star System
|
||||||
|
Description: A guide to editing a custom star system in New Horizons
|
||||||
|
Sort_Priority: 90
|
||||||
|
---
|
||||||
|
|
||||||
|
# Intro
|
||||||
|
|
||||||
|
Welcome! This page outlines how to edit a custom star system.
|
||||||
|
|
||||||
|
## Getting Started
|
||||||
|
|
||||||
|
Star Systems are placed in a folder called systems within your mod folder.
|
||||||
|
|
||||||
|
The name of your star system config must be the same as the unique id used in the `starSystem` field of your planet configs. Example: `xen.RealSolarSystem.json`.
|
||||||
|
|
||||||
|
A star system config file will look something like this:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"$schema": "https://raw.githubusercontent.com/xen-42/outer-wilds-new-horizons/main/NewHorizons/Schemas/star_system_schema.json",
|
||||||
|
"coords": {
|
||||||
|
"x": [ 4, 0, 3, 1 ],
|
||||||
|
"y": [ 0, 5, 4 ],
|
||||||
|
"z": [ 5, 4, 0, 3, 1 ]
|
||||||
|
},
|
||||||
|
"vesselPosition": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"z": 8000
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
To see all the different things you can put into a config file check out the [Star System Schema]({{ 'Star System Schema'|route}}).
|
||||||
|
|
||||||
|
## Vessel Coordinates
|
||||||
|
|
||||||
|
You can warp to custom star systems via the Nomai vessel. Each coordinate has to be 2-6 points long.
|
||||||
|
These are the points for each coordinate node. When making your unique coordinate you should only use each point once.
|
||||||
|

|
||||||
|
|
||||||
|
### Hearthian Solar System Vessel Coordinates
|
||||||
|
|
||||||
|
You can use these coordinates to warp back to the hearthian solar system.
|
||||||
|

|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 72 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 79 KiB |
Loading…
x
Reference in New Issue
Block a user