222 lines
5.5 KiB
Go
222 lines
5.5 KiB
Go
package formview
|
|
|
|
import (
|
|
"bufio"
|
|
"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/pb"
|
|
"os"
|
|
"os/exec"
|
|
"path/filepath"
|
|
"runtime"
|
|
"time"
|
|
|
|
"fyne.io/fyne/v2"
|
|
"fyne.io/fyne/v2/container"
|
|
"fyne.io/fyne/v2/dialog"
|
|
"fyne.io/fyne/v2/layout"
|
|
fyne_storage "fyne.io/fyne/v2/storage"
|
|
"fyne.io/fyne/v2/theme"
|
|
"fyne.io/fyne/v2/widget"
|
|
"github.com/pkg/errors"
|
|
"github.com/sirupsen/logrus"
|
|
"github.com/spf13/cast"
|
|
)
|
|
|
|
type HeroZhaomuView struct {
|
|
BaseformView
|
|
flag bool
|
|
exportFolder *widget.Entry
|
|
resultCountLbl *widget.Label
|
|
resultCount int
|
|
f *os.File
|
|
}
|
|
|
|
// 打开目录
|
|
func openFolder(entry *widget.Entry, w fyne.Window) {
|
|
dConf := dialog.NewFolderOpen(func(lu fyne.ListableURI, err error) {
|
|
if lu == nil {
|
|
return
|
|
}
|
|
entry.Text = lu.Path()
|
|
entry.Refresh()
|
|
}, w)
|
|
luri, _ := fyne_storage.ListerForURI(fyne_storage.NewFileURI("."))
|
|
dConf.SetLocation(luri)
|
|
dConf.SetConfirmText("打开")
|
|
dConf.SetDismissText("取消")
|
|
dConf.Resize(fyne.NewSize(750, 500))
|
|
dConf.Show()
|
|
}
|
|
|
|
func (this *HeroZhaomuView) CreateView(t *model.TestCase) fyne.CanvasObject {
|
|
|
|
var ckType, ckCount string
|
|
// 抽卡类型 0 1 2 3 4
|
|
ckTypeSelect := widget.NewSelect([]string{"普通", "魔法", "功夫", "科技", "月能"}, func(s string) {
|
|
switch s {
|
|
case "普通":
|
|
ckType = "0"
|
|
case "魔法":
|
|
ckType = "1"
|
|
case "功夫":
|
|
ckType = "2"
|
|
case "科技":
|
|
ckType = "3"
|
|
case "月能":
|
|
ckType = "4"
|
|
default:
|
|
ckType = "0"
|
|
}
|
|
|
|
})
|
|
ckTypeSelect.Selected = "选择"
|
|
|
|
//数量
|
|
ckCountSelect := widget.NewSelect([]string{"单抽", "十连抽"}, func(s string) {
|
|
if s == "单抽" {
|
|
ckCount = "1"
|
|
} else if s == "十连抽" {
|
|
ckCount = "10"
|
|
}
|
|
})
|
|
ckCountSelect.Selected = "选择"
|
|
|
|
//循环次数
|
|
loopCount := widget.NewEntry()
|
|
loopCount.PlaceHolder = "循环抽卡次数"
|
|
|
|
//结果导出目录
|
|
this.exportFolder = widget.NewEntry()
|
|
this.exportFolder.PlaceHolder = "请选择保存结果的目录"
|
|
|
|
form := widget.NewForm(
|
|
widget.NewFormItem("抽卡类型", ckTypeSelect),
|
|
widget.NewFormItem("单抽/十连", ckCountSelect),
|
|
widget.NewFormItem("循环次数", loopCount),
|
|
widget.NewFormItem("导出", container.NewBorder(nil, nil, nil,
|
|
widget.NewButtonWithIcon("", theme.FolderIcon(), func() {
|
|
openFolder(this.exportFolder, this.w)
|
|
}), this.exportFolder)),
|
|
)
|
|
form.Items[3].HintText = "文件名默认result.txt"
|
|
|
|
choukaBtnFunc := func() {
|
|
if ckTypeSelect.Selected == "选择" {
|
|
common.ShowTip("请选择抽卡类型")
|
|
return
|
|
}
|
|
|
|
if ckCountSelect.Selected == "选择" {
|
|
common.ShowTip("请选择单抽/十连")
|
|
return
|
|
}
|
|
if err := service.GetPttService().SendToClient(t.MainType, t.SubType,
|
|
&pb.HeroDrawCardReq{
|
|
DrawType: cast.ToInt32(ckType),
|
|
DrawCount: cast.ToInt32(ckCount),
|
|
}); err != nil {
|
|
logrus.Error(err)
|
|
}
|
|
}
|
|
choukaBtn := widget.NewButton("抽卡", choukaBtnFunc)
|
|
choukaBtn.Importance = widget.HighImportance
|
|
|
|
this.resultCountLbl = widget.NewLabel("共抽卡:")
|
|
//抽卡并导出结果
|
|
choukaAndExport := func() {
|
|
this.resultCount = 0
|
|
if loopCount.Text == "" || cast.ToInt(loopCount.Text) <= 0 {
|
|
common.ShowTip("请设置正确的循环次数")
|
|
return
|
|
}
|
|
if this.exportFolder.Text == "" {
|
|
common.ShowTip("请设置导出目录")
|
|
return
|
|
}
|
|
filePath := filepath.Join(this.exportFolder.Text, "result.txt")
|
|
var err error
|
|
this.f, err = os.OpenFile(filePath, os.O_CREATE|os.O_APPEND|os.O_RDWR, os.ModeAppend|os.ModePerm)
|
|
if err != nil {
|
|
logrus.Error(err.Error())
|
|
return
|
|
}
|
|
defer this.f.Close()
|
|
|
|
for i := 0; i < cast.ToInt(loopCount.Text); i++ {
|
|
choukaBtnFunc()
|
|
time.Sleep(time.Millisecond * 20)
|
|
}
|
|
}
|
|
|
|
choukaAndExportBtn := widget.NewButton("抽卡并导出", choukaAndExport)
|
|
choukaAndExportBtn.Importance = widget.MediumImportance
|
|
|
|
openExplor := func(dir string) {
|
|
if dir == "" {
|
|
common.ShowTip("资源管理器路径错误")
|
|
return
|
|
}
|
|
if runtime.GOOS == "windows" {
|
|
if err := exec.Command("explorer", filepath.Join(dir)).Start(); err != nil {
|
|
dialog.ShowError(errors.WithMessage(err, "请确认Json目录是否填写正确"), this.w)
|
|
return
|
|
}
|
|
}
|
|
}
|
|
//资源目录
|
|
explorBtn := widget.NewButtonWithIcon("打开目录", theme.FolderIcon(), func() {
|
|
openExplor(this.exportFolder.Text)
|
|
})
|
|
explorBtn.Importance = widget.LowImportance
|
|
|
|
btns := container.NewHBox(this.resultCountLbl, layout.NewSpacer(), explorBtn, choukaAndExportBtn, choukaBtn)
|
|
c := container.NewBorder(nil, btns, nil, nil, form)
|
|
this.resListener()
|
|
return c
|
|
}
|
|
|
|
// 监听抽卡结果
|
|
func (this *HeroZhaomuView) resListener() {
|
|
if this.flag {
|
|
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.DrawCard) {
|
|
return
|
|
}
|
|
|
|
rsp := &pb.HeroDrawCardResp{}
|
|
|
|
if !comm.ProtoUnmarshal(data, rsp) {
|
|
logrus.Error("unmarshal err")
|
|
return
|
|
}
|
|
|
|
write := bufio.NewWriterSize(this.f, 1024)
|
|
for _, v := range rsp.Data {
|
|
for _, o := range v.Atno {
|
|
if o.A == "hero" && o.T != "" {
|
|
logrus.Debug(o.T)
|
|
write.WriteString(o.T + "\r\n")
|
|
}
|
|
}
|
|
this.resultCount++
|
|
this.resultCountLbl.SetText("共抽卡:" + cast.ToString(this.resultCount))
|
|
this.resultCountLbl.Refresh()
|
|
}
|
|
write.Flush()
|
|
},
|
|
})
|
|
|
|
this.flag = true
|
|
}
|