From 88b6d90b73c83927762c528959d93807d53a672a Mon Sep 17 00:00:00 2001 From: TheSaminator Date: Tue, 5 Jul 2022 14:27:23 -0400 Subject: [PATCH] Refactor star name generation --- .../kotlin/net/starshipfights/campaign/cluster_gen.kt | 5 ++--- .../kotlin/net/starshipfights/data/space/star_names.kt | 4 ++++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/jvmMain/kotlin/net/starshipfights/campaign/cluster_gen.kt b/src/jvmMain/kotlin/net/starshipfights/campaign/cluster_gen.kt index c96f6b4..8e547bc 100644 --- a/src/jvmMain/kotlin/net/starshipfights/campaign/cluster_gen.kt +++ b/src/jvmMain/kotlin/net/starshipfights/campaign/cluster_gen.kt @@ -4,7 +4,7 @@ import kotlinx.coroutines.* import kotlinx.coroutines.flow.* import net.starshipfights.data.Id import net.starshipfights.data.invoke -import net.starshipfights.data.space.randomStarName +import net.starshipfights.data.space.newStarName import net.starshipfights.data.space.toRomanNumerals import net.starshipfights.game.* import net.starshipfights.game.ai.mean @@ -216,8 +216,7 @@ class ClusterGenerator(val settings: ClusterGenerationSettings) { val usedNames = mutableSetOf() while (currentCoroutineContext().isActive) { - val name = generateSequence { randomStarName() }.dropWhile { it in usedNames }.first() - usedNames += name + val name = newStarName(usedNames) ?: break val unnamedCelestialObjects = createCelestialObjects() .takeWhile { it.position.vector.magnitude + it.size + SYSTEM_MARGIN < MAX_SYSTEM_SIZE } diff --git a/src/jvmMain/kotlin/net/starshipfights/data/space/star_names.kt b/src/jvmMain/kotlin/net/starshipfights/data/space/star_names.kt index e7d207b..cb186de 100644 --- a/src/jvmMain/kotlin/net/starshipfights/data/space/star_names.kt +++ b/src/jvmMain/kotlin/net/starshipfights/data/space/star_names.kt @@ -5,6 +5,10 @@ import net.starshipfights.data.admiralty.LatinNoun import net.starshipfights.data.admiralty.LatinNounForm import net.starshipfights.data.admiralty.describedBy +fun newStarName(existingNames: MutableSet) = generateSequence { + randomStarName() +}.take(20).dropWhile { it in existingNames }.firstOrNull()?.also { existingNames.add(it) } + fun Int.toRomanNumerals(): String { require(this in 1..3999) { "Roman numerals must be in the range [1, 4000)!" } -- 2.25.1