// package arena_base -- база в игре
package arena_base
import (
"fmt"
"log"
"sync"
"time"
. "gitp78su.ipnodns.ru/svi/kern/krn/ktypes"
. "wartank/app/lev0/types"
"wartank/app/lev2/arena"
)
/*
Объект базы в игре.
*/
const (
// времОжидПлат = "01:00" // Время ожидания платного ускорения
// времОжидБесплат = "30:00" // Время ожидания бесплатного ускорения
)
// База -- объект базы
type АренаБаза struct {
ИАрена
бот ИБот
блок sync.Mutex
}
// НовБаза -- возвращает новую базу бота
func НовБаза(конт ILocalCtx) ИАренаБаза {
бот := конт.Get("бот").Val().(ИБот)
log.Printf("НовБаза(): %q\n", бот.Имя())
сам := &АренаБаза{
бот: бот,
}
аренаКонфиг := arena.АренаКонфиг{
Бот_: бот,
АренаИмя_: "База",
СтрКонтроль_: `
База`,
ФнПуск_: сам.пуск,
СтрУрл_: "https://wartank.ru/buildings",
}
сам.ИАрена = arena.НовАрена(конт, аренаКонфиг)
конт.Set("база", сам, "База бота")
return сам
}
// Запускает базу в обработку
func (сам *АренаБаза) Пуск() {
log.Printf("Base.Run()\n")
if err := сам.runComponent(); err != nil {
panic(fmt.Errorf("Base.Run(): run, err=\n\t%w", err))
}
go сам.пуск()
}
// Собственная работа
func (сам *АренаБаза) пуск() {
фнЦикл := func() {
defer time.Sleep(time.Minute * 2)
сам.Обновить()
}
for {
select {
case <-сам.Контекст().Done():
return
// case <-сам.ВремяОпрос().КаналСиг():
// фнЦикл()
default:
log.Printf("База.пуск()\n")
фнЦикл()
}
}
}
// Запускает компоненты
func (сам *АренаБаза) runComponent() error {
log.Printf("Base.runComponent()\n")
сам.блок.Lock()
defer сам.блок.Unlock()
return nil
}