Files
KSpigot/src/main/kotlin/net/axay/kspigot/game/GamePhasesBuilder.kt
2020-10-13 15:10:21 +02:00

48 lines
1.3 KiB
Kotlin

@file:Suppress("MemberVisibilityCanBePrivate")
package net.axay.kspigot.game
class GamePhaseSystemBuilder {
private val gamePhases = mutableListOf<GamePhase>()
fun build() = GamePhaseSystem(*gamePhases.toTypedArray())
fun phase(length: Long, builder: GamePhaseBuilder.() -> Unit) {
gamePhases += GamePhaseBuilder(length).apply(builder).build()
}
}
class GamePhaseBuilder(val length: Long) {
private var start: (() -> Unit)? = null
private var end: (() -> Unit)? = null
private var counterMessage: ((secondsLeft: Long) -> String)? = null
fun start(callback: () -> Unit) {
start = callback
}
fun end(callback: () -> Unit) {
end = callback
}
fun counterMessage(callback: (secondsLeft: Long) -> String) {
counterMessage = callback
}
fun counterMessage(
beforeTime: String? = null,
afterTime: String? = null,
hours: String = "h",
minutes: String = "m",
seconds: String = "s"
) {
counterMessage = buildCounterMessageCallback(beforeTime, afterTime, hours, minutes, seconds)
}
fun build() = GamePhase(length, start, end, counterMessage)
}
fun buildGame(builder: GamePhaseSystemBuilder.() -> Unit) = GamePhaseSystemBuilder().apply(builder).build()