Auto-generate nicknames for invitees joining via link
Invitees no longer need to enter a nickname - they automatically join with a random name like "Swift Tiger" or "Happy Falcon". Game creators still enter their nickname manually.
This commit is contained in:
@@ -50,6 +50,24 @@ func GenerateID(size int) string {
|
|||||||
return hex.EncodeToString(b)
|
return hex.EncodeToString(b)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func GenerateNickname() string {
|
||||||
|
adjectives := []string{
|
||||||
|
"Swift", "Happy", "Clever", "Brave", "Mighty",
|
||||||
|
"Quick", "Calm", "Bold", "Lucky", "Wise",
|
||||||
|
"Eager", "Noble", "Keen", "Bright", "Vivid",
|
||||||
|
}
|
||||||
|
nouns := []string{
|
||||||
|
"Tiger", "Falcon", "Dragon", "Phoenix", "Wolf",
|
||||||
|
"Eagle", "Panda", "Otter", "Fox", "Bear",
|
||||||
|
"Hawk", "Lion", "Raven", "Shark", "Owl",
|
||||||
|
}
|
||||||
|
b := make([]byte, 2)
|
||||||
|
rand.Read(b)
|
||||||
|
adj := adjectives[int(b[0])%len(adjectives)]
|
||||||
|
noun := nouns[int(b[1])%len(nouns)]
|
||||||
|
return adj + " " + noun
|
||||||
|
}
|
||||||
|
|
||||||
type GameInstance struct {
|
type GameInstance struct {
|
||||||
game *Game
|
game *Game
|
||||||
gameMu sync.RWMutex
|
gameMu sync.RWMutex
|
||||||
|
|||||||
23
main.go
23
main.go
@@ -106,8 +106,26 @@ func main() {
|
|||||||
c.Sync()
|
c.Sync()
|
||||||
})
|
})
|
||||||
|
|
||||||
// If nickname exists in session and game exists, join immediately
|
// Auto-join logic
|
||||||
if gameExists && sessionNickname != "" && gi.GetPlayerColor(playerID) == 0 {
|
if gameExists && gi.GetPlayerColor(playerID) == 0 {
|
||||||
|
g := gi.GetGame()
|
||||||
|
// Invitee: game is waiting for second player - auto-generate nickname and join
|
||||||
|
if g.Status == game.StatusWaitingForPlayer {
|
||||||
|
name := sessionNickname
|
||||||
|
if name == "" {
|
||||||
|
name = game.GenerateNickname()
|
||||||
|
c.Session().Set("nickname", name)
|
||||||
|
}
|
||||||
|
player := &game.Player{
|
||||||
|
ID: playerID,
|
||||||
|
Nickname: name,
|
||||||
|
}
|
||||||
|
gi.Join(&game.PlayerSession{
|
||||||
|
Player: player,
|
||||||
|
Sync: c,
|
||||||
|
})
|
||||||
|
} else if sessionNickname != "" {
|
||||||
|
// Reconnecting player with existing nickname
|
||||||
player := &game.Player{
|
player := &game.Player{
|
||||||
ID: playerID,
|
ID: playerID,
|
||||||
Nickname: sessionNickname,
|
Nickname: sessionNickname,
|
||||||
@@ -117,6 +135,7 @@ func main() {
|
|||||||
Sync: c,
|
Sync: c,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
c.View(func() h.H {
|
c.View(func() h.H {
|
||||||
// Game not found - redirect to home
|
// Game not found - redirect to home
|
||||||
|
|||||||
Reference in New Issue
Block a user