Fix ship name generation
authorTheSaminator <TheSaminator@users.noreply.github.com>
Thu, 10 Feb 2022 13:11:38 +0000 (08:11 -0500)
committerTheSaminator <TheSaminator@users.noreply.github.com>
Thu, 10 Feb 2022 13:11:38 +0000 (08:11 -0500)
src/commonMain/kotlin/starshipfights/game/ship_names.kt
src/jvmMain/kotlin/starshipfights/data/admiralty/admirals.kt

index 6632bfcb299ac7acd3a50499ee12a8bb3f1f5b24..dc4c7e06cae7c17e8f670032491a5cc1376b8b28 100644 (file)
@@ -4,7 +4,8 @@ import kotlin.random.Random
 
 fun newShipName(faction: Faction, shipWeightClass: ShipWeightClass, existingNames: MutableSet<String>, random: Random = Random) = generateSequence {
        ShipNames.nameShip(faction, shipWeightClass, random)
-}.dropWhile { it in existingNames }.first().also { existingNames.add(it) }
+}.take(20).dropWhile { it in existingNames }.firstOrNull()?.also { existingNames.add(it) }
+
 
 object ShipNames {
        private val mechyrdianFrigateNames1 = listOf(
index f7c605fb13de105837faa52305a4af926271936e..56595d62266f9e7f9bf6c4874c1f5ff9115cb424 100644 (file)
@@ -106,13 +106,15 @@ fun generateFleet(admiral: Admiral): List<ShipInDrydock> = ShipWeightClass.value
        }
        .let { shipTypes ->
                val shipNames = mutableSetOf<String>()
-               shipTypes.map {
-                       ShipInDrydock(
-                               id = Id(),
-                               name = newShipName(it.faction, it.weightClass, shipNames),
-                               shipType = it,
-                               status = DrydockStatus.Ready,
-                               owningAdmiral = admiral.id
-                       )
+               shipTypes.mapNotNull { st ->
+                       newShipName(st.faction, st.weightClass, shipNames)?.let { name ->
+                               ShipInDrydock(
+                                       id = Id(),
+                                       name = name,
+                                       shipType = st,
+                                       status = DrydockStatus.Ready,
+                                       owningAdmiral = admiral.id
+                               )
+                       }
                }
        }