54 lines
1.7 KiB
Kotlin
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)
|
|
}
|
|
}
|
|
}
|