Made generic API methods

This commit is contained in:
Ben C 2022-10-18 08:56:24 -04:00
parent ac423de88b
commit 728f8d7ffe
4 changed files with 123 additions and 84 deletions

View File

@ -55,10 +55,20 @@ namespace NewHorizons
object QueryBody(Type outType, string bodyName, string path);
///<summary>
/// Uses JSONPath to query a system
/// Uses JSONPath to query a body
/// </summary>
T QueryBody<T>(string bodyName, string path);
/// <summary>
/// Uses JSONPath to query the current star system
/// </summary>
object QuerySystem(Type outType, string path);
///<summary>
/// Uses JSONPath to query the current star system
///</summary>
T QuerySystem<T>(string path);
/// <summary>
/// Allows you to overwrite the default system. This is where the player is respawned after dying.
/// </summary>

View File

@ -129,6 +129,16 @@ namespace NewHorizons
: QueryJson(outType, Path.Combine(planet.Mod.ModHelper.Manifest.ModFolderPath, planet.RelativePath), jsonPath);
}
public T QueryBody<T>(string bodyName, string jsonPath)
{
var data = QueryBody(typeof(T), bodyName, jsonPath);
if (data is T result) {
return result;
} else {
return default(T);
}
}
public object QuerySystem(Type outType, string jsonPath)
{
var system = Main.SystemDict[Main.Instance.CurrentStarSystem];
@ -137,6 +147,15 @@ namespace NewHorizons
: QueryJson(outType, Path.Combine(system.Mod.ModHelper.Manifest.ModFolderPath, system.RelativePath), jsonPath);
}
public T QuerySystem<T>(string jsonPath) {
var data = QuerySystem(typeof(T), jsonPath);
if (data is T result) {
return result;
} else {
return default(T);
}
}
public GameObject SpawnObject(GameObject planet, Sector sector, string propToCopyPath, Vector3 position, Vector3 eulerAngles,
float scale, bool alignWithNormal)
{

View File

@ -57,10 +57,20 @@ public interface INewHorizons
object QueryBody(Type outType, string bodyName, string path);
///<summary>
/// Uses JSONPath to query a system
/// Uses JSONPath to query a body
/// </summary>
T QueryBody<T>(string bodyName, string path);
/// <summary>
/// Uses JSONPath to query the current star system
/// </summary>
object QuerySystem(Type outType, string path);
///<summary>
/// Uses JSONPath to query the current star system
///</summary>
T QuerySystem<T>(string path);
/// <summary>
/// Allows you to overwrite the default system. This is where the player is respawned after dying.
/// </summary>

View File

@ -52,9 +52,9 @@ Then, use the `QueryBody` method:
var api = ModHelper.Interactions.TryGetModApi<INewHorizons>("xen.NewHorizons");
api.GetBodyLoadedEvent().AddListener((name) => {
ModHelper.Console.WriteLine($"Body: {name} Loaded!");
var potentialData = api.QueryBody(typeof(MyCoolExtensionData), "$.extras.myCoolExtensionData", name);
// Makes sure the module is valid and not null
if (potentialData is MyCoolExtensionData data) {
var data = api.QueryBody<MyCoolExtensionData>("$.extras.myCoolExtensionData", name);
// Makes sure the module is not null
if (data != null) {
ModHelper.Console.WriteLine($"myCoolExtensionProperty for {name} is {data.myCoolExtensionProperty}!");
}
});
@ -69,6 +69,6 @@ Extending systems is the exact same as extending planets, except you use the `Qu
You can also use the `QueryBody` method to get values of the config outside your extension object
```csharp
var primaryBody = api.QueryBody(typeof(string), "Wetrock", "$.Orbit.primaryBody");
var primaryBody = api.QueryBody<string>("Wetrock", "$.Orbit.primaryBody");
ModHelper.Console.WriteLine($"Primary of {bodyName} is {primaryBody ?? "NULL"}!");
```