public void setTarget(Posture posture, ulong mask = (ulong)PartsBit.Whole) { // pass 1 foreach (var node_data in posture.getNodeDataList()) { var node_idx = node_data.node_idx_; if (node_idx != (int)Parts.Root && (1UL << node_idx & mask) != 0) { var node = node_list_[node_idx]; node.setBaseRotation(node_data); } } // pass 2 foreach (var node_data in posture.getNodeDataList()) { var node_idx = node_data.node_idx_; if (node_idx != (int)Parts.Root && (1UL << node_idx & mask) != 0) { var node = node_list_[node_idx]; node.setTarget(node_data); } } }
public void init(Posture posture, float damper, float spring_ratio) { node_list_ = new Node[(int)Parts.Max]; for (var i = 0; i < (int)Parts.Max; ++i) { node_list_[i] = new Node(); } foreach (var node_data in posture.getNodeDataList()) { // node_data.dump(); var node_idx = node_data.node_idx_; var node = node_list_[node_idx]; var parent_node_idx = node_data.parent_node_idx_; var parent_node = parent_node_idx < (int)Parts.Max ? node_list_[parent_node_idx] : null; node.init(node_data, parent_node, damper, spring_ratio); } }