imported>Xekri No edit summary |
Adding notes about an issue I had and a workaround. Could move this to another article... |
||
(2 intermediate revisions by 2 users not shown) | |||
Line 8: | Line 8: | ||
{{Table ComponentFields | {{Table ComponentFields | ||
|AutoAddChildren|Bool| Controls whether slots below this component's slot in the hierarchy are automatically added to <code>_targets</code> | |AutoAddChildren|Bool| Controls whether slots below this component's slot in the hierarchy are automatically added to <code>_targets</code> | ||
|Direction|AxisDir| The axis and direction the items will be aligned on | |Direction|'''[[#AxisDir|AxisDir]]'''|TypeAdv1=true| The axis and direction the items will be aligned on | ||
|GlobalAxisXAlign|Align| Controls how items will be aligned globally, with each other in the X Axis | |GlobalAxisXAlign|'''[[#Align|Align]]'''|TypeAdv2=true| Controls how items will be aligned globally, with each other in the X Axis | ||
|GlobalAxisYAlign|Align| Controls how items will be aligned globally, with each other in the Y Axis | |GlobalAxisYAlign|'''[[#Align|Align]]'''|TypeAdv3=true| Controls how items will be aligned globally, with each other in the Y Axis | ||
|GlobalAxisZAlign|Align| Controls how items will be aligned globally, with each other in the Z Axis | |GlobalAxisZAlign|'''[[#Align|Align]]'''|TypeAdv4=true| Controls how items will be aligned globally, with each other in the Z Axis | ||
|ElementAxisXAlign|Align| Controls how each item aligns itself, within the align, in the X Axis | |ElementAxisXAlign|'''[[#Align|Align]]'''|TypeAdv5=true| Controls how each item aligns itself, within the align, in the X Axis | ||
|ElementAxisYAlign|Align| Controls how each item aligns itself, within the align, in the Y Axis | |ElementAxisYAlign|'''[[#Align|Align]]'''|TypeAdv6=true| Controls how each item aligns itself, within the align, in the Y Axis | ||
|ElementAxisZAlign|Align| Controls how each item aligns itself, within the align, in the Z Axis | |ElementAxisZAlign|'''[[#Align|Align]]'''|TypeAdv7=true| Controls how each item aligns itself, within the align, in the Z Axis | ||
|Separation|Float| The spacing between each item in <code>_targets</code> along the specified axis | |Separation|Float| The spacing between each item in <code>_targets</code> along the specified axis | ||
|ExcludeList|IBounded| A list of slots which are excluded from the aligner | |ExcludeList|{{RootFieldType|SyncRefList`1|[[Type:IBounded|IBounded]]}}|TypeAdv9=true| A list of slots which are excluded from the aligner | ||
|_targets|Target| A list of slots which will be aligned. This will be automatically generated if <code>AutoAddChildren</code> is enabled. | |_targets|{{RootFieldType|SyncList`1|[[#Target|Target]]}}|TypeAdv10=true| A list of slots which will be aligned. This will be automatically generated if <code>AutoAddChildren</code> is enabled. | ||
}} | }} | ||
== Disadvantages and Alternatives == | |||
As the Axis Aligner works off of Bounds Calculations, and runs its calculations under a wide range of criteria, it can quickly become heavy with a doezen slots or so. Its Bounds-based nature alao makes it unsuited for evenly spacing objects with different bounds. | |||
To mitigate these kinds of issues, one can make their own version of this in Protoflux, by having OnChange or other triggers fire a ForLoop, which iterates through all Slot Children, and gives them an offset based on the Iteration multiplied by a Float3 for the position. To further implement the bounda functionality, one can use a value that increases by the bounds calculation every iteration, instead of a number based on the Iteration itself. | |||
A simple example was used to align the Avatars in [[Avatar Station]], and is available in Nuki's Public Folder. | |||
== Examples == | == Examples == | ||
Line 25: | Line 33: | ||
== Related Components == | == Related Components == | ||
</translate> | </translate> | ||
[[Category:Components{{#translation:}}| | [[Category:Components{{#translation:}}|Axis Aligner]] | ||
[[Category:Components | [[Category:Components With Nested Enums{{#translation:}}|Axis Aligner]] | ||
[[Category:Components With Nested Types{{#translation:}}|Axis Aligner]] | |||
[[Category:Components:Transform:Drivers{{#translation:}}|Axis Aligner]] |
Latest revision as of 22:39, 13 July 2024
Usage
Name | Type | Description |
---|---|---|
persistent
|
Bool | Determines whether or not this item will be saved to the server. |
UpdateOrder
|
Int | Controls the order in which this component is updated. |
Enabled
|
Bool | Controls whether or not this component is enabled. |
AutoAddChildren
|
Bool | Controls whether slots below this component's slot in the hierarchy are automatically added to _targets
|
Direction
|
AxisDir | The axis and direction the items will be aligned on |
GlobalAxisXAlign
|
Align | Controls how items will be aligned globally, with each other in the X Axis |
GlobalAxisYAlign
|
Align | Controls how items will be aligned globally, with each other in the Y Axis |
GlobalAxisZAlign
|
Align | Controls how items will be aligned globally, with each other in the Z Axis |
ElementAxisXAlign
|
Align | Controls how each item aligns itself, within the align, in the X Axis |
ElementAxisYAlign
|
Align | Controls how each item aligns itself, within the align, in the Y Axis |
ElementAxisZAlign
|
Align | Controls how each item aligns itself, within the align, in the Z Axis |
Separation
|
Float | The spacing between each item in _targets along the specified axis
|
ExcludeList
|
list of IBounded | A list of slots which are excluded from the aligner |
_targets
|
list of Target | A list of slots which will be aligned. This will be automatically generated if AutoAddChildren is enabled.
|
Disadvantages and Alternatives
As the Axis Aligner works off of Bounds Calculations, and runs its calculations under a wide range of criteria, it can quickly become heavy with a doezen slots or so. Its Bounds-based nature alao makes it unsuited for evenly spacing objects with different bounds.
To mitigate these kinds of issues, one can make their own version of this in Protoflux, by having OnChange or other triggers fire a ForLoop, which iterates through all Slot Children, and gives them an offset based on the Iteration multiplied by a Float3 for the position. To further implement the bounda functionality, one can use a value that increases by the bounds calculation every iteration, instead of a number based on the Iteration itself.
A simple example was used to align the Avatars in Avatar Station, and is available in Nuki's Public Folder.