package battle_worker
import (
"context"
"time"
. "gitp78su.ipnodns.ru/svi/kern"
. "gitp78su.ipnodns.ru/svi/kern/krn/ktypes"
. "wartank/app/lev0/types"
"wartank/app/lev1/health"
"wartank/app/lev1/manevr"
"wartank/app/lev1/shot"
"wartank/app/lev2/arena"
)
/*
Предоставляет сетевой компонент при непосредственном сражении
*/
// СражениеДействие -- непосредственно танкует в сражении
type СражениеДействие struct {
ИАрена
конт ILocalCtx
кнт context.Context // Контекст сражения
фнОтменить func() // Функция отмены сражения
выстрел ИВыстрел // Объект выстрела
здоровье ИЗдоровье // Текущее здоровье танка
манёвр ИМанёвр // Возможность маневрирования
логин string
еслиКонец ISafeBool
}
// НовСражениеДействие -- возвращает новый *BattleOn
func НовСражениеДействие(конт ILocalCtx) ИСражениеПроцесс {
// Ограничить время сражения бота
кнтСражение, фнОтменить := context.WithTimeout(конт.Ctx(), time.Second*305)
сам := &СражениеДействие{
конт: конт,
кнт: кнтСражение,
фнОтменить: фнОтменить,
логин: конт.Get("бот_имя").Val().(string),
еслиКонец: NewSafeBool(),
}
аренаКонфиг := arena.АренаКонфиг{
Конт_: конт,
АренаИмя_: "Исполнитель сражения",
СтрКонтроль_: `
Сражения`,
ФнПуск_: сам.пуск,
СтрУрл_: "https://wartank.ru/pve",
}
сам.ИАрена = arena.НовАрена(конт, аренаКонфиг)
go сам.пуск()
return сам
}
// Манёвр -- возвращает объект маневра
func (сам *СражениеДействие) Манёвр() ИМанёвр {
return сам.манёвр
}
// ЕслиКонец -- возвращает признак конца действия
func (сам *СражениеДействие) ЕслиКонец() ISafeBool {
return сам.еслиКонец
}
// запускает сражение
func (сам *СражениеДействие) пуск() {
defer func() {
сам.фнОтменить()
// log._rintf("BattleOn.run(): сражение завершено\n")
}()
{ // Подготовка к сражению
сам.выстрел = shot.НовВыстрел(сам) // Объект выстрела
сам.здоровье = health.НовЗдоровье(сам)
сам.манёвр = manevr.НовМанёвр(сам)
}
// Рабочий цикл сражения
<-сам.кнт.Done()
}
func (сам *СражениеДействие) МанёврНадоУст() {
if сам.манёвр == nil {
return
}
сам.манёвр.УстНадо()
}
// Выстрел --
func (сам *СражениеДействие) Выстрел() ИВыстрел {
return сам.выстрел
}
// Кнт -- возвращает контекст отмены сражения
func (сам *СражениеДействие) Контекст() context.Context {
return сам.кнт
}
// ОтменитьДействие -- вызов функции отмены контекста сражения
func (сам *СражениеДействие) Отменить() {
сам.фнОтменить()
}