All pastes #800742 Raw Edit

Something

public text v1 · immutable
#800742 ·published 2007-11-28 18:37 UTC
rendered paste body
 private void CheckLines()
        {
            List<List<Block>> rowsToBreak = new List<List<Block>>();
            particleSys.BasicEffect.Projection = Matrix.CreateOrthographicOffCenter(0, Engine.Width, Engine.Height, 0, 0, 1);

            for (int i = columns - 1; i >= 0; i--)
            {
                float row = Y + (blockHeight * i) + (blockHeight / 2);
                Vector3 start = new Vector3(X, row, 0);
                Vector3 end = new Vector3(X + Width, row, 0);

                List<Block> blocks = new List<Block>();
                OrientedBoundingBox bb = new OrientedBoundingBox(start, end);
                bb.Transforms = Matrix.Identity;

                int collision = 0;
                for (int a = 0; a < Blocks.Count; a++)
                {
                    if (bb.Intersects(Blocks[a].BoundingBox))
                    {
                        blocks.Add(Blocks[a]);
                    }
                }

                if (blocks.Count == rows)
                {
                    rowsToBreak.Add(blocks);

                    for (int j = i - 1; j >= 0; j--)
                    {
                        row = Y + (blockHeight * j) + (blockHeight / 2);

                        start = new Vector3(X, row, 0);
                        end = new Vector3(X + Width, row, 0);

                        bb = new OrientedBoundingBox(start, end);
                        bb.Transforms = Matrix.Identity;

                        for (int k = 0; k < Blocks.Count; k++)
                        {
                            Block b = Blocks[k];

                            if (bb.Intersects(b.BoundingBox))
                            {
                                b.Vertices[0].Y += blockHeight;
                                b.Vertices[1].Y += blockHeight;
                                b.Vertices[2].Y += blockHeight;
                                b.Vertices[3].Y += blockHeight;
                            }
                        }
                    }
                }
            }

            for (int i = 0; i < rowsToBreak.Count; i++)
            {
                for (int a = 0; a < rowsToBreak[i].Count; a++)
                {
                    float minX = rowsToBreak[i][a].Vertices[0].X;
                    float maxX = rowsToBreak[i][a].Vertices[2].X;
                    float minY = rowsToBreak[i][a].Vertices[1].Y;
                    float maxY = rowsToBreak[i][a].Vertices[3].Y;                    
                    
                    for (int j = 0; j < particleCount; j++)
                    {                        
                        Vector2 explosionOrigin = 
                            new Vector2(Utility.RandomFloatMinMax(minX, maxX), 
                                        Utility.RandomFloatMinMax(minY, maxY));

                        float xSpeed = Utility.RandomMinMax(-100, 100);
                        float ySpeed = Utility.RandomMinMax(-100, 100);
                        float rotation = Utility.RandomFloatMinMax(0, MathHelper.Pi);
                        float lifeTime = Utility.RandomMinMax(1, 4);
                        float rotationSpeed = Utility.RandomFloatMinMax(0, MathHelper.Pi * 3);
                        VertexPositionColor[] vertices = new VertexPositionColor[] {
                            new VertexPositionColor(new Vector3(Utility.RandomMinMax(-3, -1), 0, 0), rowsToBreak[i][a].Color),
                            new VertexPositionColor(new Vector3(Utility.RandomMinMax(1, 3), 0, 0), rowsToBreak[i][a].Color)
                        };

                        particleSys.Add(explosionOrigin, new Vector2(xSpeed, ySpeed), lifeTime, rotation, rotationSpeed, vertices);
                    }

                    Blocks.Remove(rowsToBreak[i][a]);
                }
            }
        }