Value Type: Difference between revisions

From Resonite Wiki
Colin The Cat moved page Value Type to Type:Value: Fixes all broken category links and follows the naming scheme
Tag: New redirect
 
cleanup
 
(7 intermediate revisions by 3 users not shown)
Line 1: Line 1:
#REDIRECT [[Type:Value]]
A '''Value Type''' is a delegation of types within the [[FrooxEngine]] [[Data Model]] and [[ProtoFlux]]. In contrast to [[Reference Types]], fields containing a value type store the value directly, rather than a reference to the value.
 
For a list of all value types in game, refer to [[:Category:Value Types]].
 
== In FrooxEngine ==
What types are defined as value types in FrooxEngine are managed through a complicated autogenerated class called <code>Coder<T></code>. As such, it is much better to refer to the category for determining what is a value type in FrooxEngine.
 
In a[[Scene Inspector]], fields holding a value type are easily identifiable by the ability to directly edit the value within them, rather than needing to drag in a reference to the type.
 
A [[Component:ValueField|ValueField]] component is only able to be created for types that are FrooxEngine value types, so one can enter the type name to test whether it is a value type or not.
 
== In ProtoFlux ==
In ProtoFlux, in short, if a type can be classified as an [https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/unmanaged-types unmanaged type in C#], it is recognized as a value type. Otherwise, it is an [[Object Type]].
 
To expand on the definition, in ProtoFlux, an ''unmanaged type'', or value type, must either (criteria not useful to Resonite excluded):
 
* Be one of <code>[[Type:sbyte|sbyte]]</code>, <code>[[Type:byte|byte]]</code>, <code>[[Type:Short|short]]</code>, <code>[[Type:ushort|ushort]]</code>, <code>[[Type:int|int]]</code>, <code>[[Type:uint|uint]]</code>, <code>[[Type:long|long]]</code>, <code>[[Type:ulong|ulong]]</code>, <code>[[Type:char|char]]</code>, <code>[[Type:float|float]]</code>, <code>[[Type:double|double]]</code>, <code>[[Type:decimal|decimal]]</code>, or <code>[[Type:bool|bool]]</code>.
* Be an [[Enum]] type.
* Be defined as a non-nullable <code>struct</code> internally that only contains other value types.
** This encompasses many different types, such as [[Type:float3|float3]], [[Type:DateTime|DateTime]], and [[Type:TangentPointFloat|TangentPointFloat]].
** This <em>excludes</em> [[Type:Nullable|Nullable]] types from being a ProtoFlux value type, such as <code>int?</code>.
 
This discrepency between the definition of a value type in FrooxEngine and in ProtoFlux can cause some confusion. For example, a [[Type:string|string]] is a value type in FrooxEngine, but an object type in ProtoFlux. This is also the case with nullable types.
 
In short, every value type in ProtoFlux is also a value type in FrooxEngine, but not every value type in FrooxEngine is a value type in ProtoFlux.
 
== See Also ==
* [[:Category:Value Types]]
* [[Reference Type]]
* [[Type:Object]]

Latest revision as of 00:32, 18 September 2024

A Value Type is a delegation of types within the FrooxEngine Data Model and ProtoFlux. In contrast to Reference Types, fields containing a value type store the value directly, rather than a reference to the value.

For a list of all value types in game, refer to Category:Value Types.

In FrooxEngine

What types are defined as value types in FrooxEngine are managed through a complicated autogenerated class called Coder<T>. As such, it is much better to refer to the category for determining what is a value type in FrooxEngine.

In aScene Inspector, fields holding a value type are easily identifiable by the ability to directly edit the value within them, rather than needing to drag in a reference to the type.

A ValueField component is only able to be created for types that are FrooxEngine value types, so one can enter the type name to test whether it is a value type or not.

In ProtoFlux

In ProtoFlux, in short, if a type can be classified as an unmanaged type in C#, it is recognized as a value type. Otherwise, it is an Object Type.

To expand on the definition, in ProtoFlux, an unmanaged type, or value type, must either (criteria not useful to Resonite excluded):

This discrepency between the definition of a value type in FrooxEngine and in ProtoFlux can cause some confusion. For example, a string is a value type in FrooxEngine, but an object type in ProtoFlux. This is also the case with nullable types.

In short, every value type in ProtoFlux is also a value type in FrooxEngine, but not every value type in FrooxEngine is a value type in ProtoFlux.

See Also