|
|
@@ -35,6 +35,14 @@ type WinMain struct {
|
|
|
lblSpace *widget.Label // Разделитель к базе
|
|
|
lblRuda *widget.Label // Количество руды
|
|
|
lblFerrum *widget.Label // Количество железа
|
|
|
+ lblSteel *widget.Label // Количество стали
|
|
|
+ lblPlumbum *widget.Label // Количество свинца
|
|
|
+ frmStatLeft *widget.Form // Левая колонка статистики
|
|
|
+ frmStatRight *widget.Form // Правая колонка статистики
|
|
|
+ lblAtack *widget.Label // Сила атаки
|
|
|
+ lblArmor *widget.Label // Броня бота
|
|
|
+ lblFyne *widget.Label // Точность бота
|
|
|
+ lblHard *widget.Label // Прочность танка
|
|
|
}
|
|
|
|
|
|
// NewWinMain -- возвращает новое главное окно
|
|
|
@@ -65,22 +73,43 @@ func NewWinMain(serv types.IServer) (*WinMain, error) {
|
|
|
}
|
|
|
tabLogin := container.NewTabItem("Логин", formLogin)
|
|
|
|
|
|
- sf.lblFuel = widget.NewLabel("0")
|
|
|
- itemFuel := widget.NewFormItem("Топливо", sf.lblFuel)
|
|
|
- sf.lblGold = widget.NewLabel("0")
|
|
|
- itemGold := widget.NewFormItem("Золото", sf.lblGold)
|
|
|
- sf.lblSilver = widget.NewLabel("0")
|
|
|
- itemSilver := widget.NewFormItem("Серебро", sf.lblSilver)
|
|
|
- sf.lblGlory = widget.NewLabel("0")
|
|
|
- itemGlory := widget.NewFormItem("Слава", sf.lblGlory)
|
|
|
sf.lblSpace = widget.NewLabel("======")
|
|
|
- itemSpace := widget.NewFormItem("=========", sf.lblSpace)
|
|
|
- sf.lblRuda = widget.NewLabel("0")
|
|
|
- itemRuda := widget.NewFormItem("Руда", sf.lblRuda)
|
|
|
- sf.lblFerrum = widget.NewLabel("0")
|
|
|
- itemFerrum := widget.NewFormItem("Железо", sf.lblFerrum)
|
|
|
- frmStat := widget.NewForm(itemFuel, itemGold, itemSilver, itemGlory, itemSpace, itemRuda, itemFerrum)
|
|
|
- tabStat := container.NewTabItem("Статистика", frmStat)
|
|
|
+ itemSpace := widget.NewFormItem("==========", sf.lblSpace)
|
|
|
+
|
|
|
+ { // Левая колонка статистики
|
|
|
+ sf.lblFuel = widget.NewLabel("0")
|
|
|
+ itemFuel := widget.NewFormItem("Топливо", sf.lblFuel)
|
|
|
+ sf.lblGold = widget.NewLabel("0")
|
|
|
+ itemGold := widget.NewFormItem("Золото", sf.lblGold)
|
|
|
+ sf.lblSilver = widget.NewLabel("0")
|
|
|
+ itemSilver := widget.NewFormItem("Серебро", sf.lblSilver)
|
|
|
+ sf.lblGlory = widget.NewLabel("0")
|
|
|
+ itemGlory := widget.NewFormItem("Слава", sf.lblGlory)
|
|
|
+ sf.lblRuda = widget.NewLabel("0")
|
|
|
+ itemRuda := widget.NewFormItem("Руда", sf.lblRuda)
|
|
|
+ sf.lblFerrum = widget.NewLabel("0")
|
|
|
+ itemFerrum := widget.NewFormItem("Железо", sf.lblFerrum)
|
|
|
+ sf.lblSteel = widget.NewLabel("0")
|
|
|
+ itemSteel := widget.NewFormItem("Сталь", sf.lblSteel)
|
|
|
+ sf.lblPlumbum = widget.NewLabel("0")
|
|
|
+ itemPlumbum := widget.NewFormItem("Свинец", sf.lblPlumbum)
|
|
|
+ sf.frmStatLeft = widget.NewForm(itemFuel, itemGold, itemSilver, itemGlory, itemSpace, itemRuda, itemFerrum, itemSteel, itemPlumbum)
|
|
|
+ }
|
|
|
+ { // Правая колонка статистики
|
|
|
+ sf.lblAtack = widget.NewLabel("0")
|
|
|
+ itemAtack := widget.NewFormItem("Атака", sf.lblAtack)
|
|
|
+ sf.lblArmor = widget.NewLabel("0")
|
|
|
+ itemArmor := widget.NewFormItem("Броня", sf.lblArmor)
|
|
|
+ sf.lblFyne = widget.NewLabel("0")
|
|
|
+ itemFyne := widget.NewFormItem("Точность", sf.lblFyne)
|
|
|
+ sf.lblHard = widget.NewLabel("0")
|
|
|
+ itemPower := widget.NewFormItem("Прочность", sf.lblHard)
|
|
|
+
|
|
|
+ sf.frmStatRight = widget.NewForm(itemAtack, itemArmor, itemFyne, itemPower, itemSpace)
|
|
|
+ }
|
|
|
+
|
|
|
+ hStat := container.NewHBox(sf.frmStatLeft, sf.frmStatRight)
|
|
|
+ tabStat := container.NewTabItem("Статистика", hStat)
|
|
|
sf.tabBot = container.NewAppTabs(tabLogin, tabStat)
|
|
|
|
|
|
sf.boxLeft = container.NewVBox(text1)
|
|
|
@@ -102,6 +131,26 @@ func NewWinMain(serv types.IServer) (*WinMain, error) {
|
|
|
return sf, nil
|
|
|
}
|
|
|
|
|
|
+// Обнуляет вкладку статистики бота, если её невозможно получить
|
|
|
+func (sf *WinMain) resetStat() {
|
|
|
+ { // Левый фрейм статы
|
|
|
+ sf.lblFuel.SetText("0")
|
|
|
+ sf.lblGold.SetText("0")
|
|
|
+ sf.lblSilver.SetText("0")
|
|
|
+ sf.lblGlory.SetText("0")
|
|
|
+ sf.lblRuda.SetText("0")
|
|
|
+ sf.lblFerrum.SetText("0")
|
|
|
+ sf.lblSteel.SetText("0")
|
|
|
+ sf.lblPlumbum.SetText("0")
|
|
|
+ }
|
|
|
+ { // Правый фрейм статы
|
|
|
+ sf.lblAtack.SetText("0")
|
|
|
+ sf.lblArmor.SetText("0")
|
|
|
+ sf.lblFyne.SetText("0")
|
|
|
+ sf.lblHard.SetText("0")
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
// Показывает статистику бота
|
|
|
func (sf *WinMain) showStat() {
|
|
|
for {
|
|
|
@@ -111,18 +160,52 @@ func (sf *WinMain) showStat() {
|
|
|
continue
|
|
|
}
|
|
|
bot := sf.serv.ServBots().Get(sf.botLogin)
|
|
|
- sf.lblFuel.Text = fmt.Sprint(bot.Angar().Fuel().Get())
|
|
|
- sf.lblFuel.Refresh()
|
|
|
- sf.lblGold.Text = fmt.Sprint(bot.Angar().Gold().Get())
|
|
|
- sf.lblGold.Refresh()
|
|
|
- sf.lblSilver.Text = fmt.Sprint(bot.Angar().SilverAll().Get())
|
|
|
- sf.lblSilver.Refresh()
|
|
|
- sf.lblGlory.Text = fmt.Sprint(bot.Angar().Convoy().Glory().Get())
|
|
|
- sf.lblGlory.Refresh()
|
|
|
- sf.lblRuda.Text = fmt.Sprint(bot.Angar().Base().Mine().Ruda().Get())
|
|
|
- sf.lblRuda.Refresh()
|
|
|
- sf.lblFerrum.Text = fmt.Sprint(bot.Angar().Base().Mine().Ferrum().Get())
|
|
|
- sf.lblFerrum.Refresh()
|
|
|
+ if !bot.IsRun() {
|
|
|
+ log.Printf("WinMain.showStat(): base==nil")
|
|
|
+ sf.resetStat()
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ { // Левый фрейм статы
|
|
|
+ sf.lblFuel.Text = fmt.Sprint(bot.Angar().Fuel().Get())
|
|
|
+ sf.lblFuel.Refresh()
|
|
|
+ sf.lblGold.Text = fmt.Sprint(bot.Angar().Gold().Get())
|
|
|
+ sf.lblGold.Refresh()
|
|
|
+ strSilver := fmt.Sprint(bot.Angar().SilverAll().Get())
|
|
|
+ strSlv := ""
|
|
|
+ i := 0
|
|
|
+ for i0 := len(strSilver) - 1; i0 >= 0; i0-- {
|
|
|
+ run := string(strSilver[i0])
|
|
|
+ if i == 3 {
|
|
|
+ strSlv = run + "_" + strSlv
|
|
|
+ i = 0
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ strSlv = run + strSlv
|
|
|
+ i++
|
|
|
+ }
|
|
|
+ sf.lblSilver.Text = strSlv
|
|
|
+ sf.lblSilver.Refresh()
|
|
|
+ sf.lblGlory.Text = fmt.Sprint(bot.Angar().Convoy().Glory().Get())
|
|
|
+ sf.lblGlory.Refresh()
|
|
|
+ sf.lblRuda.Text = fmt.Sprint(bot.Angar().Base().Mine().Ruda().Get())
|
|
|
+ sf.lblRuda.Refresh()
|
|
|
+ sf.lblFerrum.Text = fmt.Sprint(bot.Angar().Base().Mine().Ferrum().Get())
|
|
|
+ sf.lblFerrum.Refresh()
|
|
|
+ sf.lblSteel.Text = fmt.Sprint(bot.Angar().Base().Mine().Steel().Get())
|
|
|
+ sf.lblSteel.Refresh()
|
|
|
+ sf.lblPlumbum.Text = fmt.Sprint(bot.Angar().Base().Mine().Plumbum().Get())
|
|
|
+ sf.lblPlumbum.Refresh()
|
|
|
+ }
|
|
|
+ { // Правый фрейм статы
|
|
|
+ sf.lblAtack.Text = fmt.Sprint(bot.Tank().TankStat().Attack().Get())
|
|
|
+ sf.lblAtack.Refresh()
|
|
|
+ sf.lblArmor.Text = fmt.Sprint(bot.Tank().TankStat().Armor().Get())
|
|
|
+ sf.lblArmor.Refresh()
|
|
|
+ sf.lblFyne.Text = fmt.Sprint(bot.Tank().TankStat().Fyne().Get())
|
|
|
+ sf.lblFyne.Refresh()
|
|
|
+ sf.lblHard.Text = fmt.Sprint(bot.Tank().TankStat().Hard().Get())
|
|
|
+ sf.lblHard.Refresh()
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -167,7 +250,7 @@ func (sf *WinMain) btnAddClick() {
|
|
|
|
|
|
}
|
|
|
|
|
|
-// Добавляет бота на жкран
|
|
|
+// Добавляет бота на экран
|
|
|
func (sf *WinMain) addBot() {
|
|
|
log.Printf("WinMain.addBot(): %q\n", sf.botLogin)
|
|
|
err := sf.serv.ServBots().AddBot(sf.botLogin, sf.botPass)
|
|
|
@@ -179,6 +262,7 @@ func (sf *WinMain) addBot() {
|
|
|
sf.boxLeft.Add(btnBot)
|
|
|
}
|
|
|
|
|
|
+// Показывает данные своего бота при клике на соответствующей кнопке
|
|
|
func (sf *WinMain) btnBotClick() func() {
|
|
|
log.Println("WinMain.btnBotClick()")
|
|
|
_botLogin := sf.botLogin
|
|
|
@@ -191,11 +275,8 @@ func (sf *WinMain) btnBotClick() func() {
|
|
|
sf.entLogin.Refresh()
|
|
|
sf.entPass.Text = _botPass
|
|
|
sf.entPass.Refresh()
|
|
|
- sf.checkAutoGame.Checked = bot.IsAutoGame()
|
|
|
- sf.checkAutoGame.Refresh()
|
|
|
- fuel := bot.Angar().Fuel()
|
|
|
- sf.lblFuel.Text = fmt.Sprint(fuel.Get())
|
|
|
- sf.lblFuel.Refresh()
|
|
|
+ sf.checkAutoGame.SetChecked(bot.IsAutoGame())
|
|
|
+ sf.resetStat()
|
|
|
}
|
|
|
}
|
|
|
|