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) } } } }