KStarbound/src/main/kotlin/ru/dbotthepony/kstarbound/defs/liquid/LiquidDefinition.kt

54 lines
1.7 KiB
Kotlin

package ru.dbotthepony.kstarbound.defs.liquid
import com.google.gson.GsonBuilder
import ru.dbotthepony.kstarbound.io.KConcreteTypeAdapter
import ru.dbotthepony.kstarbound.registerTypeAdapter
import ru.dbotthepony.kvector.vector.Color
data class LiquidDefinition(
val name: String,
val liquidId: Int,
val description: String = "...",
val tickDelta: Int = 1,
val color: Color,
val itemDrop: String? = null,
val statusEffects: List<String> = listOf(),
val interactions: List<Interaction> = listOf(),
val texture: String,
val bottomLightMix: Color,
val textureMovementFactor: Double,
) {
data class Interaction(val liquid: Int, val liquidResult: Int? = null, val materialResult: String? = null) {
init {
require(liquidResult != null || materialResult != null) { "Both liquidResult and materialResult are missing" }
}
}
companion object {
val ADAPTER = KConcreteTypeAdapter.Builder(LiquidDefinition::class)
.auto(LiquidDefinition::name)
.auto(LiquidDefinition::liquidId)
.auto(LiquidDefinition::description)
.auto(LiquidDefinition::tickDelta)
.auto(LiquidDefinition::color)
.auto(LiquidDefinition::itemDrop)
.list(LiquidDefinition::statusEffects)
.list(LiquidDefinition::interactions)
.auto(LiquidDefinition::texture)
.auto(LiquidDefinition::bottomLightMix)
.auto(LiquidDefinition::textureMovementFactor)
.build()
val INTERACTION_ADAPTER = KConcreteTypeAdapter.Builder(Interaction::class)
.auto(Interaction::liquid)
.auto(Interaction::liquidResult)
.auto(Interaction::materialResult)
.build()
fun registerGson(gsonBuilder: GsonBuilder) {
gsonBuilder.registerTypeAdapter(ADAPTER)
gsonBuilder.registerTypeAdapter(INTERACTION_ADAPTER)
}
}
}