Stop shortening generate to "gen" in function names
authorTheSaminator <thesaminator@users.noreply.github.com>
Tue, 5 Jul 2022 15:57:35 +0000 (11:57 -0400)
committerTheSaminator <thesaminator@users.noreply.github.com>
Tue, 5 Jul 2022 15:57:35 +0000 (11:57 -0400)
src/commonMain/kotlin/net/starshipfights/game/ai/ai_optimization.kt
src/jvmMain/kotlin/net/starshipfights/campaign/cluster_fleets.kt
src/jvmMain/kotlin/net/starshipfights/campaign/cluster_gen.kt
src/jvmMain/kotlin/net/starshipfights/campaign/cluster_test.kt
src/jvmMain/kotlin/net/starshipfights/data/admiralty/admirals.kt
src/jvmMain/kotlin/net/starshipfights/data/space/fleet_names.kt
src/jvmMain/kotlin/net/starshipfights/data/space/star_clusters.kt
src/jvmMain/kotlin/net/starshipfights/game/game_start_jvm.kt
src/jvmTest/kotlin/net/starshipfights/game/ai/AITesting.kt

index 4ef45bb2d012f9e25e91ac5bd1cb37c8bd082f25..7b1229ccfd2714b72fb5e6c194312d806594b151 100644 (file)
@@ -35,7 +35,7 @@ val allInstincts = listOf(
        navOptimality,
 )
 
