How To Create Plugins: Difference between revisions

From Resonite Wiki
better hyperlinks for distinction -- edited from my phone so might be broken
add more types to object reference
Line 35: Line 35:


== <translate>Object Reference</translate> ==
== <translate>Object Reference</translate> ==
{{Under construction|section|Doesn't list all types relevant for writing plugins.}}
{| class="wikitable sortable"
{| class="wikitable sortable"
|-
|-
! <translate>Object</translate>
! <translate>Object</translate>
! <translate>Type</translate>
! <translate>Description</translate>
! <translate>Description</translate>
|-
| [[How_To_Create_Plugins/ActionBreakableFlowNode|ActionBreakableFlowNode]]
| ProtoFlux Node
|
|-
| [[How_To_Create_Plugins/ActionFlowNode|ActionFlowNode]]
| ProtoFlux Node
|
|-
| [[How_To_Create_Plugins/ActionNode|ActionNode]]
| ProtoFlux Node
| <translate>A node which runs when called using an impulse</translate>
|-
| AsyncActionBreakableFlowNode
| ProtoFlux Node
| <translate>Async variant of [[How_To_Create_Plugins/ActionBreakableFlowNode|ActionBreakableFlowNode]]</translate>
|-
| AsyncActionFlowNode
| ProtoFlux Node
| <translate>Async variant of [[How_To_Create_Plugins/ActionFlowNode|ActionFlowNode]]</translate>
|-
| AsyncActionNode
| ProtoFlux Node
| <translate>Async variant of [[How_To_Create_Plugins/ActionNode|ActionNode]]</translate>
|-
|-
| [[How_To_Create_Plugins/Custom_Components|Components]]
| [[How_To_Create_Plugins/Custom_Components|Components]]
| <translate>Used to create custom components</translate>
| <translate>N/A</translate>
| <translate>A custom component</translate>
|-
|-
| [[How_To_Create_Plugins/DataModelAssemblyType|DataModelAssemblyType]]
| [[How_To_Create_Plugins/DataModelAssemblyType|DataModelAssemblyType]]
| Enum
| <translate>The type of assembly you are making. Used in your</translate> <code>AssemblyInfo.cs</code> <translate>file.</translate>
| <translate>The type of assembly you are making. Used in your</translate> <code>AssemblyInfo.cs</code> <translate>file.</translate>
|-
|-
| [[How_To_Create_Plugins/ObjectFunctionNode|ObjectFunctionNode]]
| [[How_To_Create_Plugins/ObjectFunctionNode|ObjectFunctionNode]]
| ProtoFlux Node
| <translate>A ProtoFlux Node which returns a singular object</translate>
| <translate>A ProtoFlux Node which returns a singular object</translate>
|-
|-
| [[How_To_Create_Plugins/ProtoFlux_Binding|ProtoFlux Binding]]
| [[How_To_Create_Plugins/ProtoFlux_Binding|ProtoFlux Binding]]
| <translate>C# File</translate>
| <translate>The binding for a ProtoFlux Node. Without this, a node cannot be loaded into Resonite.</translate>
| <translate>The binding for a ProtoFlux Node. Without this, a node cannot be loaded into Resonite.</translate>
|-
|-
| [[How_To_Create_Plugins/ValueFunctionNode|ValueFunctionNode]]
| [[How_To_Create_Plugins/ValueFunctionNode|ValueFunctionNode]]
| ProtoFlux Node
| <translate>A ProtoFlux Node which returns a singular value</translate>
| <translate>A ProtoFlux Node which returns a singular value</translate>
|-
|-
| [[How_To_Create_Plugins/VoidNode|VoidNode]]
| [[How_To_Create_Plugins/VoidNode|VoidNode]]
| ProtoFlux Node
| <translate>A ProtoFlux Node which doesn't use</translate> <code>return</code> <translate>to give an output. Used for nodes with multiple outputs.</translate>
| <translate>A ProtoFlux Node which doesn't use</translate> <code>return</code> <translate>to give an output. Used for nodes with multiple outputs.</translate>
|-
|-

Revision as of 16:45, 16 July 2024

This page may be too technical for most readers to understand. Please help improve it to make it understandable to non-experts, without removing the technical details.

Plugins are used to add more Components and ProtoFlux nodes to Resonite by programming them using C#. They are not to be confused with Mods which do not add things into the Data Model.

This page is about writing plugins and should not be confused with the Plugin overview page.

Please see the plugin guidelines before getting started, to familiarize yourself on what is and is not allowed.

Getting started

You will need to know the basics of the C# Programming Language to write plugins.

  1. Download Visual Studio Community edition, which allows for easier programming and compilation of plugins. However, you can use your favourite code editor as long as you know how to compile C# into a .dll
    • During installation, ensure to select .NET desktop development which will give you the .NET Framework development tools, which are required to compile the plugin
  2. Create a new project using the Class Library template (please ensure it is the C# option). Guidelines follow:
    1. The project name should be the name of your plugin, same with the solution name. It is recommended to not check the box for Place solution and project in the same directory, as you may have multiple parts to your plugin, such as a ProtoFlux Binding generator.
    2. Select the default framework, we'll be manually editing this later.
  3. Add references to the following libraries by right clicking on Dependencies, clicking Add Project Reference and then Browse.
    1. FrooxEngine.dll - Found in Resonite/Resonite_Data/Managed/FrooxEngine.dll
    2. Elements.Core.dll - Found in Resonite/Resonite_Data/Managed/Elements.Core.dll
  4. Change the referenced framework to net462. To do this:
    1. Double click on your project name, this will be under your solution
    2. Change the line <TargetFramework>whatever_you_selected_earlier</TargetFramework> to <TargetFramework>net462</TargetFramework> and save the file
  5. Change Your Assembly Info file to tell FrooxEngine what type of plugin you are making.
    1. Create a folder inside your project called Properties
    2. Create a file called AssemblyInfo.cs which contains the line [assembly: DataModelAssembly(t)], where t is a DataModelAssemblyType.
The framework net462 (step 4) is going to be changed in the future, this will most likely happen with the switch from Unity to Sauce

You're now ready to start writing plugins! Please see the following pages for in depth guides on how to code individual parts of plugins:

Please note: you are not limited to these guides, you may use any C# syntax.

Object Reference

This section is in a state of significant expansion or restructuring. You are welcome to assist in its construction by editing it as well.
Reason: Doesn't list all types relevant for writing plugins.
Object Type Description
ActionBreakableFlowNode ProtoFlux Node
ActionFlowNode ProtoFlux Node
ActionNode ProtoFlux Node A node which runs when called using an impulse
AsyncActionBreakableFlowNode ProtoFlux Node Async variant of ActionBreakableFlowNode
AsyncActionFlowNode ProtoFlux Node Async variant of ActionFlowNode
AsyncActionNode ProtoFlux Node Async variant of ActionNode
Components N/A A custom component
DataModelAssemblyType Enum The type of assembly you are making. Used in your AssemblyInfo.cs file.
ObjectFunctionNode ProtoFlux Node A ProtoFlux Node which returns a singular object
ProtoFlux Binding C# File The binding for a ProtoFlux Node. Without this, a node cannot be loaded into Resonite.
ValueFunctionNode ProtoFlux Node A ProtoFlux Node which returns a singular value
VoidNode ProtoFlux Node A ProtoFlux Node which doesn't use return to give an output. Used for nodes with multiple outputs.

See also