mirror of
https://github.com/Outer-Wilds-New-Horizons/new-horizons.git
synced 2025-12-11 20:15:44 +01:00
Added Support for Systems
This commit is contained in:
parent
202eb808aa
commit
6722ff7ad4
@ -50,9 +50,14 @@ namespace NewHorizons
|
|||||||
UnityEvent<string> GetBodyLoadedEvent();
|
UnityEvent<string> GetBodyLoadedEvent();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets an object in the `extras` object of a config, returns null if the key doesn't exist
|
/// Gets an object in the `extras` object of a body config, returns null if the key doesn't exist
|
||||||
/// </summary>
|
/// </summary>
|
||||||
object GetExtraModule(Type moduleType, string extrasModuleName, string planetName);
|
object GetExtraModuleForBody(Type moduleType, string extrasModuleName, string planetName);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets an object in the `extras` object of a system config, returns null if the key doesn't exist
|
||||||
|
/// </summary>
|
||||||
|
object GetExtraModuleForSystem(Type moduleType, string extrasModuleName, string systemName);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Allows you to overwrite the default system. This is where the player is respawned after dying.
|
/// Allows you to overwrite the default system. This is where the player is respawned after dying.
|
||||||
|
|||||||
@ -127,7 +127,7 @@ namespace NewHorizons
|
|||||||
|
|
||||||
BodyDict["SolarSystem"] = new List<NewHorizonsBody>();
|
BodyDict["SolarSystem"] = new List<NewHorizonsBody>();
|
||||||
BodyDict["EyeOfTheUniverse"] = new List<NewHorizonsBody>(); // Keep this empty tho fr
|
BodyDict["EyeOfTheUniverse"] = new List<NewHorizonsBody>(); // Keep this empty tho fr
|
||||||
SystemDict["SolarSystem"] = new NewHorizonsSystem("SolarSystem", new StarSystemConfig(), Instance)
|
SystemDict["SolarSystem"] = new NewHorizonsSystem("SolarSystem", new StarSystemConfig(), "", Instance)
|
||||||
{
|
{
|
||||||
Config =
|
Config =
|
||||||
{
|
{
|
||||||
@ -143,7 +143,7 @@ namespace NewHorizons
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
SystemDict["EyeOfTheUniverse"] = new NewHorizonsSystem("EyeOfTheUniverse", new StarSystemConfig(), Instance)
|
SystemDict["EyeOfTheUniverse"] = new NewHorizonsSystem("EyeOfTheUniverse", new StarSystemConfig(), "", Instance)
|
||||||
{
|
{
|
||||||
Config =
|
Config =
|
||||||
{
|
{
|
||||||
@ -517,7 +517,7 @@ namespace NewHorizons
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
SystemDict[name] = new NewHorizonsSystem(name, starSystemConfig, mod);
|
SystemDict[name] = new NewHorizonsSystem(name, starSystemConfig, relativePath, mod);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -618,7 +618,7 @@ namespace NewHorizons
|
|||||||
starSystemConfig.Migrate();
|
starSystemConfig.Migrate();
|
||||||
starSystemConfig.FixCoordinates();
|
starSystemConfig.FixCoordinates();
|
||||||
|
|
||||||
var system = new NewHorizonsSystem(config.starSystem, starSystemConfig, mod);
|
var system = new NewHorizonsSystem(config.starSystem, starSystemConfig, "", mod);
|
||||||
|
|
||||||
SystemDict.Add(config.starSystem, system);
|
SystemDict.Add(config.starSystem, system);
|
||||||
|
|
||||||
|
|||||||
@ -101,23 +101,42 @@ namespace NewHorizons
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public object GetExtraModule(Type moduleType, string extraModuleKey, string planetName)
|
private object GetExtraModule(Type moduleType, string key, string path)
|
||||||
{
|
{
|
||||||
var planet = Main.BodyDict[Main.Instance.CurrentStarSystem].Find((b) => b.Config.name == planetName);
|
if (path == "") return null;
|
||||||
if (planet == null)
|
try
|
||||||
{
|
{
|
||||||
// Uh idk if we need this but ye it do be here etc.
|
var jsonText = File.ReadAllText(path);
|
||||||
Logger.LogVerbose($"Attempting To Get Extras On Planet That Doesn't Exist! ({planetName})");
|
var jsonData = JObject.Parse(jsonText);
|
||||||
|
var possibleExtras = jsonData.Property("extras")?.Value;
|
||||||
|
if (possibleExtras is JObject extras)
|
||||||
|
{
|
||||||
|
return extras.Property(key)?.Value.ToObject(moduleType);
|
||||||
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
var jsonText = File.ReadAllText(planet.Mod.ModHelper.Manifest.ModFolderPath + planet.RelativePath);
|
catch (FileNotFoundException)
|
||||||
var jsonData = JObject.Parse(jsonText);
|
|
||||||
var possibleExtras = jsonData.Property("extras")?.Value;
|
|
||||||
if (possibleExtras is JObject extras)
|
|
||||||
{
|
{
|
||||||
return extras.Property(extraModuleKey)?.Value.ToObject(moduleType);
|
return null;
|
||||||
}
|
}
|
||||||
return null;
|
}
|
||||||
|
|
||||||
|
public object GetExtraModuleForBody(Type moduleType, string extraModuleKey, string planetName)
|
||||||
|
{
|
||||||
|
var planet = Main.BodyDict[Main.Instance.CurrentStarSystem].Find((b) => b.Config.name == planetName);
|
||||||
|
return planet == null
|
||||||
|
? null
|
||||||
|
: GetExtraModule(moduleType, extraModuleKey,
|
||||||
|
planet.Mod.ModHelper.Manifest.ModFolderPath + planet.RelativePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
public object GetExtraModuleForSystem(Type moduleType, string extraModuleKey, string systemName)
|
||||||
|
{
|
||||||
|
var system = Main.SystemDict[Main.Instance.CurrentStarSystem];
|
||||||
|
return system == null
|
||||||
|
? null
|
||||||
|
: GetExtraModule(moduleType, extraModuleKey,
|
||||||
|
system.Mod.ModHelper.Manifest.ModFolderPath + system.RelativePath);
|
||||||
}
|
}
|
||||||
|
|
||||||
public GameObject SpawnObject(GameObject planet, Sector sector, string propToCopyPath, Vector3 position, Vector3 eulerAngles,
|
public GameObject SpawnObject(GameObject planet, Sector sector, string propToCopyPath, Vector3 position, Vector3 eulerAngles,
|
||||||
|
|||||||
@ -11,15 +11,17 @@ namespace NewHorizons.Utility
|
|||||||
public class NewHorizonsSystem
|
public class NewHorizonsSystem
|
||||||
{
|
{
|
||||||
public string UniqueID;
|
public string UniqueID;
|
||||||
|
public string RelativePath;
|
||||||
public SpawnModule Spawn = null;
|
public SpawnModule Spawn = null;
|
||||||
public SpawnPoint SpawnPoint = null;
|
public SpawnPoint SpawnPoint = null;
|
||||||
public StarSystemConfig Config;
|
public StarSystemConfig Config;
|
||||||
public IModBehaviour Mod;
|
public IModBehaviour Mod;
|
||||||
|
|
||||||
public NewHorizonsSystem(string uniqueID, StarSystemConfig config, IModBehaviour mod)
|
public NewHorizonsSystem(string uniqueID, StarSystemConfig config, string relativePath, IModBehaviour mod)
|
||||||
{
|
{
|
||||||
UniqueID = uniqueID;
|
UniqueID = uniqueID;
|
||||||
Config = config;
|
Config = config;
|
||||||
|
RelativePath = relativePath;
|
||||||
Mod = mod;
|
Mod = mod;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,104 +1,109 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using NewHorizons.External.Configs;
|
using NewHorizons.External.Configs;
|
||||||
using NJsonSchema;
|
using NJsonSchema;
|
||||||
using NJsonSchema.Generation;
|
using NJsonSchema.Generation;
|
||||||
|
|
||||||
namespace SchemaExporter;
|
namespace SchemaExporter;
|
||||||
|
|
||||||
public static class SchemaExporter
|
public static class SchemaExporter
|
||||||
{
|
{
|
||||||
public static void Main(string[] args)
|
public static void Main(string[] args)
|
||||||
{
|
{
|
||||||
const string folderName = "NewHorizons/Schemas";
|
const string folderName = "NewHorizons/Schemas";
|
||||||
|
|
||||||
Directory.CreateDirectory(folderName);
|
Directory.CreateDirectory(folderName);
|
||||||
Console.WriteLine("Schema Generator: We're winning!");
|
Console.WriteLine("Schema Generator: We're winning!");
|
||||||
var settings = new JsonSchemaGeneratorSettings
|
var settings = new JsonSchemaGeneratorSettings
|
||||||
{
|
{
|
||||||
IgnoreObsoleteProperties = true,
|
IgnoreObsoleteProperties = true,
|
||||||
DefaultReferenceTypeNullHandling = ReferenceTypeNullHandling.NotNull,
|
DefaultReferenceTypeNullHandling = ReferenceTypeNullHandling.NotNull,
|
||||||
FlattenInheritanceHierarchy = true,
|
FlattenInheritanceHierarchy = true,
|
||||||
AllowReferencesWithProperties = true
|
AllowReferencesWithProperties = true
|
||||||
};
|
};
|
||||||
var bodySchema = new Schema<PlanetConfig>("Celestial Body Schema", "Schema for a celestial body in New Horizons", $"{folderName}/body_schema", settings);
|
var bodySchema = new Schema<PlanetConfig>("Celestial Body Schema", "Schema for a celestial body in New Horizons", $"{folderName}/body_schema", settings);
|
||||||
bodySchema.Output();
|
bodySchema.Output();
|
||||||
var systemSchema =
|
var systemSchema =
|
||||||
new Schema<StarSystemConfig>("Star System Schema", "Schema for a star system in New Horizons", $"{folderName}/star_system_schema", settings);
|
new Schema<StarSystemConfig>("Star System Schema", "Schema for a star system in New Horizons", $"{folderName}/star_system_schema", settings);
|
||||||
systemSchema.Output();
|
systemSchema.Output();
|
||||||
var addonSchema = new Schema<AddonConfig>("Addon Manifest Schema",
|
var addonSchema = new Schema<AddonConfig>("Addon Manifest Schema",
|
||||||
"Schema for an addon manifest in New Horizons", $"{folderName}/addon_manifest_schema", settings);
|
"Schema for an addon manifest in New Horizons", $"{folderName}/addon_manifest_schema", settings);
|
||||||
addonSchema.Output();
|
addonSchema.Output();
|
||||||
var translationSchema =
|
var translationSchema =
|
||||||
new Schema<TranslationConfig>("Translation Schema", "Schema for a translation file in New Horizons", $"{folderName}/translation_schema", settings);
|
new Schema<TranslationConfig>("Translation Schema", "Schema for a translation file in New Horizons", $"{folderName}/translation_schema", settings);
|
||||||
translationSchema.Output();
|
translationSchema.Output();
|
||||||
Console.WriteLine("Done!");
|
Console.WriteLine("Done!");
|
||||||
}
|
}
|
||||||
|
|
||||||
private readonly struct Schema<T>
|
private readonly struct Schema<T>
|
||||||
{
|
{
|
||||||
private readonly JsonSchemaGeneratorSettings _generatorSettings;
|
private readonly JsonSchemaGeneratorSettings _generatorSettings;
|
||||||
private readonly string _title, _description;
|
private readonly string _title, _description;
|
||||||
private readonly string _outFileName;
|
private readonly string _outFileName;
|
||||||
|
|
||||||
public Schema(string schemaTitle, string schemaDescription, string fileName, JsonSchemaGeneratorSettings settings)
|
public Schema(string schemaTitle, string schemaDescription, string fileName, JsonSchemaGeneratorSettings settings)
|
||||||
{
|
{
|
||||||
_title = schemaTitle;
|
_title = schemaTitle;
|
||||||
_description = schemaDescription;
|
_description = schemaDescription;
|
||||||
_outFileName = fileName;
|
_outFileName = fileName;
|
||||||
_generatorSettings = settings;
|
_generatorSettings = settings;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Output()
|
public void Output()
|
||||||
{
|
{
|
||||||
Console.WriteLine($"Outputting {_title}");
|
Console.WriteLine($"Outputting {_title}");
|
||||||
File.WriteAllText($"{_outFileName}.json", ToString());
|
File.WriteAllText($"{_outFileName}.json", ToString());
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string ToString()
|
public override string ToString()
|
||||||
{
|
{
|
||||||
return GetJsonSchema().ToJson();
|
return GetJsonSchema().ToJson();
|
||||||
}
|
}
|
||||||
|
|
||||||
private JsonSchema GetJsonSchema()
|
private JsonSchema GetJsonSchema()
|
||||||
{
|
{
|
||||||
var schema = JsonSchema.FromType<T>(_generatorSettings);
|
var schema = JsonSchema.FromType<T>(_generatorSettings);
|
||||||
schema.Title = _title;
|
schema.Title = _title;
|
||||||
var schemaLinkProp = new JsonSchemaProperty
|
var schemaLinkProp = new JsonSchemaProperty
|
||||||
{
|
{
|
||||||
Type = JsonObjectType.String,
|
Type = JsonObjectType.String,
|
||||||
Description = "The schema to validate with"
|
Description = "The schema to validate with"
|
||||||
};
|
};
|
||||||
schema.Properties.Add("$schema", schemaLinkProp);
|
schema.Properties.Add("$schema", schemaLinkProp);
|
||||||
schema.ExtensionData ??= new Dictionary<string, object>();
|
schema.ExtensionData ??= new Dictionary<string, object>();
|
||||||
schema.ExtensionData.Add("$docs", new Dictionary<string, object>
|
schema.ExtensionData.Add("$docs", new Dictionary<string, object>
|
||||||
{
|
{
|
||||||
{"title", _title},
|
{"title", _title},
|
||||||
{"description", _description}
|
{"description", _description}
|
||||||
});
|
});
|
||||||
|
|
||||||
if (_title == "Celestial Body Schema")
|
switch (_title)
|
||||||
{
|
{
|
||||||
schema.Definitions["OrbitModule"].Properties["semiMajorAxis"].Default = 5000f;
|
case "Celestial Body Schema":
|
||||||
schema.Properties.Add("extras", new JsonSchemaProperty {
|
schema.Definitions["OrbitModule"].Properties["semiMajorAxis"].Default = 5000f;
|
||||||
Type = JsonObjectType.Object,
|
break;
|
||||||
Description = "Extra data that may be used by extension mods"
|
case "Star System Schema":
|
||||||
});
|
schema.Definitions["NomaiCoordinates"].Properties["x"].UniqueItems = true;
|
||||||
}
|
schema.Definitions["NomaiCoordinates"].Properties["y"].UniqueItems = true;
|
||||||
|
schema.Definitions["NomaiCoordinates"].Properties["z"].UniqueItems = true;
|
||||||
if (_title == "Star System Schema")
|
break;
|
||||||
{
|
}
|
||||||
schema.Definitions["NomaiCoordinates"].Properties["x"].UniqueItems = true;
|
|
||||||
schema.Definitions["NomaiCoordinates"].Properties["y"].UniqueItems = true;
|
if (_title is "Star System Schema" or "Celestial Body Schema")
|
||||||
schema.Definitions["NomaiCoordinates"].Properties["z"].UniqueItems = true;
|
{
|
||||||
schema.Properties.Add("extras", new JsonSchemaProperty {
|
schema.Properties.Add("extras", new JsonSchemaProperty {
|
||||||
Type = JsonObjectType.Object,
|
Type = JsonObjectType.Object,
|
||||||
Description = "Extra data that may be used by extension mods"
|
Description = "Extra data that may be used by extension mods",
|
||||||
});
|
AllowAdditionalProperties = true,
|
||||||
}
|
AdditionalPropertiesSchema = new JsonSchema
|
||||||
|
{
|
||||||
return schema;
|
Type = JsonObjectType.Object
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return schema;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user