-fun genInstinctCandidates(count: Int): Set<Instincts> {
+fun generateInstinctCandidates(count: Int): Set<Instincts> {
        return Random.nextOrthonormalBasis(allInstincts.size).take(count).map { vector ->
                Instincts.fromValues((allInstincts zip vector.values).associate { (key, value) ->
                        key.key to key.denormalize(value)
index 85cf934090643d5066e48789416b55788b023bc8..9af7fa33c6b10ec62504f4e9468d0c5fb17cd10e 100644 (file)
@@ -36,7 +36,7 @@ val FactionFlavor.shipSource: Faction
                FactionFlavor.COLEMAN_SF_BASE_VESTIGIUM -> Faction.VESTIGIUM
        }
 
-fun genNPCFleet(owner: FactionFlavor, rank: AdmiralRank): Map<Id<Ship>, Ship> {
+fun generateNPCFleet(owner: FactionFlavor, rank: AdmiralRank): Map<Id<Ship>, Ship> {
        val battleSize = BattleSize.values().filter { rank >= it.minRank }.associateWith { 100.0 / it.numPoints }.weightedRandom()
        
        val possibleShips = ShipType.values().filter { it.faction == owner.shipSource && it.weightClass.tier <= battleSize.maxTier }
index 0a617c3967ed0554d1c93831872aae687f4711b9..a3a1fbc72721e6e4ed510a25c9a30d79648aa5a3 100644 (file)
@@ -19,9 +19,9 @@ class ClusterGenerator(val settings: ClusterGenerationSettings) {
        suspend fun generateCluster(): StarClusterView {
                return withTimeoutOrNull(10_000L) {
                        val positionsAsync = async {
-                               val rp = fixPositions(genPositions().take(settings.size.maxStars).toList())
+                               val rp = fixPositions(generatePositions().take(settings.size.maxStars).toList())
                                val p = indexPositions(rp)
-                               p to fixWarpLanes(p, genWarpLanes(p))
+                               p to fixWarpLanes(p, generateWarpLanes(p))
                        }
                        
                        val starSystemsAsync = async {
@@ -52,7 +52,7 @@ class ClusterGenerator(val settings: ClusterGenerationSettings) {
                } ?: generateCluster()
        }
        
-       private fun genPositions() = flow {
+       private fun generatePositions() = flow {
                val initial = Vec2(0.0, 0.0)
                val samples = mutableSetOf(initial)
                emit(initial)
@@ -103,7 +103,7 @@ class ClusterGenerator(val settings: ClusterGenerationSettings) {
                return polarVector(r, theta)
        }
        
-       private suspend fun genWarpLanes(positions: Map<Id<StarSystem>, Vec2>): Set<WarpLane> {
+       private suspend fun generateWarpLanes(positions: Map<Id<StarSystem>, Vec2>): Set<WarpLane> {
                val allSystems = positions.keys
                
                val maxDistance = positions.values.maxOf { it.magnitude } / settings.size.maxHyperlaneDistanceFactor
@@ -245,7 +245,7 @@ class ClusterGenerator(val settings: ClusterGenerationSettings) {
                        val starVec2 = Vec2(0.0, 0.0)
                        usedPositions += starVec2
                        
-                       val starType = genStarType()
+                       val starType = randomStarType()
                        val starSize = starType.sizeRange.random()
                        val star = UnnamedCelestialObject.Star(
                                position = Position(starVec2),
@@ -266,7 +266,7 @@ class ClusterGenerator(val settings: ClusterGenerationSettings) {
                        usedPositions += starAPos
                        usedPositions += starBPos
                        
-                       val starAType = genStarType()
+                       val starAType = randomStarType()
                        val starASize = starAType.sizeRange.random()
                        val starA = UnnamedCelestialObject.Star(
                                position = Position(starAPos),
@@ -275,7 +275,7 @@ class ClusterGenerator(val settings: ClusterGenerationSettings) {
                                type = starAType,
                        )
                        
-                       val starBType = genStarType()
+                       val starBType = randomStarType()
                        val starBSize = starBType.sizeRange.random()
                        val starB = UnnamedCelestialObject.Star(
                                position = Position(starBPos),
@@ -334,7 +334,7 @@ class ClusterGenerator(val settings: ClusterGenerationSettings) {
        
        private fun rotationSpeed() = (0.125..0.625).random() * (if ((1..7).random() == 1) -1 else 1)
        
-       private fun genStarType() = (StarType.values().toSet() - StarType.X).random()
+       private fun randomStarType() = (StarType.values().toSet() - StarType.X).random()
        
        private suspend fun corruptStarSystem(starSystem: UnplacedStarSystem) = starSystem.copy(bodies = starSystem.bodies.map { obj ->
                throttle()
index 5eb7bcbf7efe794b52c71150265cd2c324ce9d83..78b8c39347206e80bac821b6e435d6b3bc0b4a17 100644 (file)
@@ -4,7 +4,7 @@ import net.starshipfights.data.Id
 import net.starshipfights.data.admiralty.AdmiralNameFlavor
 import net.starshipfights.data.admiralty.AdmiralNames
 import net.starshipfights.data.invoke
-import net.starshipfights.data.space.genFleetName
+import net.starshipfights.data.space.generateFleetName
 import net.starshipfights.game.AdmiralRank
 import net.starshipfights.game.FactionFlavor
 import kotlin.random.Random
@@ -27,10 +27,10 @@ fun StarClusterView.testPostProcess(): StarClusterView {
                val fleets = (1..numOfFleets).associate { _ ->
                        val admiralRank = AdmiralRank.values().random()
                        val admiralIsFemale = flavor == FactionFlavor.FELINAE_FELICES || Random.nextBoolean()
-                       val admiralFleet = genNPCFleet(flavor, admiralRank)
+                       val admiralFleet = generateNPCFleet(flavor, admiralRank)
                        
                        Id<FleetPresence>() to FleetPresence(
-                               name = flavor.genFleetName(),
+                               name = flavor.generateFleetName(),
                                owner = flavor,
                                ships = admiralFleet,
                                admiralName = AdmiralNames.randomName(AdmiralNameFlavor.forFactionFlavor(flavor).random(), admiralIsFemale),
index 90f1965fe05aa7e63a1acea42a38554d4d1f7309..e5806f49d9db6d0c7e49bdd5bdc2b3c8686a4bc6 100644 (file)
@@ -45,15 +45,15 @@ data class Admiral(
        })
 }
 
-fun genAIName(faction: Faction, isFemale: Boolean) = AdmiralNames.randomName(AdmiralNameFlavor.forFaction(faction).random(), isFemale)
+fun generateAIName(faction: Faction, isFemale: Boolean) = AdmiralNames.randomName(AdmiralNameFlavor.forFaction(faction).random(), isFemale)
 
-fun genAI(faction: Faction, forBattleSize: BattleSize): Admiral {
+fun generateAIAdmiral(faction: Faction, forBattleSize: BattleSize): Admiral {
        val isFemale = Random.nextBoolean()
        
        return Admiral(
                id = Id("advanced_robotical_admiral"),
                owningUser = Id("fake_player_actually_an_AI"),
-               name = genAIName(faction, isFemale),
+               name = generateAIName(faction, isFemale),
                isFemale = isFemale,
                faction = faction,
                acumen = AdmiralRank.values().first {
index 3b81d90b7ba724c48a92cf4e79f9cb16ebbdb825..fb6d769dc822f6840e37561dfa91098ae8c4825e 100644 (file)
@@ -16,7 +16,7 @@ fun Int.toOrdinal(): String {
 private fun rangedOrdinal(max: Int, min: Int = 1) = (min..max).random().toOrdinal()
 private fun rangedRomanNumeral(max: Int, min: Int = 1) = (min..max).random().toRomanNumerals()
 
-fun FactionFlavor.genFleetName(): String = when (this) {
+fun FactionFlavor.generateFleetName(): String = when (this) {
        FactionFlavor.MECHYRDIA -> "${(100..999).random()}il Expediciós Flót"
        FactionFlavor.TYLA -> "${(100..399).random()}a Kasaklas Safasra"
        FactionFlavor.OLYMPIA -> "${rangedRomanNumeral(399, 50)} Classis Belligerens Astronautica"
index 124f3b4c6216c228a2c9eb7a8327943d807973cf..f9bd2906be7027a728a451bf3eacf6e50f98df12 100644 (file)
@@ -10,9 +10,11 @@ import net.starshipfights.campaign.*
 import net.starshipfights.data.DataDocument
 import net.starshipfights.data.DocumentTable
 import net.starshipfights.data.Id
+import net.starshipfights.data.admiralty.Admiral
 import net.starshipfights.data.invoke
 import net.starshipfights.game.FactionFlavor
 import net.starshipfights.game.Position
+import net.starshipfights.game.Ship
 import org.litote.kmongo.eq
 
 @Serializable
@@ -106,28 +108,26 @@ suspend fun createCluster(clusterView: StarClusterView): Id<StarCluster> {
                                
                                launch { ClusterStarSystem.put(clusterSystem) }
                                launch {
-                                       for ((bodyId, body) in system.bodies)
-                                               launch {
-                                                       ClusterCelestialObject.put(
-                                                               ClusterCelestialObject(
-                                                                       id = bodyId.reinterpret(),
-                                                                       starSystemId = clusterSystem.id,
-                                                                       celestialObject = body
-                                                               )
+                                       ClusterCelestialObject.put(
+                                               system.bodies.map { (bodyId, body) ->
+                                                       ClusterCelestialObject(
+                                                               id = bodyId.reinterpret(),
+                                                               starSystemId = clusterSystem.id,
+                                                               celestialObject = body
                                                        )
                                                }
+                                       )
                                }
                                launch {
-                                       for ((fleetId, fleet) in system.fleets)
-                                               launch {
-                                                       ClusterFleetPresence.put(
-                                                               ClusterFleetPresence(
-                                                                       id = fleetId.reinterpret(),
-                                                                       starSystemId = clusterSystem.id,
-                                                                       fleetPresence = fleet
-                                                               )
+                                       ClusterFleetPresence.put(
+                                               system.fleets.map { (fleetId, fleet) ->
+                                                       ClusterFleetPresence(
+                                                               id = fleetId.reinterpret(),
+                                                               starSystemId = clusterSystem.id,
+                                                               fleetPresence = fleet
                                                        )
                                                }
+                                       )
                                }
                        }
                }
@@ -179,3 +179,15 @@ suspend fun viewCluster(clusterId: Id<StarCluster>): StarClusterView? {
                )
        }
 }
+
+suspend fun deployableFleet(systemId: Id<ClusterStarSystem>, admiral: Admiral): Map<Id<Ship>, Ship> {
+       return ClusterFleetPresence.filter(ClusterFleetPresence::starSystemId eq systemId)
+               .toList()
+               .filter { admiral.faction in it.fleetPresence.owner.loyalties }
+               .flatMap {
+                       it.fleetPresence.ships.toList().filter { (_, ship) ->
+                               ship.shipType.weightClass.tier <= admiral.rank.maxShipTier
+                       }
+               }
+               .toMap()
+}
index 461c10370a8d5bc29bd7fa97ba002fe5a78855c4..6daa49a5a498fe4e319b79732bbe33f7d709e177 100644 (file)
@@ -1,6 +1,6 @@
 package net.starshipfights.game
 
-import net.starshipfights.data.admiralty.genAI
+import net.starshipfights.data.admiralty.generateAIAdmiral
 import net.starshipfights.data.admiralty.generateFleet
 import net.starshipfights.data.admiralty.getAdmiralsShips
 import kotlin.math.PI
@@ -66,7 +66,7 @@ suspend fun generate2v1GameInitialState(player1Info: InGameAdmiral, player2Info:
        val hostDeployCenter2 = Position(Vec2(-deployWidth4, (-battleLength / 2) + deployLength2))
        val guestDeployCenter = Position(Vec2(0.0, (battleLength / 2) - deployLength2))
        
-       val aiAdmiral = genAI(enemyFaction, battleInfo.size)
+       val aiAdmiral = generateAIAdmiral(enemyFaction, battleInfo.size)
        
        val gameStart = GameStart(
                battlefieldWidth = battleWidth, battlefieldLength = battleLength,
@@ -143,7 +143,7 @@ suspend fun generateTrainingInitialState(playerInfo: InGameAdmiral, enemyFaction
        val hostDeployCenter = Position(Vec2(0.0, (-battleLength / 2) + deployLength2))
        val guestDeployCenter = Position(Vec2(0.0, (battleLength / 2) - deployLength2))
        
-       val aiAdmiral = genAI(enemyFaction, battleInfo.size)
+       val aiAdmiral = generateAIAdmiral(enemyFaction, battleInfo.size)
        
        return GameState(
                start = GameStart(
index 3031433d40869bce88956baa6181bc8d64276233..9525d9d917eb9afb2fa4cde09b6d967680f95247 100644 (file)
@@ -30,7 +30,7 @@ object AITesting {
                if (instinctVectorIndex == JOptionPane.CLOSED_OPTION) return
                
                val instinctVectorCount = instinctVectorCounts[instinctVectorIndex]
-               val instinctVectors = genInstinctCandidates(instinctVectorCount)
+               val instinctVectors = generateInstinctCandidates(instinctVectorCount)
                
                val numTrialCounts = listOf(3, 5, 7, 10, 25)
                val numTrialOptions = numTrialCounts.map { it.toString() }.toTypedArray()