Share realtime relative motion nodes across state clones.
This commit is contained in:
@@ -51,32 +51,26 @@ namespace Cryville.Crtr {
|
||||
}
|
||||
|
||||
public RealtimeMotionValue Clone() {
|
||||
var r = new RealtimeMotionValue() {
|
||||
return new RealtimeMotionValue() {
|
||||
_type = _type,
|
||||
AbsoluteValue = AbsoluteValue.Clone(),
|
||||
RelativeValue = RelativeValue.Clone(),
|
||||
RelativeNodes = RelativeNodes,
|
||||
};
|
||||
|
||||
var rel = new IntKeyedDictionary<MotionNode>(RelativeNodes.Count);
|
||||
foreach (var node in RelativeNodes) {
|
||||
var dnode = MotionNodePool.Shared.Rent(_type);
|
||||
node.Value.CopyTo(dnode);
|
||||
rel.Add(node.Key, dnode);
|
||||
}
|
||||
r.RelativeNodes = rel;
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
public void CopyTo(RealtimeMotionValue dest) {
|
||||
public void CopyTo(RealtimeMotionValue dest, bool cloneNodes) {
|
||||
AbsoluteValue.CopyTo(dest.AbsoluteValue);
|
||||
RelativeValue.CopyTo(dest.RelativeValue);
|
||||
dest.ReturnAllRelativeNodes();
|
||||
foreach (var node in RelativeNodes) {
|
||||
var dnode = MotionNodePool.Shared.Rent(_type);
|
||||
node.Value.CopyTo(dnode);
|
||||
dest.RelativeNodes.Add(node.Key, dnode);
|
||||
if (cloneNodes) {
|
||||
dest.ReturnAllRelativeNodes();
|
||||
foreach (var node in RelativeNodes) {
|
||||
var dnode = MotionNodePool.Shared.Rent(_type);
|
||||
node.Value.CopyTo(dnode);
|
||||
dest.RelativeNodes.Add(node.Key, dnode);
|
||||
}
|
||||
}
|
||||
else dest.RelativeNodes = RelativeNodes;
|
||||
}
|
||||
|
||||
public void ReturnAllRelativeNodes() {
|
||||
|
Reference in New Issue
Block a user