private IEnumerator SetSnapCablePinConstraints(GameObject CableEnd, bool isSnap) { ObiColliderBase obiCollider = CableEnd.GetComponent <ObiColliderBase>(); if (CableEnd.name == NameOfParticleLast) { Vector3 LastParticlePinOffSet = pinConstraintBatch.pinOffsets[LastParticleConstrainIndex]; Vector3 SecondLastParticlePinOffSet = pinConstraintBatch.pinOffsets[SecondLastParticleConstrainIndex]; RemovePinConstraint(CableEnd, isSnap, ref LastParticleConstrainIndex, ref SecondLastParticleConstrainIndex); yield return(null); AddPinConstraint(obiRope.UsedParticles - 1, obiRope.UsedParticles - 2, obiCollider, LastParticlePinOffSet, SecondLastParticlePinOffSet); } else if (CableEnd.name == NameOfParticleFirst) { Vector3 FirstParticlePinOffSet = pinConstraintBatch.pinOffsets[FirstParticleConstrainIndex]; Vector3 SecondParticlePinOffSet = pinConstraintBatch.pinOffsets[SecondParticleConstrainIndex]; RemovePinConstraint(CableEnd, isSnap, ref FirstParticleConstrainIndex, ref SecondParticleConstrainIndex); yield return(null); AddPinConstraint(0, 1, obiCollider, FirstParticlePinOffSet, SecondParticlePinOffSet); } obiCollider.ParentChange(); pinConstrain.AddToSolver(null); }
private void AddPinConstraint(int ParticleIndexOne, int intParticleIndexTwo, ObiColliderBase obiCollider, Vector3 offSetOne, Vector3 offSetTwo) { pinConstraintBatch.AddConstraint(ParticleIndexOne, obiCollider, offSetOne, Quaternion.identity, 0); UpdateIndex(); pinConstraintBatch.AddConstraint(intParticleIndexTwo, obiCollider, offSetTwo, Quaternion.identity, 0); UpdateIndex(); }
public void Solver_OnCollision(object sender, Obi.ObiSolver.ObiCollisionEventArgs e) { var world = ObiColliderWorld.GetInstance(); foreach (Oni.Contact contact in e.contacts) { ObiColliderBase collider = world.colliderHandles[contact.other].owner; if (collider != null) { if (collider.tag != "Ground" || collider.tag != "Walls") { if (contact.distance < 0.01) { ObiSolver.ParticleInActor pa = solver.particleToActor[contact.particle]; Slime s = pa.actor.gameObject.GetComponent <Slime> (); switch (collider.tag) { case "Food": for (var f = 0; f < s.food.Count; f++) { if (s.food[f] == collider.transform) { if (s.testingFood[f]) { s.testingFood[f] = false; s.AddReward(1f); break; } } } break; case "Enemy": s.Death(); break; } } } } } }