Example #1
0
    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);
    }
Example #2
0
    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;
                        }
                    }
                }
            }
        }
    }