@@ -0,0 +1,2424 @@
+package org.robockets.stronghold.robot.drivetrain;%0A%0Aimport org.robockets.stronghold.robot.Direction;%0Aimport org.robockets.stronghold.robot.Robot;%0Aimport org.robockets.stronghold.robot.Rotation;%0A%0Aimport edu.wpi.first.wpilibj.command.Command;%0A%0A/**%0A *%0A */%0Apublic class ManualDrive extends Command %7B%0A%09Rotation rotation;%0A%09Direction direction;%0A%09double translateSpeed;%0A%09double rotateSpeed;%0A%09Double time;%0A%0A    public ManualDrive(Direction direction, Rotation rotation, double translateSpeed, double rotateSpeed, double time) %7B%0A        requires(Robot.driveTrain);%0A        this.direction = direction;%0A        this.rotation = rotation;%0A        this.translateSpeed = translateSpeed;%0A        this.rotateSpeed = rotateSpeed;%0A        this.time = time;%0A    %7D%0A%0A    public ManualDrive(Direction direction, Rotation rotation, double translateSpeed, double rotateSpeed) %7B%0A        requires(Robot.driveTrain);%0A        this.direction = direction;%0A        this.rotation = rotation;%0A        this.translateSpeed = translateSpeed;%0A        this.rotateSpeed = rotateSpeed;%0A    %7D%0A    %0A    public ManualDrive(double translateSpeed, double rotateSpeed, double time) %7B%0A        requires(Robot.driveTrain);%0A        this.translateSpeed = translateSpeed;%0A        this.rotateSpeed = rotateSpeed;%0A        this.time = time;%0A    %7D%0A    %0A    public ManualDrive(double translateSpeed, double rotateSpeed) %7B%0A        requires(Robot.driveTrain);%0A        this.translateSpeed = translateSpeed;%0A        this.rotateSpeed = rotateSpeed;%0A    %7D%0A    %0A    // Called just before this Command runs the first time%0A    protected void initialize() %7B%0A    %09setTimeout(time);%0A    %7D%0A%0A    // Called repeatedly when this Command is scheduled to run%0A    protected void execute() %7B%0A    %09if (direction == Direction.BACKWARD) translateSpeed *= -1;%0A    %09if (rotation == Rotation.COUNTERCLOCKWISE) rotateSpeed *= -1;%0A    %09Robot.driveTrain.driveArcade(translateSpeed, rotateSpeed);%0A    %7D%0A%0A    // Make this return true when this Command no longer needs to run execute()%0A    protected boolean isFinished() %7B%0A    %09if (time != null) %7B%0A        %09return isTimedOut();%0A        %7D else %7B%0A        %09return false;%0A        %7D%0A    %7D%0A%0A    // Called once after isFinished returns true%0A    protected void end() %7B%0A    %09Robot.driveTrain.stop();%0A    %7D%0A%0A    // Called when another command which requires one or more of the same%0A    // subsystems is scheduled to run%0A    protected void interrupted() %7B%0A    %09end();%0A    %7D%0A%7D%0A

Combine the manual translate and rotate commands.