// package arena_base -- база в игре
package arena_base
import (
"time"
. "gitp78su.ipnodns.ru/svi/kern"
. "gitp78su.ipnodns.ru/svi/kern/krn/ktypes"
"wartank/app/lev0/cons"
. "wartank/app/lev0/types"
"wartank/app/lev2/arena"
)
/*
Объект базы в игре.
*/
const (
// времОжидПлат = "01:00" // Время ожидания платного ускорения
// времОжидБесплат = "30:00" // Время ожидания бесплатного ускорения
)
// База -- объект базы
type АренаБаза struct {
ИАрена
конт ILocalCtx
счётОбнов ISafeInt // Счётчик времени до обновления
}
// НовБаза -- возвращает новую базу бота
func НовБаза(конт ILocalCtx) *АренаБаза {
сам := &АренаБаза{
конт: конт,
счётОбнов: NewSafeInt(),
}
аренаКонфиг := arena.АренаКонфиг{
Конт_: конт,
АренаИмя_: "База",
СтрКонтроль_: `
База`,
СтрУрл_: "https://wartank.ru/buildings",
}
сам.ИАрена = arena.НовАрена(конт, аренаКонфиг)
конт.Set("база", сам, "База бота")
go сам.счётОбновВремя()
_ = ИАренаБаза(сам)
return сам
}
// Обновить -- обновляет базу (с кэшированием результата)
func (сам *АренаБаза) Обновить() {
списСтр := сам.СписПолучить()
if len(списСтр) == 0 {
сам.ИАрена.Обновить()
сам.счётОбнов.Reset()
return
}
if сам.счётОбнов.Get() < 5000 {
return
}
сам.ИАрена.Обновить()
}
// ОбновитьПринуд -- обновляет базу принудительно (без учёта кэша)
func (сам *АренаБаза) ОбновитьПринуд() {
сам.ИАрена.Обновить()
сам.счётОбнов.Reset()
}
// Запускает базу в обработку
func (сам *АренаБаза) Пуск() {
сам.ИАрена.Пуск()
if сам.Состояние().Получ() == cons.РежимНеСуществует {
сам.Состояние().Уст(cons.РежимПостроено)
}
}
// Считает время до устаревания базы
func (сам *АренаБаза) счётОбновВремя() {
for {
time.Sleep(time.Millisecond * 1000)
счёт := сам.счётОбнов.Get()
сам.счётОбнов.Set(счёт + 1000)
}
}