From d5bb464d9ff4b960023fc1474f96970ec559a92e Mon Sep 17 00:00:00 2001 From: bdnugget Date: Mon, 20 Jan 2025 00:03:50 +0100 Subject: [PATCH] Add system messages to chat --- game/chat.go | 8 +++++++- goonserver | 2 +- network/network.go | 11 +++++++++++ 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/game/chat.go b/game/chat.go index df01004..9aced0d 100644 --- a/game/chat.go +++ b/game/chat.go @@ -118,8 +118,14 @@ func (c *Chat) Draw(screenWidth, screenHeight int32) { for i := startIdx; i < endIdx; i++ { msg := c.messages[i] + var color rl.Color + if msg.PlayerID == 0 { // System message + color = rl.Gold + } else { + color = rl.White + } text := fmt.Sprintf("%s: %s", msg.Username, msg.Content) - rl.DrawText(text, int32(chatX)+5, int32(messageY), 20, rl.White) + rl.DrawText(text, int32(chatX)+5, int32(messageY), 20, color) messageY += messageHeight } diff --git a/goonserver b/goonserver index e3c5703..d25ee09 160000 --- a/goonserver +++ b/goonserver @@ -1 +1 @@ -Subproject commit e3c570349cabc859831f9c7a2008141f5bd48eb8 +Subproject commit d25ee0915566a8299201ac27a2041c908824de2f diff --git a/network/network.go b/network/network.go index c68953d..21e57ef 100644 --- a/network/network.go +++ b/network/network.go @@ -100,6 +100,9 @@ func HandleServerCommunication(conn net.Conn, playerID int32, player *types.Play // Create a channel to signal when goroutines are done done := make(chan struct{}) + // Create a set of current players to track disconnects + currentPlayers := make(map[int32]bool) + go func() { for { select { @@ -194,6 +197,7 @@ func HandleServerCommunication(conn net.Conn, playerID int32, player *types.Play player.Unlock() for _, state := range serverMessage.Players { + currentPlayers[state.PlayerId] = true if state.PlayerId == playerID { player.Lock() // Update initial position if not set @@ -216,6 +220,13 @@ func HandleServerCommunication(conn net.Conn, playerID int32, player *types.Play } } + // Remove players that are no longer in the server state + for id := range otherPlayers { + if !currentPlayers[id] { + delete(otherPlayers, id) + } + } + if handler, ok := player.UserData.(types.ChatMessageHandler); ok && len(serverMessage.ChatMessages) > 0 { handler.HandleServerMessages(serverMessage.ChatMessages) }