void Solver_OnCollision(object sender, Obi.ObiSolver.ObiCollisionEventArgs e)
    {
        for (int i = 0; i < e.contacts.Count; ++i)
        {
            if (e.contacts[i].distance < 0.001f)
            {
                Component collider;
                if (ObiCollider.idToCollider.TryGetValue(e.contacts[i].other, out collider))
                {
                    if (collider == killer)
                    {
                        ObiSolver.ParticleInActor pa = solver.particleToActor[e.contacts[i].particle];
                        ObiEmitter emitter           = pa.actor as ObiEmitter;

                        if (emitter != null)
                        {
                            emitter.life[pa.indexInActor] = 0;
                        }
                    }
                    if (hands.Contains(collider))
                    {
                        collider.gameObject.GetComponent <Touched_Me>().touchedwater = true;
                    }
                }
            }
        }
    }
예제 #2
0
 void SolverOnCollision(object sender, Obi.ObiSolver.ObiCollisionEventArgs e)
 {
     foreach (Oni.Contact contact in e.contacts)
     {
         // this one is an actual collision:
         if (contact.distance < 0.01)
         {
             ActiveCollider            ac = new ActiveCollider();
             ObiSolver.ParticleInActor pa = solver.particleToActor[contact.particle];
             ac.actor    = pa.actor;
             ac.idxInAct = pa.indexInActor;
             ac.idxInSol = contact.particle;
             Component collider;
             if (ObiCollider.idToCollider.TryGetValue(contact.other, out collider))
             {
                 Vector3 SolvColPos = new Vector3(contact.point[0], contact.point[1], contact.point[2]);
                 //print("Куб: Обнаружен контакт: " + contact.particle + " " + contact.point);
                 Vector3 WorldColPos = solver.gameObject.transform.TransformPoint(SolvColPos);
                 //marker.position = WorldColPos;
                 ac.pos = WorldColPos;
                 if (collider is Collider)
                 {
                     ac.col = collider as Collider;
                 }
             }
             _actCol.Add(ac);
         }
     }
 }
예제 #3
0
        private void Solver_OnCollision(object sender, ObiSolver.ObiCollisionEventArgs e)
        {
//            Debug.Log("collision obi");
            if (OnParticleCollided != null)
            {
                foreach (var item in e.contacts)
                {
                    Component collider;
                    if (ObiCollider.idToCollider.TryGetValue(item.other, out collider))
                    {
                        OnParticleCollided.Invoke(this, collider.gameObject);

                        // Destroy particle
                        if (collider.tag.Equals("Throwable"))
                        {
                            ObiSolver.ParticleInActor pa = _solver.particleToActor[item.particle];
                            ObiEmitter emitter           = pa.actor as ObiEmitter;

                            if (emitter != null)
                            {
                                emitter.life[pa.indexInActor] = 0;
                            }
                        }
                    }
                }
            }
        }
    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;
                        }
                    }
                }
            }
        }
    }
    void Solver_OnCollision(object sender, Obi.ObiSolver.ObiCollisionEventArgs e)
    {
        foreach (Oni.Contact contact in e.contacts)
        {
            // this one is an actual collision:
            if (contact.distance < 0.01)
            {
                Component component;
                if (ObiCollider.idToCollider.TryGetValue(contact.other, out component))
                {
                    ObiSolver.ParticleInActor pa = solver.particleToActor[contact.particle];
                    ObiEmitter emitter           = pa.actor as ObiEmitter;

                    if (emitter != null && emitter.life[pa.indexInActor] > 0f)
                    {
                        WithLiquid wl = component.gameObject.GetComponent <WithLiquid>();
                        if (wl)
                        {
                            if (wl.Fill(WithLiquid.volumePerParticle))
                            {
                                emitter.life[pa.indexInActor] = 0;
                            }
                        }
                        else
                        {
                            Effect effect = pa.actor.GetComponent <Effect>();
                            if (effect && effect.AddEffectTo(component.gameObject))
                            {
                                emitter.life[pa.indexInActor] = 0;
                            }
                        }
                    }
                }
            }
        }
    }
예제 #6
0
    void Detector(object sender, Obi.ObiSolver.ObiCollisionEventArgs e)
    {
        foreach (Oni.Contact contact in e.contacts)
        {
            if (contact.distance < 0.01)
            {
                Component collider;
                if (ObiCollider.idToCollider.TryGetValue(contact.other, out collider))
                {
                    if (collider.tag == killerTag)
                    {
                        ObiSolver.ParticleInActor pa = solver.particleToActor[contact.particle];
                        ObiEmitter emitter           = pa.actor as ObiEmitter;

                        // destory particle
                        emitter.life[pa.indexInActor] = 0;

                        if (emitter != null)
                        {
                            Transform sirupObject = collider.transform.parent.Find(sirupObjectName);
                            if (sirupObject != null)
                            {
                                if (!emitter.transform.parent.Equals(sirupObject.parent))
                                {
                                    // update cup
                                    TheSirup cupScript = sirupObject.GetComponent <TheSirup>();
                                    Color    color     = emitter.transform.GetComponent <ObiParticleRenderer>().particleColor;
                                    cupScript.addParticle(color);
                                }
                            }
                        }
                    }
                }
            }
        }
    }