72 lines
2.3 KiB
Go
72 lines
2.3 KiB
Go
package main
|
|
|
|
import (
|
|
"mongo.games.com/game/proto"
|
|
"mongo.games.com/game/protocol/gamehall"
|
|
"mongo.games.com/game/protocol/server"
|
|
)
|
|
|
|
type PlatformGameHall struct {
|
|
HallId int32 //游戏厅id
|
|
Scenes map[int]*Scene //游戏房间列表
|
|
Players map[int32]*Player //大厅中的玩家
|
|
p *Platform //所属平台
|
|
dbGameFree *server.DB_GameFree //厅配置数据(这里都是模板值,非后台实例数据)
|
|
dbGameRule *server.DB_GameRule //游戏配置数据(这里都是模板值,非后台实例数据)
|
|
}
|
|
|
|
func (pgh *PlatformGameHall) PlayerLeave(p *Player) {
|
|
delete(pgh.Players, p.SnId)
|
|
if p.hallId == pgh.HallId {
|
|
p.hallId = 0
|
|
}
|
|
}
|
|
|
|
func (p *Player) CreateRoomPlayerInfoProtocol() *gamehall.RoomPlayerInfo {
|
|
pack := &gamehall.RoomPlayerInfo{
|
|
SnId: proto.Int32(p.SnId),
|
|
Head: proto.Int32(p.Head),
|
|
Sex: proto.Int32(p.Sex),
|
|
Name: proto.String(p.Name),
|
|
Pos: proto.Int(p.pos),
|
|
Flag: proto.Int32(p.flag),
|
|
HeadOutLine: proto.Int32(p.HeadOutLine),
|
|
VIP: proto.Int32(p.VIP),
|
|
}
|
|
return pack
|
|
}
|
|
|
|
func (pgh *PlatformGameHall) OnPlayerEnterScene(scene *Scene, player *Player) {
|
|
delete(pgh.Players, player.SnId)
|
|
pack := &gamehall.SCRoomPlayerEnter{
|
|
RoomId: proto.Int(scene.sceneId),
|
|
Player: player.CreateRoomPlayerInfoProtocol(),
|
|
}
|
|
proto.SetDefaults(pack)
|
|
pgh.Broadcast(int(gamehall.GameHallPacketID_PACKET_SC_ROOMPLAYERENTER), pack, player.SnId)
|
|
}
|
|
|
|
func (pgh *PlatformGameHall) OnPlayerLeaveScene(scene *Scene, player *Player) {
|
|
pack := &gamehall.SCRoomPlayerLeave{
|
|
RoomId: proto.Int(scene.sceneId),
|
|
Pos: proto.Int(player.pos),
|
|
}
|
|
proto.SetDefaults(pack)
|
|
pgh.Broadcast(int(gamehall.GameHallPacketID_PACKET_SC_ROOMPLAYERLEAVE), pack, player.SnId)
|
|
}
|
|
|
|
func (pgh *PlatformGameHall) OnDestroyScene(scene *Scene) {
|
|
delete(pgh.Scenes, scene.sceneId)
|
|
pack := &gamehall.SCDestroyRoom{
|
|
RoomId: proto.Int(scene.sceneId),
|
|
OpRetCode: gamehall.OpResultCode_Game_OPRC_Sucess_Game,
|
|
IsForce: proto.Int(1),
|
|
}
|
|
proto.SetDefaults(pack)
|
|
pgh.Broadcast(int(gamehall.GameHallPacketID_PACKET_SC_DESTROYROOM), pack, 0)
|
|
}
|
|
|
|
func (pgh *PlatformGameHall) Broadcast(packetid int, packet interface{}, exclude int32) {
|
|
PlatformMgrSingleton.Broadcast(packetid, packet, pgh.Players, exclude)
|
|
}
|