public IList<RotateableRegion> Rotate(AxisConstraint constraint, bool left, int clockwiseTurns) { AxisPivot pivot = _pivots.First(p => p.Axis == constraint.Axis); List<RotateableRegion> rotatedRegions = new List<RotateableRegion>(); foreach(RotateableRegion region in _rotateableRegions) { if(constraint.Encapsulates(region.RotatedBounds(), left)) { rotatedRegions.Add(region); region.Rotate(constraint, pivot, clockwiseTurns); } } return rotatedRegions; }
private AxisConstraint UpdateMinMax(ref AxisConstraint? min, ref AxisConstraint? max, AxisConstraint constraint) { if((!min.HasValue) || (min.Value.Value > constraint.Value)) { min = constraint; } if((!max.HasValue) || (max.Value.Value < constraint.Value)) { max = constraint; } return constraint; }
private bool HasPivot(AxisConstraint.AxisType axis) { return _pivots.Any(pivot => pivot.Axis == axis); }
public AxisPivot(AxisConstraint.AxisType axis, Vector3 pivot) { Axis = axis; Pivot = pivot; }
public void Rotate(AxisConstraint constraint, AxisPivot pivot, int clockwiseTurns) { Quaternion delta = constraint.Rotation(clockwiseTurns); _blockBounds.Rotate(delta, pivot); }