From ab180f384b8ee6272e2d8abe21dd73e802007bed Mon Sep 17 00:00:00 2001 From: kercylan98 Date: Wed, 2 Aug 2023 11:56:45 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20room.Helper=20=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E8=8E=B7=E5=8F=96=E7=8E=A9=E5=AE=B6=E5=88=87=E7=89=87=E3=80=81?= =?UTF-8?q?=E5=B9=BF=E6=92=AD=E6=89=80=E6=9C=89=E7=8E=A9=E5=AE=B6=E3=80=81?= =?UTF-8?q?=E5=B9=BF=E6=92=AD=E5=9C=A8=E5=BA=A7=E7=8E=A9=E5=AE=B6=E7=9A=84?= =?UTF-8?q?=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- game/room/helper.go | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/game/room/helper.go b/game/room/helper.go index 8b62b01..b384fc3 100644 --- a/game/room/helper.go +++ b/game/room/helper.go @@ -3,6 +3,7 @@ package room import ( "github.com/kercylan98/minotaur/game" "github.com/kercylan98/minotaur/utils/hash" + "github.com/kercylan98/minotaur/utils/slice" ) // NewHelper 创建房间助手 @@ -56,6 +57,38 @@ func (slf *Helper[PID, P, R]) GetPlayerRoomHelpers(playerId PID) map[int64]*Help return slf.m.GetPlayerRoomHelpers(playerId) } +// GetPlayersSlice 获取房间中的所有玩家 +func (slf *Helper[PID, P, R]) GetPlayersSlice() []P { + seat := slf.GetSeatInfoMap() + var players = make([]P, 0, len(seat)) + for _, v := range seat { + players = append(players, slf.GetPlayer(v)) + } + return players +} + +// Broadcast 向房间中的所有玩家广播消息 +func (slf *Helper[PID, P, R]) Broadcast(handle func(player P), except ...PID) { + var exceptMap = slice.ToSet(except) + for _, player := range slf.GetPlayers() { + if hash.Exist(exceptMap, player.GetID()) { + continue + } + handle(player) + } +} + +// BroadcastSeat 向房间中所有座位上的玩家广播消息 +func (slf *Helper[PID, P, R]) BroadcastSeat(handle func(player P), except ...PID) { + var exceptMap = slice.ToSet(except) + for _, playerId := range slf.GetSeatInfoMap() { + if hash.Exist(exceptMap, playerId) { + continue + } + handle(slf.GetPlayer(playerId)) + } +} + // SetPlayerLimit 设置房间中的玩家数量上限 func (slf *Helper[PID, P, R]) SetPlayerLimit(limit int) { slf.m.SetPlayerLimit(slf.room.GetGuid(), limit)