Example #1
0
    public void RevisarPegados(float filtroOverlap = 0f)
    {
        pegados.Clear();
        pegadosRigid.Clear();
        pegadosColliders.Clear();
        pegadosFiltrados.Clear();
        pegadosTocandoPoco.Clear();
        arriba.Clear();
        abajo.Clear();
        derecha.Clear();
        izquierda.Clear();
        if (Rigid)
        {
            var contactos = new ContactPoint2D[50];
            int cant      = Rigid.GetContacts(contactos);
            for (int i = 0; i < cant; i++)
            {
                var contacto = contactos[i];
                var tuBoxCol = contacto.collider as BoxCollider2D;
                var miBox    = BoxCol ? BoxCol : contacto.otherCollider as BoxCollider2D;
                if (tuBoxCol && !pegadosColliders.Contains(tuBoxCol))
                {
                    pegadosColliders.Add(tuBoxCol);
                    var tuBoundsMax = tuBoxCol.bounds.max;
                    var tuBoundsMin = tuBoxCol.bounds.min;
                    var miBoundsMax = miBox.bounds.max;
                    var miBoundsMin = miBox.bounds.min;

                    // Nueva tecnica, se tomaran los bloques incluyendo superposiciones, un mismo bloque que esta arriba y abajo entra en ambos grupos
                    if (tuBoundsMax.y > miBoundsMax.y)
                    {
                        arriba.Add(tuBoxCol);
                    }
                    if (tuBoundsMin.y < miBoundsMin.y)
                    {
                        abajo.Add(tuBoxCol);
                    }

                    if (tuBoundsMax.x > miBoundsMax.x)
                    {
                        derecha.Add(tuBoxCol);
                    }
                    if (tuBoundsMin.x < miBoundsMin.x)
                    {
                        izquierda.Add(tuBoxCol);
                    }

                    if (contacto.rigidbody && !pegadosRigid.Contains(contacto.rigidbody))
                    {
                        pegadosRigid.Add(contacto.rigidbody);
                        var tuLaycuarto = contacto.rigidbody.GetComponent <LayoutCuarto>();
                        if (tuLaycuarto)
                        {
                            pegados.Add(tuLaycuarto);

                            var overLapX = Mathf.Min(tuBoundsMax.x, miBoundsMax.x) - Mathf.Max(tuBoundsMin.x, miBoundsMin.x);
                            var overLapY = Mathf.Min(tuBoundsMax.y, miBoundsMax.y) - Mathf.Max(tuBoundsMin.y, miBoundsMin.y);
                            if (overLapX > filtroOverlap || overLapY > filtroOverlap)
                            {
                                pegadosFiltrados.Add(tuLaycuarto);
                            }
                            else
                            {
                                pegadosTocandoPoco.Add(tuLaycuarto);
                            }
                        }
                    }
                }
            }
        }

        RevisarMuros();
    }