449 lines
11 KiB
Go
449 lines
11 KiB
Go
package formview
|
|
|
|
import (
|
|
"fmt"
|
|
"go_dreamfactory/cmd/v2/lib/common"
|
|
"go_dreamfactory/cmd/v2/model"
|
|
"go_dreamfactory/cmd/v2/service"
|
|
"go_dreamfactory/cmd/v2/service/observer"
|
|
"go_dreamfactory/comm"
|
|
"go_dreamfactory/modules/hero"
|
|
"go_dreamfactory/modules/sociaty"
|
|
"go_dreamfactory/pb"
|
|
"time"
|
|
|
|
"fyne.io/fyne/v2"
|
|
"fyne.io/fyne/v2/container"
|
|
"fyne.io/fyne/v2/dialog"
|
|
"fyne.io/fyne/v2/widget"
|
|
"github.com/sirupsen/logrus"
|
|
"github.com/spf13/cast"
|
|
)
|
|
|
|
type SociatyBossView struct {
|
|
BaseformView
|
|
|
|
itemList common.ItemList
|
|
rankItemList common.ItemList //排行榜
|
|
heroListFlag bool
|
|
teamFlag bool
|
|
bossFlag bool
|
|
rankFlag bool
|
|
heroList func()
|
|
rankList func()
|
|
sociatyId string
|
|
teams map[int32]*pb.ChallengeTeam
|
|
endTimeLabel *widget.Label // 赛季结束时间
|
|
settleTimeLabel *widget.Label // 赛季结算时间
|
|
sociatyRankingLabel *widget.Label // 公会排名
|
|
personRankingLabel *widget.Label // 个人排名
|
|
ticketLabel *widget.Label //挑战券
|
|
}
|
|
|
|
func (s *SociatyBossView) CreateView(t *model.TestCase) fyne.CanvasObject {
|
|
s.teams = make(map[int32]*pb.ChallengeTeam)
|
|
s.endTimeLabel = widget.NewLabel("")
|
|
s.settleTimeLabel = widget.NewLabel("")
|
|
s.sociatyRankingLabel = widget.NewLabel("")
|
|
s.personRankingLabel = widget.NewLabel("")
|
|
s.ticketLabel = widget.NewLabel("")
|
|
|
|
loadSociaty := func() {
|
|
if err := service.GetPttService().SendToClient(
|
|
t.MainType,
|
|
sociaty.SociatySubTypeMine,
|
|
&pb.SociatyMineReq{},
|
|
); err != nil {
|
|
logrus.Error(err)
|
|
return
|
|
}
|
|
}
|
|
defer loadSociaty()
|
|
|
|
loadSociatyBoss := func() {
|
|
if err := service.GetPttService().SendToClient(
|
|
t.MainType,
|
|
sociaty.SociatySubTypeBossmain,
|
|
&pb.SociatyBMainReq{},
|
|
); err != nil {
|
|
logrus.Error(err)
|
|
return
|
|
}
|
|
}
|
|
defer loadSociatyBoss()
|
|
|
|
buzhenBtn := widget.NewButton("布阵", s.buzhen)
|
|
challengestartBtn := widget.NewButton("开始挑战", s.challengestart)
|
|
challengefinishBtn := widget.NewButton("挑战结束", s.challengefinish)
|
|
ticketBuyBtn := widget.NewButton("挑战券", s.buy)
|
|
rankBtn := widget.NewButton("排行榜", s.rank)
|
|
btns := container.NewHBox(buzhenBtn, challengestartBtn, challengefinishBtn, ticketBuyBtn, rankBtn)
|
|
bottomLabels := container.NewHBox(
|
|
s.ticketLabel, s.settleTimeLabel, s.endTimeLabel,
|
|
)
|
|
leftLabels := container.NewHBox(
|
|
s.personRankingLabel,
|
|
s.sociatyRankingLabel,
|
|
)
|
|
c := container.NewBorder(btns, bottomLabels, leftLabels, nil)
|
|
|
|
s.listenTeams()
|
|
s.listenBossmain()
|
|
return c
|
|
}
|
|
|
|
//加载team数据
|
|
func (s *SociatyBossView) listenTeams() {
|
|
if s.teamFlag {
|
|
return
|
|
}
|
|
s.obs.AddListener(observer.EVENT_REQ_RSP, observer.Listener{
|
|
OnNotify: func(d interface{}, args ...interface{}) {
|
|
data := d.(*pb.UserMessage)
|
|
if !(data.MainType == string(comm.ModuleSociaty) &&
|
|
data.SubType == sociaty.SociatySubTypeMine) {
|
|
return
|
|
}
|
|
rsp := &pb.SociatyMineResp{}
|
|
|
|
if !comm.ProtoUnmarshal(data, rsp) {
|
|
logrus.Error("unmarshal err")
|
|
return
|
|
}
|
|
|
|
if rsp.Sociaty != nil {
|
|
s.sociatyId = rsp.Sociaty.Id
|
|
// s.teams = rsp.Teams
|
|
}
|
|
|
|
},
|
|
})
|
|
s.teamFlag = true
|
|
}
|
|
|
|
func (s *SociatyBossView) listenBossmain() {
|
|
if s.bossFlag {
|
|
return
|
|
}
|
|
|
|
s.obs.AddListener(observer.EVENT_REQ_RSP, observer.Listener{
|
|
OnNotify: func(d interface{}, args ...interface{}) {
|
|
data := d.(*pb.UserMessage)
|
|
if !(data.MainType == string(comm.ModuleSociaty) &&
|
|
data.SubType == sociaty.SociatySubTypeBossmain) {
|
|
return
|
|
}
|
|
rsp := &pb.SociatyBMainResp{}
|
|
|
|
if !comm.ProtoUnmarshal(data, rsp) {
|
|
logrus.Error("unmarshal err")
|
|
return
|
|
}
|
|
|
|
s.teams = rsp.Teams
|
|
s.endTimeLabel.SetText(
|
|
fmt.Sprintf("结束:%s", time.Unix(int64(rsp.EndTime), 0).Format("01-02 15:04:05")),
|
|
)
|
|
s.endTimeLabel.Refresh()
|
|
s.settleTimeLabel.SetText(
|
|
fmt.Sprintf("结算:%s", time.Unix(int64(rsp.SettlementTime), 0).Format("01-02 15:04:05")),
|
|
)
|
|
s.settleTimeLabel.Refresh()
|
|
|
|
s.ticketLabel.SetText(
|
|
fmt.Sprintf("挑战券:%d", rsp.Ticket),
|
|
)
|
|
s.ticketLabel.Refresh()
|
|
|
|
s.sociatyRankingLabel.SetText(
|
|
fmt.Sprintf("公会排名:%d", rsp.SociatyRanking),
|
|
)
|
|
s.sociatyRankingLabel.Refresh()
|
|
|
|
s.personRankingLabel.SetText(
|
|
fmt.Sprintf("个人排名:%d", rsp.PersonalRanking),
|
|
)
|
|
s.personRankingLabel.Refresh()
|
|
},
|
|
})
|
|
s.bossFlag = true
|
|
}
|
|
|
|
// 挑战开始
|
|
func (s *SociatyBossView) challengestart() {
|
|
if err := service.GetPttService().SendToClient(
|
|
string(comm.ModuleSociaty),
|
|
sociaty.SociatySubTypeChallengestart,
|
|
&pb.SociatyBChallengeStartReq{
|
|
SociatyId: s.sociatyId,
|
|
},
|
|
); err != nil {
|
|
logrus.Error(err)
|
|
return
|
|
}
|
|
}
|
|
|
|
// 挑战结束
|
|
func (s *SociatyBossView) challengefinish() {
|
|
if err := service.GetPttService().SendToClient(
|
|
string(comm.ModuleSociaty),
|
|
sociaty.SociatySubTypeChallengefinish,
|
|
&pb.SociatyBChallengeFinishReq{
|
|
Ptype: pb.PlayType_sociaty,
|
|
Report: &pb.BattleReport{
|
|
Costtime: 180, //游戏耗时
|
|
Harm: 180300, //伤害值
|
|
},
|
|
},
|
|
); err != nil {
|
|
logrus.Error(err)
|
|
return
|
|
}
|
|
}
|
|
|
|
// 购买挑战券
|
|
func (s *SociatyBossView) buy() {
|
|
ticketEntry := widget.NewEntry()
|
|
layout := widget.NewForm(widget.NewFormItem("数量", ticketEntry))
|
|
layout.OnSubmit = func() {
|
|
if ticketEntry.Text == "" || ticketEntry.Text == "0" {
|
|
common.ShowTip("数量不正确")
|
|
return
|
|
}
|
|
if err := service.GetPttService().SendToClient(
|
|
string(comm.ModuleSociaty),
|
|
sociaty.SociatySubTypeBuy,
|
|
&pb.SociatyBuyReq{
|
|
Atn: &pb.UserAssets{
|
|
A: comm.AttrType,
|
|
T: comm.ResDiamond,
|
|
N: cast.ToInt32(ticketEntry.Text),
|
|
},
|
|
},
|
|
); err != nil {
|
|
logrus.Error(err)
|
|
return
|
|
}
|
|
}
|
|
dconf := dialog.NewCustom("购买挑战券", "关闭", layout, s.w)
|
|
dconf.Resize(fyne.NewSize(800, 500))
|
|
dconf.Show()
|
|
}
|
|
|
|
//布阵
|
|
func (s *SociatyBossView) buzhen() {
|
|
//英雄列表
|
|
s.itemList = *common.NewItemList()
|
|
s.itemList.ItemList = s.itemList.CreateDefaultCheckList()
|
|
|
|
s.heroList = func() {
|
|
if err := service.GetPttService().SendToClient(string(comm.ModuleHero), "list", &pb.HeroListReq{}); err != nil {
|
|
logrus.Error(err)
|
|
return
|
|
}
|
|
}
|
|
defer s.heroList()
|
|
s.HeroDataListener()
|
|
|
|
//队伍数据
|
|
|
|
addHero1 := widget.NewButton("添加至一队", nil)
|
|
addHero2 := widget.NewButton("添加至二队", nil)
|
|
addHero3 := widget.NewButton("添加至三队", nil)
|
|
saveBuzhen := widget.NewButton("保存布阵", nil)
|
|
|
|
btns := container.NewHBox(addHero1, addHero2, addHero3, saveBuzhen)
|
|
content := container.NewGridWithRows(3)
|
|
team1 := container.NewGridWithColumns(5)
|
|
//refresh team1
|
|
team1Box := container.NewHBox(widget.NewLabel("一队:"), team1)
|
|
if t, ok := s.teams[1]; ok {
|
|
for _, heroId := range t.Formation.Format {
|
|
team1.AddObject(widget.NewLabel(common.LastChars(heroId, 4)))
|
|
}
|
|
}
|
|
|
|
team2 := container.NewGridWithColumns(5)
|
|
team2Box := container.NewHBox(widget.NewLabel("二队:"), team2)
|
|
team3 := container.NewGridWithColumns(5)
|
|
team3Box := container.NewHBox(widget.NewLabel("三队:"), team3)
|
|
|
|
content.AddObject(team1Box)
|
|
content.AddObject(team2Box)
|
|
content.AddObject(team3Box)
|
|
|
|
// 添加一队英雄
|
|
addHero1.OnTapped = func() {
|
|
team1 = container.NewGridWithColumns(5)
|
|
if t, ok := s.teams[1]; ok {
|
|
for _, heroId := range t.Formation.Format {
|
|
team1.AddObject(widget.NewLabel(common.LastChars(heroId, 4)))
|
|
}
|
|
}
|
|
bf := &pb.BattleFormation{}
|
|
for _, id := range s.itemList.SelItemIds {
|
|
team1.AddObject(widget.NewLabel(common.LastChars(id, 4)))
|
|
bf.Format = append(bf.Format, id)
|
|
}
|
|
if s.teams == nil {
|
|
s.teams = make(map[int32]*pb.ChallengeTeam)
|
|
}
|
|
s.teams[1] = &pb.ChallengeTeam{Formation: bf}
|
|
team1.Refresh()
|
|
team1Box.Refresh()
|
|
}
|
|
|
|
// 添加二队英雄
|
|
addHero2.OnTapped = func() {
|
|
team2 = container.NewGridWithColumns(5)
|
|
if t, ok := s.teams[2]; ok {
|
|
for _, heroId := range t.Formation.Format {
|
|
team2.AddObject(widget.NewLabel(common.LastChars(heroId, 4)))
|
|
}
|
|
}
|
|
bf := &pb.BattleFormation{}
|
|
for _, id := range s.itemList.SelItemIds {
|
|
team2.AddObject(widget.NewLabel(common.LastChars(id, 4)))
|
|
bf.Format = append(bf.Format, id)
|
|
}
|
|
if s.teams == nil {
|
|
s.teams = make(map[int32]*pb.ChallengeTeam)
|
|
}
|
|
s.teams[2] = &pb.ChallengeTeam{Formation: bf}
|
|
}
|
|
|
|
// 添加三队英雄
|
|
addHero3.OnTapped = func() {
|
|
team3 = container.NewGridWithColumns(5)
|
|
if t, ok := s.teams[3]; ok {
|
|
for _, heroId := range t.Formation.Format {
|
|
team3.AddObject(widget.NewLabel(common.LastChars(heroId, 4)))
|
|
}
|
|
}
|
|
bf := &pb.BattleFormation{}
|
|
for _, id := range s.itemList.SelItemIds {
|
|
team3.AddObject(widget.NewLabel(common.LastChars(id, 4)))
|
|
bf.Format = append(bf.Format, id)
|
|
}
|
|
if s.teams == nil {
|
|
s.teams = make(map[int32]*pb.ChallengeTeam)
|
|
}
|
|
s.teams[3] = &pb.ChallengeTeam{Formation: bf}
|
|
}
|
|
|
|
// 保存阵容
|
|
saveBuzhen.OnTapped = func() {
|
|
// var fs []*pb.BattleFormation
|
|
// for _, v := range s.teams {
|
|
// heroIds := []string{}
|
|
// for _, id := range v.Infos {
|
|
// heroIds = append(heroIds, id.HeroId)
|
|
// }
|
|
// fs = append(fs, &pb.BattleFormation{
|
|
// Format: heroIds,
|
|
// })
|
|
// }
|
|
if err := service.GetPttService().SendToClient(string(comm.ModuleSociaty),
|
|
sociaty.SociatySubTypeFormation, &pb.SociatyBFormationReq{
|
|
SociatyId: s.sociatyId,
|
|
Teams: s.teams,
|
|
}); err != nil {
|
|
logrus.Error(err)
|
|
return
|
|
}
|
|
}
|
|
|
|
split := container.NewHSplit(s.itemList.ItemList, content)
|
|
split.Offset = 0.55
|
|
layout := container.NewBorder(btns, nil, nil, nil, split)
|
|
dconf := dialog.NewCustom("布阵", "关闭", layout, s.w)
|
|
dconf.Resize(fyne.NewSize(800, 500))
|
|
dconf.Show()
|
|
}
|
|
|
|
// 排行榜
|
|
func (s *SociatyBossView) rank() {
|
|
s.rankItemList = *common.NewItemList()
|
|
s.rankItemList.ItemList = s.itemList.CreateList()
|
|
|
|
s.rankList = func() {
|
|
if err := service.GetPttService().SendToClient(string(comm.ModuleSociaty), "brank", &pb.SociatyBRankReq{
|
|
RankType: 1,
|
|
}); err != nil {
|
|
logrus.Error(err)
|
|
return
|
|
}
|
|
}
|
|
defer s.rankList()
|
|
|
|
layout := container.NewBorder(nil, nil, nil, nil, s.rankItemList.ItemList)
|
|
|
|
dconf := dialog.NewCustom("排行榜", "关闭", layout, s.w)
|
|
dconf.Resize(fyne.NewSize(800, 500))
|
|
dconf.Show()
|
|
s.listenRank()
|
|
}
|
|
|
|
func (this *SociatyBossView) listenRank() {
|
|
if this.rankFlag {
|
|
return
|
|
}
|
|
|
|
this.obs.AddListener(observer.EVENT_REQ_RSP, observer.Listener{
|
|
OnNotify: func(d interface{}, args ...interface{}) {
|
|
data := d.(*pb.UserMessage)
|
|
if !(data.MainType == string(comm.ModuleSociaty) &&
|
|
data.SubType == sociaty.SociatySubTypeBrank) {
|
|
return
|
|
}
|
|
|
|
rsp := &pb.SociatyBRankResp{}
|
|
if !comm.ProtoUnmarshal(data, rsp) {
|
|
logrus.Error("unmarshal err")
|
|
return
|
|
}
|
|
|
|
for _, v := range rsp.Rank {
|
|
item := common.Item{
|
|
Text: fmt.Sprintf("%d 昵称:%v 公会:%s Lv:%d 积分:%d",
|
|
v.Ranking, v.Name, v.SociatyName, v.Lv, v.Integral),
|
|
}
|
|
this.itemList.AddItem(item)
|
|
}
|
|
},
|
|
})
|
|
|
|
this.rankFlag = true
|
|
}
|
|
|
|
func (this *SociatyBossView) HeroDataListener() {
|
|
if this.heroListFlag {
|
|
return
|
|
}
|
|
this.obs.AddListener(observer.EVENT_REQ_RSP, observer.Listener{
|
|
OnNotify: func(d interface{}, args ...interface{}) {
|
|
data := d.(*pb.UserMessage)
|
|
if !(data.MainType == string(comm.ModuleHero) &&
|
|
data.SubType == hero.HeroSubTypeList) {
|
|
return
|
|
}
|
|
rsp := &pb.HeroListResp{}
|
|
|
|
if !comm.ProtoUnmarshal(data, rsp) {
|
|
logrus.Error("unmarshal err")
|
|
return
|
|
}
|
|
|
|
for i, v := range rsp.List {
|
|
item := common.Item{
|
|
Id: v.Id,
|
|
Text: fmt.Sprintf("%d ID:%v Star:%d Lv:%d Type:%d Count:%d",
|
|
i+1, v.HeroID, v.Star, v.Lv, v.CardType, v.SameCount),
|
|
}
|
|
this.itemList.AddItem(item)
|
|
}
|
|
},
|
|
})
|
|
this.heroListFlag = true
|
|
}
|