basic introduction of how to get started with writing plugins. gonna add the sub pages later. |
Basic Types -> add ExternalDataModelType |
||
(22 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
<languages /> | |||
{{Technical}} | {{Technical}} | ||
Plugins are used to add more [[Component|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#Mods_VS_Plugins|Data Model]]. | <translate>Plugins are used to add more [[Component|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#Mods_VS_Plugins|Data Model]].</translate> | ||
: ''This page is about '''writing plugins''' and should not be confused with the [[Plugins|Plugin overview]] page.'' | : ''<translate>This page is about '''writing plugins''' and should not be confused with the [[Plugins|Plugin overview]] page.</translate>'' | ||
Please see [[Plugins#Plugin_Guidelines|the plugin guidelines]] before getting started, to familiarize yourself on what is and is not allowed. | <translate>Please see [[Plugins#Plugin_Guidelines|the plugin guidelines]] before getting started, to familiarize yourself on what is and is not allowed.</translate> | ||
== Getting started == | == <translate>Getting started</translate> == | ||
''You will need to know the basics of the [https://learn.microsoft.com/en-us/dotnet/csharp/ C# Programming Language] to write plugins.'' | ''<translate>You will need to know the basics of the [https://learn.microsoft.com/en-us/dotnet/csharp/ C# Programming Language] to write plugins.</translate>'' | ||
# Download [https://visualstudio.microsoft.com/vs/community/ 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 <code>.dll</code>'' | # <translate>Download [https://visualstudio.microsoft.com/vs/community/ Visual Studio Community edition], which allows for easier programming and compilation of plugins.</translate> ''<translate>However, you can use your favourite code editor as long as you know how to compile C# into a</translate> <code>.dll</code>'' | ||
#* During installation, ensure to select .NET desktop development which will give you the .NET Framework development tools, which are required to compile a plugin | #* <translate>During installation, ensure to select .NET desktop development which will give you the .NET Framework development tools, which are required to compile the plugin</translate> | ||
# <translate>Create a new project using the <code>Class Library</code> template (please ensure it is the C# option). Guidelines follow:</translate> | |||
## <translate>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 [[How_To_Create_Plugins/ProtoFlux_Binding|ProtoFlux Binding]] generator.</translate> | |||
## <translate>Select the default framework, we'll be manually editing this later.</translate> | |||
# <translate>Add references to the following libraries by right clicking on <code>Dependencies</code>, clicking <code>Add Project Reference</code> and then <code>Browse</code>.</translate> | |||
## FrooxEngine.dll - <translate>Found in</translate> Resonite/Resonite_Data/Managed/FrooxEngine.dll | |||
## Elements.Core.dll - <translate>Found in</translate> Resonite/Resonite_Data/Managed/Elements.Core.dll | |||
# <translate>Change the referenced framework to</translate> <code>net462</code>. <translate>To do this:</translate> | |||
## <translate>Double click on your project name, this will be under your solution</translate> | |||
## <translate>Change the line</translate> <code><TargetFramework><translate>whatever_you_selected_earlier</translate></TargetFramework></code> <translate>to</translate> <code><nowiki><TargetFramework>net462</TargetFramework></nowiki></code> <translate>and save the file</translate> | |||
# <translate>Change Your Assembly Info file to tell [[FrooxEngine]] what type of plugin you are making.</translate> | |||
## <translate>Create a folder inside your project called</translate> <code>Properties</code> | |||
## <translate>Create a file called</translate> <code>AssemblyInfo.cs</code> <translate>which contains the line</translate> <code><nowiki>[assembly: DataModelAssembly(t)]</nowiki></code><translate>, where</translate> <code>t</code> <translate>is a [[How_To_Create_Plugins/DataModelAssemblyType|DataModelAssemblyType]].</translate> | |||
{{Note|<translate>The framework</translate> <code>net462</code> <translate>(step 4) is going to be changed in the future, this will most likely happen with the switch from Unity to [[Sauce]]</translate>|warning}} | |||
<translate>'''You're now ready to start writing plugins!'''</translate> | |||
== Guides == | |||
=== Components === | |||
* [[How_To_Create_Plugins/Creating_Components|<translate>Creating custom Components</translate>]] | |||
=== ProtoFlux === | |||
* <translate>An introduction to</translate> [[How_To_Create_Plugins/Creating_ProtoFlux_Nodes|<translate>creating custom ProtoFlux nodes</translate>]] | |||
* <translate>[[How_To_Create_Plugins/ProtoFlux_CC|Calls and Continuations]] in ProtoFlux</translate> | |||
* <translate>[[How_To_Create_Plugins/ProtoFlux_Globals|Creating ProtoFlux Globals]]</translate> | |||
* [[How_To_Create_Plugins/Creating_ProtoFlux_Bindings|<translate>Creating a ProtoFlux Binding</translate>]] | |||
=== Misc === | |||
* <translate>[[How_To_Create_Plugins/Creating_Settings|Creating settings]]</translate> | |||
* | |||
== Object Reference == | == <translate>Object Reference</translate> == | ||
{{Under construction|section|Doesn't list all types relevant for writing plugins.}} | |||
=== Basic Types === | |||
{| class="wikitable sortable" | {| class="wikitable sortable" | ||
|- | |- | ||
! Object | ! <translate>Object</translate> | ||
! Description | ! <translate>Description</translate> | ||
|- | |- | ||
| [[ | | [[How_To_Create_Plugins/Custom_Components|Components]] | ||
| | | <translate>A custom component</translate> | ||
|- | |- | ||
| [[ | | [[How_To_Create_Plugins/DataModelAssemblyType|DataModelAssemblyType]] | ||
| | | <translate>The type of assembly you are making. Used in your</translate> <code>AssemblyInfo.cs</code> <translate>file.</translate> | ||
|- | |- | ||
| [[ | | [[How_To_Create_Plugins/ExternalDataModelType|ExternalDataModelType]] | ||
| | | | ||
|- | |- | ||
| [[ | | [[How_To_Create_Plugins/ProtoFlux_Binding|ProtoFlux Binding]] | ||
| | | <translate>The binding for a ProtoFlux Node. Without this, a node cannot be loaded into Resonite.</translate> | ||
|- | |- | ||
| [[ | |} | ||
| A ProtoFlux Node which doesn't use <code>return</code> to give an output. Used for nodes with multiple outputs. | TODO | ||
=== ProtoFlux Node Types === | |||
{| class="wikitable sortable" | |||
|- | |||
! <translate>Object</translate> | |||
! <translate>Description</translate> | |||
|- | |||
| [[How_To_Create_Plugins/ActionBreakableFlowNode|ActionBreakableFlowNode]] | |||
| | |||
|- | |||
| [[How_To_Create_Plugins/ActionFlowNode|ActionFlowNode]] | |||
| | |||
|- | |||
| [[How_To_Create_Plugins/ActionNode|ActionNode]] | |||
| <translate>A node which runs when called using an impulse</translate> | |||
|- | |||
| AsyncActionBreakableFlowNode | |||
| <translate>Async variant of [[How_To_Create_Plugins/ActionBreakableFlowNode|ActionBreakableFlowNode]]</translate> | |||
|- | |||
| AsyncActionFlowNode | |||
| <translate>Async variant of [[How_To_Create_Plugins/ActionFlowNode|ActionFlowNode]]</translate> | |||
|- | |||
| AsyncActionNode | |||
| <translate>Async variant of [[How_To_Create_Plugins/ActionNode|ActionNode]]</translate> | |||
|- | |||
| [[How_To_Create_Plugins/ObjectFunctionNode|ObjectFunctionNode]] | |||
| <translate>A ProtoFlux Node which returns a singular object</translate> | |||
|- | |||
| [[How_To_Create_Plugins/ValueFunctionNode|ValueFunctionNode]] | |||
| <translate>A ProtoFlux Node which returns a singular value</translate> | |||
|- | |||
| [[How_To_Create_Plugins/VoidNode|VoidNode]] | |||
| <translate>A ProtoFlux Node which doesn't use</translate> <code>return</code> <translate>to give an output. Used for nodes with multiple outputs.</translate> | |||
|- | |||
|} | |||
TODO | |||
=== Variable types relevant for Components === | |||
{| class="wikitable sortable" | |||
|- | |||
! <translate>Type</translate> | |||
! <translate>Description</translate> | |||
|- | |||
| [[Type:Sync`1|Sync<T>]] | |||
| <translate>A synced [[:Category:Type:Value|Value]] or [[:Category:Enums|Enum]]</translate> | |||
|- | |||
| [[SyncList`1|SyncList<T>]] | |||
| | |||
|- | |||
| [[Type:SyncRef`1|SyncRef<T>]] | |||
| <translate>A synced [[Reference_Type|Reference]] (object)</translate> | |||
|} | |||
TODO | |||
=== Variable types relevant for ProtoFlux Nodes === | |||
{| class="wikitable sortable" | |||
|- | |||
! <translate>Type</translate> | |||
! <translate>Description</translate> | |||
|- | |- | ||
|} | |} | ||
TODO | |||
== See also == | == <translate>See also</translate> == | ||
* [https://learn.microsoft.com/en-us/dotnet/csharp/fundamentals/types/#custom-types Creating custom types in C#] | * <translate>[https://learn.microsoft.com/en-us/dotnet/csharp/fundamentals/types/#custom-types Creating custom types in C#]</translate> | ||
<!-- i plan to make a youtube tutorial series at some point! ~ paradox19 (User:Paradox19) --> | <!-- i plan to make a youtube tutorial series at some point! ~ paradox19 (User:Paradox19) --> | ||
[[Category:Tutorial]] |
Latest revision as of 16:23, 6 August 2024
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.
- 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
- Create a new project using the
Class Library
template (please ensure it is the C# option). Guidelines follow:- 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.
- Select the default framework, we'll be manually editing this later.
- Add references to the following libraries by right clicking on
Dependencies
, clickingAdd Project Reference
and thenBrowse
.- FrooxEngine.dll - Found in Resonite/Resonite_Data/Managed/FrooxEngine.dll
- Elements.Core.dll - Found in Resonite/Resonite_Data/Managed/Elements.Core.dll
- Change the referenced framework to
net462
. To do this:- Double click on your project name, this will be under your solution
- Change the line
<TargetFramework>whatever_you_selected_earlier</TargetFramework>
to<TargetFramework>net462</TargetFramework>
and save the file
- Change Your Assembly Info file to tell FrooxEngine what type of plugin you are making.
- Create a folder inside your project called
Properties
- Create a file called
AssemblyInfo.cs
which contains the line[assembly: DataModelAssembly(t)]
, wheret
is a DataModelAssemblyType.
- Create a folder inside your project called
You're now ready to start writing plugins!
Guides
Components
ProtoFlux
- An introduction to creating custom ProtoFlux nodes
- Calls and Continuations in ProtoFlux
- Creating ProtoFlux Globals
- Creating a ProtoFlux Binding
Misc
Object Reference
Basic Types
Object | Description |
---|---|
Components | A custom component |
DataModelAssemblyType | The type of assembly you are making. Used in your AssemblyInfo.cs file.
|
ExternalDataModelType | |
ProtoFlux Binding | The binding for a ProtoFlux Node. Without this, a node cannot be loaded into Resonite. |
TODO
ProtoFlux Node Types
Object | Description |
---|---|
ActionBreakableFlowNode | |
ActionFlowNode | |
ActionNode | A node which runs when called using an impulse |
AsyncActionBreakableFlowNode | Async variant of ActionBreakableFlowNode |
AsyncActionFlowNode | Async variant of ActionFlowNode |
AsyncActionNode | Async variant of ActionNode |
ObjectFunctionNode | A ProtoFlux Node which returns a singular object |
ValueFunctionNode | A ProtoFlux Node which returns a singular value |
VoidNode | A ProtoFlux Node which doesn't use return to give an output. Used for nodes with multiple outputs.
|
TODO
Variable types relevant for Components
Type | Description |
---|---|
Sync<T> | A synced Value or Enum |
SyncList<T> | |
SyncRef<T> | A synced Reference (object) |
TODO
Variable types relevant for ProtoFlux Nodes
Type | Description |
---|
TODO