public override R2NonCircularDirection ReflectAboutEqualAxis(int[] axisIndeces, int numberOfTimes) { R2Direction <R2NonCircularDirection, DoubleLinkedList <R2Point>, NonCircularDirection <R2NonCircularDirection, R2Point> > .ReflectAroundEqualAxis(new List <int>(axisIndeces), numberOfTimes, ref direction); return(new R2NonCircularDirection(new R2Point(StartingPoint.GetAxisAt(0), StartingPoint.GetAxisAt(1), StartingPoint.CanShoot), Direction, SharedDirection.DirectionLength, SharedDirection.Divisor, CanShoot, Duration)); }
// Only reflect about the origin. That is axisIndex 1. public R1Direction <IDirection> ReflectAboutAxis(int axisIndex) { int originalDirection = direction.MyDirection; Point originalPoint = StartingPoint; StartingPoint = new R1Point(-1 * StartingPoint.GetAxisAt(0)).Position; if (axisIndex == 1) { if (direction.MyDirection == 1) { direction.MyDirection = 2; } else if (direction.MyDirection == 2) { direction.MyDirection = 1; } } R1Direction <IDirection> reflectedDirection = (R1Direction <IDirection>)Clone(); direction.MyDirection = originalDirection; StartingPoint = originalPoint; return(reflectedDirection); }
// The set the values for the Translate method. public R1Direction <IDirection> Translate(int coordinateSystemDirection, float amount) { float finalX = StartingPoint.GetAxisAt(0); float originalXCoordinate = finalX; switch (coordinateSystemDirection) { case 1: finalX -= Math.Abs(amount); break; default: finalX += Math.Abs(amount); break; } Point point = new R1Point(StartingPoint).Position; point.SetAxisAt(0, finalX); StartingPoint = point; R1Direction <IDirection> translatedDirection = (R1Direction <IDirection>)Clone(); point.SetAxisAt(0, originalXCoordinate); StartingPoint = point; return(translatedDirection); }
// Move direction. // Change the starting position on a direction. public override R1CircularDirection translate(int coordinateSystemDirection, float amount) { float finalX = StartingPoint.GetAxisAt(0); R1Direction <R1CircularDirection, CircularLinkedList <R1Point>, CircularDirection <R1CircularDirection, R1Point> > .Translate(coordinateSystemDirection, amount, ref finalX); return(new R1CircularDirection(new R1Point(finalX), Direction, SharedDirection.DirectionLength, SharedDirection.Divisor, Duration, numberOfRotations)); }
// Rotate about the x-axis or y-axis a certatin number of times, and return the result. // Rotate around the x-axis or the y-axis. public override R2CircularDirection RotateAroundAxis(int indexOfAxis, int numberOfTimes) { R2CircularDirection direction = this; R2Direction <R2CircularDirection, CircularLinkedList <R2Point>, CircularDirection <R2CircularDirection, R2Point> > .RotateAroundAxis(indexOfAxis, numberOfTimes, this); return(new R2CircularDirection(new R2Point(StartingPoint.GetAxisAt(0), StartingPoint.GetAxisAt(1), StartingPoint.CanShoot), Direction, SharedDirection.DirectionLength, SharedDirection.Divisor, CanShoot, Duration)); }