User:Mint Shock/System Standard: Difference between revisions

From Resonite Wiki
mNo edit summary
Add more datail
Line 4: Line 4:


'''Systems''' are anything that goes on top of an base object. This includes [[ProtoFlux]] logic and other [[:Category:Components:Assets|assets]] such as [[Slot|slots]], meshes, [[Texture2D|textures]] and much more.  
'''Systems''' are anything that goes on top of an base object. This includes [[ProtoFlux]] logic and other [[:Category:Components:Assets|assets]] such as [[Slot|slots]], meshes, [[Texture2D|textures]] and much more.  
This proposal builds on top of [[Moduprint/API]] as a established and proven to work standard.


All variables must be defined including their namespace to avoid them accidentally binding to the wrong namespace: <code>System/''VariableName''</code>. The namespace must not rely on non-direct binding of variables.
All variables must be defined including their namespace to avoid them accidentally binding to the wrong namespace: <code>System/''VariableName''</code>. The namespace must not rely on non-direct binding of variables.


== Setup ==
== Structure of a System ==
The simplest possible system consists of a single slot with all required '''[*]''' variables present.  
A System is a [[Slot]] with the direct-binding [[Component:DynamicVariableSpace|Dynamic Variable Space]] "System" defined on itself.
 
Systems are '''ALWAYS''' installed under a "Systems" slot that is a direct child of  the Objects / Avatars root.


