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); } } } } } }
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); }
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); }