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
val usedNames = mutableSetOf<String>()
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 }
import net.starshipfights.data.admiralty.LatinNounForm
import net.starshipfights.data.admiralty.describedBy
+fun newStarName(existingNames: MutableSet<String>) = 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)!" }