@echo off REM Generate Drive.java subsystem setlocal set "PROJECT_DIR=%~1" ( echo package robot.subsystems; echo. echo import robot.Pose2d; echo. echo /** echo * Drive subsystem - business logic only. echo * Hardware interface defined as inner interface. echo * Tests use inline mocks - no FTC SDK needed. echo */ echo public class Drive { echo private final Hardware hardware; echo private Pose2d pose; echo. echo public Drive^(Hardware hardware^) { echo this.hardware = hardware; echo this.pose = new Pose2d^(^); echo } echo. echo /** echo * Drive using field-centric controls. echo * @param forward Forward/backward speed ^(-1.0 to 1.0^) echo * @param strafe Left/right speed ^(-1.0 to 1.0^) echo * @param rotate Rotation speed ^(-1.0 to 1.0^) echo */ echo public void drive^(double forward, double strafe, double rotate^) { echo // Your drive logic here echo double heading = hardware.getHeading^(^); echo. echo // Example: field-centric conversion echo double cos = Math.cos^(heading^); echo double sin = Math.sin^(heading^); echo. echo double rotatedForward = forward * cos - strafe * sin; echo double rotatedStrafe = forward * sin + strafe * cos; echo. echo hardware.setPowers^(rotatedForward, rotatedStrafe, rotate^); echo } echo. echo /** echo * Stop all drive motors. echo */ echo public void stop^(^) { echo hardware.setPowers^(0, 0, 0^); echo } echo. echo /** echo * Get current estimated pose. echo */ echo public Pose2d getPose^(^) { echo return pose; echo } echo. echo /** echo * Hardware interface - implement this for real robot. echo */ echo public interface Hardware { echo /** echo * Get robot heading in radians. echo */ echo double getHeading^(^); echo. echo /** echo * Set drive motor powers. echo * @param forward Forward power echo * @param strafe Strafe power echo * @param rotate Rotation power echo */ echo void setPowers^(double forward, double strafe, double rotate^); echo } echo } ) > "%PROJECT_DIR%\src\main\java\robot\subsystems\Drive.java" endlocal exit /b 0