protected override void OnRemoveFromSolver(object info) { ObiSolver solver = actor.solver; // subtract our amount of constraints from other actor's offsets: for (int i = actor.actorID + 1; i < solver.actors.Count; i++) { ObiSkinConstraints dc = solver.actors[i].GetComponent <ObiSkinConstraints>(); if (dc != null) { dc.UpdateIndicesOffset(dc.indicesOffset - skinIndices.Count); } } ObiUtils.RemoveRange(ref solver.skinConstraints.skinIndices, indicesOffset, skinIndices.Count); ObiUtils.RemoveRange(ref solver.skinConstraints.skinPoints, indicesOffset, skinIndices.Count); ObiUtils.RemoveRange(ref solver.skinConstraints.skinNormals, indicesOffset, skinIndices.Count); ObiUtils.RemoveRange(ref solver.skinConstraints.skinRadiiBackstops, indicesOffset * 2, skinIndices.Count * 2); ObiUtils.RemoveRange(ref solver.skinConstraints.skinStiffnesses, indicesOffset, skinIndices.Count); }
public override void PushDataToSolver(ObiBatchedConstraints constraints) { if (constraints == null || constraints.Actor == null || !constraints.Actor.InSolver) { return; } ObiSkinConstraints sc = (ObiSkinConstraints)constraints; float[] stiffnesses = new float[skinStiffnesses.Count]; for (int i = 0; i < stiffnesses.Length; i++) { stiffnesses[i] = StiffnessToCompliance(skinStiffnesses[i] * sc.stiffness); } Oni.SetSkinConstraints(batch, solverIndices, skinPoints.ToArray(), skinNormals.ToArray(), skinRadiiBackstop.ToArray(), stiffnesses, ConstraintCount); Oni.SetBatchPhaseSizes(batch, phaseSizes.ToArray(), phaseSizes.Count); }
public void OnEnable() { constraints = (ObiSkinConstraints)target; }