// 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++; }
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++; } } }