
@startuml
'https://plantuml.com/sequence-diagram
!includeurl https://raw.githubusercontent.com/matthewjosephtaylor/plantuml-style/40c705da84ef9e1c12591094c75f511e2a41c137/style.pu

ShooterComponentsBase --|> ShooterComponents

Shooter o-- ShooterComponents
ShooterDriverOIBinder o-- Shooter
ShootByRPM o-- Shooter
ShootBySpeed o-- Shooter

CommandBase <|-- ShootBySpeed
CommandBase <|-- ShootByRPM
SubsystemBase <|-- Shooter

class Shooter {

   ShooterComponents shooterComponents

   void setSpeed()
   void initSetPIDSpeed()
   void updateSetPIDSpeed()
   void stop()
}

class ShooterComponentsBase {

   WPI_TalonFX masterMotor
   WPI_TalonFX slaveMotor
   TalonEncoder encoder
   CtrePIDController controller

   WPI_TalonFX getMasterMotor()
   Counter getCounter()
   PIDController getController()
}

interface ShooterComponents {

   WPI_TalonFX getMasterMotor()
   Counter getCounter()
   PIDController getController()
}

class ShootByRPM {

   Shooter shooter
   DoubleSupplier RPMSupplier

   void initialize()
   void execute()
   void end()
}

class ShootBySpeed {

   Shooter shooter
   DoubleSupplier speedSupplier

   void execute()
   void end()
}

class SubsystemBase {
}

class CommandBase {
}

class ShooterConstants {
}

@enduml
