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; }