You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

141 lines
3.5 KiB
Go

package live_logic
import (
"dcg/config"
"dcg/game/manager"
pbCommon "dcg/game/pb/common"
pbGameZhg "dcg/game/pb/game/zhg"
pbMq "dcg/game/pb/mq"
pbRoom "dcg/game/pb/room"
"dcg/game/svc"
"dcg/pkg/cmd"
"strconv"
)
type ZhgGameLogic struct {
svcCtx *svc.ServiceContext
*LiveGameLogic
}
func NewZhgLiveGameLogic(svcCtx *svc.ServiceContext) *LiveGameLogic {
resp := &ZhgGameLogic{
svcCtx: svcCtx,
LiveGameLogic: NewLiveGameLogic(pbRoom.GameType_ZHG, cmd.NewCMDParser(false, config.Config.Game.Zhg.Commands...)),
}
resp.RegisterCMDHandler(resp.handleJoinGame, "j", "加入", "加入游戏")
resp.RegisterCMDHandler(resp.handleOutbreak, "s")
resp.RegisterCMDHandler(resp.handleOutbreakIntegral, "s1", "s2", "s3", "s4")
resp.RegisterCMDHandler(resp.handleWai, "w", "我在哪")
resp.RegisterCMDHandler(resp.handleCreateUnit, "c1", "c2", "c3", "c4")
resp.RegisterCMDHandler(resp.handleMove, "m1", "m2", "m3")
resp.RegisterCMDHandler(resp.handleMode, "r1", "r2", "r3")
// gift
resp.RegisterGiftHandler(resp.handleGift)
return resp.LiveGameLogic
}
func (h *ZhgGameLogic) handleJoinGame(roomId int64, _ string, user *pbCommon.PbUser) {
room, err := manager.GameManager.RoomByLiveRoomId(roomId)
if err != nil {
return
}
room.Broadcast("game.join", &pbGameZhg.JoinGame{User: user})
}
func (h *ZhgGameLogic) handleOutbreak(roomId int64, _ string, user *pbCommon.PbUser) {
room, err := manager.GameManager.RoomByLiveRoomId(roomId)
if err != nil {
return
}
room.Broadcast("game.outbreak", &pbGameZhg.Outbreak{User: user})
}
func (h *ZhgGameLogic) handleOutbreakIntegral(roomId int64, cmd string, user *pbCommon.PbUser) {
room, err := manager.GameManager.RoomByLiveRoomId(roomId)
if err != nil {
return
}
cmdRune := []rune(cmd)
if len(cmdRune) < 2 {
return
}
var unitTypeInt int
unitTypeInt, _ = strconv.Atoi(string(cmdRune[1]))
zhgCfg := config.Config.Game.Zhg
// 根据unitType计算 消耗积分
costIntegral, ok := zhgCfg.OutbreakCostDict[unitTypeInt]
if !ok {
costIntegral = zhgCfg.OutbreakBaseCost
}
room.Broadcast("game.outbreak.integral", &pbGameZhg.OutbreakIntegral{
User: user,
UnitType: string(cmdRune[1]),
Count: int32(zhgCfg.OutbreakCount),
CostIntegral: -costIntegral,
})
}
func (h *ZhgGameLogic) handleCreateUnit(roomId int64, cmd string, user *pbCommon.PbUser) {
if len(cmd) < 2 {
return
}
unit := cmd[1]
room, err := manager.GameManager.RoomByLiveRoomId(roomId)
if err != nil {
return
}
room.Broadcast("game.createUnit", &pbGameZhg.CreateUnit{
User: user,
Unit: string(unit),
})
}
func (h *ZhgGameLogic) handleMove(roomId int64, cmd string, user *pbCommon.PbUser) {
if len(cmd) < 2 {
return
}
line := cmd[1]
room, err := manager.GameManager.RoomByLiveRoomId(roomId)
if err != nil {
return
}
room.Broadcast("game.move", &pbGameZhg.Move{
User: user,
Line: string(line),
})
}
func (h *ZhgGameLogic) handleWai(roomId int64, _ string, user *pbCommon.PbUser) {
room, err := manager.GameManager.RoomByLiveRoomId(roomId)
if err != nil {
return
}
room.Broadcast("game.wai", &pbGameZhg.Wai{User: user})
}
func (h *ZhgGameLogic) handleMode(roomId int64, cmd string, user *pbCommon.PbUser) {
if len(cmd) < 2 {
return
}
line := cmd[1]
room, err := manager.GameManager.RoomByLiveRoomId(roomId)
if err != nil {
return
}
room.Broadcast("game.mode", &pbGameZhg.BuildingMode{
User: user,
Mode: string(line),
})
}
func (h *ZhgGameLogic) handleGift(roomId int64, user *pbCommon.PbUser, gift *pbMq.MqGift) {
// TODO 暂时没有特殊礼物需求,留空
}