using System;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Runtime.Serialization;
using NewHorizons.Utility;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
namespace NewHorizons.External.Modules
{
public enum CloudFluidType
{
[EnumMember(Value = @"NONE")] None = 0,
[EnumMember(Value = @"WATER")] Water = 1,
[EnumMember(Value = @"CLOUD")] Cloud = 2,
[EnumMember(Value = @"SAND")] Sand = 3,
[EnumMember(Value = @"PLASMA")] Plasma = 4
}
[JsonObject]
public class AtmosphereModule
{
///
/// Colour of atmospheric shader on the planet.
///
public MColor atmosphereTint;
///
/// Describes the clouds in the atmosphere
///
public CloudInfo clouds;
///
/// How dense the fog is, if you put fog.
///
[Range(0f, 1f)] 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;
///
/// Lets you survive on the planet without a suit.
///
public bool hasOxygen;
///
/// 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;
public class AirInfo
{
public bool hasOxygen;
public bool isRaining;
public bool isSnowing;
public float scale;
}
[JsonObject]
public class CloudInfo
{
///
/// 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.
///
[JsonConverter(typeof(StringEnumConverter))]
public CloudFluidType fluidType = CloudFluidType.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;
///
/// Set to `false` in order to use Giant's deep shader. Set to `true` to just apply the cloud texture as is.
///
public bool useBasicCloudShader;
}
#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("CloudFluidType is deprecated, please use CloudInfo instead")]
[JsonConverter(typeof(StringEnumConverter))]
public CloudFluidType? 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
}
}