go_dreamfactory/cmd/v2/ui/views/sociaty_boss.go
2023-01-15 12:07:29 +08:00

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
}