private void Solver_OnCollision(ObiSolver s, ObiSolver.ObiCollisionEventArgs e)
    {
        // reset to unwrapped state:
        foreach (var wrappable in wrappables)
        {
            wrappable.Reset();
        }

        var world = ObiColliderWorld.GetInstance();

        foreach (Oni.Contact contact in e.contacts)
        {
            // look for actual contacts only:
            if (contact.distance < 0.025f)
            {
                var col = world.colliderHandles[contact.other].owner;
                if (col != null)
                {
                    var wrappable = col.GetComponent <Wrappable>();
                    if (wrappable != null)
                    {
                        wrappable.SetWrapped();
                    }
                }
            }
        }
    }
    private void HandleCollision(object sender, ObiSolver.ObiCollisionEventArgs e)
    {
        foreach (Oni.Contact contact in e.contacts)
        {
            // this one is an actual collision:
            if (contact.distance < 0.01)
            {
                //print(collidedParticles.Count);
                //print(totalParticles);

                Component collider;
                if (ObiCollider.idToCollider.TryGetValue(contact.other, out collider))
                {
                    if (collidedParticles.Contains(contact.particle))
                    {
                        return;
                    }

                    if (collider.CompareTag("Obstacle"))
                    {
                        collidedParticles.Add(contact.particle);
                    }
                    if ((float)collidedParticles.Count / totalParticles >= failRatio)
                    {
                        Splited = true;//========================================================================
                    }
                    // do something with the collider.
                }
            }
        }
    }
Exemple #3
0
    private void ObiSolverOnOnCollision(ObiSolver solver, ObiSolver.ObiCollisionEventArgs contacts)
    {
        //   var contact = contacts.contacts[0];


        foreach (var contact in contacts.contacts)
        {
            // this one is an actual collision:
            if (contact.distance < 0.01)
            {
                ObiCollider.idToCollider.TryGetValue(contact.other, out var collider);
                if (collider != null)
                {
                    if (collider.tag == "GameOverTrigger")
                    {
                        var emitter = (ObiEmitter)solver.particleToActor[contact.particle].actor;
                        emitter.life[solver.particleToActor[contact.particle].indexInActor] = 0;

                        if (_solverStore.IsAllPlayerPuddlesDied())
                        {
                            OnDied?.Invoke();
                        }
                    }

                    if (collider.tag == "Connectable")
                    {
                        var puddle = collider.GetComponent <Puddle>();
                        puddle.Join(_obiEmitter);
                        _source.PlayOneShot(_source.clip);
                    }
                }
            }
        }
    }
Exemple #4
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;
                            }
                        }
                    }
                }
            }
        }
    private void Solver_OnCollision(ObiSolver solver, ObiSolver.ObiCollisionEventArgs e)
    {
        onGround = false;

        var world = ObiColliderWorld.GetInstance();

        foreach (Oni.Contact contact in e.contacts)
        {
            // look for actual contacts only:
            if (contact.distance > 0.01)
            {
                var col = world.colliderHandles[contact.other].owner;
                if (col != null)
                {
                    onGround = true;
                    return;
                }
            }
        }
    }
Exemple #6
0
    private void Solver_OnCollision(ObiSolver s, ObiSolver.ObiCollisionEventArgs e)
    {
        var world = ObiColliderWorld.GetInstance();

        foreach (Oni.Contact contact in e.contacts)
        {
            // look for actual contacts only:
            if (contact.distance > 0.01)
            {
                var col = world.colliderHandles[contact.other].owner;
                if (col == deathPitCollider)
                {
                    onDeath.Invoke();
                    return;
                }
                if (col == finishCollider)
                {
                    onFinish.Invoke();
                    return;
                }
            }
        }
    }
Exemple #7
0
    private void Solver_OnCollision(ObiSolver s, ObiSolver.ObiCollisionEventArgs e)
    {
        var world = ObiColliderWorld.GetInstance();

        foreach (Oni.Contact contact in e.contacts)
        {
            // look for actual contacts only:
            if (contact.distance < 0.01f)
            {
                var col = world.colliderHandles[contact.bodyB].owner;
                if (colorizers[0].collider == col)
                {
                    solver.userData[contact.bodyA] = colorizers[0].color;
                    if (coloredParticles.Add(contact.bodyA))
                    {
                        UpdateScore(finishedParticles.Count, coloredParticles.Count);
                    }
                }
                else if (colorizers[1].collider == col)
                {
                    solver.userData[contact.bodyA] = colorizers[1].color;
                    if (coloredParticles.Add(contact.bodyA))
                    {
                        UpdateScore(finishedParticles.Count, coloredParticles.Count);
                    }
                }
                else if (finishLine == col)
                {
                    if (finishedParticles.Add(contact.bodyA))
                    {
                        UpdateScore(finishedParticles.Count, coloredParticles.Count);
                    }
                }
            }
        }
    }