package data import ( "f1-game/internal/pb" clog "github.com/cherry-game/cherry/logger" ) var ( monsterBattleSquadMap map[int32][]*MonsterSquad // 怪物战斗小队集合 key: 怪物组id, value: 小队列表 ) type ( // 怪物小队 MonsterSquad struct { TileIndex int32 `json:"tileIndex"` Fighter *MonsterFighter `json:"fighter"` TroopTypeID int32 `json:"troopTypeID"` Troop int32 `json:"troop"` } ) func (p *monsterGroupConfig) OnAfterLoad(_ bool) { loadMap := map[int32][]*MonsterSquad{} for _, row := range p.list { monster, found := Monster.GetByID(row.MonsterID) if !found { clog.Warnf("monster not found, monsterGroupID: %d, lineupIndex: %d, monsterID: %d", row.ID, row.LineupIndex, row.MonsterID) continue } monsterSquad := &MonsterSquad{ TileIndex: row.LineupIndex, Fighter: monster.buildMonsterFighter(row.ID, row.LineupIndex), TroopTypeID: row.TroopTypeID, Troop: row.Troop, } loadMap[row.ID] = append(loadMap[row.ID], monsterSquad) } monsterBattleSquadMap = loadMap clog.Infof("monsterGroupConfig load success, len: %v", len(monsterBattleSquadMap)) } func (p *MonsterSquad) ToProto() *pb.BattleSquadParam { fighter, troopsAttrs := p.Fighter.ToProto() ret := &pb.BattleSquadParam{ TileIndex: p.TileIndex, Fighter: fighter, TroopsID: p.TroopTypeID, TroopsNum: p.Troop, HeroTroopNum: p.Troop, // 怪物上限跟数量一致 Attrs: troopsAttrs, } return ret } // 获取怪物战斗小队参数 func GetBattleSquadParam(monsterGroupID int32) []*pb.BattleSquadParam { var ret []*pb.BattleSquadParam monsterSquads, found := monsterBattleSquadMap[monsterGroupID] if !found { clog.Warnf("monster squad not found, monsterGroupID: %d", monsterGroupID) return ret } for _, squad := range monsterSquads { ret = append(ret, squad.ToProto()) } return ret } // 构建怪物战斗阵营参数 func BuildBattleCampParam(monsterGroupID int32, camp int32) *pb.BattleCampParam { ret := &pb.BattleCampParam{ Camp: camp, Squads: GetBattleSquadParam(monsterGroupID), } return ret }