From 28cddceff637d1a4bd42832be51a3a247f64ce8f Mon Sep 17 00:00:00 2001 From: TheSaminator Date: Fri, 1 Jul 2022 21:48:27 -0400 Subject: [PATCH] Rework admin announcements --- .../net/starshipfights/game/ai/ai_behaviors.kt | 6 +++--- .../kotlin/net/starshipfights/game/game_chat.kt | 6 ++++++ .../kotlin/net/starshipfights/game/game_ui.kt | 3 +++ .../kotlin/net/starshipfights/game/server_game.kt | 15 ++++++++++++--- 4 files changed, 24 insertions(+), 6 deletions(-) diff --git a/src/commonMain/kotlin/net/starshipfights/game/ai/ai_behaviors.kt b/src/commonMain/kotlin/net/starshipfights/game/ai/ai_behaviors.kt index db5b0b8..057c757 100644 --- a/src/commonMain/kotlin/net/starshipfights/game/ai/ai_behaviors.kt +++ b/src/commonMain/kotlin/net/starshipfights/game/ai/ai_behaviors.kt @@ -37,9 +37,6 @@ suspend fun AIPlayer.behave(instincts: Instincts, mySide: GlobalShipController) prevSentAt = msg.sentAt when (msg) { - is ChatEntry.PlayerMessage -> { - // ignore - } is ChatEntry.ShipIdentified -> { state.ships[msg.ship]?.let { identifiedShip -> if (identifiedShip.owner != mySide) @@ -77,6 +74,9 @@ suspend fun AIPlayer.behave(instincts: Instincts, mySide: GlobalShipController) brain[shipAttackPriority forShip msg.destroyedBy.id] += instincts[combatAvengeShipwrecks] * (targetedShip.ship.shipType.weightClass.tier.ordinal + 1.5).pow(instincts[combatAvengeShipWeight]) } } + else -> { + // ignore + } } } } diff --git a/src/commonMain/kotlin/net/starshipfights/game/game_chat.kt b/src/commonMain/kotlin/net/starshipfights/game/game_chat.kt index e13c326..eb15e6c 100644 --- a/src/commonMain/kotlin/net/starshipfights/game/game_chat.kt +++ b/src/commonMain/kotlin/net/starshipfights/game/game_chat.kt @@ -7,6 +7,12 @@ import net.starshipfights.data.Id sealed class ChatEntry { abstract val sentAt: Moment + @Serializable + data class AdminAnnouncement( + override val sentAt: Moment, + val message: String + ) : ChatEntry() + @Serializable data class PlayerMessage( val senderSide: GlobalShipController, diff --git a/src/jsMain/kotlin/net/starshipfights/game/game_ui.kt b/src/jsMain/kotlin/net/starshipfights/game/game_ui.kt index 4bbc72d..84208ec 100644 --- a/src/jsMain/kotlin/net/starshipfights/game/game_ui.kt +++ b/src/jsMain/kotlin/net/starshipfights/game/game_ui.kt @@ -173,6 +173,9 @@ object GameUI { title = "At ${entry.sentAt.date}" when (entry) { + is ChatEntry.AdminAnnouncement -> { + +entry.message + } is ChatEntry.PlayerMessage -> { val senderInfo = state.admiralInfo(entry.senderSide) val senderSide = entry.senderSide.relativeTo(mySide) diff --git a/src/jvmMain/kotlin/net/starshipfights/game/server_game.kt b/src/jvmMain/kotlin/net/starshipfights/game/server_game.kt index 139992f..b03bbf1 100644 --- a/src/jvmMain/kotlin/net/starshipfights/game/server_game.kt +++ b/src/jvmMain/kotlin/net/starshipfights/game/server_game.kt @@ -131,9 +131,18 @@ sealed class GameSession(gameState: GameState, private val stateInterceptor: Gam gameStart.join() val announcementsJob = launch { - announcements.collect { - for (channel in errorMessages.values) - channel.send(it) + announcements.collect { announcement -> + stateMutex.withLock { + val gameState = stateMutable.value + stateMutable.value = gameState.copy( + chatBox = gameState.chatBox + listOf( + ChatEntry.AdminAnnouncement( + sentAt = Moment.now, + message = announcement + ) + ) + ) + } } } -- 2.25.1