diff --git a/ftc/src/main/kotlin/page/j5155/expressway/ftc/actions/ActionBuilder.kt b/ftc/src/main/kotlin/page/j5155/expressway/ftc/actions/ActionBuilder.kt new file mode 100644 index 0000000..a2b5742 --- /dev/null +++ b/ftc/src/main/kotlin/page/j5155/expressway/ftc/actions/ActionBuilder.kt @@ -0,0 +1,58 @@ +package page.j5155.expressway.ftc.actions + +import com.acmerobotics.dashboard.telemetry.TelemetryPacket +import page.j5155.expressway.core.actions.Condition +import page.j5155.expressway.core.actions.InitLoopCondAction +import java.util.function.Consumer +import java.util.function.Supplier + +/** + * This class builds an InitLoopCondAction + * @param condition the condition for the action to complete + */ +class ActionBuilder(val condition: Condition) { + + private var initInternal: Supplier = Supplier { } + private var loopInternal: Consumer = Consumer { } + private var cleanupInternal: Supplier = Supplier { } + + /** + * Set the initialization function + * @param init the initialization function + */ + fun setInit(init: Supplier): ActionBuilder { + initInternal = init + return this + } + + /** + * Set the loop function + * @param loop the loop function + */ + fun setLoop(loop: Consumer): ActionBuilder { + loopInternal = loop + return this + } + + /** + * Set the cleanup function + * @param cleanup the cleanup function + */ + fun setCleanup(cleanup: Supplier): ActionBuilder { + cleanupInternal = cleanup + return this + } + + /** + * Builds the InitLoopCondAction + */ + fun build(): InitLoopCondAction { + return object: InitLoopCondAction(condition) { + override fun init() = initInternal.get() + + override fun loop(p: TelemetryPacket) = loopInternal.accept(p) + + override fun cleanup() = cleanupInternal.get() + } + } +} \ No newline at end of file