public static int trySetUpConstraint(int index1, int index2, bool Equality, ref NativeArray <Vector3> constrainedVerts, ref List <DistConstraint> distanceConstraints, ref List <int> edges) { DistConstraint constraint = new DistConstraint(index1, index2, constrainedVerts, Equality); int edgeHash = constraint.GetHashCode(); if (!edges.Contains(edgeHash)) { distanceConstraints.Add(constraint); edges.Add(edgeHash); } return(distanceConstraints.Count); }
public static void resolveDistanceConstraints(List <DistConstraint> constraints, ref Vector3[] verts, int iterations = 3, bool randomize = false) { //Knuth Shuffle; randomize the order of the constraint resolution //Trades smoothness for stiffness if (randomize) { for (int t = 0; t < constraints.Count; t++) { DistConstraint tmp = constraints[t]; int r = Random.Range(t, constraints.Count); constraints[t] = constraints[r]; constraints[r] = tmp; } } for (int i = 0; i < iterations; i++) { for (int j = 0; j < constraints.Count; j++) { constraints[j].ResolveConstraint(ref verts); } } }