Example #1
0
 public IEnumerable <int> GetNeighbourIndex(FluidParticle particle)
 {
     for (int xOff = -1; xOff < 2; xOff++)
     {
         for (int yOff = -1; yOff < 2; yOff++)
         {
             // Own index
             //if (xOff == 0 && yOff == 0)
             //{
             //   continue;
             //}
             // Neighbour index
             int x = GetGridIndexX(particle) + xOff;
             int y = GetGridIndexY(particle) + yOff;
             // Clamp
             if (x > -1 && x < this.Width && y > -1 && y < this.Height)
             {
                 List <int> idxList = m_grid[x, y];
                 if (idxList != null)
                 {
                     // Return neighbours index
                     foreach (var idx in idxList)
                     {
                         yield return(idx);
                     }
                 }
             }
         }
     }
 }
Example #2
0
        private int GetGridIndexY(FluidParticle particle)
        {
            int gridIndexY = (int)(particle.Position.Y / this.CellSpace);

            // Clamp Y
            if (gridIndexY < 0)
            {
                gridIndexY = 0;
            }
            if (gridIndexY >= this.Height)
            {
                gridIndexY = this.Height - 1;
            }
            return(gridIndexY);
        }
Example #3
0
        private int GetGridIndexX(FluidParticle particle)
        {
            int gridIndexX = (int)(particle.Position.X / this.CellSpace);

            // Clamp X
            if (gridIndexX < 0)
            {
                gridIndexX = 0;
            }
            if (gridIndexX >= this.Width)
            {
                gridIndexX = this.Width - 1;
            }
            return(gridIndexX);
        }