== Variables ==
{| class="wikitable"
{| class="wikitable"
|+
|+
Line 16: Line 19:
!Name
!Name
!Type
!Type
!
!*
!Purpose
!Purpose
|-
|-
Line 22: Line 25:
|{{Template:TypeColorCard|String}}
|{{Template:TypeColorCard|String}}
|Required
|Required
|Unique module identifier  -> <code>Mint_Shock.ExampleSystem</code>
|Unique system identifier  -> <code>Mint_Shock.ExampleSystem</code>Use a [[Component:DynamicField|DynamicField]]<String> with the target being the tag on the systems <code>root</code>
Use a [[Component:DynamicField|DynamicField]]<String> with the target being the tag on the systems <code>root</code>
|-
|-
|<code>Version</code>
|<code>Version</code>
Line 29: Line 31:
|Optional
|Optional
|[https://semver.org/ Semantic Version] (major.minor.patch)
|[https://semver.org/ Semantic Version] (major.minor.patch)
|-
|<code>Root</code>
|{{Template:TypeColorCard|Slot}}
|Required
|Root slot of the system.
|-
|-
|<code>Name</code>  
|<code>Name</code>  
Line 35: Line 42:
|Human-Readable name of the module.  
|Human-Readable name of the module.  
|-
|-
|<code>Root</code>  
|<code>ShortDescription</code>
|{{Template:TypeColorCard|Slot}}
|{{Template:TypeColorCard|String}}
|Required
|Optional
|Root slot of the system.
|Human-Readable short description of the System
|-
|-
|<code>ShortDescription</code>
|<code>ManifestOwner</code>
|{{Template:TypeColorCard|String}}
|{{Template:TypeColorCard|String}}
|
|Optional
|All bones of the rig using the original bone names.
|Creator / Maintiner of the System
|-
|<code>Requirements</code>
|{{Template:TypeColorCard|Slot}}
|Optional
|List of requirements of the system, such as dependencies or the manager version
|-
|-
|<code>HasSubsystem</code>
|<code>HasSubsystem</code>
|{{Template:TypeColorCard|bool}}
|{{Template:TypeColorCard|bool}}
|
|Optional
|If this system has subsystems
|If this system has subsystems
|-
|-
|<code>Icon</code>
|<code>Icon</code>
|{{Template:TypeColorCard|Uri}}
|{{Template:TypeColorCard|Uri}}
|
|Optional
|Icon of the system. (resdb link to the icon texture)
|Icon of the system. (resdb link to the icon texture)
|-
|<code>BodyNode.''Name''</code>
|{{Template:TypeColorCard|Slot}}
|
|All armature body nodes using [[Type:BodyNode|Body Node]] names.
|-
|<code>Menu</code>
|{{Template:TypeColorCard|Slot}}
|
|Radial menu items root slot.
|}
|}
The system ID is of the format <code>Namespace.System</code> where <code>Namespace</code> is anything uniquely identifying the creator such as the user or group name and <code>System</code> is the identifier of the system. Only one system with the same ID can be installed on the same "Systems"-Slot at any point in time. The ID must only contain letters which are valid for a Dynamic Variable.


=== Subsystems ===
=== Subsystems ===
Are primarily used to Separate out separate underlying systems for ease or maintaining and organization. The Systems -> Structure can be seen as a kind of "Folder" Structure. A System can have many Subsystems, those Subsystems can have more Sub-SubSystems and so on. Subsystems aren't special in any way compared to other Systems. A Subsystem has the same Requirements and can have the same Dynamic variables as Systems.
== Setup ==
Create a slot with a identifiable name like "Systems" as a direct child of your Object / Avatar with the "Systems" tag. ''Note that the name can be different to allow for Slot organization (example: <code><color hero.cyan>Systems</color></code>) but the Tag has to be exactly "Systems".''
Other Standards may define a specific <code>Standardname/Systems</code> Dynamic variable of type  {{Template:TypeColorCard|Slot}} to point to the Systems slot. (See for example [[Avatar standard]])
This Slot will contain all Systems and Subsystems as children.
The simplest possible System consists of a single slot with all required '''[*]''' variables present.
== ToDo: Requirements Dependencies and Methods? ==


== Avatar Standard ==
== Avatar Standard ==
Line 72: Line 87:


Example: a flight thruster system might need to know the users hand position. Normally you would have to manually find the users hand [[Slot|slots]] using [[ProtoFlux]]. [[Avatar standard]] simplifies this by providing [[Dynamic variable]] <code>Avatar/BodyNode.HandL</code> and <code>Avatar/</code><!-- Check for correct Dynvar names --><code>BodyNode.HandR</code>  of type {{Template:TypeColorCard|Slot}}
Example: a flight thruster system might need to know the users hand position. Normally you would have to manually find the users hand [[Slot|slots]] using [[ProtoFlux]]. [[Avatar standard]] simplifies this by providing [[Dynamic variable]] <code>Avatar/BodyNode.HandL</code> and <code>Avatar/</code><!-- Check for correct Dynvar names --><code>BodyNode.HandR</code>  of type {{Template:TypeColorCard|Slot}}
le


== See also ==
== See also ==


* [[Avatar standard]]
* [[Avatar standard]]
*
*[[Moduprint/API]]


[[Category:Community standards]]
[[Category:Community standards]]

Revision as of 16:12, 2 October 2025

This is a early draft of this proposal. Please don't use anything in here yet. Everything is still subject to change.

Standardization is required for collaboration and shared assets. This is a proposal made by Mint_Shock which standardizes a list of Dynamic Variables on the "System" namespace to make systems interoperable and portable and enables users to create systems which can easily be installed onto other objects like tools, avatars, and much more. All without using any developer tools.

Systems are anything that goes on top of an base object. This includes ProtoFlux logic and other assets such as slots, meshes, textures and much more.

This proposal builds on top of Moduprint/API as a established and proven to work standard.

All variables must be defined including their namespace to avoid them accidentally binding to the wrong namespace: System/VariableName. The namespace must not rely on non-direct binding of variables.

Structure of a System

A System is a Slot with the direct-binding Dynamic Variable Space "System" defined on itself.

Systems are ALWAYS installed under a "Systems" slot that is a direct child of the Objects / Avatars root.

Dynamic Variables
Name Type * Purpose
ID String Required Unique system identifier -> Mint_Shock.ExampleSystemUse a DynamicField<String> with the target being the tag on the systems root
Version uint3 Optional Semantic Version (major.minor.patch)
Root Slot Required Root slot of the system.
Name String Optional Human-Readable name of the module.
ShortDescription String Optional Human-Readable short description of the System
ManifestOwner String Optional Creator / Maintiner of the System
Requirements Slot Optional List of requirements of the system, such as dependencies or the manager version
HasSubsystem bool Optional If this system has subsystems
Icon Uri Optional Icon of the system. (resdb link to the icon texture)

The system ID is of the format Namespace.System where Namespace is anything uniquely identifying the creator such as the user or group name and System is the identifier of the system. Only one system with the same ID can be installed on the same "Systems"-Slot at any point in time. The ID must only contain letters which are valid for a Dynamic Variable.

Subsystems

Are primarily used to Separate out separate underlying systems for ease or maintaining and organization. The Systems -> Structure can be seen as a kind of "Folder" Structure. A System can have many Subsystems, those Subsystems can have more Sub-SubSystems and so on. Subsystems aren't special in any way compared to other Systems. A Subsystem has the same Requirements and can have the same Dynamic variables as Systems.

Setup

Create a slot with a identifiable name like "Systems" as a direct child of your Object / Avatar with the "Systems" tag. Note that the name can be different to allow for Slot organization (example: <color hero.cyan>Systems</color>) but the Tag has to be exactly "Systems".

Other Standards may define a specific Standardname/Systems Dynamic variable of type Slot to point to the Systems slot. (See for example Avatar standard)

This Slot will contain all Systems and Subsystems as children.

The simplest possible System consists of a single slot with all required [*] variables present.

ToDo: Requirements Dependencies and Methods?

Avatar Standard

The System standard is designed primarely as a extension of the Avatar standard. Both proposals are designed to work together seamlessly. Systems can access variables from the Avatar standard by reading variables from the Avatar namespace.

Example: a flight thruster system might need to know the users hand position. Normally you would have to manually find the users hand slots using ProtoFlux. Avatar standard simplifies this by providing Dynamic variable Avatar/BodyNode.HandL and Avatar/BodyNode.HandR of type Slot

See also