clarifications |
cleanup |
||
(One intermediate revision by one other user not shown) | |||
Line 6: | Line 6: | ||
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. | 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 == | ||
Line 13: | Line 15: | ||
To expand on the definition, in ProtoFlux, an ''unmanaged type'', or value type, must either (criteria not useful to Resonite excluded): | 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>sbyte</code>, <code>byte</code>, <code>short</code>, <code>ushort</code>, <code>int</code>, <code>uint</code>, <code>long</code>, <code>ulong</code>, <code>char</code>, <code>float</code>, <code>double</code>, <code>decimal</code>, or <code>bool</code>. | * 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 an [[Enum]] type. | ||
* Be defined as a non-nullable <code>struct</code> internally that only contains other value types. | * Be defined as a non-nullable <code>struct</code> internally that only contains other value types. | ||
Line 24: | Line 26: | ||
== See Also == | == See Also == | ||
* [[:Category:Value Types]] | |||
* [[Reference Type]] | * [[Reference Type]] | ||
* [[Type:Object]] | * [[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):
- Be one of
sbyte
,byte
,short
,ushort
,int
,uint
,long
,ulong
,char
,float
,double
,decimal
, orbool
. - Be an Enum type.
- Be defined as a non-nullable
struct
internally that only contains other value types.- This encompasses many different types, such as float3, DateTime, and TangentPointFloat.
- This excludes Nullable types from being a ProtoFlux value type, such as
int?
.
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.