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); object QueryBody(Type outType, string bodyName, string path);
///<summary> ///<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> /// </summary>
object QuerySystem(Type outType, string path); object QuerySystem(Type outType, string path);
///<summary>
/// Uses JSONPath to query the current star system
///</summary>
T QuerySystem<T>(string path);
/// <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.
/// </summary> /// </summary>

View File

@ -129,6 +129,16 @@ namespace NewHorizons
: QueryJson(outType, Path.Combine(planet.Mod.ModHelper.Manifest.ModFolderPath, planet.RelativePath), jsonPath); : 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) public object QuerySystem(Type outType, string jsonPath)
{ {
var system = Main.SystemDict[Main.Instance.CurrentStarSystem]; 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); : 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, public GameObject SpawnObject(GameObject planet, Sector sector, string propToCopyPath, Vector3 position, Vector3 eulerAngles,
float scale, bool alignWithNormal) float scale, bool alignWithNormal)
{ {

View File

@ -57,10 +57,20 @@ public interface INewHorizons
object QueryBody(Type outType, string bodyName, string path); object QueryBody(Type outType, string bodyName, string path);
///<summary> ///<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> /// </summary>
object QuerySystem(Type outType, string path); object QuerySystem(Type outType, string path);
///<summary>
/// Uses JSONPath to query the current star system
///</summary>
T QuerySystem<T>(string path);
/// <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.
/// </summary> /// </summary>

View File

@ -52,9 +52,9 @@ Then, use the `QueryBody` method:
var api = ModHelper.Interactions.TryGetModApi<INewHorizons>("xen.NewHorizons"); var api = ModHelper.Interactions.TryGetModApi<INewHorizons>("xen.NewHorizons");
api.GetBodyLoadedEvent().AddListener((name) => { api.GetBodyLoadedEvent().AddListener((name) => {
ModHelper.Console.WriteLine($"Body: {name} Loaded!"); ModHelper.Console.WriteLine($"Body: {name} Loaded!");
var potentialData = api.QueryBody(typeof(MyCoolExtensionData), "$.extras.myCoolExtensionData", name); var data = api.QueryBody<MyCoolExtensionData>("$.extras.myCoolExtensionData", name);
// Makes sure the module is valid and not null // Makes sure the module is not null
if (potentialData is MyCoolExtensionData data) { if (data != null) {
ModHelper.Console.WriteLine($"myCoolExtensionProperty for {name} is {data.myCoolExtensionProperty}!"); 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 You can also use the `QueryBody` method to get values of the config outside your extension object
```csharp ```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"}!"); ModHelper.Console.WriteLine($"Primary of {bodyName} is {primaryBody ?? "NULL"}!");
``` ```