package com.edinarobotics.zed;

import com.edinarobotics.zed.subsystems.Drivetrain;
import com.edinarobotics.zed.subsystems.DrivetrainRotation;
import com.edinarobotics.zed.subsystems.DrivetrainStrafe;
import com.edinarobotics.zed.subsystems.Lifter;
import com.edinarobotics.zed.subsystems.Shooter;

public class Components {
    private static Components instance;
    
    //Drivetrain constants
    private static final int FRONT_LEFT_DRIVE_JAGUAR = 3;
    private static final int FRONT_RIGHT_DRIVE_JAGUAR = 1;
    private static final int BACK_LEFT_DRIVE_JAGUAR = 2;
    private static final int BACK_RIGHT_DRIVE_JAGUAR = 4;
    
    //Shooter constants
    private static final int SHOOTER_JAGUAR_FIRST = 1;
    private static final int SHOOTER_JAGUAR_SECOND = 2;
    private static final int LIFTER_JAGUAR_FIRST = 3;
    private static final int LIFTER_JAGUAR_SECOND = 4;
    
    //Subsystem objects
    public final Drivetrain drivetrain;
    public final DrivetrainStrafe drivetrainStrafe;
    public final DrivetrainRotation drivetrainRotation;
    public final Shooter shooter;
    public final Lifter lifter;
    
    /**
     * Private constructor for the Components singleton. This constructor
     * is only called once and handles creating all the robot subsystems.
     */
    private Components(){
        drivetrain = new Drivetrain(FRONT_LEFT_DRIVE_JAGUAR, FRONT_RIGHT_DRIVE_JAGUAR,
                BACK_LEFT_DRIVE_JAGUAR, BACK_RIGHT_DRIVE_JAGUAR);
        drivetrainStrafe = new DrivetrainStrafe(drivetrain);
        drivetrainRotation = new DrivetrainRotation(drivetrain);
        shooter = new Shooter(SHOOTER_JAGUAR_FIRST, SHOOTER_JAGUAR_SECOND);
        lifter = new Lifter(LIFTER_JAGUAR_FIRST, LIFTER_JAGUAR_SECOND);
    }
    
    /**
     * Returns a new instance of {@link Components}, creating one if null.
     * @return {@link Components}
     */
    public static Components getInstance() {
        if(instance == null){
            instance = new Components();
        }
        return instance;
    }
    
}

@@ -25,16 +25,117 @@
 s.zed;%0A%0A
+import com.edinarobotics.zed.subsystems.Collector;%0Aimport com.edinarobotics.zed.subsystems.Conveyor;%0A
 import c
@@ -461,24 +461,44 @@
 tance;%0A    %0A
+    //PWM constants%0A
     //Drivet
@@ -740,32 +740,306 @@
 JAGUAR = 4;%0A    
+//Collector constants%0A    private static final int COLLECTOR_LEFT_STAR = 5;%0A    private static final int COLLECTOR_RIGHT_STAR = 6;%0A    private static final int COLLECTOR_ROLLER = 7;%0A    //Conveyor constants%0A    private static final int CONVEYOR = 8;%0A    %0A    //CAN constants
 %0A    //Shooter c
@@ -1154,24 +1154,47 @@
 SECOND = 2;%0A
+    //Lifter constants%0A
     private 
@@ -1529,24 +1529,98 @@
 ter lifter;%0A
+    public final Collector collector;%0A    public final Conveyor conveyor;%0A
     %0A    /**
@@ -2225,24 +2225,163 @@
 AR_SECOND);%0A
+        collector = new Collector(COLLECTOR_LEFT_STAR, COLLECTOR_RIGHT_STAR, COLLECTOR_ROLLER);%0A        conveyor = new Conveyor(CONVEYOR);%0A
     %7D%0A    %0A 

Add all existing subsystem classes to Components.