예제 #1
0
    // Lighting Buffer TILE
    static public void MaskShapeDepthWithAtlas(LightingBuffer2D buffer, LightingTile tile, LightRenderingOrder lightSourceOrder, LightingTilemapCollider2D id, Vector2D offset, float z)
    {
        Mesh tileMesh = null;

        if (id.maskType == LightingTilemapCollider2D.MaskType.Tile)
        {
            tileMesh = LightingTile.GetStaticTileMesh();
        }
        else if (id.maskType == LightingTilemapCollider2D.MaskType.SpriteCustomPhysicsShape)
        {
            tileMesh = tile.GetTileDynamicMesh();
        }

        if (tileMesh == null)
        {
            return;
        }

        // Set Color Black Or White?
        GL.Color(Color.white);

        int triangleCount = tileMesh.triangles.GetLength(0);

        for (int i = 0; i < triangleCount; i = i + 3)
        {
            vecA = tileMesh.vertices [tileMesh.triangles [i]];
            vecB = tileMesh.vertices [tileMesh.triangles [i + 1]];
            vecC = tileMesh.vertices [tileMesh.triangles [i + 2]];
            Max2DMatrix.DrawTriangle(vecA, vecB, vecC, offset.ToVector2(), z, new Vector2D(1, 1));
        }

        LightingDebug.maskGenerations++;
    }
예제 #2
0
    static public void MaskShape(LightingBuffer2D buffer, LightingTilemapCollider2D id, Vector2D offset, float z)
    {
        if (id.maskType == LightingTilemapCollider2D.MaskType.SpriteCustomPhysicsShape || id.maskType == LightingTilemapCollider2D.MaskType.Tile)
        {
        }
        else
        {
            return;
        }

        if (id.map == null)
        {
            return;
        }

        SetupLocation(buffer, id);

        Vector2 vecA, vecB, vecC;

        LightingTile tile;
        Mesh         tileMesh = null;

        int triangleCount;

        tileSize2.x = 1;
        tileSize2.y = 1;

        if (id.maskType == LightingTilemapCollider2D.MaskType.Tile)
        {
            tileMesh = LightingTile.GetStaticTileMesh();
        }

        for (int x = newPositionInt.x - sizeInt; x < newPositionInt.x + sizeInt; x++)
        {
            for (int y = newPositionInt.y - sizeInt; y < newPositionInt.y + sizeInt; y++)
            {
                if (x < 0 || y < 0)
                {
                    continue;
                }

                if (x >= id.area.size.x || y >= id.area.size.y)
                {
                    continue;
                }

                tile = id.map[x, y];
                if (tile == null)
                {
                    continue;
                }

                polyOffset.x = x + tilemapOffset.x;
                polyOffset.y = y + tilemapOffset.y;

                polyOffset.x *= scale.x;
                polyOffset.y *= scale.y;

                polyOffset2.x = (float)polyOffset.x;
                polyOffset2.y = (float)polyOffset.y;

                if (LightingManager2D.culling && Vector2.Distance(polyOffset2, buffer.lightSource.transform.position) > (id.cellSize.x * 2f) + buffer.lightSource.lightSize)
                {
                    LightingDebug.culled++;
                    continue;
                }

                polyOffset.x += offset.x;
                polyOffset.y += offset.y;

                if (id.maskType == LightingTilemapCollider2D.MaskType.SpriteCustomPhysicsShape)
                {
                    tileMesh = null;
                    tileMesh = tile.GetTileDynamicMesh();
                }

                if (tileMesh == null)
                {
                    continue;
                }

                polyOffset2.x = (float)polyOffset.x;
                polyOffset2.y = (float)polyOffset.y;

                // Batch and Optimize???
                triangleCount = tileMesh.triangles.GetLength(0);
                for (int i = 0; i < triangleCount; i = i + 3)
                {
                    vecA = tileMesh.vertices [tileMesh.triangles [i]];
                    vecB = tileMesh.vertices [tileMesh.triangles [i + 1]];
                    vecC = tileMesh.vertices [tileMesh.triangles [i + 2]];
                    Max2DMatrix.DrawTriangle(vecA, vecB, vecC, polyOffset2, z, tileSize2);
                }
                LightingDebug.maskGenerations++;
            }
        }
    }