mirror of
https://github.com/Outer-Wilds-New-Horizons/new-horizons.git
synced 2025-12-11 20:15:44 +01:00
Updated Docs
This commit is contained in:
parent
a8ca79896b
commit
21dc7fc8dd
@ -9,21 +9,94 @@ First create the following interface in your mod:
|
|||||||
|
|
||||||
```cs
|
```cs
|
||||||
public interface INewHorizons
|
public interface INewHorizons
|
||||||
{
|
{
|
||||||
void LoadConfigs(IModBehaviour mod);
|
[Obsolete("Create(Dictionary<string, object> config) is deprecated, please use LoadConfigs(IModBehaviour mod) instead")]
|
||||||
|
void Create(Dictionary<string, object> config);
|
||||||
|
|
||||||
GameObject GetPlanet(string name);
|
[Obsolete("Create(Dictionary<string, object> config) is deprecated, please use LoadConfigs(IModBehaviour mod) instead")]
|
||||||
|
void Create(Dictionary<string, object> config, IModBehaviour mod);
|
||||||
|
|
||||||
string GetCurrentStarSystem();
|
/// <summary>
|
||||||
|
/// Will load all configs in the regular folders (planets, systems, translations, etc) for this mod.
|
||||||
|
/// The NH addon config template is just a single call to this API method.
|
||||||
|
/// </summary>
|
||||||
|
void LoadConfigs(IModBehaviour mod);
|
||||||
|
|
||||||
UnityEvent<string> GetChangeStarSystemEvent();
|
/// <summary>
|
||||||
|
/// Retrieve the root GameObject of a custom planet made by creating configs.
|
||||||
|
/// Will only work if the planet has been created (see GetStarSystemLoadedEvent)
|
||||||
|
/// </summary>
|
||||||
|
GameObject GetPlanet(string name);
|
||||||
|
|
||||||
UnityEvent<string> GetStarSystemLoadedEvent();
|
/// <summary>
|
||||||
|
/// The name of the current star system loaded.
|
||||||
|
/// </summary>
|
||||||
|
string GetCurrentStarSystem();
|
||||||
|
|
||||||
GameObject SpawnObject(GameObject planet, Sector sector, string propToCopyPath, Vector3 position, Vector3 eulerAngles, float scale, bool alignWithNormal);
|
/// <summary>
|
||||||
|
/// An event invoked when the player begins loading the new star system, before the scene starts to load.
|
||||||
|
/// Gives the name of the star system being switched to.
|
||||||
|
/// </summary>
|
||||||
|
UnityEvent<string> GetChangeStarSystemEvent();
|
||||||
|
|
||||||
string[] GetInstalledAddons();
|
/// <summary>
|
||||||
}
|
/// An event invoked when NH has finished generating all planets for a new star system.
|
||||||
|
/// Gives the name of the star system that was just loaded.
|
||||||
|
/// </summary>
|
||||||
|
UnityEvent<string> GetStarSystemLoadedEvent();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// An event invoked when NH has finished a planet for a star system.
|
||||||
|
/// Gives the name of the planet that was just loaded.
|
||||||
|
/// </summary>
|
||||||
|
UnityEvent<string> GetBodyLoadedEvent();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets an object in the `extras` object of a config, returns null if the key doesn't exist
|
||||||
|
/// </summary>
|
||||||
|
object GetExtraModule(Type moduleType, string extrasModuleName, string planetName);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Allows you to overwrite the default system. This is where the player is respawned after dying.
|
||||||
|
/// </summary>
|
||||||
|
bool SetDefaultSystem(string name);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Allows you to instantly begin a warp to a new star system.
|
||||||
|
/// Will return false if that system does not exist (cannot be warped to).
|
||||||
|
/// </summary>
|
||||||
|
bool ChangeCurrentStarSystem(string name);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns the uniqueIDs of each installed NH addon.
|
||||||
|
/// </summary>
|
||||||
|
string[] GetInstalledAddons();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Allows you to spawn a copy of a prop by specifying its path.
|
||||||
|
/// This is the same as using Props->details in a config, but also returns the spawned gameObject to you.
|
||||||
|
/// </summary>
|
||||||
|
GameObject SpawnObject(GameObject planet, Sector sector, string propToCopyPath, Vector3 position, Vector3 eulerAngles,
|
||||||
|
float scale, bool alignWithNormal);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Allows you to spawn an AudioSignal on a planet.
|
||||||
|
/// This is the same as using Props->signals in a config, but also returns the spawned AudioSignal to you.
|
||||||
|
/// This method will not set its position. You will have to do that with the returned object.
|
||||||
|
/// </summary>
|
||||||
|
AudioSignal SpawnSignal(IModBehaviour mod, GameObject root, string audio, string name, string frequency,
|
||||||
|
float sourceRadius = 1f, float detectionRadius = 20f, float identificationRadius = 10f, bool insideCloak = false,
|
||||||
|
bool onlyAudibleToScope = true, string reveals = "");
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Allows you to spawn character dialogue on a planet. Also returns the RemoteDialogueTrigger if remoteTriggerRadius is specified.
|
||||||
|
/// This is the same as using Props->dialogue in a config, but also returns the spawned game objects to you.
|
||||||
|
/// This method will not set the position of the dialogue or remote trigger. You will have to do that with the returned objects.
|
||||||
|
/// </summary>
|
||||||
|
(CharacterDialogueTree, RemoteDialogueTrigger) SpawnDialogue(IModBehaviour mod, GameObject root, string xmlFile, float radius = 1f,
|
||||||
|
float range = 1f, string blockAfterPersistentCondition = null, float lookAtRadius = 1f, string pathToAnimController = null,
|
||||||
|
float remoteTriggerRadius = 0f);
|
||||||
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
In your main `ModBehaviour` class you can get the NewHorizons API like so:
|
In your main `ModBehaviour` class you can get the NewHorizons API like so:
|
||||||
|
|||||||
65
docs/content/pages/tutorials/extending.md
Normal file
65
docs/content/pages/tutorials/extending.md
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
---
|
||||||
|
Title: Extending Configs
|
||||||
|
Description: A guide on extending config files with the New Horizons API
|
||||||
|
Sort_Priority: 5
|
||||||
|
---
|
||||||
|
|
||||||
|
<!-- TODO: When I do systems, some methods will probably be renamed so make sure to update this tutorial -->
|
||||||
|
|
||||||
|
# Extending Configs
|
||||||
|
|
||||||
|
This guide will explain how to use the API to add new features to New Horizons.
|
||||||
|
|
||||||
|
## How Extending Works
|
||||||
|
|
||||||
|
Addon developers will add a key to the `extras` object in the root of the config
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"name": "Wetrock",
|
||||||
|
"extras": {
|
||||||
|
"myCoolExtensionData": {
|
||||||
|
"myCoolExtensionProperty": 2
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Your mod will then use the API's `GetExtraModule` method to obtain the `myCoolExtensionData` object.
|
||||||
|
|
||||||
|
## Extending Planets
|
||||||
|
|
||||||
|
You can extend all planets by hooking into the `OnBodyLoaded` event of the API:
|
||||||
|
|
||||||
|
```cs
|
||||||
|
var api = ModHelper.Interactions.TryGetModApi<INewHorizons>("xen.NewHorizons");
|
||||||
|
api.GetBodyLoadedEvent().AddListener((name) => {
|
||||||
|
ModHelper.Console.WriteLine($"Body: {name} Loaded!");
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
In order to get your extra module, first define the module as a class:
|
||||||
|
|
||||||
|
```cs
|
||||||
|
public class MyCoolExtensionData {
|
||||||
|
int myCoolExtensionProperty;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Then, use the `GetExtraModule` method:
|
||||||
|
|
||||||
|
```cs
|
||||||
|
var api = ModHelper.Interactions.TryGetModApi<INewHorizons>("xen.NewHorizons");
|
||||||
|
api.GetBodyLoadedEvent().AddListener((name) => {
|
||||||
|
ModHelper.Console.WriteLine($"Body: {name} Loaded!");
|
||||||
|
var potentialData = api.GetExtraModule(typeof(MyCoolExtensionData), "myCoolExtensionData", name);
|
||||||
|
// Makes sure the module is valid and not null
|
||||||
|
if (potentialData is MyCoolExtensionData data) {
|
||||||
|
ModHelper.Console.WriteLine($"myCoolExtensionProperty for {name} is {data.myCoolExtensionProperty}!");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
## Extending Systems
|
||||||
|
|
||||||
|
<!-- TODO -->
|
||||||
Loading…
x
Reference in New Issue
Block a user