diff options
Diffstat (limited to 'src/main/kotlin/blood/BloodConfigs.kt')
| -rw-r--r-- | src/main/kotlin/blood/BloodConfigs.kt | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/src/main/kotlin/blood/BloodConfigs.kt b/src/main/kotlin/blood/BloodConfigs.kt new file mode 100644 index 0000000..d6630e6 --- /dev/null +++ b/src/main/kotlin/blood/BloodConfigs.kt @@ -0,0 +1,106 @@ +package blood + +import kotlin.random.Random +import org.openrndr.math.IntVector2 +import org.openrndr.math.Vector2 + +typealias Cells = Array<Array<Vector2>> + +class BloodConfigs { + abstract class Base { + abstract val feedRate: Double + abstract val killRate: Double + open val iterationsPerFrame: Int = 40 + open val diffusion: Vector2 = Vector2(1.0, 0.5) + open val random: Random = Random(100) + open val initialSize: IntVector2 = IntVector2(20, 20) + open val noiseProbability: Double = 1.0 + + open fun initializeState(cells: Cells) { + val x = cells[0].size / 2 - initialSize.x / 2 + val y = cells.size / 2 - initialSize.y / 2 + for (i in y until (y + initialSize.y)) { + for (j in x until (x + initialSize.x)) { + val v = random.nextDouble(1.0) <= noiseProbability + cells[i][j] = if (v) Vector2(0.0, 1.0) else Vector2(1.0, 0.0) + } + } + } + } + + class mitosis : Base() { + override val feedRate = 0.0367 + override val killRate = 0.0649 + override val noiseProbability = 0.1 + override val random = Random(0) + } + + class coral : Base() { + override val feedRate = 0.055 + override val killRate = 0.062 + } + + class holey : Base() { + override val feedRate = 0.043 + override val killRate = 0.059 + } + + class pulseSettled1 : Base() { + override val feedRate = 0.037 + override val killRate = 0.059 + } + + class pulseSettled2 : Base() { + override val feedRate = 0.029 + override val killRate = 0.057 + } + + class bubbles : Base() { + override val feedRate = 0.014 + override val killRate = 0.054 + override val noiseProbability = 0.2 + } + + class worms : Base() { + override val feedRate = 0.078 + override val killRate = 0.061 + override val random = Random(200) + override val noiseProbability = 0.1 + override val initialSize = IntVector2(200, 50) + } + + class fingies : Base() { + override val feedRate = 0.046 + override val killRate = 0.063 + } + + class maze : Base() { + override val feedRate = 0.029 + override val killRate = 0.057 + override val noiseProbability = 0.2 + } + + class explosions : Base() { + override val feedRate = 0.018 + override val killRate = 0.051 + override val noiseProbability = 0.2 + override val iterationsPerFrame = 18 + } + + class waves : Base() { + override val feedRate = 0.014 + override val killRate = 0.045 + override val iterationsPerFrame = 18 + } +} + +fun getConfig(name: String): BloodConfigs.Base { + val cls = BloodConfigs::class.nestedClasses.first { it.simpleName == name } + val ctor = cls.constructors.first() + val inst = ctor.call() as BloodConfigs.Base + return inst +} + +fun getConfig(): BloodConfigs.Base { + return getConfig(System.getenv("PHENAX_FILE_SUFFIX") ?: "pulseSettled2") +} |
