/// <summary> /// Method <c>HoldBlock()</c> /// sets the heldBlock to the current block, and then sets the current block to /// the next block. /// </summary> public void HoldBlock() { if (HeldBlock.Count == 0) { _heldShape = _shapeFactory.BuildShape(_shape); for (int i = 0; i < 4; i++) { Blocks.Remove(x => x.GridX == _shape.ShapeBlocks[i].GridX && x.GridY == _shape.ShapeBlocks[i].GridY); } _shape = _nextShape; _shape.CenterShape(); Blocks.AddRange(_shape.ShapeBlocks); _nextShape = _shapeFactory.BuildRandomShape(); NextBlock.Clear(); NextBlock.AddRange(_nextShape.ShapeBlocks); HeldBlock.AddRange(_heldShape.ShapeBlocks); } else { HeldBlock.Clear(); var tempShape = _heldShape; _heldShape = _shapeFactory.BuildShape(_shape); for (int i = 0; i < 4; i++) { Blocks.Remove(x => x.GridX == _shape.ShapeBlocks[i].GridX && x.GridY == _shape.ShapeBlocks[i].GridY); } _shape = tempShape; _shape.CenterShape(); Blocks.AddRange(_shape.ShapeBlocks); HeldBlock.AddRange(_heldShape.ShapeBlocks); } }