package components import ( "github.com/ryanhamamura/games/config" "github.com/ryanhamamura/games/connect4" "github.com/starfederation/datastar-go/datastar" ) templ StatusBanner(g *connect4.Game, myColor int) {
{ statusMessage(g, myColor) } if g.IsFinished() { if g.RematchGameID != nil { Join Rematch } else { } }
} templ PlayerInfo(g *connect4.Game, myColor int) {
for _, info := range playerInfoPairs(g, myColor) {
{ info.Label }
}
} templ InviteLink(gameID string) {

Share this link with your opponent:

{ config.Global.AppURL + "/games/" + gameID }
} script copyToClipboard(url string) { navigator.clipboard.writeText(url) } func statusClass(g *connect4.Game, myColor int) string { switch g.Status { case connect4.StatusWaitingForPlayer: return "alert bg-base-200 text-xl font-bold" case connect4.StatusInProgress: if g.CurrentTurn == myColor { return "alert alert-success text-xl font-bold" } return "alert bg-base-200 text-xl font-bold" case connect4.StatusWon: if g.Winner != nil && g.Winner.Color == myColor { return "alert alert-success text-xl font-bold" } return "alert alert-error text-xl font-bold" case connect4.StatusDraw: return "alert alert-warning text-xl font-bold" } return "alert bg-base-200 text-xl font-bold" } func statusMessage(g *connect4.Game, myColor int) string { switch g.Status { case connect4.StatusWaitingForPlayer: return "Waiting for opponent..." case connect4.StatusInProgress: if g.CurrentTurn == myColor { return "Your turn!" } return opponentName(g, myColor) + "'s turn" case connect4.StatusWon: if g.Winner != nil && g.Winner.Color == myColor { return "You win!" } if g.Winner != nil { return g.Winner.Nickname + " wins!" } return "Game over" case connect4.StatusDraw: return "It's a draw!" } return "" } func opponentName(g *connect4.Game, myColor int) string { for _, p := range g.Players { if p != nil && p.Color != myColor { return p.Nickname } } return "Opponent" } type playerInfoData struct { ColorClass string Label string } func playerInfoPairs(g *connect4.Game, myColor int) []playerInfoData { var result []playerInfoData var myName, oppName string var myClass, oppClass string for _, p := range g.Players { if p == nil { continue } colorClass := "yellow" if p.Color == 1 { colorClass = "red" } if p.Color == myColor { myName = p.Nickname myClass = colorClass } else { oppName = p.Nickname oppClass = colorClass } } if oppName == "" { oppName = "Waiting..." } result = append(result, playerInfoData{ColorClass: myClass, Label: myName + " (You)"}) result = append(result, playerInfoData{ColorClass: oppClass, Label: oppName}) return result }