Skip to content

Commit ee988dd

Browse files
committed
Set default parameters for multiplayer games and send to lobby
1 parent 5756751 commit ee988dd

File tree

4 files changed

+57
-1
lines changed

4 files changed

+57
-1
lines changed

multiplayer/game.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,17 +16,19 @@ type Game struct {
1616
// NewGame Creates a new multiplayer game from a game
1717
func NewGame(gameData *objects.MultiplayerGame) (*Game, error) {
1818
game := Game{Data: gameData}
19+
game.Data.GameId = utils.GenerateRandomString(32)
1920

2021
if game.Data.CreationPassword != "" {
2122
game.Data.HasPassword = true
2223
game.Password = game.Data.CreationPassword
2324
game.Data.CreationPassword = ""
2425
}
2526

27+
game.Data.SetDefaults()
2628
game.ValidateSettings()
2729

2830
var err error
29-
game.Data.Id, err = db.InsertMultiplayerGame(game.Data.Name)
31+
game.Data.Id, err = db.InsertMultiplayerGame(game.Data.Name, game.Data.GameId)
3032

3133
if err != nil {
3234
return nil, err

multiplayer/lobby.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package multiplayer
22

33
import (
4+
"example.com/Quaver/Z/packets"
45
"example.com/Quaver/Z/sessions"
56
"log"
67
"sync"
@@ -33,6 +34,10 @@ func AddUserToLobby(user *sessions.User) {
3334
defer lobby.mutex.Unlock()
3435

3536
lobby.users[user.Info.Id] = user
37+
38+
for _, game := range lobby.games {
39+
sendLobbyUsersGameInfoPacket(game, false)
40+
}
3641
}
3742

3843
// RemoveUserFromLobby Removes a user from the multiplayer lobby
@@ -51,6 +56,8 @@ func AddGameToLobby(game *Game) {
5156
defer lobby.mutex.Unlock()
5257

5358
lobby.games[game.Data.Id] = game
59+
sendLobbyUsersGameInfoPacket(game, false)
60+
5461
log.Printf("Multiplayer Game `%v (#%v)` was created.\n", game.Data.Name, game.Data.Id)
5562
}
5663

@@ -63,3 +70,18 @@ func RemoveGameFromLobby(game *Game) {
6370
delete(lobby.games, game.Data.Id)
6471
log.Printf("Multiplayer game `%v (%v)` was disbanded.\n", game.Data.Name, game.Data.Id)
6572
}
73+
74+
// SendLobbyUsersGameInfoPacket Sends all the users in the lobby a packet with game information
75+
// Be careful of deadlocks when calling this. Make sure not to call the mutex twice.
76+
func sendLobbyUsersGameInfoPacket(game *Game, lock bool) {
77+
if lock {
78+
lobby.mutex.Lock()
79+
defer lobby.mutex.Unlock()
80+
}
81+
82+
packet := packets.NewServerMultiplayerGameInfo(game.Data)
83+
84+
for _, user := range lobby.users {
85+
sessions.SendPacketToUser(packet, user)
86+
}
87+
}

objects/multiplayer_game.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import "example.com/Quaver/Z/common"
44

55
type MultiplayerGame struct {
66
Id int `json:"gid"` // The id of the game in the database
7+
GameId string `json:"id"` // A unique identifier for the game
78
Name string `json:"n"` // The name of the game
89
CreationPassword string `json:"pw"` // The password of the game during creation
910
HasPassword bool `json:"hp"` // If the game has a password on it
@@ -45,3 +46,19 @@ type MultiplayerGame struct {
4546
FilterMaxLongNotePercent int `json:"lnmax"` // The maximum long note percentage for the map
4647
FilterMinAudioRate float64 `json:"mr"` // The minimum audio rate allowed for free mod
4748
}
49+
50+
func (mg *MultiplayerGame) SetDefaults() {
51+
mg.PlayerIds = []int{}
52+
mg.PlayersWithoutMap = []int{}
53+
mg.PlayersReady = []int{}
54+
mg.PlayerModifiers = []MultiplayerGamePlayerMods{}
55+
mg.PlayersRedTeam = []int{}
56+
mg.PlayersBlueTeam = []int{}
57+
mg.PlayerWins = []MultiplayerGamePlayerWins{}
58+
mg.FilterAllowedGameModes = []common.Mode{}
59+
60+
mg.FilterMaxDifficultyRating = 999999999
61+
mg.FilterMaxSongLength = 999999999
62+
mg.FilterMaxLongNotePercent = 100
63+
mg.FilterMinAudioRate = 0.5
64+
}

packets/ServerMultiplayerGameInfo.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package packets
2+
3+
import "example.com/Quaver/Z/objects"
4+
5+
type ServerMultiplayerGameInfo struct {
6+
Packet
7+
Game *objects.MultiplayerGame `json:"m"`
8+
}
9+
10+
func NewServerMultiplayerGameInfo(game *objects.MultiplayerGame) *ServerMultiplayerGameInfo {
11+
return &ServerMultiplayerGameInfo{
12+
Packet: Packet{Id: PacketIdServerMultiplayerGameInfo},
13+
Game: game,
14+
}
15+
}

0 commit comments

Comments
 (0)