From: TheSaminator Date: Tue, 5 Jul 2022 18:27:23 +0000 (-0400) Subject: Refactor star name generation X-Git-Url: https://gitweb.starshipfights.net/?a=commitdiff_plain;h=88b6d90b73c83927762c528959d93807d53a672a;p=starship-fights Refactor star name generation --- 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)!" }