Ejemplo n.º 1
0
    protected Vector3[] GetColliders(ColiderGroup colliderGroup)
    {
        Vector3[] colliders = new Vector3[colliderGroup.coliders.Count];
        int       i         = 0;

        foreach (var collider in colliderGroup.coliders)
        {
            colliders[i++] = GetRelativePosition(collider);
        }
        return(colliders);
    }
Ejemplo n.º 2
0
    protected void WriteMiniMap(SceneInfo currentInfo)
    {
        float left   = 9999;
        float right  = -9999;
        float top    = -9999;
        float bottom = 9999;
        List <ColiderGroup> coliders = new List <ColiderGroup>();

        Ferr2DT_PathTerrain[] terrains = Resources.FindObjectsOfTypeAll <Ferr2DT_PathTerrain>();
        if (terrains.Length > 0)
        {
            foreach (Ferr2DT_PathTerrain terrain in terrains)
            {
                List <List <Vector2> > currentColliders = terrain.GetColliderVerts();
                foreach (List <Vector2> collidersGroup in currentColliders)
                {
                    ColiderGroup worldColliders = new ColiderGroup();

                    // find the top/bottom/right/left so we can draw things relatively
                    foreach (Vector2 vector in collidersGroup)
                    {
                        // convert the vector to be relative to the world
                        Vector2 worldVector = terrain.transform.TransformPoint(vector);
                        worldColliders.coliders.Add(worldVector);

                        if (worldVector.x < left)
                        {
                            left = worldVector.x;
                        }
                        if (right < worldVector.x)
                        {
                            right = worldVector.x;
                        }
                        if (top < worldVector.y)
                        {
                            top = worldVector.y;
                        }
                        if (worldVector.y < bottom)
                        {
                            bottom = worldVector.y;
                        }
                    }

                    if (worldColliders.coliders.Count > 0)
                    {
                        coliders.Add(worldColliders);
                    }
                }
            }
        }
        else
        {
            BoxCollider2D[] boxColliders = Resources.FindObjectsOfTypeAll <BoxCollider2D>();
            foreach (var collider in boxColliders)
            {
                if (collider.isTrigger)
                {
                    continue;
                }
                ColiderGroup collidersGroup = new ColiderGroup();

                float colliderTop    = collider.offset.y + (collider.size.y / 2f);
                float colliderBottom = collider.offset.y - (collider.size.y / 2f);
                float colliderLeft   = collider.offset.x - (collider.size.x / 2f);
                float colliderRight  = collider.offset.x + (collider.size.x / 2f);

                Vector3 topLeft     = collider.transform.TransformPoint(new Vector3(colliderLeft, colliderTop, 0f));
                Vector3 topRight    = collider.transform.TransformPoint(new Vector3(colliderRight, colliderTop, 0f));
                Vector3 bottomLeft  = collider.transform.TransformPoint(new Vector3(colliderLeft, colliderBottom, 0f));
                Vector3 bottomRight = collider.transform.TransformPoint(new Vector3(colliderRight, colliderBottom, 0f));

                if (topLeft.x < left)
                {
                    left = topLeft.x;
                }
                if (right < topRight.x)
                {
                    right = topRight.x;
                }
                if (top < topLeft.y)
                {
                    top = topLeft.y;
                }
                if (bottomLeft.y < bottom)
                {
                    bottom = bottomLeft.y;
                }

                collidersGroup.coliders.Add(topLeft);
                collidersGroup.coliders.Add(topRight);
                collidersGroup.coliders.Add(bottomLeft);
                collidersGroup.coliders.Add(bottomRight);

                coliders.Add(collidersGroup);
            }
        }


        currentInfo.miniMapInfo.left     = left;
        currentInfo.miniMapInfo.right    = right;
        currentInfo.miniMapInfo.top      = top;
        currentInfo.miniMapInfo.bottom   = bottom;
        currentInfo.miniMapInfo.coliders = coliders;
        EditorSceneManager.SaveScene(EditorSceneManager.GetSceneByName(currentInfo.Key));
    }