using System; using System.ComponentModel; using System.ComponentModel.DataAnnotations; using System.Runtime.Serialization; using NewHorizons.External.SerializableData; using NewHorizons.External.SerializableEnums; using Newtonsoft.Json; using Newtonsoft.Json.Converters; namespace NewHorizons.External.Modules { [JsonConverter(typeof(StringEnumConverter))] public enum CloudPrefabType { [EnumMember(Value = @"giantsDeep")] GiantsDeep = 0, [EnumMember(Value = @"quantumMoon")] QuantumMoon = 1, [EnumMember(Value = @"basic")] Basic = 2, [EnumMember(Value = @"transparent")] Transparent = 3, } [JsonObject] public class AtmosphereModule { /// /// Colour of atmospheric shader on the planet. /// public MColor atmosphereTint; /// /// How intense should the sun appear in the sky. /// Also affects general atmosphere brightness. /// Default value of 1 matches Timber Hearth. /// If not set, this will be determined based off the distance to the sun. /// [Range(0f, double.MaxValue)] public float atmosphereSunIntensity; /// /// Describes the clouds in the atmosphere /// public CloudInfo clouds; /// /// How dense the fog is, if you put fog. /// [Range(0f, double.MaxValue)] public float fogDensity; /// /// Radius of fog sphere, independent of the atmosphere. This has to be set for there to be fog. /// [Range(0f, double.MaxValue)] public float fogSize; /// /// Colour of fog on the planet, if you put fog. /// public MColor fogTint; /// /// Relative filepath to the fog color ramp texture, if you put fog. /// x axis is angle to sun (left at midnight, right at noon), y axis is distance to camera (close at bottom, far at top). /// public string fogRampPath; /// /// Lets you survive on the planet without a suit. /// public bool hasOxygen; /// /// Does this planet have trees? This will change the notification from "Oxygen tank refilled" to "Trees detected, oxygen tank refilled". /// public bool hasTrees; /// /// Does this planet have rain? /// public bool hasRain; /// /// Does this planet have snow? /// public bool hasSnow; /// /// Scale height of the atmosphere /// public float size; /// /// Whether we use an atmospheric shader on the planet. Doesn't affect clouds, fog, rain, snow, oxygen, etc. Purely /// visual. /// public bool useAtmosphereShader; /// /// Whether this atmosphere will have flames appear when your ship goes a certain speed. /// [DefaultValue(true)] public bool hasShockLayer = true; /// /// Minimum speed that your ship can go in the atmosphere where flames will appear. /// [DefaultValue(100f)] public float minShockSpeed = 100f; /// /// Maximum speed that your ship can go in the atmosphere where flames will appear at their brightest. /// [DefaultValue(300f)] public float maxShockSpeed = 300f; [JsonObject] public class CloudInfo { /// /// Should these clouds be based on Giant's Deep's banded clouds, or the Quantum Moon's non-banded clouds? /// public CloudPrefabType cloudsPrefab; /// /// Relative filepath to the cloud cap texture, if the planet has clouds. /// public string capPath; /// /// Fluid type for sounds/effects when colliding with this cloud. /// [DefaultValue("cloud")] public NHFluidType fluidType = NHFluidType.CLOUD; /// /// Add lightning to this planet like on Giant's Deep. /// public bool hasLightning; /// /// Radius from the center to the inner layer of the clouds. /// public float innerCloudRadius; /// /// Colour gradient of the lightning, time is in seconds. /// public MGradient[] lightningGradient; /// /// Radius from the center to the outer layer of the clouds. /// public float outerCloudRadius; /// /// Relative filepath to the cloud ramp texture, if the planet has clouds. If you don't put anything here it will be /// auto-generated. /// public string rampPath; /// /// Relative filepath to the cloud texture, if the planet has clouds. /// public string texturePath; /// /// Colour of the inner cloud layer. /// public MColor tint; /// /// If the top layer shouldn't have shadows. Set to true if you're making a brown dwarf for example. /// public bool unlit; /// /// How fast the clouds will rotate relative to the planet in degrees per second. /// [DefaultValue(0f)] public float rotationSpeed = 0f; #region Obsolete /// /// Set to `false` in order to use Giant's Deep's shader. Set to `true` to just apply the cloud texture as is. /// [Obsolete("useBasicCloudShader is deprecated, please use cloudsPrefab=\"basic\" instead")] public bool useBasicCloudShader; #endregion Obsolete } #region Obsolete [Obsolete("CloudTint is deprecated, please use CloudInfo instead")] public MColor cloudTint; [Obsolete("CloudTint is deprecated, please use CloudInfo instead")] public string cloud; [Obsolete("CloudCap is deprecated, please use CloudInfo instead")] public string cloudCap; [Obsolete("CloudRamp is deprecated, please use CloudInfo instead")] public string cloudRamp; [Obsolete("FluidType is deprecated, please use CloudInfo instead")] public NHFluidType fluidType; [Obsolete("UseBasicCloudShader is deprecated, please use CloudInfo instead")] public bool useBasicCloudShader; [DefaultValue(true)] [Obsolete("ShadowsOnClouds is deprecated, please use CloudInfo instead")] public bool shadowsOnClouds = true; [Obsolete("HasAtmosphere is deprecated, please use UseAtmosphereShader instead")] public bool hasAtmosphere; #endregion Obsolete } }