using NewHorizons.Utility;
using Newtonsoft.Json;
using System.ComponentModel;
namespace NewHorizons.External.Modules
{
[JsonObject]
public class ShipLogModule
{
///
/// List colors of curiosity entries
///
public CuriosityColorInfo[] curiosities;
///
/// Manually layout entries in detective mode
///
public EntryPositionInfo[] entryPositions;
///
/// A list of fact IDs to reveal when the game starts.
///
public string[] initialReveal;
///
/// Describe what this planet looks and like in map mode
///
public MapModeInfo mapMode = new MapModeInfo();
///
/// A path to the folder where entry sprites are stored.
///
public string spriteFolder;
///
/// The relative path to the xml file to load ship log entries from.
///
public string xmlFile;
[JsonObject]
public class MapModeInfo
{
///
/// Place non-selectable objects in map mode (like sand funnels).
///
public ShipLogDetailInfo[] details;
///
/// Hide the planet completely if unexplored instead of showing an outline.
///
public bool invisibleWhenHidden;
///
/// Specify where this planet is in terms of navigation.
///
public MVector2 manualNavigationPosition;
///
/// Manually place this planet at the specified position.
///
public MVector2 manualPosition;
///
/// Extra distance to apply to this object in map mode.
///
public float offset;
///
/// The path to the sprite to show when the planet is unexplored in map mode.
///
public string outlineSprite;
///
/// Completely remove this planet (and it's children) from map mode.
///
public bool remove;
///
/// The path to the sprite to show when the planet is revealed in map mode.
///
public string revealedSprite;
///
/// Scale to apply to the planet in map mode.
///
[DefaultValue(1f)] public float scale = 1f;
}
[JsonObject]
public class ShipLogDetailInfo
{
///
/// Whether to completely hide this detail when the parent AstroBody is unexplored.
///
public bool invisibleWhenHidden;
///
/// The sprite to show when the parent AstroBody is rumored/unexplored.
///
public string outlineSprite;
///
/// The position (relative to the parent) to place the detail.
///
public MVector2 position;
///
/// The sprite to show when the parent AstroBody is revealed.
///
public string revealedSprite;
///
/// The angle in degrees to rotate the detail.
///
public float rotation;
///
/// The amount to scale the x and y-axis of the detail by.
///
public MVector2 scale;
}
[JsonObject]
public class CuriosityColorInfo
{
///
/// The color to apply to entries with this curiosity.
///
public MColor color;
///
/// The color to apply to highlighted entries with this curiosity.
///
public MColor highlightColor;
///
/// The ID of the curiosity to apply the color to.
///
public string id;
}
[JsonObject]
public class EntryPositionInfo
{
///
/// The name of the entry to apply the position to.
///
public string id;
///
/// Position of the entry
///
public MVector2 position;
}
}
}