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++)
            {
                ObiVolumeConstraints ac = solver.actors[i].GetComponent <ObiVolumeConstraints>();

                if (ac != null)
                {
                    ac.volumeTrianglesOffset -= triangleIndices.Count;
                    ac.volumeParticlesOffset -= particleIndices.Count;
                    ac.UpdateFirstParticleAndTriangleIndices(particleIndices.Count, triangleIndices.Count / 3);

                    ac.UpdateIndicesOffset(ac.indicesOffset - firstTriangle.Count);
                }
            }

            ObiUtils.RemoveRange(ref solver.volumeConstraints.volumeTriangleIndices, volumeTrianglesOffset, triangleIndices.Count);
            ObiUtils.RemoveRange(ref solver.volumeConstraints.volumeFirstTriangle, indicesOffset, firstTriangle.Count);
            ObiUtils.RemoveRange(ref solver.volumeConstraints.volumeNumTriangles, indicesOffset, firstTriangle.Count);

            ObiUtils.RemoveRange(ref solver.volumeConstraints.volumeParticleIndices, volumeParticlesOffset, particleIndices.Count);
            ObiUtils.RemoveRange(ref solver.volumeConstraints.volumeFirstParticle, indicesOffset, firstParticle.Count);
            ObiUtils.RemoveRange(ref solver.volumeConstraints.volumeNumParticles, indicesOffset, firstParticle.Count);

            ObiUtils.RemoveRange(ref solver.volumeConstraints.volumeRestVolumes, indicesOffset, firstTriangle.Count);
            ObiUtils.RemoveRange(ref solver.volumeConstraints.volumePressureStiffnesses, indicesOffset, firstTriangle.Count);
        }
        public override void PushDataToSolver(ObiBatchedConstraints constraints)
        {
            if (constraints == null || constraints.Actor == null || !constraints.Actor.InSolver)
            {
                return;
            }

            ObiVolumeConstraints vc = (ObiVolumeConstraints)constraints;

            for (int i = 0; i < pressureStiffness.Count; i++)
            {
                pressureStiffness[i] = new Vector2(vc.overpressure, StiffnessToCompliance(vc.stiffness));
            }

            Oni.SetVolumeConstraints(batch, solverIndices,
                                     firstTriangle.ToArray(),
                                     numTriangles.ToArray(),
                                     restVolumes.ToArray(),
                                     pressureStiffness.ToArray(),
                                     ConstraintCount);
        }
 public void OnEnable()
 {
     constraints = (ObiVolumeConstraints)target;
 }