Beispiel #1
0
        private int Threaded_Loop_Cell_Part_2(int start, int end, Threading.ParamList paramList)
        {
            AutonomousParticle p = (AutonomousParticle)paramList.Get("particle").Value;

            Engine.Color.Cell[] cells = (Engine.Color.Cell[])paramList.Get("cells").Value;
            int counter = (int)paramList.Get("counter").Value;

            int offset = 0;

            if (!t_glassBlock)
            {
                offset = Engine.Surface.Ops.GetGridOffset(0, start, t_cellSize, t_cellSize);
            }

            for (int y = start; y < end; y++)
            {
                for (int x = 0; x < t_cellSize; x++)
                {
                    cells[offset] = Engine.Calc.Color.FastAlphaBlend(cells[offset], t_imageProcessed.GetPixel((int)(p.Position.X - (t_cellSize / 2) + x), (int)(p.Position.Y - (t_cellSize / 2) + y), Surface.PixelRetrievalOptions.ReturnNeutralGray));
                    t_imageProcessed.SetPixel(cells[offset], (int)(p.Position.X - (t_cellSize / 2) + x), (int)(p.Position.Y - (t_cellSize / 2) + y), Surface.PixelSetOptions.Ignore);
                    offset++;
                }
            }

            return(0);
        }
Beispiel #2
0
        private int Threaded_Loop(int start, int end, Threading.ParamList paramList)
        {
            int counter = (int)paramList.Get("counter").Value;

            Engine.Threading.ThreadedLoop loop = new Threading.ThreadedLoop();

            for (int ii = start; ii < end; ii++)
            {
                // collect pixels in each grid cell
                Engine.Color.Cell[] cells = new Engine.Color.Cell[t_cellSize * t_cellSize];

                AutonomousParticle p = t_particles[ii];

                Engine.Threading.ParamList paramList2 = new Threading.ParamList();
                paramList2.Add("particle", typeof(AutonomousParticle), p);
                paramList2.Add("cells", typeof(Engine.Color.Cell[]), cells);
                paramList2.Add("counter", typeof(int), counter);

                loop.Loop(t_cellSize, Threaded_Loop_Cell_Part_1, paramList2);

                p.Move();

                loop.Loop(t_cellSize, Threaded_Loop_Cell_Part_2, paramList2);
            }

            loop.Dispose();

            return(0);
        }