This PR alters attributes to be replicated more conservatively, so we're not just replicating the entire collection of attributes all at once.
FAttribute now inherits FFastArrayItem.
FUnboundAttributeSet now inherits FFastArraySerializer and thus will use delta updates to replicate attributes.
The above change means that unbound attributes are not created except on the authority, otherwise they get doubled on the first update from an FFastArraySerializer.
BoundAttributes is no longer an instanced struct; it instead binds to the Value, BaseValue, and modifiers for each bound attribute, allowing those float values to be independently updated.
Bound attributes are now sorted by attribute tag when instanciated, ensuring a consistent order for them for purposes of binding.
I've tested this PR in both my own game project and in the GMAS + GMCEx template project, and in both cases it works successfully. However, it would probably be best if one or both of you did a sanity-check pass and tried it in your own game as well!
This PR alters attributes to be replicated more conservatively, so we're not just replicating the entire collection of attributes all at once.
FAttribute
now inheritsFFastArrayItem
.FUnboundAttributeSet
now inheritsFFastArraySerializer
and thus will use delta updates to replicate attributes.FFastArraySerializer
.BoundAttributes
is no longer an instanced struct; it instead binds to theValue
,BaseValue
, and modifiers for each bound attribute, allowing those float values to be independently updated.I've tested this PR in both my own game project and in the GMAS + GMCEx template project, and in both cases it works successfully. However, it would probably be best if one or both of you did a sanity-check pass and tried it in your own game as well!