diff --git a/NewHorizons/Builder/Body/AsteroidBeltBuilder.cs b/NewHorizons/Builder/Body/AsteroidBeltBuilder.cs index 8568f61b..01fd7f18 100644 --- a/NewHorizons/Builder/Body/AsteroidBeltBuilder.cs +++ b/NewHorizons/Builder/Body/AsteroidBeltBuilder.cs @@ -36,7 +36,6 @@ namespace NewHorizons.Builder.Body config.Base = new BaseModule() { - hasMapMarker = false, surfaceGravity = 1, surfaceSize = size, gravityFallOff = GravityFallOff.InverseSquared @@ -58,6 +57,11 @@ namespace NewHorizons.Builder.Body enabled = false }; + config.MapMarker = new MapMarkerModule() + { + enabled = false + }; + config.ProcGen = belt.procGen; if (config.ProcGen == null) { diff --git a/NewHorizons/Builder/General/AstroObjectBuilder.cs b/NewHorizons/Builder/General/AstroObjectBuilder.cs index a2fc1410..21be3536 100644 --- a/NewHorizons/Builder/General/AstroObjectBuilder.cs +++ b/NewHorizons/Builder/General/AstroObjectBuilder.cs @@ -16,7 +16,7 @@ namespace NewHorizons.Builder.General var config = nhBody.Config; astroObject.isVanilla = isVanilla; - astroObject.HideDisplayName = !config.Base.hasMapMarker; + astroObject.HideDisplayName = !config.MapMarker.enabled; astroObject.invulnerableToSun = config.Base.invulnerableToSun; if (config.Orbit != null) astroObject.SetOrbitalParametersFromConfig(config.Orbit); diff --git a/NewHorizons/Builder/General/MarkerBuilder.cs b/NewHorizons/Builder/General/MarkerBuilder.cs index bcb945a9..ad17b191 100644 --- a/NewHorizons/Builder/General/MarkerBuilder.cs +++ b/NewHorizons/Builder/General/MarkerBuilder.cs @@ -1,5 +1,6 @@ -#region +#region +using NewHorizons.Components; using NewHorizons.External.Configs; using NewHorizons.Handlers; using UnityEngine; @@ -12,7 +13,8 @@ namespace NewHorizons.Builder.General { public static void Make(GameObject body, string name, PlanetConfig config) { - MapMarker mapMarker = body.AddComponent(); + var module = config.MapMarker; + NHMapMarker mapMarker = body.AddComponent(); mapMarker._labelID = (UITextType)TranslationHandler.AddUI(config.name); var markerType = MapMarker.MarkerType.Planet; @@ -37,6 +39,9 @@ namespace NewHorizons.Builder.General */ mapMarker._markerType = markerType; + + mapMarker.minDisplayDistanceOverride = module.minDisplayDistanceOverride; + mapMarker.maxDisplayDistanceOverride = module.maxDisplayDistanceOverride; } } } diff --git a/NewHorizons/Components/NHMapMarker.cs b/NewHorizons/Components/NHMapMarker.cs new file mode 100644 index 00000000..501f18e7 --- /dev/null +++ b/NewHorizons/Components/NHMapMarker.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace NewHorizons.Components +{ + public class NHMapMarker : MapMarker + { + public float minDisplayDistanceOverride = -1; + public float maxDisplayDistanceOverride = -1; + + public new void Awake() + { + base.Awake(); + if (minDisplayDistanceOverride >= 0) + { + _minDisplayDistance = minDisplayDistanceOverride; + } + if (maxDisplayDistanceOverride >= 0) + { + _maxDisplayDistance = maxDisplayDistanceOverride; + } + } + } +} diff --git a/NewHorizons/External/Configs/PlanetConfig.cs b/NewHorizons/External/Configs/PlanetConfig.cs index f29c511a..28f00318 100644 --- a/NewHorizons/External/Configs/PlanetConfig.cs +++ b/NewHorizons/External/Configs/PlanetConfig.cs @@ -113,6 +113,11 @@ namespace NewHorizons.External.Configs /// public LavaModule Lava; + /// + /// Map marker properties of this body + /// + public MapMarkerModule MapMarker; + /// /// Describes this Body's orbit (or lack there of) /// @@ -214,6 +219,7 @@ namespace NewHorizons.External.Configs if (Base == null) Base = new BaseModule(); if (Orbit == null) Orbit = new OrbitModule(); if (ReferenceFrame == null) ReferenceFrame = new ReferenceFrameModule(); + if (MapMarker == null) MapMarker = new MapMarkerModule(); } public void Validate() @@ -307,6 +313,8 @@ namespace NewHorizons.External.Configs if (!Base.hasReferenceFrame) ReferenceFrame.enabled = false; + if (Base.hasMapMarker) MapMarker.enabled = true; + if (childrenToDestroy != null) removeChildren = childrenToDestroy; if (Base.cloakRadius != 0) diff --git a/NewHorizons/External/Modules/BaseModule.cs b/NewHorizons/External/Modules/BaseModule.cs index 1e1c28d1..78a41fee 100644 --- a/NewHorizons/External/Modules/BaseModule.cs +++ b/NewHorizons/External/Modules/BaseModule.cs @@ -36,11 +36,6 @@ namespace NewHorizons.External.Modules /// public float groundSize; - /// - /// If the body should have a marker on the map screen. - /// - public bool hasMapMarker; - /// /// Can this planet survive entering a star? /// @@ -108,6 +103,9 @@ namespace NewHorizons.External.Modules [Obsolete("AmbientLight is deprecated, please use AmbientLightModule instead")] public float ambientLight; + [Obsolete("HasMapMarker is deprecated, please use MapMarkerModule instead")] + public bool hasMapMarker; + [Obsolete("HasReferenceFrame is deprecated, please use ReferenceModule instead")] [DefaultValue(true)] public bool hasReferenceFrame = true; diff --git a/NewHorizons/External/Modules/MapMarkerModule.cs b/NewHorizons/External/Modules/MapMarkerModule.cs new file mode 100644 index 00000000..a1f91aad --- /dev/null +++ b/NewHorizons/External/Modules/MapMarkerModule.cs @@ -0,0 +1,25 @@ +using System.ComponentModel; +using NewHorizons.External.SerializableData; +using Newtonsoft.Json; + +namespace NewHorizons.External.Modules +{ + [JsonObject] + public class MapMarkerModule + { + /// + /// If the body should have a marker on the map screen. + /// + public bool enabled; + + /// + /// Lowest distance away from the body that the marker can be shown. This is automatically set to 0 for all bodies except focal points where it is 5,000. + /// + public float minDisplayDistanceOverride = -1; + + /// + /// Highest distance away from the body that the marker can be shown. For planets and focal points the automatic value is 50,000. Moons and planets in focal points are 5,000. Stars are 1E+10 (10,000,000,000). + /// + public float maxDisplayDistanceOverride = -1; + } +} \ No newline at end of file diff --git a/NewHorizons/Handlers/PlanetCreationHandler.cs b/NewHorizons/Handlers/PlanetCreationHandler.cs index 75edb30a..bd0a7dca 100644 --- a/NewHorizons/Handlers/PlanetCreationHandler.cs +++ b/NewHorizons/Handlers/PlanetCreationHandler.cs @@ -366,7 +366,7 @@ namespace NewHorizons.Handlers go.SetActive(false); body.Config.Base.showMinimap = false; - body.Config.Base.hasMapMarker = false; + body.Config.MapMarker.enabled = false; const float sphereOfInfluence = 2000f; @@ -459,7 +459,7 @@ namespace NewHorizons.Handlers RFVolumeBuilder.Make(go, owRigidBody, sphereOfInfluence, body.Config.ReferenceFrame); - if (body.Config.Base.hasMapMarker) + if (body.Config.MapMarker.enabled) { MarkerBuilder.Make(go, body.Config.name, body.Config); }