KStarbound/src/main/kotlin/ru/dbotthepony/kstarbound/defs/particle/IParticleConfig.kt
2024-02-03 20:41:51 +07:00

40 lines
1.6 KiB
Kotlin

package ru.dbotthepony.kstarbound.defs.particle
import com.google.common.collect.ImmutableList
import ru.dbotthepony.kommons.vector.Vector2d
import ru.dbotthepony.kstarbound.defs.animation.DestructionAction
import ru.dbotthepony.kstarbound.json.builder.JsonImplementation
import ru.dbotthepony.kstarbound.util.VirtualProperty
import ru.dbotthepony.kstarbound.util.SBPattern
@JsonImplementation(ParticleConfig::class)
interface IParticleConfig : IParticleVariance {
val finalVelocity: Vector2d?
val destructionAction: DestructionAction?
val destructionTime: Double?
val fade: Double?
val layer: ParticleLayer?
val timeToLive: Double?
val variance: IParticleVariance?
val text: SBPattern?
companion object {
fun chain(vararg particles: IParticleConfig): IParticleConfig {
val chain = IParticleVariance.chain(*particles)
@Suppress("name_shadowing")
val particles = ImmutableList.copyOf(particles)
return object : IParticleConfig, IParticleVariance by chain {
override val finalVelocity by VirtualProperty(IParticleConfig::finalVelocity, particles)
override val destructionAction by VirtualProperty(IParticleConfig::destructionAction, particles)
override val destructionTime by VirtualProperty(IParticleConfig::destructionTime, particles)
override val fade by VirtualProperty(IParticleConfig::fade, particles)
override val layer by VirtualProperty(IParticleConfig::layer, particles)
override val timeToLive by VirtualProperty(IParticleConfig::timeToLive, particles)
override val variance by VirtualProperty(IParticleConfig::variance, particles)
override val text by VirtualProperty(IParticleConfig::text, particles)
}
}
}
}