Esempio n. 1
0
 void GenerarCirculosBox(BoxCollider2D coll)
 {
     if (!coll.enabled)
     {
         return;
     }
     if (coll.usedByComposite)
     {
         return;
     }
     CirculoVertice[] vertices = new CirculoVertice[4];
     vertices[0] = (new CirculoVertice()
     {
         actualizador = ActualizadorTransPointConOffset, puntoReferencia = coll.size / 2f /*pos = coll.transform.TransformPoint(coll.offset.x + coll.size.x / 2f, coll.offset.y + coll.size.y / 2f, 0f)*/, radio = coll.edgeRadius, padre = coll
     });
     vertices[1] = (new CirculoVertice()
     {
         actualizador = ActualizadorTransPointConOffset,
         puntoReferencia = new Vector2(-coll.size.x, coll.size.y) / 2f /*pos = coll.transform.TransformPoint(coll.offset.x - coll.size.x / 2f, coll.offset.y + coll.size.y / 2f, 0f)*/, radio = coll.edgeRadius, padre = coll
     });
     vertices[2] = (new CirculoVertice()
     {
         actualizador = ActualizadorTransPointConOffset,
         puntoReferencia = new Vector2(coll.size.x, -coll.size.y) / 2f /*pos = coll.transform.TransformPoint(coll.offset.x + coll.size.x / 2f, coll.offset.y - coll.size.y / 2f, 0f)*/, radio = coll.edgeRadius, padre = coll
     });
     vertices[3] = (new CirculoVertice()
     {
         actualizador = ActualizadorTransPointConOffset,
         puntoReferencia = -coll.size / 2f /*pos = coll.transform.TransformPoint(coll.offset.x - coll.size.x / 2f, coll.offset.y - coll.size.y / 2f, 0f)*/, radio = coll.edgeRadius, padre = coll
     });
     colliders.Add(coll, vertices);
 }
Esempio n. 2
0
 void GenerarCirculosCircle(CircleCollider2D coll)
 {
     if (!coll.enabled)
     {
         return;
     }
     if (coll.usedByComposite)
     {
         return;
     }
     CirculoVertice[] vertices = new CirculoVertice[1];
     vertices[0] = (new CirculoVertice()
     {
         actualizador = ActualizadorTransPointConOffset, puntoReferencia = Vector2.zero /*pos = coll.transform.TransformPoint(coll.offset)*/, radio = coll.transform.TransformVector(Vector3.right).magnitude *coll.radius, padre = coll
     });
     colliders.Add(coll, vertices);
 }
Esempio n. 3
0
    void GenerarCirculosPolygon(PolygonCollider2D coll)
    {
        if (!coll.enabled)
        {
            return;
        }
        if (coll.usedByComposite)
        {
            return;
        }
        CirculoVertice[] vertices = new CirculoVertice[coll.GetTotalPointCount()];
        int count = 0;

        foreach (var p in coll.points)
        {
            vertices[count++] = (new CirculoVertice()
            {
                actualizador = ActualizadorTransPointConOffset, puntoReferencia = p /*pos = coll.transform.TransformPoint(p + coll.offset)*/, radio = 0f, padre = coll
            });
        }
        colliders.Add(coll, vertices);
    }
Esempio n. 4
0
        public void Actualizar(CirculoVertice referencia, Vector2 desde, ContactFilter2D filtro, float radio = 0f, float umbralAngulo = 180f, Vector2 referenciaAngulo = new Vector2())
        {
            origen               = desde;
            puntoDestino         = referencia.Pos;
            colliderPadre        = referencia.padre;
            puntoDestinoRelativo = puntoDestino - origen;
            distancia            = puntoDestinoRelativo.magnitude;
            distanciaSq          = distancia * distancia;
            anguloRelativo       = angulo = Mathf.Atan2(-puntoDestinoRelativo.y, puntoDestinoRelativo.x);
            rayo = new Ray2D(origen, puntoDestinoRelativo.normalized);

            if (referencia.radio > 0f)
            {
                float r2 = referencia.radio * referencia.radio;
                float h  = Mathf.Sqrt(distanciaSq - r2) * referencia.radio / distancia;
                float d_ = Mathf.Sqrt(r2 - h * h);

                Vector2 offsetPerp  = Vector2.Perpendicular(puntoDestinoRelativo).normalized *h;
                Vector2 offsetParal = (puntoDestinoRelativo).normalized * d_;

                horizonteAlfa = new VectorDeLuz(this, -offsetPerp, -offsetParal, umbralAngulo, referenciaAngulo);
                horizonteBeta = new VectorDeLuz(this, offsetPerp, -offsetParal, umbralAngulo, referenciaAngulo);

                horizonteAlfa.CalcularRayo(filtro, radio);
                horizonteBeta.CalcularRayo(filtro, radio);
            }
            if (umbralAngulo < 180f)
            {
                anguloRelativo  = Vector2.SignedAngle(puntoDestinoRelativo, referenciaAngulo);
                enRangoAngular  = anguloRelativo <umbralAngulo && anguloRelativo> -umbralAngulo;
                anguloRelativo *= Mathf.Deg2Rad;
            }
            else
            {
                enRangoAngular = true;
            }
            CalcularRayo(filtro, radio);
        }
Esempio n. 5
0
 public VectorDeLuz(CirculoVertice referencia, Vector2 desde, ContactFilter2D filtro, float radio = 0f, float umbralAngulo = 180f, Vector2 referenciaAngulo = new Vector2())
 {
     Actualizar(referencia, desde, filtro, radio, umbralAngulo, referenciaAngulo);
 }