private void UpdateSegmentsWithGrid() { for (int i = 0; i < this.segments.Count; i++) { this.SetSegmentActive(i, false); } Vector3 position = LocalPlayer.Transform.position; LinearEmitter.GridPosition gridPosition = this.CalculateGridPosition(position); LinearEmitter.GridPosition gridPosition2 = gridPosition; if (0 < gridPosition.x && position.x < this.bounds.max.x) { gridPosition.x--; } if (gridPosition2.x < this.grid.GetLength(0) - 1 && this.bounds.min.x < position.x) { gridPosition2.x++; } if (0 < gridPosition.y && position.y < this.bounds.max.y) { gridPosition.y--; } if (gridPosition2.y < this.grid.GetLength(1) - 1 && this.bounds.min.y < position.y) { gridPosition2.y++; } if (0 < gridPosition.z && position.z < this.bounds.max.z) { gridPosition.z--; } if (gridPosition2.z < this.grid.GetLength(2) - 1 && this.bounds.min.z < position.z) { gridPosition2.z++; } for (int j = gridPosition.x; j <= gridPosition2.x; j++) { for (int k = gridPosition.y; k <= gridPosition2.y; k++) { for (int l = gridPosition.z; l <= gridPosition2.z; l++) { List <int> list = this.grid[j, k, l]; if (list != null) { for (int m = 0; m < list.Count; m++) { this.UpdateSegment(list[m]); } } } } } }
private void AddSegmentToGrid(int segmentIndex) { Vector3 start = this.segments[segmentIndex].start; Vector3 rhs = start + this.segments[segmentIndex].delta; LinearEmitter.GridPosition gridPosition = this.CalculateGridPosition(Vector3.Min(start, rhs)); LinearEmitter.GridPosition gridPosition2 = this.CalculateGridPosition(Vector3.Max(start, rhs)); for (int i = gridPosition.x; i <= gridPosition2.x; i++) { for (int j = gridPosition.y; j <= gridPosition2.y; j++) { for (int k = gridPosition.z; k <= gridPosition2.z; k++) { if (this.grid[i, j, k] == null) { this.grid[i, j, k] = new List <int>(); } this.grid[i, j, k].Add(segmentIndex); } } } }